[ismrmrd] 147/281: More CODFile

Ghislain Vaillant ghisvail-guest at moszumanska.debian.org
Wed Jan 14 20:01:08 UTC 2015


This is an automated email from the git hooks/post-receive script.

ghisvail-guest pushed a commit to annotated tag ismrmrd0.5
in repository ismrmrd.

commit 8c926817cfcc4df67454c42e0923b58b51bc219c
Author: kvahed <kaveh at vahedipour.de>
Date:   Thu Jun 6 12:06:11 2013 +0200

    More CODFile
---
 CMakeLists.txt                            |   68 --
 README.html                               | 1591 --------------------------
 cmake/FindFFTW3.cmake                     |   93 --
 cmake/FindIsmrmrd.cmake                   |   29 -
 cmake/FindXSD.cmake                       |   96 --
 cmake/FindXercesC.cmake                   |   39 -
 doc/CMakeLists.txt                        |    6 -
 doc/README.rst                            |  531 ---------
 doc/TODO.rst                              |   19 -
 doc/WindowsISMRMRDInstallDependencies.ps1 |  Bin 10431 -> 0 bytes
 doc/doxygen/CMakeLists.txt                |    8 -
 doc/doxygen/Doxyfile.in                   | 1757 -----------------------------
 examples/c++/CMakeLists-Standalone.txt    |   43 -
 examples/c++/CMakeLists.txt               |   14 -
 examples/c++/cmake/FindFFTW3.cmake        |   93 --
 examples/c++/cmake/FindIsmrmrd.cmake      |   29 -
 examples/c++/test_create_dataset.cpp      |  170 ---
 examples/c++/test_recon_dataset.cpp       |  157 ---
 examples/data/.gitignore                  |    1 -
 examples/data/README.txt                  |   17 -
 examples/matlab/ismrmrd_header2struct.m   |   25 -
 examples/matlab/simple_cartesian_recon.m  |   82 --
 examples/matlab/simple_gridder.m          |  100 --
 examples/matlab/simple_spiral_recon.m     |   78 --
 examples/matlab/testsynth.m               |   85 --
 ismrmrd.h                                 |  465 --------
 ismrmrd_export.h                          |   14 -
 ismrmrd_hdf5.cpp                          |  589 ----------
 ismrmrd_hdf5.h                            |  242 ----
 ismrmrd_hdf5_datatypes.h                  |  319 ------
 ismrmrd_xsd_export.h                      |   21 -
 matlab/+ismrmrd/Acquisition.m             |   49 -
 matlab/+ismrmrd/AcquisitionFlags.m        |   38 -
 matlab/+ismrmrd/AcquisitionHeader.m       |  150 ---
 matlab/+ismrmrd/EncodingCounters.m        |   62 -
 matlab/+ismrmrd/FlagBit.m                 |   32 -
 matlab/+ismrmrd/Image.m                   |   35 -
 matlab/+ismrmrd/ImageDataType.m           |    9 -
 matlab/+ismrmrd/ImageFlags.m              |   14 -
 matlab/+ismrmrd/ImageHeader.m             |  148 ---
 matlab/+ismrmrd/ImageType.m               |    9 -
 matlab/+ismrmrd/XMLHeader.m               |   37 -
 matlab/+ismrmrd/file.m                    |  256 -----
 matlab/+ismrmrd/hdf5_datatypes.m          |  334 ------
 matlab/+ismrmrd/isInt.m                   |    5 -
 matlab/README.txt                         |   64 --
 matlab/xml2struct.m                       |  183 ---
 schema/ismrmrd.xsd                        |  268 -----
 schema/ismrmrd_example.xml                |   79 --
 49 files changed, 8553 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
deleted file mode 100644
index 382efee..0000000
--- a/CMakeLists.txt
+++ /dev/null
@@ -1,68 +0,0 @@
-cmake_minimum_required(VERSION 2.8)
-project(ISMRMRD)
-
-if (WIN32)
-ADD_DEFINITIONS(-DWIN32 -D_WIN32 -D_WINDOWS)
-ADD_DEFINITIONS(-DUNICODE -D_UNICODE)
-ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS)
-SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc")
-SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3")
-endif (WIN32)
-
-
-set(CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}/ismrmrd)
-list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
-
-find_package(XSD REQUIRED)
-find_package(XercesC REQUIRED)
-set(Boost_NO_BOOST_CMAKE ON)
-find_package(Boost COMPONENTS thread system REQUIRED)
-find_package(HDF5 1.8 COMPONENTS C CXX REQUIRED)
-
-#Process the XSD files
-SET(XSDS schema/ismrmrd.xsd)
-SET(XSD_ARGS cxx-tree --generate-serialization --export-symbol EXPORTISMRMRDXSD --hxx-prologue-file ${CMAKE_SOURCE_DIR}/ismrmrd_xsd_export.h)
-WRAP_XSD(XSDS_SOURCES XSD_INCLUDES ${CMAKE_CURRENT_BINARY_DIR}/schema ${XSDS} OPTIONS ${XSD_ARGS})
-INCLUDE_DIRECTORIES(${XSD_INCLUDES} ${XSD_INCLUDE_DIR} ${XERCESC_INCLUDE_DIR} ${Boost_INCLUDE_DIR} ${HDF5_INCLUDE_DIR} ${HDF5_INCLUDE_DIR}/cpp)
-LINK_DIRECTORIES(${Boost_LIBRARY_DIRS})
-
-add_library(ismrmrd SHARED ismrmrd_hdf5.cpp)
-add_library(ismrmrd_xsd SHARED ${XSDS_SOURCES})
-
-# Process the MATLAB files
-file(GLOB MatlabMFiles  ${CMAKE_SOURCE_DIR}/matlab/+ismrmrd/*.m)
-# Convert the schema to Java Classes
-
-
-#The findHDF5.cmake does not work very well on Windows, let's help it out
-IF(WIN32)
-	SET(HDF5_LIB_DIR ${HDF5_INCLUDE_DIR}/../lib)
-	target_link_libraries(ismrmrd optimized ${HDF5_LIB_DIR}/hdf5dll.lib)
-	target_link_libraries(ismrmrd optimized ${HDF5_LIB_DIR}/hdf5_cppdll.lib)
-	target_link_libraries(ismrmrd optimized ${HDF5_LIB_DIR}/hdf5_hldll.lib)
-
-	target_link_libraries(ismrmrd debug ${HDF5_LIB_DIR}/hdf5dll.lib)
-	target_link_libraries(ismrmrd debug ${HDF5_LIB_DIR}/hdf5_cppdll.lib)
-	target_link_libraries(ismrmrd debug ${HDF5_LIB_DIR}/hdf5_hldll.lib)
-
-	target_link_libraries(ismrmrd optimized ${HDF5_LIB_DIR}/zlib.lib)
-	target_link_libraries(ismrmrd optimized ${HDF5_LIB_DIR}/szip.lib)
-	target_link_libraries(ismrmrd debug ${HDF5_LIB_DIR}/zlib.lib)
-	target_link_libraries(ismrmrd debug ${HDF5_LIB_DIR}/szip.lib)
-
-	target_link_libraries(ismrmrd ${Boost_LIBRARIES})
-ELSE (WIN32)
-	target_link_libraries(ismrmrd ${HDF5_LIBRARIES} ${Boost_LIBRARIES})
-ENDIF(WIN32)
-
-target_link_libraries(ismrmrd_xsd ${XERCESC_LIBRARIES})
-
-INSTALL(FILES ismrmrd.h ${XSDS_SOURCES} ismrmrd_hdf5.h ismrmrd_hdf5_datatypes.h ismrmrd_export.h DESTINATION include)
-INSTALL(FILES schema/ismrmrd.xsd DESTINATION schema)
-INSTALL(FILES cmake/FindIsmrmrd.cmake DESTINATION cmake)
-INSTALL(TARGETS ismrmrd DESTINATION lib)
-INSTALL(TARGETS ismrmrd_xsd DESTINATION lib)
-INSTALL(FILES ${MatlabMFiles} DESTINATION matlab/+ismrmrd)
-
-add_subdirectory(doc)
-add_subdirectory(examples/c++)
diff --git a/README.html b/README.html
deleted file mode 100644
index 3551600..0000000
--- a/README.html
+++ /dev/null
@@ -1,1591 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.9.1: http://docutils.sourceforge.net/" />
-<title>ISMRM Raw Data Format (ISMRMRD)</title>
-<style type="text/css">
-
-/*
-:Author: David Goodger (goodger at python.org)
-:Id: $Id: html4css1.css 7434 2012-05-11 21:06:27Z milde $
-:Copyright: This stylesheet has been placed in the public domain.
-
-Default cascading style sheet for the HTML output of Docutils.
-
-See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
-customize this style sheet.
-*/
-
-/* used to remove borders from tables and images */
-.borderless, table.borderless td, table.borderless th {
-  border: 0 }
-
-table.borderless td, table.borderless th {
-  /* Override padding for "table.docutils td" with "! important".
-     The right padding separates the table cells. */
-  padding: 0 0.5em 0 0 ! important }
-
-.first {
-  /* Override more specific margin styles with "! important". */
-  margin-top: 0 ! important }
-
-.last, .with-subtitle {
-  margin-bottom: 0 ! important }
-
-.hidden {
-  display: none }
-
-a.toc-backref {
-  text-decoration: none ;
-  color: black }
-
-blockquote.epigraph {
-  margin: 2em 5em ; }
-
-dl.docutils dd {
-  margin-bottom: 0.5em }
-
-object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
-  overflow: hidden;
-}
-
-/* Uncomment (and remove this text!) to get bold-faced definition list terms
-dl.docutils dt {
-  font-weight: bold }
-*/
-
-div.abstract {
-  margin: 2em 5em }
-
-div.abstract p.topic-title {
-  font-weight: bold ;
-  text-align: center }
-
-div.admonition, div.attention, div.caution, div.danger, div.error,
-div.hint, div.important, div.note, div.tip, div.warning {
-  margin: 2em ;
-  border: medium outset ;
-  padding: 1em }
-
-div.admonition p.admonition-title, div.hint p.admonition-title,
-div.important p.admonition-title, div.note p.admonition-title,
-div.tip p.admonition-title {
-  font-weight: bold ;
-  font-family: sans-serif }
-
-div.attention p.admonition-title, div.caution p.admonition-title,
-div.danger p.admonition-title, div.error p.admonition-title,
-div.warning p.admonition-title {
-  color: red ;
-  font-weight: bold ;
-  font-family: sans-serif }
-
-/* Uncomment (and remove this text!) to get reduced vertical space in
-   compound paragraphs.
-div.compound .compound-first, div.compound .compound-middle {
-  margin-bottom: 0.5em }
-
-div.compound .compound-last, div.compound .compound-middle {
-  margin-top: 0.5em }
-*/
-
-div.dedication {
-  margin: 2em 5em ;
-  text-align: center ;
-  font-style: italic }
-
-div.dedication p.topic-title {
-  font-weight: bold ;
-  font-style: normal }
-
-div.figure {
-  margin-left: 2em ;
-  margin-right: 2em }
-
-div.footer, div.header {
-  clear: both;
-  font-size: smaller }
-
-div.line-block {
-  display: block ;
-  margin-top: 1em ;
-  margin-bottom: 1em }
-
-div.line-block div.line-block {
-  margin-top: 0 ;
-  margin-bottom: 0 ;
-  margin-left: 1.5em }
-
-div.sidebar {
-  margin: 0 0 0.5em 1em ;
-  border: medium outset ;
-  padding: 1em ;
-  background-color: #ffffee ;
-  width: 40% ;
-  float: right ;
-  clear: right }
-
-div.sidebar p.rubric {
-  font-family: sans-serif ;
-  font-size: medium }
-
-div.system-messages {
-  margin: 5em }
-
-div.system-messages h1 {
-  color: red }
-
-div.system-message {
-  border: medium outset ;
-  padding: 1em }
-
-div.system-message p.system-message-title {
-  color: red ;
-  font-weight: bold }
-
-div.topic {
-  margin: 2em }
-
-h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
-h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
-  margin-top: 0.4em }
-
-h1.title {
-  text-align: center }
-
-h2.subtitle {
-  text-align: center }
-
-hr.docutils {
-  width: 75% }
-
-img.align-left, .figure.align-left, object.align-left {
-  clear: left ;
-  float: left ;
-  margin-right: 1em }
-
-img.align-right, .figure.align-right, object.align-right {
-  clear: right ;
-  float: right ;
-  margin-left: 1em }
-
-img.align-center, .figure.align-center, object.align-center {
-  display: block;
-  margin-left: auto;
-  margin-right: auto;
-}
-
-.align-left {
-  text-align: left }
-
-.align-center {
-  clear: both ;
-  text-align: center }
-
-.align-right {
-  text-align: right }
-
-/* reset inner alignment in figures */
-div.align-right {
-  text-align: inherit }
-
-/* div.align-center * { */
-/*   text-align: left } */
-
-ol.simple, ul.simple {
-  margin-bottom: 1em }
-
-ol.arabic {
-  list-style: decimal }
-
-ol.loweralpha {
-  list-style: lower-alpha }
-
-ol.upperalpha {
-  list-style: upper-alpha }
-
-ol.lowerroman {
-  list-style: lower-roman }
-
-ol.upperroman {
-  list-style: upper-roman }
-
-p.attribution {
-  text-align: right ;
-  margin-left: 50% }
-
-p.caption {
-  font-style: italic }
-
-p.credits {
-  font-style: italic ;
-  font-size: smaller }
-
-p.label {
-  white-space: nowrap }
-
-p.rubric {
-  font-weight: bold ;
-  font-size: larger ;
-  color: maroon ;
-  text-align: center }
-
-p.sidebar-title {
-  font-family: sans-serif ;
-  font-weight: bold ;
-  font-size: larger }
-
-p.sidebar-subtitle {
-  font-family: sans-serif ;
-  font-weight: bold }
-
-p.topic-title {
-  font-weight: bold }
-
-pre.address {
-  margin-bottom: 0 ;
-  margin-top: 0 ;
-  font: inherit }
-
-pre.literal-block, pre.doctest-block, pre.math, pre.code {
-  margin-left: 2em ;
-  margin-right: 2em }
-
-pre.code .ln { /* line numbers */
-  color: grey;
-}
-
-.code {
-  background-color: #eeeeee
-}
-
-span.classifier {
-  font-family: sans-serif ;
-  font-style: oblique }
-
-span.classifier-delimiter {
-  font-family: sans-serif ;
-  font-weight: bold }
-
-span.interpreted {
-  font-family: sans-serif }
-
-span.option {
-  white-space: nowrap }
-
-span.pre {
-  white-space: pre }
-
-span.problematic {
-  color: red }
-
-span.section-subtitle {
-  /* font-size relative to parent (h1..h6 element) */
-  font-size: 80% }
-
-table.citation {
-  border-left: solid 1px gray;
-  margin-left: 1px }
-
-table.docinfo {
-  margin: 2em 4em }
-
-table.docutils {
-  margin-top: 0.5em ;
-  margin-bottom: 0.5em }
-
-table.footnote {
-  border-left: solid 1px black;
-  margin-left: 1px }
-
-table.docutils td, table.docutils th,
-table.docinfo td, table.docinfo th {
-  padding-left: 0.5em ;
-  padding-right: 0.5em ;
-  vertical-align: top }
-
-table.docutils th.field-name, table.docinfo th.docinfo-name {
-  font-weight: bold ;
-  text-align: left ;
-  white-space: nowrap ;
-  padding-left: 0 }
-
-h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
-h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
-  font-size: 100% }
-
-ul.auto-toc {
-  list-style-type: none }
-
-</style>
-</head>
-<body>
-<div class="document" id="ismrm-raw-data-format-ismrmrd">
-<h1 class="title">ISMRM Raw Data Format (ISMRMRD)</h1>
-
-<div class="contents topic" id="contents">
-<p class="topic-title first">Contents</p>
-<ul class="simple">
-<li><a class="reference internal" href="#preamble" id="id1">Preamble</a></li>
-<li><a class="reference internal" href="#developers-contributors" id="id2">Developers/Contributors</a></li>
-<li><a class="reference internal" href="#obtaining-and-installing" id="id3">Obtaining and Installing</a><ul>
-<li><a class="reference internal" href="#dependencies" id="id4">Dependencies</a></li>
-<li><a class="reference internal" href="#linux-installation" id="id5">Linux installation</a></li>
-<li><a class="reference internal" href="#mac-osx-installation" id="id6">Mac OSX Installation</a></li>
-<li><a class="reference internal" href="#windows-installation" id="id7">Windows Installation</a></li>
-</ul>
-</li>
-<li><a class="reference internal" href="#overview" id="id8">Overview</a><ul>
-<li><a class="reference internal" href="#flexible-data-header" id="id9">Flexible Data Header</a></li>
-<li><a class="reference internal" href="#fixed-data-structures" id="id10">Fixed Data structures</a></li>
-</ul>
-</li>
-<li><a class="reference internal" href="#file-storage" id="id11">File Storage</a></li>
-<li><a class="reference internal" href="#c-support-library" id="id12">C++ Support Library</a><ul>
-<li><a class="reference internal" href="#c-example-applications" id="id13">C++ Example Applications</a></li>
-</ul>
-</li>
-<li><a class="reference internal" href="#matlab-example-code-and-datasets" id="id14">Matlab Example Code and Datasets</a></li>
-<li><a class="reference internal" href="#appendix" id="id15">Appendix</a><ul>
-<li><a class="reference internal" href="#frequently-asked-questions" id="id16">Frequently Asked Questions</a></li>
-<li><a class="reference internal" href="#xml-schema-definition" id="id17">XML Schema Definition</a></li>
-<li><a class="reference internal" href="#windows-7-64-bit-powershell-install-script" id="id18">Windows 7 (64-bit) Powershell Install Script</a></li>
-</ul>
-</li>
-</ul>
-</div>
-<div class="section" id="preamble">
-<h1><a class="toc-backref" href="#id1">Preamble</a></h1>
-<p>A prerequisite for sharing magnetic resonance (imaging) reconstruction algorithms and code is a common raw data format. This document describes such a common raw data format and attempts to capture the data fields that are require to describe enough details about the magnetic resonance experiment to reconstruct images from the data.</p>
-<p>This standard was developed by a subcommittee of the ISMRM Sedona 2013 workshop. Comments and requests for additions/modifications can be sent to:</p>
-<ul class="simple">
-<li>Michael S. Hansen (michael DOT hansen AT nih DOT gov)</li>
-<li>Wally Block (wblock AT cae DOT wisc DOT edu)</li>
-<li>Mark Griswold (mag46 AT case DOT edu)</li>
-<li>Brian Hargreaves (bah AT stanford DOT edu)</li>
-<li>Peter Boernert (peter DOT boernert AT philips DOT com)</li>
-<li>Sebastian Kozerke (kozerke AT biomed DOT ee DOT ethz DOT ch)</li>
-<li>Craig Meyer (cmeyer AT virginia DOT edu)</li>
-<li>Doug Noll (dnoll AT umich DOT edu)</li>
-<li>Jim Pipe (Jim.Pipe AT DignityHealth DOT org)</li>
-</ul>
-</div>
-<div class="section" id="developers-contributors">
-<h1><a class="toc-backref" href="#id2">Developers/Contributors</a></h1>
-<ul class="simple">
-<li>Michael S. Hansen, National Institutes of Health, USA</li>
-<li>Nick Zwart, Barrow Neurological Institute, Phoenix, Arizona</li>
-<li>Souheil Inati, National Institutes of Health, USA</li>
-<li>Joe Naegele, National Institutes of Health, USA</li>
-<li>Kaveh Vahedipour, Juelich Research Centre, Juelich, Germany</li>
-</ul>
-</div>
-<div class="section" id="obtaining-and-installing">
-<h1><a class="toc-backref" href="#id3">Obtaining and Installing</a></h1>
-<p>The source code, examples, and example datasets can be found on the ISMRM Raw Data Sourceforge <a class="reference external" href="http://sourceforge.net/projects/ismrmrd">website</a>.</p>
-<p>To download the source code, clone the git archive:</p>
-<pre class="literal-block">
-git clone git://git.code.sf.net/p/ismrmrd/code ismrmrd-code
-</pre>
-<p>Alternatively download the zip file with the source code:</p>
-<pre class="literal-block">
-wget https://sourceforge.net/projects/ismrmrd/files/src/ismrmrd_latest.zip
-</pre>
-<p>API Documentation can be found at <a class="reference external" href="http://ismrmrd.sourceforge.net/api">http://ismrmrd.sourceforge.net/api</a>.</p>
-<div class="section" id="dependencies">
-<h2><a class="toc-backref" href="#id4">Dependencies</a></h2>
-<p>The ISMRM Raw Data format is described by an XML <a class="reference internal" href="#schema">schema</a> and some C-style structs with fixed memory layout and as such does not have dependencies. However, it uses HDF5 files for storage and a C++ library for reading and writing the ISMRMRD files is included in this distribution. Furthermore, since the XML header is defined with an XML <a class="reference internal" href="#schema">schema</a>, we encourage using XML data binding when writi [...]
-<ul class="simple">
-<li>HDF5 (version 1.8 or higher) libraries. Available from <a class="reference external" href="http://www.hdfgroup.org/downloads/index.html">http://www.hdfgroup.org/downloads/index.html</a>.</li>
-<li>Boost (<a class="reference external" href="http://www.boost.org/">http://www.boost.org/</a>)</li>
-<li>CodeSynthesis XSD (<a class="reference external" href="http://www.codesynthesis.com/products/xsd/">http://www.codesynthesis.com/products/xsd/</a>)</li>
-<li>Xerces-C XML parser library (<a class="reference external" href="http://xerces.apache.org/xerces-c/">http://xerces.apache.org/xerces-c/</a>)</li>
-<li>Cmake build tool (<a class="reference external" href="http://www.cmake.org/">http://www.cmake.org/</a>)</li>
-<li>Doxygen if you would like to generate API documentation (<a class="reference external" href="http://www.doxygen.org">http://www.doxygen.org</a>)</li>
-<li>Git if you would like to use the source code archive (<a class="reference external" href="http://git-scm.com/">http://git-scm.com/</a>)</li>
-<li>FFTW if you would like to compile some of the example applications
-(<a class="reference external" href="http://www.fftw.org">http://www.fftw.org</a>)</li>
-</ul>
-<div class="note">
-<p class="first admonition-title">Note</p>
-<p class="last">It is only necessary to install the dependencies if you wish to develop compiled C/C++ software, which uses the ISMRMRD format. The format can be read in Matlab without installing any additional software.</p>
-</div>
-</div>
-<div class="section" id="linux-installation">
-<h2><a class="toc-backref" href="#id5">Linux installation</a></h2>
-<p>The dependencies mentioned above should be included in most linux distributions. On Ubuntu you can install all required dependencies with:</p>
-<pre class="literal-block">
-sudo apt-get install libhdf5-serial-dev h5utils cmake cmake-curses-gui libboost-dev libboost-thread-dev libboost-system-dev libxerces-c-dev xsdcxx doxygen git
-</pre>
-<p>After installation of dependencies, the library can be installed with:</p>
-<pre class="literal-block">
-git clone git://git.code.sf.net/p/ismrmrd/code ismrmrd-code
-cd ismrmrd-code/
-mkdir build
-cd build
-cmake ../
-make
-sudo make install
-</pre>
-<p>Last command will install the library in <tt class="docutils literal">/usr/local/ismrmrd</tt>.</p>
-</div>
-<div class="section" id="mac-osx-installation">
-<h2><a class="toc-backref" href="#id6">Mac OSX Installation</a></h2>
-<p>There are numerous different package management systems for Mac. In this example, we have used MacPorts (<a class="reference external" href="http://www.macports.org/">http://www.macports.org/</a>). First install the dependencies available in MacPorts:</p>
-<pre class="literal-block">
-sudo port install wget hdf5-18 h5utils boost xercesc3 git-core git-extras cmake doxygen
-</pre>
-<p>Next install CodeSynthesis XSD (<a class="reference external" href="http://www.codesynthesis.com/products/xsd/">http://www.codesynthesis.com/products/xsd/</a>):</p>
-<pre class="literal-block">
-wget http://www.codesynthesis.com/download/xsd/3.3/macosx/i686/xsd-3.3.0-i686-macosx.tar.bz2
-tar -xzf xsd-3.3.0-i686-macosx.tar.bz2
-cd xsd-3.3.0-i686-macosx
-sudo cp bin/xsd /usr/local/bin/
-sudo cp -r libxsd/xsd /usr/local/include/
-</pre>
-<p>See <a class="reference internal" href="#faq">faq</a> for details on problems on some Mac OSX Lion systems.</p>
-<p>Last step is to download and compile:</p>
-<pre class="literal-block">
-git clone git://git.code.sf.net/p/ismrmrd/code ismrmrd-code
-cd ismrmrd-code/
-mkdir build
-cd build/
-cmake ../
-make
-sudo make install
-</pre>
-<p>Last command will install the library in <tt class="docutils literal">/usr/local/ismrmrd</tt>.</p>
-</div>
-<div class="section" id="windows-installation">
-<h2><a class="toc-backref" href="#id7">Windows Installation</a></h2>
-<p>Setting up a Windows development environment is usually a bit more challenging than working on Unix platforms where most library dependencies are easily installed with package management systems (see above). The general Windows installation instructions (you may have to make adjustments for your setup) is as follows:</p>
-<ul class="simple">
-<li>Starting with a Windows 7 (64-bit) machine with Visual Studio 2010 installed.</li>
-<li>Install CMake (<a class="reference external" href="http://www.cmake.org/files/v2.8/cmake-2.8.9-win32-x86.exe">http://www.cmake.org/files/v2.8/cmake-2.8.9-win32-x86.exe</a>)</li>
-<li>Install Git (<a class="reference external" href="http://msysgit.googlecode.com/files/Git-1.7.11-preview20120710.exe">http://msysgit.googlecode.com/files/Git-1.7.11-preview20120710.exe</a>)</li>
-<li>Install HDF5 (<a class="reference external" href="http://www.hdfgroup.org/ftp/HDF5/current/bin/windows/HDF5189-win64-vs10-shared.zip">http://www.hdfgroup.org/ftp/HDF5/current/bin/windows/HDF5189-win64-vs10-shared.zip</a>)</li>
-<li>Install HDFView (<a class="reference external" href="http://www.hdfgroup.org/ftp/HDF5/hdf-java/hdfview/hdfview_install_win64.exe">http://www.hdfgroup.org/ftp/HDF5/hdf-java/hdfview/hdfview_install_win64.exe</a>)</li>
-<li>Install CodeSynthesis XSD (<a class="reference external" href="http://www.codesynthesis.com/download/xsd/3.3/windows/i686/xsd-3.3.msi">http://www.codesynthesis.com/download/xsd/3.3/windows/i686/xsd-3.3.msi</a>)</li>
-<li>Install Boost (<a class="reference external" href="http://boostpro.com/download/x64/boost_1_51_setup.exe">http://boostpro.com/download/x64/boost_1_51_setup.exe</a>)<ul>
-<li>Just install everything for VS2010 and worry about which versions you need later.</li>
-</ul>
-</li>
-<li>Install FFTW (<a class="reference external" href="ftp://ftp.fftw.org/pub/fftw/fftw-3.3.2-dll64.zip">ftp://ftp.fftw.org/pub/fftw/fftw-3.3.2-dll64.zip</a>)<ul>
-<li>You need to create <tt class="docutils literal">.lib</tt> files manually after installing. See instructions at <a class="reference external" href="http://www.fftw.org/install/windows.html">http://www.fftw.org/install/windows.html</a></li>
-</ul>
-</li>
-<li>Make sure the paths to your new libraries are in your PATH environment variable:<ul>
-<li>Boost libraries  (typically <tt class="docutils literal"><span class="pre">C:\Program</span> Files\boost\boost_1_51\lib</tt>)</li>
-<li>Code Synthesis XSD (typically <tt class="docutils literal"><span class="pre">C:\Program</span> Files <span class="pre">(x86)\CodeSynthesis</span> XSD <span class="pre">3.3\bin\;C:\Program</span> Files <span class="pre">(x86)\CodeSynthesis</span> XSD 3.3\bin64\</tt>)</li>
-<li>FFTW libraries (typically <tt class="docutils literal"><span class="pre">C:\MRILibraries\fftw3</span></tt>)</li>
-<li>HDF5 libraries (typically <tt class="docutils literal"><span class="pre">C:\Program</span> Files\HDF Group\HDF5\1.8.9\bin</tt>)</li>
-<li>ISMRMRD (typically <tt class="docutils literal"><span class="pre">C:\Program</span> <span class="pre">Files\ismrmrd\bin;C:\Program</span> Files\ismrmrd\bin</tt>)</li>
-</ul>
-</li>
-</ul>
-<p>This can seem a bit daunting, we have included a Windows <a class="reference internal" href="#powershell">powershell</a> script, which you can use to guide you through the installation process.</p>
-<p>After installing all dependencies, download the code, e.g. from a git bash shell:</p>
-<pre class="literal-block">
-git clone git://git.code.sf.net/p/ismrmrd/code ismrmrd-code
-cd ismrmrd-code/
-mkdir build
-cd build/
-cmake-gui.exe
-</pre>
-<p>Last command will open CMake's graphical user interface. Hit the configure button and deal with the dependencies that CMake is unable to find. Hit configure again and repeat the process until CMake has enough information to configure. Once the configuration is complete, you can hit generate to generate a Visual Studio project, which you can open and use to build ISMRMRD. There are step-by-step commands included in the <a class="reference internal" href="#powershell">powershell</a> scr [...]
-<pre class="literal-block">
-cmake -G"Visual Studio 10 Win64" -DBOOST_ROOT=C:/Program Files/boost/boost_1_51 \
-    -DXERCESC_INCLUDE_DIR=C:/Program Files (x86)/CodeSynthesis XSD 3.3/include/xercesc \
-    -DXERCESC_LIBRARIES=C:/Program Files (x86)/CodeSynthesis XSD 3.3/lib64/vc-10.0/xerces-c_3.lib \
-    -DXSD_DIR=C:/Program Files (x86)/CodeSynthesis XSD 3.3 \
-    -DFFTW3_INCLUDE_DIR=C:/MRILibraries/fftw3 \
-    -DFFTW3F_LIBRARY=C:/MRILibraries/fftw3/libfftw3f-3.lib ../
-</pre>
-<p>Again, you may have to adjust for your specific installation paths. After generating the Visual Studio project, you can build from a Visual Studio Command Prompt with:</p>
-<pre class="literal-block">
-msbuild .\ISMRMRD.sln /p:Configuration=Release
-</pre>
-</div>
-</div>
-<div class="section" id="overview">
-<h1><a class="toc-backref" href="#id8">Overview</a></h1>
-<p>The raw data format combines a mix of flexible data structures (XML header) and fixed structures (equivalent to C-structs). A raw data set consist mainly of 2 sections:</p>
-<ol class="arabic simple">
-<li>A flexible XML format document that can contain an arbitrary number of fields and accommodate everything from simple values (b-values, etc.) to entire vendor protocols, etc. This purpose of this XML document is to provide parameters that may be meaningful for some experiments but not for others. This XML format is defined by an XML Schema Definition file (ismrmrd.xsd).</li>
-<li>Raw data section. This section contains all the acquired data in the experiment. Each data item is preceded by a C-struct with encoding numbers, etc. Following this data header is a channel header and data for each acquired channel. The raw data headers are defined in a C/C++ header file (ismrmrd.h)</li>
-</ol>
-<p>In addition to these sections, the ISMRMRD format also specifies an image header for storing reconstructed images and the accompanying C++ library provides a convenient way of writing such images into HDF5 files along with generic arrays for storing less well defined data structures, e.g. coil sensitivity maps or other calibration data.</p>
-<div class="section" id="flexible-data-header">
-<h2><a class="toc-backref" href="#id9">Flexible Data Header</a></h2>
-<p>The flexible data structure is defined by the xml schema definition in <tt class="docutils literal">schema/ismrmrd.xsd</tt> (<a class="reference internal" href="#schema">schema</a> is included in appendix below).</p>
-<p>An example of an XML file for a Cartesian 3D acquisition could look like:</p>
-<pre class="literal-block">
-<?xml version="1.0"?>
-<ismrmrdHeader xmlns="http://www.ismrm.org/ISMRMRD" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:schemaLocation="http://www.ismrm.org/ISMRMRD ismrmrd.xsd">
-  <subjectInformation>
-    <patientName>phantom</patientName>
-    <patientWeight_kg>70.3068</patientWeight_kg>
-  </subjectInformation>
-  <acquisitionSystemInformation>
-    <systemVendor>SIEMENS</systemVendor>
-    <systemModel>Avanto</systemModel>
-    <systemFieldStrength_T>1.494</systemFieldStrength_T>
-    <receiverChannels>32</receiverChannels>
-    <relativeReceiverNoiseBandwidth>0.79</relativeReceiverNoiseBandwidth>
-  </acquisitionSystemInformation>
-  <experimentalConditions>
-    <H1resonanceFrequency_Hz>63642459</H1resonanceFrequency_Hz>
-  </experimentalConditions>
-  <encoding>
-    <trajectory>cartesian</trajectory>
-    <encodedSpace>
-      <matrixSize>
-        <x>256</x>
-        <y>140</y>
-        <z>80</z>
-      </matrixSize>
-      <fieldOfView_mm>
-        <x>600</x>
-        <y>328.153125</y>
-        <z>160</z>
-      </fieldOfView_mm>
-    </encodedSpace>
-    <reconSpace>
-      <matrixSize>
-        <x>128</x>
-        <y>116</y>
-        <z>64</z>
-      </matrixSize>
-      <fieldOfView_mm>
-        <x>300</x>
-        <y>271.875</y>
-        <z>128</z>
-      </fieldOfView_mm>
-    </reconSpace>
-    <encodingLimits>
-      <kspace_encoding_step_1>
-        <minimum>0</minimum>
-        <maximum>83</maximum>
-        <center>28</center>
-      </kspace_encoding_step_1>
-      <kspace_encoding_step_2>
-        <minimum>0</minimum>
-        <maximum>45</maximum>
-        <center>20</center>
-      </kspace_encoding_step_2>
-      <slice>
-        <minimum>0</minimum>
-        <maximum>0</maximum>
-        <center>0</center>
-      </slice>
-      <set>
-        <minimum>0</minimum>
-        <maximum>0</maximum>
-        <center>0</center>
-      </set>
-    </encodingLimits>
-  </encoding>
-  <parallelImaging>
-    <accelerationFactor>
-      <kspace_encoding_step_1>1</kspace_encoding_step_1>
-      <kspace_encoding_step_2>1</kspace_encoding_step_2>
-    </accelerationFactor>
-    <calibrationMode>other</calibrationMode>
-  </parallelImaging>
-  <sequenceParameters>
-    <TR>4.6</TR>
-    <TE>2.35</TE>
-    <TI>300</TI>
-  </sequenceParameters>
-</ismrmrdHeader>
-
-
-</pre>
-<p>The most critical elements for image reconstruction are contained in the <tt class="docutils literal"><encoding></tt> section of the document, which describes the encoded spaced and also the target reconstructed space. Along with the <tt class="docutils literal"><encodingLimits></tt> this section allows the reconstruction program to determine matrix sizes, oversampling factors, partial Fourier, etc. In the example above, data is acquired with two-fold oversampling in the r [...]
-<pre class="literal-block">
-0                                     70                                         139
-|-------------------------------------|-------------------------------------------|
-                      ****************************************************
-                      ^               ^                                  ^
-                      0              28                                  83
-</pre>
-<p>After FFT, only the central 116 lines are kept, i.e. there is a reduced field of view in the phase encoding direction. Center and encoding limits for the readout dimension is not given in the XML header. This is to accommodate sequences where the center of the readout may change from readout to readout (alternating directions of readout). There is a field on the individual data headers (see below) to indicate the center of the readout.</p>
-<p>An experiment can have multiple encoding spaces and it is possible to indicate on each acquired data readout, which encoding space the data belongs to (see below).</p>
-<p>In addition to the defined field in the xml header, it is possible to add an arbitrary number of user defined parameters to accommodate special sequence parameters. Please consult the xml <a class="reference internal" href="#schema">schema</a> to see how user parameters are defined. Briefly, the XML header can have a section at the end which looks like:</p>
-<pre class="literal-block">
-<userParameters>
-  <userParameterLong>
-    <name>MyVar1</name><value>1003</value>
-  </userParameterLong>
-  <userParameterLong>
-    <name>MyVar2</name><value>1999</value>
-  </userParameterLong>
-  <userParameterDouble>
-    <name>MyDoubleVar</name><value>87.6676</value>
-  </userParameterDouble>
-</userParameters>
-</pre>
-</div>
-<div class="section" id="fixed-data-structures">
-<h2><a class="toc-backref" href="#id10">Fixed Data structures</a></h2>
-<p>Each raw data acquisition is preceded by the following fixed layout structure:</p>
-<pre class="literal-block">
-struct AcquisitionHeader
-{
-        uint16_t           version;                        /**< First unsigned int indicates the version */
-        uint64_t           flags;                          /**< bit field with flags */
-        uint32_t           measurement_uid;                /**< Unique ID for the measurement */
-        uint32_t           scan_counter;                   /**< Current acquisition number in the measurement */
-        uint32_t           acquisition_time_stamp;         /**< Acquisition clock */
-        uint32_t           physiology_time_stamp[3];       /**< Physiology time stamps, e.g. ecg, breating, etc. */
-        uint16_t           number_of_samples;              /**< Number of samples acquired */
-        uint16_t           available_channels;             /**< Available coils */
-        uint16_t           active_channels;                /**< Active coils on current acquisiton */
-        uint64_t           channel_mask[16];               /**< Mask to indicate which channels are active. Support for 1024 channels */
-        uint16_t           discard_pre;                    /**< Samples to be discarded at the beginning of acquisition */
-        uint16_t           discard_post;                   /**< Samples to be discarded at the end of acquisition */
-        uint16_t           center_sample;                  /**< Sample at the center of k-space */
-        uint16_t           encoding_space_ref;             /**< Reference to an encoding space, typically only one per acquisition */
-        uint16_t           trajectory_dimensions;          /**< Indicates the dimensionality of the trajectory vector (0 means no trajectory) */
-        float              sample_time_us;                 /**< Time between samples in micro seconds, sampling BW */
-        float              position[3];                    /**< Three-dimensional spatial offsets from isocenter */
-        float              quaternion[4];                  /**< Angulation of acquisition */
-        float              patient_table_position[3];      /**< Patient table off-center */
-        EncodingCounters   idx;                            /**< Encoding loop counters, see above */
-        int32_t            user_int[8];                    /**< Free user parameters */
-        float              user_float[8];                  /**< Free user parameters */
-};
-
-</pre>
-<p>Where EncodingCounters are defined as:</p>
-<pre class="literal-block">
-struct EncodingCounters {
-        uint16_t kspace_encode_step_1; /**< e.g. phase encoding line number */
-        uint16_t kspace_encode_step_2; /**< e.g. partition encodning number */
-        uint16_t average;              /**< e.g. signal average number */
-        uint16_t slice;                /**< e.g. imaging slice number */
-        uint16_t contrast;             /**< e.g. echo number in multi-echo */
-        uint16_t phase;                /**< e.g. cardiac phase number */
-        uint16_t repetition;           /**< e.g. dynamic number for dynamic scanning */
-        uint16_t set;                  /**< e.g. flow encodning set */
-        uint16_t segment;              /**< e.g. segment number for segmented acquisition */
-        uint16_t user[8];              /**< Free user parameters */
-};
-
-</pre>
-<p>The interpretation of some of these fields may vary from sequence to sequence, i.e. for a Cartesian sequence, <tt class="docutils literal">kspace_encode_step_1</tt> would be the phase encoding step, for a spiral sequence where phase encoding direction does not make sense, it would be the spiral interleave number. The <tt class="docutils literal">encoding_space_ref</tt> enables the user to tie an acquisition to a specific encoding space (see above) in case there are multiple, e.g. in s [...]
-<p>The flags field is a bit mask, which in principle can be used freely by the user, but suggested flag values are given in <tt class="docutils literal">ismrmrd.h</tt>, it is recommended not to use already designated flag bits for custom purposes. There are a set of bits reserved for prototyping (bits 57-64), please see <tt class="docutils literal">ismrmrd.h</tt> for details.</p>
-<p>The header contains a <tt class="docutils literal">trajectory_dimensions</tt> field. If the value of this field is larger than 0, it means that trajectories are stored with each individual acquisition. For a 2D acquisition, the <tt class="docutils literal">trajectory_dimensions</tt> would typically be 2 and the convention (for memory layout) is that the header is followed immediately by the trajectory before the complex data. There is an example of how this memory layout could be impl [...]
-<pre class="literal-block">
-class Acquisition
-{
-
-//....
-
-AcquisitionHeader head_; //Header, see above
-
-float* traj_;            //Trajectory, elements = head_.trajectory_dimensions*head_.number_of_samples
-                         //   [kx,ky,kx,ky.....]        (for head_.trajectory_dimensions = 2)
-                         //   [kx,ky,kz,kx,ky,kz,.....] (for head_.trajectory_dimensions = 3)
-
-float* data_;            //Actual data, elements = head_.number_of_samples*head_.active_channels*2
-                         //   [re,im,re,im,.....,re,im,re,im,.....,re,im,re,im,.....]
-                         //    ---channel 1-------channel 2---------channel 3-----
-
-};
-</pre>
-<p>This suggested memory layout is only a suggestion. The HDF5 interface (see below) can be used to read the data into many different data structures. In fact, the user can choose to read only part of the header or not read the data, etc.</p>
-<p>As mentioned above, the ISMRMRD format also suggests a way to store reconstructed images (or maybe image data used for calibration). An <tt class="docutils literal">ImageHeader</tt> structure is defined in <tt class="docutils literal">ismrmrd.h</tt>:</p>
-<pre class="literal-block">
-struct ImageHeader
-{
-        uint16_t                version;                        /**< First unsigned int indicates the version */
-        uint64_t                flags;                          /**< bit field with flags */
-        uint32_t                measurement_uid;                /**< Unique ID for the measurement  */
-        uint16_t                matrix_size[3];                 /**< Pixels in the 3 spatial dimensions */
-        float                   field_of_view[3];               /**< Size (in mm) of the 3 spatial dimensions */
-        uint16_t                channels;                       /**< Number of receive channels */
-        float                   position[3];                    /**< Three-dimensional spatial offsets from isocenter */
-        float                   quaternion[4];                  /**< Angulation of acquisition */
-        float                   patient_table_position[3];      /**< Patient table off-center */
-        uint16_t                average;                        /**< e.g. signal average number */
-        uint16_t                slice;                          /**< e.g. imaging slice number */
-        uint16_t                contrast;                       /**< e.g. echo number in multi-echo */
-        uint16_t                phase;                          /**< e.g. cardiac phase number */
-        uint16_t                repetition;                     /**< e.g. dynamic number for dynamic scanning */
-        uint16_t                set;                            /**< e.g. flow encodning set */
-        uint32_t                acquisition_time_stamp;         /**< Acquisition clock */
-        uint32_t                physiology_time_stamp[3];       /**< Physiology time stamps, e.g. ecg, breating, etc. */
-        uint16_t                image_data_type;                /**< e.g. unsigned short, float, complex float, etc. */
-        uint16_t                image_type;                     /**< e.g. magnitude, phase, complex, real, imag, etc. */
-        uint16_t                image_index;                                    /**< e.g. image number in series of images  */
-        uint16_t                        image_series_index;             /**< e.g. series number */
-        int32_t                 user_int[8];                    /**< Free user parameters */
-        float                   user_float[8];                  /**< Free user parameters */
-};
-
-</pre>
-<p>In a similar fashion to the raw data acquisition data, the intention is to store a header followed by the image data. Since image data can be in several different format (e.g. float, complex, etc.), the memory layout is less well defined but can be described as:</p>
-<pre class="literal-block">
-template <typename T> class Image {
-
-ImageHeader head_;     //ImageHeader as defined above
-T* data_;              //Data, array of size (matrix_size[0]*matrix_size[1]*matrix_size[2]*channels),
-                       //first spatial dimension is fastest changing array index, channels outer most (slowest changing).
-};
-</pre>
-</div>
-</div>
-<div class="section" id="file-storage">
-<h1><a class="toc-backref" href="#id11">File Storage</a></h1>
-<p>The ISMRM Raw Data format is stored in HDF5 format. Details on this format can be found at the <a class="reference external" href="http://www.hdfgroup.org/HDF5/">HDF5</a> website. Briefly it is a hierarchical data format (much like a file system), which can contain multiple variable organized in groups (like folders in a file system). The variables can contain arrays of data values, custom defined structs, or simple text fields. It is the convention (but not a requirement) that the IS [...]
-<pre class="literal-block">
->> data = h5read('simple_gre.h5', '/dataset/data');
->> data
-
-data =
-
-head: [1x1 struct]
-traj: {1x1281 cell}
-data: {1x1281 cell}
-
- >> data.head
-
- ans =
-
-                version: [1x1281 uint16]
-                  flags: [1x1281 uint64]
-        measurement_uid: [1x1281 uint32]
-           scan_counter: [1x1281 uint32]
- acquisition_time_stamp: [1x1281 uint32]
-  physiology_time_stamp: [3x1281 uint32]
-      number_of_samples: [1x1281 uint16]
-     available_channels: [1x1281 uint16]
-        active_channels: [1x1281 uint16]
-           channel_mask: [16x1281 uint64]
-            discard_pre: [1x1281 uint16]
-           discard_post: [1x1281 uint16]
-          center_sample: [1x1281 uint16]
-     encoding_space_ref: [1x1281 uint16]
-  trajectory_dimensions: [1x1281 uint16]
-         sample_time_us: [1x1281 single]
-               position: [3x1281 single]
-             quaternion: [4x1281 single]
- patient_table_position: [3x1281 single]
-                    idx: [1x1 struct]
-               user_int: [8x1281 int32]
-             user_float: [8x1281 single]
-
- >>
-</pre>
-<p>The HDF5 file format can be access from C, C++, and java using the libraries provided on the HDF5 website. The ISMRMRD distribution also comes with some C++ wrappers that can be used for easy access (read and write) from C++ programs. See below.</p>
-<p>In addition to storing acquisition data and images as defined by the headers above, the HDF5 format also enables storage of generic multi-dimensional arrays. The ISMRMRD format does not explicitly define how such data should be stored, but leaves it open for the user to add variables and data as dictated by a given application.</p>
-</div>
-<div class="section" id="c-support-library">
-<h1><a class="toc-backref" href="#id12">C++ Support Library</a></h1>
-<p>To enable easy prototyping of C++ software using the ISMRMRD data format, a simple C++ wrapper class is provided (defined in <tt class="docutils literal">ismrmrd_hdf5.h</tt>):</p>
-<pre class="literal-block">
-class EXPORTISMRMRD IsmrmrdDataset
-{
- public:
-
-     IsmrmrdDataset(const char* filename, const char* groupname, bool create_file_if_needed = true)
-     : filename_(filename)
-     , groupname_(groupname)
-     , file_open_(false)
-     , dataset_open_(false)
-     , create_file_if_needed_(create_file_if_needed)
-     {
-             std::ifstream ifile(filename_.c_str());
-             file_exists_ = ifile;
-
-             if (openHDF5File() < 0) {
-                     std::cerr << "IsmrmrdDataset: Error opening HDF file." << std::endl;
-             }
-
-             if (!linkExists(groupname_.c_str())) {
-                     if (createGroupForDataset(groupname_.c_str()) < 0) {
-                             std::cerr << "IsmrmrdDataset: Error create HDF5 group." << std::endl;
-                     }
-             }
-
-             xml_header_path_ = groupname_ + std::string("/xml");
-             data_path_ = groupname_ + std::string("/data");
-     }
-
-     int appendAcquisition(Acquisition* a);
-     boost::shared_ptr<Acquisition> readAcquisition(unsigned long index = 0);
-     unsigned long getNumberOfAcquisitions();
-
-     int writeHeader(std::string& xml);
-     boost::shared_ptr<std::string> readHeader();
-
-     template <typename T> int appendImage(Image<T>& m, const char* varname);
-     template <typename T> boost::shared_ptr< Image<T> > readImage(const char* varname, unsigned long index = 0);
-
-     int appendImageHeader(ImageHeader& h, const char* varname);
-     boost::shared_ptr< ImageHeader > readImageHeader(const char* varname, unsigned long index = 0);
-
-     template <typename T> int appendArray(NDArrayContainer<T>& a, const char* varname);
-     template <typename T> int appendArray(std::vector<unsigned int>& dimensions, T* data, const char* varname);
-     template <typename T> boost::shared_ptr< NDArrayContainer<T> > readArray(const char* varname, unsigned long index = 0);
- };
-</pre>
-<p>Using this wrapper, C++ applications can be programmed as:</p>
-<pre class="literal-block">
-boost::shared_ptr<ISMRMRD::IsmrmrdDataset> ismrmrd_dataset(new ISMRMRD::IsmrmrdDataset(hdf5_in_data_file,hdf5_in_group));
-boost::shared_ptr<std::string> xml_config = ismrmrd_dataset->readHeader();
-
-//Do something with the header
-
-unsigned long acquisitions = ismrmrd_dataset->getNumberOfAcquisitions();
-
-for (unsigned long int i = 0; i < acquisitions; i++) {
-  boost::shared_ptr<ISMRMRD::Acquisition> acq_tmp = ismrmrd_dataset->readAcquisition(i);
-  //Do something with the data
-}
-</pre>
-<p>Since the XML part of the header is defined in the <tt class="docutils literal">schema/ismrmrd.xsd</tt> file, it is possible to use XML data binding tools such as CodeSynthesys XSD to generate a C++ class representation of the header for easy access to the fields. The <tt class="docutils literal">cmake</tt> build files that accompany the ISMRMRD distribution automatically tries to find CodeSynthesis XSD and generate such a binding. With the C++ representation of the header it can be p [...]
-<pre class="literal-block">
-xml_schema::properties props;
-props.schema_location ("http://www.ismrm.org/ISMRMRD",std::string("/full/path/to/ismrmrd.xsd"));
-std::istringstream str_stream(xml, std::stringstream::in);
-boost::shared_ptr<ISMRMRD::ismrmrdHeader> cfg;
-
-try {
-   cfg = boost::shared_ptr<ISMRMRD::ismrmrdHeader>(ISMRMRD::ismrmrdHeader_ (str_stream,0,props));
-}  catch (const xml_schema::exception& e) {
-   std::cout << "Failed to parse XML Parameters: " << e.what() << std::endl;
-}
-
-//Use the configuration, e.g.:
-std::cout << "Number of encoding spaces: " << cfg->encoding().size() << std::endl;
-</pre>
-<p>Again, this is not a requirement for using the ISMRMRD format, the XML can be parsed with numerous other xml parsing libraries. The schema file <tt class="docutils literal">schema/ismrmrd.xsd</tt> gives the user the option of validating the XML header before parsing, which is recommended to reduce the chance of hard to detect errors in your code due to missing or malformed parameters.</p>
-<div class="section" id="c-example-applications">
-<h2><a class="toc-backref" href="#id13">C++ Example Applications</a></h2>
-<p>The distribution includes two example applications, one that creates a simple 2D single-channel dataset from scratch and one that reconstructs this dataset (you need FFTW installed to compile these test applications). The data generation application looks like this (<tt class="docutils literal">test_create_dataset.cpp</tt>):</p>
-<pre class="literal-block">
-
-int main(int argc, char** argv)
-{
-        std::cout << "ISMRMRD Test Dataset Creation App" << std::endl;
-
-        const unsigned int readout = 256;
-        const unsigned int phase_encoding_lines = 128;
-
-        ISMRMRD::IsmrmrdDataset d("testdata.h5","dataset");
-
-        //Let's create the "original" image in the file for reference
-        if (appendImageArray< std::complex<float>, readout, phase_encoding_lines >(d, "the_square") < 0) {
-                std::cout << "Error adding image to dataset" << std::endl;
-                return -1;
-        }
-
-        //Read it back from the file
-        boost::shared_ptr< ISMRMRD::NDArrayContainer<std::complex<float> > > img_test =
-                        d.readArray< std::complex<float> >("the_square", 0);
-
-        if (img_test.get() == 0) {
-                std::cout << "Error reading image array from file" << std::endl;
-                return -1;
-        }
-
-        std::cout << "Image Array dimensions: ";
-        for (int di = 0; di < img_test->dimensions_.size(); di++) {
-                std::cout << img_test->dimensions_[di] << " ";
-        }
-        std::cout << std::endl;
-
-        //Let's FFT this image to k-space
-        fftwf_complex* tmp = (fftwf_complex*)fftwf_malloc(sizeof(fftwf_complex)*img_test->data_.size());
-
-        if (!tmp) {
-                std::cout << "Error allocating temporary storage for FFTW" << std::endl;
-                return -1;
-        }
-
-        fftshift(reinterpret_cast<std::complex<float>*>(tmp),&img_test->data_[0],img_test->dimensions_[0],img_test->dimensions_[1]);
-
-        //Create the FFTW plan
-        fftwf_plan p = fftwf_plan_dft_2d(img_test->dimensions_[1], img_test->dimensions_[0], tmp,tmp, FFTW_FORWARD, FFTW_ESTIMATE);
-
-        fftwf_execute(p);
-
-        fftshift(&img_test->data_[0],reinterpret_cast<std::complex<float>*>(tmp),img_test->dimensions_[0],img_test->dimensions_[1]);
-
-        //Clean up.
-        fftwf_destroy_plan(p);
-        fftwf_free(tmp);
-
-        //Let keep the "original" k-space in the file for reference
-        if (d.appendArray(*img_test,"the_square_k") < 0) {
-                std::cout << "Error adding kspace to dataset" << std::endl;
-                return -1;
-        }
-
-        //Let's append the data to the file
-        ISMRMRD::Acquisition acq;
-
-        acq.data_ = new float[readout*2];
-        if (!acq.data_) {
-                std::cout << "Error allocating memory for the acquisition" << std::endl;
-        }
-
-        for (unsigned int i = 0; i < phase_encoding_lines; i++) {
-                acq.head_.flags = 0;
-                //Set some flags
-                if (i == 0) {
-                        acq.setFlag(ISMRMRD::FlagBit(ISMRMRD::ACQ_FIRST_IN_SLICE));
-                }
-                if (i == (phase_encoding_lines-1)) {
-                        acq.setFlag(ISMRMRD::FlagBit(ISMRMRD::ACQ_LAST_IN_SLICE));
-                }
-                acq.head_.idx.kspace_encode_step_1 = i;
-                acq.head_.active_channels = 1;
-                acq.head_.available_channels = 1;
-                acq.head_.number_of_samples = readout;
-                acq.head_.center_sample = (readout>>1);
-                acq.head_.sample_time_us = 5.0;
-                memcpy(acq.data_,&img_test->data_[i*readout],sizeof(float)*readout*2);
-                d.appendAcquisition(&acq);
-        }
-
-        //Let's create a header, we will use the C++ class generated by XSD
-        ISMRMRD::experimentalConditionsType exp(63500000); //~1.5T
-        ISMRMRD::ismrmrdHeader h(exp);
-
-        //Create an encoding section
-        ISMRMRD::encodingSpaceType es(ISMRMRD::matrixSize(readout,phase_encoding_lines,1),ISMRMRD::fieldOfView_mm(600,300,6));
-        ISMRMRD::encodingSpaceType rs(ISMRMRD::matrixSize((readout>>1),phase_encoding_lines,1),ISMRMRD::fieldOfView_mm(300,300,6));
-        ISMRMRD::encodingLimitsType el;
-        el.kspace_encoding_step_1(ISMRMRD::limitType(0,phase_encoding_lines-1,(phase_encoding_lines>>1)));
-        ISMRMRD::encoding e(es,rs,el,ISMRMRD::trajectoryType::cartesian);
-
-        //Add the encoding section to the header
-        h.encoding().push_back(e);
-
-        //Add any additional fields that you may want would go here....
-
-        //e.g. parallel imaging
-        //ISMRMRD::parallelImagingType parallel(ISMRMRD::accelerationFactorType(2,1));
-        //parallel.calibrationMode(ISMRMRD::calibrationModeType::embedded);
-    //h.parallelImaging(parallel);
-
-        //Serialize the header
-        xml_schema::namespace_infomap map;
-        map[""].name = "http://www.ismrm.org/ISMRMRD";
-        map[""].schema = "ismrmrd.xsd";
-        std::stringstream str;
-        ISMRMRD::ismrmrdHeader_(str, h, map);
-        std::string xml_header = str.str();
-
-        //Write the header to the data file.
-        d.writeHeader(xml_header);
-
-        return 0;
-}
-
-</pre>
-<p>To reconstruct this synthetic dataset, you can use the test reconstruction application (<tt class="docutils literal">test_recon_dataset.cpp</tt>):</p>
-<pre class="literal-block">
-
-int main(int argc, char** argv)
-{
-        if (argc < 3) {
-                print_usage(argv[0]);
-                return -1;
-        }
-
-        std::string datafile(argv[1]);
-        std::string schemafile(argv[2]);
-
-        std::cout << "Simple ISMRMRD Reconstruction program" << std::endl;
-        std::cout << "   - filename: " << datafile << std::endl;
-        std::cout << "   - schema  : " << schemafile << std::endl;
-
-        //Let's open the dataset
-        ISMRMRD::IsmrmrdDataset d(datafile.c_str(),"dataset");
-
-        //We will start by getting the header and turning it into a C++ class
-        //In order to do true validation of the XML, we will use the XML schema
-        xml_schema::properties props;
-        props.schema_location ("http://www.ismrm.org/ISMRMRD", schemafile);
-
-        boost::shared_ptr<std::string> xml = d.readHeader();
-        std::istringstream str_stream(*xml, std::stringstream::in);
-
-        boost::shared_ptr<ISMRMRD::ismrmrdHeader> cfg;
-
-        try {
-                cfg = boost::shared_ptr<ISMRMRD::ismrmrdHeader>(ISMRMRD::ismrmrdHeader_ (str_stream,0,props));
-        }  catch (const xml_schema::exception& e) {
-                std::cout << "Failed to parse XML Parameters: " << e.what() << std::endl;
-        }
-
-        //Let's print some information from the header
-        ISMRMRD::ismrmrdHeader::encoding_sequence e_seq = cfg->encoding();
-        if (e_seq.size() != 1) {
-                std::cout << "Number of encoding spaces: " << e_seq.size() << std::endl;
-                std::cout << "This simple reconstruction application only supports one encoding space" << std::endl;
-                return -1;
-        }
-
-        ISMRMRD::encodingSpaceType e_space = (*e_seq.begin()).encodedSpace();
-        ISMRMRD::encodingSpaceType r_space = (*e_seq.begin()).reconSpace();
-        ISMRMRD::encodingLimitsType e_limits = (*e_seq.begin()).encodingLimits();
-
-        std::cout << "Encoding Matrix Size        : [" << e_space.matrixSize().x() << ", " << e_space.matrixSize().y() << ", " << e_space.matrixSize().z() << "]" << std::endl;
-        std::cout << "Reconstruction Matrix Size  : [" << r_space.matrixSize().x() << ", " << r_space.matrixSize().y() << ", " << r_space.matrixSize().z() << "]" << std::endl;
-        std::cout << "Number of acquisitions      : " << d.getNumberOfAcquisitions() << std::endl;
-
-        if (e_space.matrixSize().z() != 1) {
-                std::cout << "This simple reconstruction application only supports 2D encoding spaces" << std::endl;
-                return -1;
-        }
-
-        //Allocate a buffer for the data
-        ISMRMRD::NDArrayContainer< std::complex<float> > buffer;
-        buffer.dimensions_.push_back(e_space.matrixSize().x());
-        buffer.dimensions_.push_back(e_space.matrixSize().y());
-        buffer.data_.resize(e_space.matrixSize().x()*e_space.matrixSize().y(), std::complex<float>(0.0,0.0));
-
-        //Now loop through and copy data
-        unsigned int number_of_acquisitions = d.getNumberOfAcquisitions();
-        for (unsigned int i = 0; i < number_of_acquisitions; i++) {
-                //Read one acquisition at a time
-                boost::shared_ptr<ISMRMRD::Acquisition> acq = d.readAcquisition(i);
-
-                //Copy data, we should probably be more careful here and do more tests....
-                //We are not considering multiple channels here.
-                unsigned int offset = acq->head_.idx.kspace_encode_step_1*buffer.dimensions_[0];
-                memcpy(&buffer.data_[offset],acq->data_,sizeof(float)*2*buffer.dimensions_[0]);
-        }
-
-        //Let's FFT the k-space to image
-        fftwf_complex* tmp = (fftwf_complex*)fftwf_malloc(sizeof(fftwf_complex)*buffer.data_.size());
-
-        if (!tmp) {
-                std::cout << "Error allocating temporary storage for FFTW" << std::endl;
-                return -1;
-        }
-
-        fftshift(reinterpret_cast<std::complex<float>*>(tmp),&buffer.data_[0],buffer.dimensions_[0],buffer.dimensions_[1]);
-
-        //Create the FFTW plan
-        fftwf_plan p = fftwf_plan_dft_2d(buffer.dimensions_[1], buffer.dimensions_[0], tmp,tmp, FFTW_BACKWARD, FFTW_ESTIMATE);
-
-        fftwf_execute(p);
-
-        fftshift(&buffer.data_[0],reinterpret_cast<std::complex<float>*>(tmp),buffer.dimensions_[0],buffer.dimensions_[1]);
-
-        //Clean up.
-        fftwf_destroy_plan(p);
-        fftwf_free(tmp);
-
-        //Now, let's remove the oversampling in the readout and take the magnitude
-        //Allocate a buffer for the data
-        ISMRMRD::NDArrayContainer< float > img;
-        img.dimensions_.push_back(r_space.matrixSize().x());
-        img.dimensions_.push_back(r_space.matrixSize().y());
-        img.data_.resize(r_space.matrixSize().x()*r_space.matrixSize().y(), 0.0);
-
-        for (unsigned int y = 0; y < img.dimensions_[1]; y++) {
-                for (unsigned int x = 0; x < img.dimensions_[0]; x++) {
-                        img.data_[y*img.dimensions_[0]+x] =
-                                std::abs(buffer.data_[y*buffer.dimensions_[0] + x + ((e_space.matrixSize().x()-r_space.matrixSize().x())>>1)]);
-                }
-        }
-
-        //Let's write the reconstructed image straight in the same data file
-        ISMRMRD::ImageHeader img_h;
-        img_h.channels = 1;
-        img_h.image_data_type = ISMRMRD::DATA_COMPLEX_FLOAT; //This is actually just guidance
-        img_h.image_type      = ISMRMRD::TYPE_COMPLEX;       //This is actually just guidance
-        img_h.slice = 0;
-        //And so on
-
-        //Now append, we will append image and header separately (in two different datasets)
-        d.appendImageHeader(img_h,"myimage.head");
-        d.appendArray(img,"myimage.img");
-
-
-        return 0;
-}
-
-</pre>
-</div>
-</div>
-<div class="section" id="matlab-example-code-and-datasets">
-<h1><a class="toc-backref" href="#id14">Matlab Example Code and Datasets</a></h1>
-<p>The <tt class="docutils literal">examples</tt> folder contains some matlab code to illustrate simple interaction with the ISMRMRD data format. The examples use test data sets, wich can be downloaded from the Sourceforge <a class="reference external" href="http://sourceforge.net/projects/ismrmrd">website</a>. Go to the <tt class="docutils literal">examples/data</tt> folder and type the following to download the data:</p>
-<pre class="literal-block">
-wget https://sourceforge.net/projects/ismrmrd/files/data/3D_partial_fourier.h5
-wget https://sourceforge.net/projects/ismrmrd/files/data/simple_gre.h5
-wget https://sourceforge.net/projects/ismrmrd/files/data/simple_spiral.h5
-</pre>
-<p>For instance, to reconstruct a 2D Cartesian acquisition (10 image repetitions), type (from the <tt class="docutils literal">examples/matlab</tt> folder):</p>
-<pre class="literal-block">
->> images = simple_cartesian_recon('../data/simple_gre.h5');
-Reconstructing image 1....done
-Reconstructing image 2....done
-Reconstructing image 3....done
-Reconstructing image 4....done
-Reconstructing image 5....done
-Reconstructing image 6....done
-Reconstructing image 7....done
-Reconstructing image 8....done
-Reconstructing image 9....done
-Reconstructing image 10....done
->>
-</pre>
-<p>You should see one of the reconstructed images display. An example is also given of a 3D acquisition with partial Fourier, phase and slice oversampling, etc. Reconstruct this dataset with:</p>
-<pre class="literal-block">
->> images = simple_cartesian_recon('../data/3D_partial_fourier.h5');
-Reconstructing image 1....done
-</pre>
-<p>The center slice of the volume should be displayed at the end of the reconstruction.</p>
-<p>Finally, there is also a spiral dataset. This dataset illustrates how the flexible section of the <tt class="docutils literal"><trajectoryDescription></tt> can be used to add user defined parameters and an identifier to describe the trajectory. This dataset is also an example of storing the trajectory with the data for direct reconstruction. Reconstruct this dataset with:</p>
-<pre class="literal-block">
->> images = simple_spiral_recon('../data/simple_spiral.h5');
-Reconstructing image 1....done
-Reconstructing image 2....done
-Reconstructing image 3....done
-Reconstructing image 4....done
-Reconstructing image 5....done
-Reconstructing image 6....done
-Reconstructing image 7....done
-Reconstructing image 8....done
-Reconstructing image 9....done
-Reconstructing image 10....done
->>
-</pre>
-</div>
-<div class="section" id="appendix">
-<h1><a class="toc-backref" href="#id15">Appendix</a></h1>
-<div class="section" id="frequently-asked-questions">
-<h2><a class="toc-backref" href="#id16">Frequently Asked Questions</a></h2>
-<ul id="faq">
-<li><p class="first">I am trying to compile on Mac OSX Lion and I am getting strange errors.</p>
-<blockquote>
-<p>in version 3.3.0 of CodeSynthesis XSD there is a problem with the clang compiler. It can build with clang on os x 10.7 (Lion) by editing
-<cite>/usr/local/include/xsd/cxx/zc-istream.txx</cite>. Change line 35 from:</p>
-<pre class="literal-block">
-setg (b, b, e);
-</pre>
-<p>to:</p>
-<pre class="literal-block">
-std::streambuf::setg (b, b, e);
-</pre>
-<p>See also:
-<a class="reference external" href="http://codesynthesis.com/pipermail/xsd-users/2011-May/003283.html">http://codesynthesis.com/pipermail/xsd-users/2011-May/003283.html</a></p>
-</blockquote>
-</li>
-</ul>
-</div>
-<div class="section" id="xml-schema-definition">
-<h2><a class="toc-backref" href="#id17">XML Schema Definition</a></h2>
-<pre class="literal-block" id="schema">
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<xs:schema xmlns="http://www.ismrm.org/ISMRMRD" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://www.ismrm.org/ISMRMRD">
-
-  <xs:element name="ismrmrdHeader">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element maxOccurs="1" minOccurs="0" name="subjectInformation" type="subjectInformationType"/>
-        <xs:element maxOccurs="1" minOccurs="0" name="studyInformation" type="studyInformationType"/>
-        <xs:element maxOccurs="1" minOccurs="0" name="measurementInformation" type="measurementInformationType"/>
-        <xs:element maxOccurs="1" minOccurs="0" name="acquisitionSystemInformation" type="acquisitionSystemInformationType"/>
-        <xs:element maxOccurs="1" minOccurs="1" name="experimentalConditions" type="experimentalConditionsType"/>
-        <xs:element maxOccurs="unbounded" minOccurs="1" name="encoding">
-          <xs:complexType>
-            <xs:all>
-              <xs:element maxOccurs="1" minOccurs="1" name="encodedSpace" type="encodingSpaceType"/>
-              <xs:element maxOccurs="1" minOccurs="1" name="reconSpace" type="encodingSpaceType"/>
-              <xs:element maxOccurs="1" minOccurs="1" name="encodingLimits" type="encodingLimitsType"/>
-              <xs:element maxOccurs="1" minOccurs="1" name="trajectory" type="trajectoryType"/>
-              <xs:element maxOccurs="1" minOccurs="0" name="trajectoryDescription" type="trajectoryDescriptionType"/>
-            </xs:all>
-          </xs:complexType>
-        </xs:element>
-        <xs:element maxOccurs="1" minOccurs="0" name="parallelImaging" type="parallelImagingType"/>
-        <xs:element maxOccurs="1" minOccurs="0" name="sequenceParameters" type="sequenceParametersType"/>
-        <xs:element maxOccurs="1" minOccurs="0" name="dicomParameters" type="dicomParametersType"/>
-        <xs:element maxOccurs="1" minOccurs="0" name="userParameters">
-          <xs:complexType>
-            <xs:sequence>
-              <xs:element maxOccurs="unbounded" minOccurs="0" name="userParameterLong" type="userParameterLongType"/>
-              <xs:element maxOccurs="unbounded" minOccurs="0" name="userParameterDouble" type="userParameterDoubleType"/>
-            </xs:sequence>
-          </xs:complexType>
-        </xs:element>
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-
-  <xs:complexType name="subjectInformationType">
-    <xs:all>
-      <xs:element minOccurs="0" name="patientName" type="xs:string"/>
-      <xs:element minOccurs="0" name="patientWeight_kg" type="xs:float"/>
-      <xs:element minOccurs="0" name="patientID" type="xs:string"/>
-      <xs:element minOccurs="0" name="patientBirthdate" type="xs:date"/>
-      <xs:element minOccurs="0" name="patientGender">
-        <xs:simpleType>
-          <xs:restriction base="xs:string">
-            <xs:pattern value="[MFO]"/>
-          </xs:restriction>
-        </xs:simpleType>
-      </xs:element>
-    </xs:all>
-  </xs:complexType>
-
-  <xs:complexType name="studyInformationType">
-    <xs:all>
-      <xs:element minOccurs="1" name="studyDate" type="xs:date"/>
-      <xs:element minOccurs="1" name="studyTime" type="xs:time"/>
-      <xs:element minOccurs="0" name="studyID" type="xs:string"/>
-      <xs:element minOccurs="0" name="accessionNumber" type="xs:long"/>
-      <xs:element minOccurs="0" name="referringPhysicianName" type="xs:string"/>
-      <xs:element minOccurs="0" name="studyDescription" type="xs:string"/>
-    </xs:all>
-  </xs:complexType>
-
-  <xs:complexType name="experimentalConditionsType">
-    <xs:all>
-      <xs:element name="H1resonanceFrequency_Hz" type="xs:long"/>
-    </xs:all>
-  </xs:complexType>
-
-  <xs:complexType name="acquisitionSystemInformationType">
-    <xs:all>
-      <xs:element minOccurs="0" name="systemVendor" type="xs:string"/>
-      <xs:element minOccurs="0" name="systemModel" type="xs:string"/>
-      <xs:element minOccurs="0" name="systemFieldStrength_T" type="xs:float"/>
-      <xs:element minOccurs="0" name="relativeReceiverNoiseBandwidth" type="xs:float"/>
-      <xs:element minOccurs="0" name="receiverChannels" type="xs:unsignedShort"/>
-      <xs:element minOccurs="0" name="institutionName" type="xs:string"/>
-      <xs:element minOccurs="0" name="stationName" type="xs:string"/>
-    </xs:all>
-  </xs:complexType>
-
-  <xs:complexType name="encodingSpaceType">
-    <xs:all>
-      <xs:element name="matrixSize">
-        <xs:complexType>
-          <xs:sequence>
-            <xs:element default="1" maxOccurs="1" minOccurs="1" name="x" type="xs:unsignedShort"/>
-            <xs:element default="1" maxOccurs="1" minOccurs="1" name="y" type="xs:unsignedShort"/>
-            <xs:element default="1" maxOccurs="1" minOccurs="1" name="z" type="xs:unsignedShort"/>
-          </xs:sequence>
-        </xs:complexType>
-      </xs:element>
-      <xs:element name="fieldOfView_mm">
-        <xs:complexType>
-          <xs:sequence>
-            <xs:element maxOccurs="1" minOccurs="1" name="x" type="xs:float"/>
-            <xs:element maxOccurs="1" minOccurs="1" name="y" type="xs:float"/>
-            <xs:element maxOccurs="1" minOccurs="1" name="z" type="xs:float"/>
-          </xs:sequence>
-        </xs:complexType>
-      </xs:element>
-    </xs:all>
-  </xs:complexType>
-
-  <xs:complexType name="limitType">
-    <xs:all>
-      <xs:element default="0" name="minimum" type="xs:unsignedShort"/>
-      <xs:element default="0" name="maximum" type="xs:unsignedShort"/>
-      <xs:element default="0" name="center" type="xs:unsignedShort"/>
-    </xs:all>
-  </xs:complexType>
-
-  <xs:complexType name="encodingLimitsType">
-    <xs:all>
-      <xs:element maxOccurs="1" minOccurs="0" name="kspace_encoding_step_0" type="limitType"/>
-      <xs:element maxOccurs="1" minOccurs="0" name="kspace_encoding_step_1" type="limitType"/>
-      <xs:element maxOccurs="1" minOccurs="0" name="kspace_encoding_step_2" type="limitType"/>
-      <xs:element maxOccurs="1" minOccurs="0" name="average" type="limitType"/>
-      <xs:element maxOccurs="1" minOccurs="0" name="slice" type="limitType"/>
-      <xs:element maxOccurs="1" minOccurs="0" name="contrast" type="limitType"/>
-      <xs:element maxOccurs="1" minOccurs="0" name="phase" type="limitType"/>
-      <xs:element maxOccurs="1" minOccurs="0" name="repetition" type="limitType"/>
-      <xs:element maxOccurs="1" minOccurs="0" name="set" type="limitType"/>
-      <xs:element maxOccurs="1" minOccurs="0" name="segment" type="limitType"/>
-    </xs:all>
-  </xs:complexType>
-
-  <xs:simpleType name="trajectoryType">
-    <xs:restriction base="xs:string">
-      <xs:enumeration value="cartesian"/>
-      <xs:enumeration value="epi"/>
-      <xs:enumeration value="radial"/>
-      <xs:enumeration value="goldenangle"/>
-      <xs:enumeration value="spiral"/>
-      <xs:enumeration value="other"/>
-    </xs:restriction>
-  </xs:simpleType>
-
-  <xs:complexType name="trajectoryDescriptionType">
-    <xs:sequence>
-      <xs:element maxOccurs="1" minOccurs="1" name="identifier" type="xs:string"/>
-      <xs:element maxOccurs="unbounded" minOccurs="0" name="userParameterLong" type="userParameterLongType"/>
-      <xs:element maxOccurs="unbounded" minOccurs="0" name="userParameterDouble" type="userParameterDoubleType"/>
-      <xs:element maxOccurs="1" minOccurs="0" name="comment" type="xs:string"/>
-    </xs:sequence>
-  </xs:complexType>
-
-  <xs:complexType name="sequenceParametersType">
-        <xs:sequence>
-                <xs:element minOccurs="1" maxOccurs="unbounded" type="xs:float" name="TR"/>
-                <xs:element minOccurs="1" maxOccurs="unbounded" type="xs:float" name="TE"/>
-                <xs:element minOccurs="0" maxOccurs="unbounded" type="xs:float" name="TI"/>
-        </xs:sequence>
-  </xs:complexType>
-
-  <xs:complexType name="userParameterLongType">
-    <xs:all>
-      <xs:element name="name" type="xs:string"/>
-      <xs:element name="value" type="xs:long"/>
-    </xs:all>
-  </xs:complexType>
-
-  <xs:complexType name="userParameterDoubleType">
-    <xs:all>
-      <xs:element name="name" type="xs:string"/>
-      <xs:element name="value" type="xs:double"/>
-    </xs:all>
-  </xs:complexType>
-
-  <xs:complexType name="measurementInformationType">
-    <xs:all>
-      <xs:element minOccurs="1" name="seriesDate" type="xs:date"/>
-      <xs:element minOccurs="1" name="seriesTime" type="xs:time"/>
-      <xs:element minOccurs="1" name="patientPosition">
-        <xs:simpleType>
-          <xs:restriction base="xs:string">
-            <xs:enumeration value="HFP"/>
-            <xs:enumeration value="HFS"/>
-            <xs:enumeration value="HFDR"/>
-            <xs:enumeration value="HFDL"/>
-            <xs:enumeration value="FFP"/>
-            <xs:enumeration value="FFS"/>
-            <xs:enumeration value="FFDR"/>
-            <xs:enumeration value="FFDL"/>
-          </xs:restriction>
-        </xs:simpleType>
-      </xs:element>
-      <xs:element minOccurs="0" name="protocolName" type="xs:string"/>
-      <xs:element minOccurs="0" name="seriesDescription" type="xs:string"/>
-    </xs:all>
-  </xs:complexType>
-
-  <xs:complexType name="dicomParametersType">
-    <xs:all>
-      <xs:element minOccurs="1" name="studyInstanceUID" type="xs:string"/>
-      <xs:element minOccurs="0" name="seriesInstanceUIDRoot" type="xs:string"/>
-      <xs:element minOccurs="0" name="frameOfReferenceUID" type="xs:string"/>
-
-      <xs:element minOccurs="0" name="referencedImageSequence">
-        <xs:complexType>
-          <xs:sequence>
-            <xs:element minOccurs="0" maxOccurs="unbounded" name="referencedSOPInstanceUID" type="xs:string"/>
-          </xs:sequence>
-        </xs:complexType>
-      </xs:element>
-
-      <xs:element minOccurs="0" name="MRImageModule">
-        <xs:complexType>
-          <xs:all>
-            <xs:element minOccurs="0" name="imageType" type="xs:string"/>
-            <xs:element minOccurs="0" name="scanningSequence" type="xs:string"/>
-            <xs:element minOccurs="0" name="sequenceVariant" type="xs:string"/>
-            <xs:element minOccurs="0" name="scanOptions" type="xs:string"/>
-            <xs:element minOccurs="0" name="mrAcquisitionType" type="xs:string"/>
-            <xs:element minOccurs="0" name="echoTrainLength" type="xs:long"/>
-            <xs:element minOccurs="0" name="triggerTime" type="xs:float"/>
-            <xs:element minOccurs="0" name="flipAngle_deg" type="xs:long"/>
-            <xs:element minOccurs="0" name="freqEncodingDirection">
-              <xs:simpleType>
-                <xs:restriction base="xs:string">
-                  <xs:enumeration value="ROW"/>
-                  <xs:enumeration value="COL"/>
-                </xs:restriction>
-              </xs:simpleType>
-            </xs:element>
-          </xs:all>
-        </xs:complexType>
-      </xs:element>
-
-    </xs:all>
-  </xs:complexType>
-
-  <xs:complexType name="accelerationFactorType">
-    <xs:all>
-      <xs:element name="kspace_encoding_step_1" type="xs:unsignedShort"/>
-      <xs:element name="kspace_encoding_step_2" type="xs:unsignedShort"/>
-    </xs:all>
-  </xs:complexType>
-
-  <xs:simpleType name="calibrationModeType">
-    <xs:restriction base="xs:string">
-      <xs:enumeration value="embedded"/>
-      <xs:enumeration value="interleaved"/>
-      <xs:enumeration value="separate"/>
-      <xs:enumeration value="external"/>
-      <xs:enumeration value="other"/>
-    </xs:restriction>
-  </xs:simpleType>
-
-  <xs:simpleType name="interleavingDimensionType">
-    <xs:restriction base="xs:string">
-      <xs:enumeration value="phase"/>
-      <xs:enumeration value="repetition"/>
-      <xs:enumeration value="contrast"/>
-      <xs:enumeration value="average"/>
-      <xs:enumeration value="other"/>
-    </xs:restriction>
-  </xs:simpleType>
-
-  <xs:complexType name="parallelImagingType">
-        <xs:sequence>
-         <xs:element type="accelerationFactorType" name="accelerationFactor"/>
-         <xs:element maxOccurs="1" minOccurs="0" type="calibrationModeType" name="calibrationMode"/>
-         <xs:element maxOccurs="1" minOccurs="0" type="interleavingDimensionType" name="interleavingDimension"/>
-        </xs:sequence>
-  </xs:complexType>
-</xs:schema>
-
-</pre>
-</div>
-<div class="section" id="windows-7-64-bit-powershell-install-script">
-<h2><a class="toc-backref" href="#id18">Windows 7 (64-bit) Powershell Install Script</a></h2>
-<pre class="literal-block" id="powershell">
- #         S c r i p t   f o r   i n s t a l l i n g   t h e   r e q u i r e d   d e p e n d e n c i e d   f o r   
- #         t h e   I S M R M   R a w   D a t a   F o r m a t   o n   W i n d o w s . 
- #         
- #         P r e r e q u i s i t e s : 
- #                 -   W i n d o w s   7   ( 6 4 - b i t ) 
- #                 -   V i s u a l   S t u d i o   ( C / C + + )   i n s t a l l e d 
- # 
- 
- f u n c t i o n   d o w n l o a d _ f i l e ( $ u r l , $ d e s t i n a t i o n )   { 
-         # L e t ' s   s e t   u p   a   w e b c l i e n t   f o r   a l l   t h e   f i l e s   w e   h a v e   t o   d o w n l o a d 
-         $ c l i e n t   =   N e w - O b j e c t   S y s t e m . N e t . W e b C l i e n t 
-         $ c l i e n t . D o w n l o a d F i l e ( $ u r l , $ d e s t i n a t i o n ) 
- } 
- 
- f u n c t i o n   u n z i p ( $ z i p P a t h ,   $ d e s t i n a t i o n ) { 
-         $ s h e l l   =   n e w - o b j e c t   - c o m   s h e l l . a p p l i c a t i o n ; 
-         $ z i p   =   $ s h e l l . N a m e S p a c e ( $ z i p P a t h ) ; 
-         i f   ( ( T e s t - P a t h   - p a t h   $ d e s t i n a t i o n )   - n e   $ T r u e ) 
-         { 
-                 N e w - I t e m   $ d e s t i n a t i o n   - t y p e   d i r e c t o r y 
-         } 
-         f o r e a c h ( $ i t e m   i n   $ z i p . i t e m s ( ) ) { 
-                 $ s h e l l . N a m e s p a c e ( $ d e s t i n a t i o n ) . c o p y h e r e ( $ i t e m ) 
-         } 
- } 
- 
- f u n c t i o n   S e t - V S - E n v i r o n m e n t   ( )   { 
-         $ f i l e   =   ( G e t - C h i l d I t e m   E n v : V S 1 0 0 C O M N T O O L S ) . V a l u e   +   " v s v a r s 3 2 . b a t " 
-         $ c m d   =   " ` " $ f i l e ` "   &   s e t " 
-         c m d   / c   $ c m d   |   F o r e a c h - O b j e c t   { 
-               $ p ,   $ v   =   $ _ . s p l i t ( ' = ' ) 
-               S e t - I t e m   - p a t h   e n v : $ p   - v a l u e   $ v 
-       } 
- } 
- 
- f u n c t i o n   a d d _ p a t h ( $ p a t h n a m e )   { 
-         i f   ( $ e n v : p a t h     - m a t c h   [ r e g e x ] : : e s c a p e ( $ p a t h n a m e ) )   { 
-                 W r i t e - H o s t   " P a t h   $ p a t h   a l r e a d y   e x i s t s " 
-         }   e l s e   { 
-                 s e t x   P A T H   " $ e n v : p a t h ; $ p a t h n a m e "   - m 
-         } 
- } 
- 
- W r i t e - H o s t   " I S M R M R D   R a w   D a t a   F o r m a t   D e p e n d e n c i e s   I n s t a l l a t i o n " 
- 
- $ l i b r a r y _ l o c a t i o n   =   " C : \ M R I L i b r a r i e s " 
- $ d o w n l o a d _ l o c a t i o n   =   " C : \ M R I L i b r a r i e s \ d o w n l o a d s " 
- 
- # L e t ' s   f i r s t   c h e c k   i f   w e   h a v e   t h e   l i b r a r y   f o l d e r   a n d   i f   n o t   c r e a t e   i t 
- i f   ( ( T e s t - P a t h   - p a t h   $ l i b r a r y _ l o c a t i o n )   - n e   $ T r u e ) 
- { 
-         W r i t e - H o s t   " L i b r a r y   l o c a t i o n :   "   $ l i b r a r y _ l o c a t i o n   "   n o t   f o u n d ,   c r e a t i n g " 
-         N e w - I t e m   $ l i b r a r y _ l o c a t i o n   - t y p e   d i r e c t o r y 
- } 
- e l s e 
- { 
-         W r i t e - H o s t   " L i b r a r y   l o c a t i o n :   "   $ l i b r a r y _ l o c a t i o n   "   f o u n d . " 
- } 
- 
- # N o w   c h e c k   i f   w e   h a v e   t h e   l i b r a r y   f o l d e r   a n d   i f   n o t   c r e a t e   i t 
- i f   ( ( T e s t - P a t h   - p a t h   $ d o w n l o a d _ l o c a t i o n )   - n e   $ T r u e ) 
- { 
-         W r i t e - H o s t   " D o w n l o a d   l o c a t i o n :   "   $ d o w n l o a d _ l o c a t i o n   "   n o t   f o u n d ,   c r e a t i n g " 
-         N e w - I t e m   $ d o w n l o a d _ l o c a t i o n   - t y p e   d i r e c t o r y 
- } 
- e l s e 
- { 
-         W r i t e - H o s t   " D o w n l o a d   l o c a t i o n :   "   $ d o w n l o a d _ l o c a t i o n   "   f o u n d . " 
- } 
- 
- # D o w n l o a d   a n d   i n s t a l l   C M A K E 
- d o w n l o a d _ f i l e   " h t t p : / / w w w . c m a k e . o r g / f i l e s / v 2 . 8 / c m a k e - 2 . 8 . 9 - w i n 3 2 - x 8 6 . e x e "   ( $ d o w n l o a d _ l o c a t i o n   +   " \ c m a k e - 2 . 8 . 9 - w i n 3 2 - x 8 6 . e x e " ) 
- &   ( $ d o w n l o a d _ l o c a t i o n   +   " \ c m a k e - 2 . 8 . 9 - w i n 3 2 - x 8 6 . e x e " ) 
- 
- # D o w n l o a d   a n d   i n s t a l l   G i t 
- d o w n l o a d _ f i l e   " h t t p : / / m s y s g i t . g o o g l e c o d e . c o m / f i l e s / G i t - 1 . 7 . 1 1 - p r e v i e w 2 0 1 2 0 7 1 0 . e x e "   ( $ d o w n l o a d _ l o c a t i o n   +   " \ G i t - 1 . 7 . 1 1 - p r e v i e w 2 0 1 2 0 7 1 0 . e x e " ) 
- &   ( $ d o w n l o a d _ l o c a t i o n   +   " \ G i t - 1 . 7 . 1 1 - p r e v i e w 2 0 1 2 0 7 1 0 . e x e " ) 
- 
- # D o w n l o a d ,   u n z i p ,   a n d   i n s t a l l   H D F 5 
- d o w n l o a d _ f i l e   " h t t p : / / w w w . h d f g r o u p . o r g / f t p / H D F 5 / c u r r e n t / b i n / w i n d o w s / H D F 5 1 8 9 - w i n 6 4 - v s 1 0 - s h a r e d . z i p "   ( $ d o w n l o a d _ l o c a t i o n   +   " \ H D F 5 1 8 9 - w i n 6 4 - v s 1 0 - s h a r e d . z i p " ) 
- u n z i p   ( $ d o w n l o a d _ l o c a t i o n   +   " \ H D F 5 1 8 9 - w i n 6 4 - v s 1 0 - s h a r e d . z i p " )     " $ d o w n l o a d _ l o c a t i o n \ h d f 5 _ b i n a r i e s " 
- &   " $ d o w n l o a d _ l o c a t i o n \ h d f 5 _ b i n a r i e s \ H D F 5 - 1 . 8 . 9 - w i n 6 4 . e x e " 
- 
- # D o w n l o a d ,   i n s t a l l   H D F V i e w 
- d o w n l o a d _ f i l e   " h t t p : / / w w w . h d f g r o u p . o r g / f t p / H D F 5 / h d f - j a v a / h d f v i e w / h d f v i e w _ i n s t a l l _ w i n 6 4 . e x e "   ( $ d o w n l o a d _ l o c a t i o n   +   " \ h d f v i e w _ i n s t a l l _ w i n 6 4 . e x e " ) 
- &   ( $ d o w n l o a d _ l o c a t i o n   +   " \ h d f v i e w _ i n s t a l l _ w i n 6 4 . e x e " ) 
- 
-# D o w n l o a d   a n d   i n s t a l l   C o d e S y n t h e s i s   X S D 
- d o w n l o a d _ f i l e   " h t t p : / / w w w . c o d e s y n t h e s i s . c o m / d o w n l o a d / x s d / 3 . 3 / w i n d o w s / i 6 8 6 / x s d - 3 . 3 . m s i "   ( $ d o w n l o a d _ l o c a t i o n   +   " \ x s d - 3 . 3 . m s i " ) 
- &   ( $ d o w n l o a d _ l o c a t i o n   +   " \ x s d - 3 . 3 . m s i " ) 
- 
- # D o w n l o a d   a n d   i n s t a l l   b o o s t 
- d o w n l o a d _ f i l e   " h t t p : / / b o o s t p r o . c o m / d o w n l o a d / x 6 4 / b o o s t _ 1 _ 5 1 _ s e t u p . e x e "   ( $ d o w n l o a d _ l o c a t i o n   +   " \ b o o s t _ 1 _ 5 1 _ s e t u p . e x e " ) 
- &   ( $ d o w n l o a d _ l o c a t i o n   +   " \ b o o s t _ 1 _ 5 1 _ s e t u p . e x e " ) 
- 
- # F F T W 
- d o w n l o a d _ f i l e   " f t p : / / f t p . f f t w . o r g / p u b / f f t w / f f t w - 3 . 3 . 2 - d l l 6 4 . z i p "   ( $ d o w n l o a d _ l o c a t i o n   +   " \ f f t w - 3 . 3 . 2 - d l l 6 4 . z i p " ) 
- S e t - V S - E n v i r o n m e n t 
- u n z i p   ( $ d o w n l o a d _ l o c a t i o n   +   " \ f f t w - 3 . 3 . 2 - d l l 6 4 . z i p " )     " $ l i b r a r y _ l o c a t i o n \ f f t w 3 " 
- c d   " $ l i b r a r y _ l o c a t i o n \ f f t w 3 " 
- &   l i b   " / m a c h i n e : X 6 4 "   " / d e f : l i b f f t w 3 - 3 . d e f " 
- &   l i b   " / m a c h i n e : X 6 4 "   " / d e f : l i b f f t w 3 f - 3 . d e f " 
- &   l i b   " / m a c h i n e : X 6 4 "   " / d e f : l i b f f t w 3 l - 3 . d e f " 
- 
- # M e s s a g e   r e m i n d i n g   t o   s e t   p a t h s 
- W r i t e - H o s t   " P l e a s e   e n s u r e   t h a t   p a t h s   t o   t h e   f o l l o w i n g   l o c a t i o n s   a r e   i n   y o u r   P A T H   e n v i r o n m e n t   v a r i a b l e :   " 
- W r i t e - H o s t   "         -   B o o s t   l i b r a r i e s         ( t y p i c a l l y   C : \ P r o g r a m   F i l e s \ b o o s t \ b o o s t _ 1 _ 5 1 \ l i b ) " 
- W r i t e - H o s t   "         -   C o d e   S y n t h e s i s   X S D   ( t y p i c a l l y   C : \ P r o g r a m   F i l e s   ( x 8 6 ) \ C o d e S y n t h e s i s   X S D   3 . 3 \ b i n \ ; C : \ P r o g r a m   F i l e s   ( x 8 6 ) \ C o d e S y n t h e s i s   X S D   3 . 3 \ b i n 6 4 \ ) " 
- W r i t e - H o s t   "         -   F F T W   l i b r a r i e s           ( t y p i c a l l y   C : \ M R I L i b r a r i e s \ f f t w 3 ) " 
- W r i t e - H o s t   "         -   H D F 5   l i b r a r i e s           ( t y p i c a l l y   C : \ P r o g r a m   F i l e s \ H D F   G r o u p \ H D F 5 \ 1 . 8 . 9 \ b i n ) " 
- W r i t e - H o s t   "         -   I S M R M R D                         ( t y p i c a l l y   C : \ P r o g r a m   F i l e s \ i s m r m r d \ b i n ; C : \ P r o g r a m   F i l e s \ i s m r m r d \ b i n ) " 
- 
- 
- # N o w   d o w n l o a d   a n d   c o m p i l e   I S M R M R D 
- d o w n l o a d _ f i l e   " h t t p : / / s o u r c e f o r g e . n e t / p r o j e c t s / i s m r m r d / f i l e s / s r c / i s m r m r d _ l a t e s t . z i p "   ( $ d o w n l o a d _ l o c a t i o n   +   " \ i s m r m r d _ l a t e s t . z i p " ) 
- u n z i p   ( $ d o w n l o a d _ l o c a t i o n   +   " \ i s m r m r d _ l a t e s t . z i p " )     " $ l i b r a r y _ l o c a t i o n \ i s m r m r d " 
- c d   " $ l i b r a r y _ l o c a t i o n \ i s m r m r d " 
- N e w - I t e m   " b u i l d "   - t y p e   d i r e c t o r y 
- c d   b u i l d 
- &   c m a k e   " - G "   " V i s u a l   S t u d i o   1 0   W i n 6 4 "   " - D B O O S T _ R O O T = C : / P r o g r a m   F i l e s / b o o s t / b o o s t _ 1 _ 5 1 "   " - D X E R C E S C _ I N C L U D E _ D I R = C : / P r o g r a m   F i l e s   ( x 8 6 ) / C o d e S y n t h e s i s   X S D   3 . 3 / i n c l u d e / x e r c e s c "   " - D X E R C E S C _ L I B R A R I E S = C : / P r o g r a m   F i l e s   ( x 8 6 ) / C o d e S  [...]
- m s b u i l d   . \ I S M R M R D . s l n   / p : C o n f i g u r a t i o n = R e l e a s e
-</pre>
-</div>
-</div>
-</div>
-</body>
-</html>
diff --git a/cmake/FindFFTW3.cmake b/cmake/FindFFTW3.cmake
deleted file mode 100644
index eccfe9f..0000000
--- a/cmake/FindFFTW3.cmake
+++ /dev/null
@@ -1,93 +0,0 @@
-# - Try to find FFTW3.
-# Usage: find_package(FFTW3 [COMPONENTS [single double long-double threads]])
-#
-# Variables used by this module:
-#  FFTW3_ROOT_DIR             - FFTW3 root directory
-# Variables defined by this module:
-#  FFTW3_FOUND                - system has FFTW3
-#  FFTW3_INCLUDE_DIR          - the FFTW3 include directory (cached)
-#  FFTW3_INCLUDE_DIRS         - the FFTW3 include directories
-#                               (identical to FFTW3_INCLUDE_DIR)
-#  FFTW3[FL]?_LIBRARY         - the FFTW3 library - double, single(F), 
-#                               long-double(L) precision (cached)
-#  FFTW3[FL]?_THREADS_LIBRARY - the threaded FFTW3 library - double, single(F), 
-#                               long-double(L) precision (cached)
-#  FFTW3_LIBRARIES            - list of all FFTW3 libraries found
-
-# Copyright (C) 2009-2010
-# ASTRON (Netherlands Institute for Radio Astronomy)
-# P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
-#
-# This file is part of the LOFAR software suite.
-# The LOFAR software suite 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 LOFAR software suite 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 the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-#
-# $Id: FindFFTW3.cmake 15918 2010-06-25 11:12:42Z loose $
-
-# Use double precision by default.
-if(FFTW3_FIND_COMPONENTS MATCHES "^$")
-  set(_components double)
-else()
-  set(_components ${FFTW3_FIND_COMPONENTS})
-endif()
-
-# Loop over each component.
-set(_libraries)
-foreach(_comp ${_components})
-  if(_comp STREQUAL "single")
-    list(APPEND _libraries fftw3f)
-  elseif(_comp STREQUAL "double")
-    list(APPEND _libraries fftw3)
-  elseif(_comp STREQUAL "long-double")
-    list(APPEND _libraries fftw3l)
-  elseif(_comp STREQUAL "threads")
-    set(_use_threads ON)
-  else(_comp STREQUAL "single")
-    message(FATAL_ERROR "FindFFTW3: unknown component `${_comp}' specified. "
-      "Valid components are `single', `double', `long-double', and `threads'.")
-  endif(_comp STREQUAL "single")
-endforeach(_comp ${_components})
-
-# If using threads, we need to link against threaded libraries as well.
-if(_use_threads)
-  set(_thread_libs)
-  foreach(_lib ${_libraries})
-    list(APPEND _thread_libs ${_lib}_threads)
-  endforeach(_lib ${_libraries})
-  set(_libraries ${_thread_libs} ${_libraries})
-endif(_use_threads)
-
-# Keep a list of variable names that we need to pass on to
-# find_package_handle_standard_args().
-set(_check_list)
-
-# Search for all requested libraries.
-foreach(_lib ${_libraries})
-  string(TOUPPER ${_lib} _LIB)
-  find_library(${_LIB}_LIBRARY ${_lib}
-    HINTS ${FFTW3_ROOT_DIR} PATH_SUFFIXES lib)
-  mark_as_advanced(${_LIB}_LIBRARY)
-  list(APPEND FFTW3_LIBRARIES ${${_LIB}_LIBRARY})
-  list(APPEND _check_list ${_LIB}_LIBRARY)
-endforeach(_lib ${_libraries})
-
-# Search for the header file.
-find_path(FFTW3_INCLUDE_DIR fftw3.h 
-  HINTS ${FFTW3_ROOT_DIR} PATH_SUFFIXES include)
-mark_as_advanced(FFTW3_INCLUDE_DIR)
-list(APPEND _check_list FFTW3_INCLUDE_DIR)
-
-# Handle the QUIETLY and REQUIRED arguments and set FFTW_FOUND to TRUE if
-# all listed variables are TRUE
-include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(FFTW3 DEFAULT_MSG ${_check_list})
diff --git a/cmake/FindIsmrmrd.cmake b/cmake/FindIsmrmrd.cmake
deleted file mode 100644
index 3defaf4..0000000
--- a/cmake/FindIsmrmrd.cmake
+++ /dev/null
@@ -1,29 +0,0 @@
-# - Find ISMRMRRD
-#   ISMRMRD_FOUND        - True if ISMRMRD found.
-#   ISMRMRD_INCLUDE_DIR  - where to find ismrmrd.h, etc.
-#   ISMRMRD_LIBRARIES    - libismrmrd.so.
-#   ISMRMRD_XSD_LIBRARIES    - libismrmrd.so.
-#   ISMRMRD_SCHEMA_DIR   - Where to find ismrmrd.xsd
-
-FIND_PATH( ISMRMRD_INCLUDE_DIR ismrmrd.h
-    HINTS $ENV{ISMRMRD_HOME}
-    PATHS /usr/local/ /usr/include /usr/local/include
-    PATH_SUFFIXES ismrmrd ismrmrd/include include)
-
-FIND_PATH( ISMRMRD_SCHEMA_DIR ismrmrd.xsd
-    HINTS $ENV{ISMRMRD_HOME}
-    PATHS /usr/local/ /usr/include /usr/local/include
-    PATH_SUFFIXES ismrmrd ismrmrd/schema schema)
-
-FIND_LIBRARY( ISMRMRD_LIBRARIES
-              NAMES "ismrmrd"
-              PATHS  /usr/local/lib ${ISMRMRD_INCLUDE_DIR}/../lib /usr/lib )
-
-FIND_LIBRARY( ISMRMRD_XSD_LIBRARIES
-              NAMES "ismrmrd_xsd"
-              PATHS  /usr/local/lib ${ISMRMRD_INCLUDE_DIR}/../lib /usr/lib )
-
-INCLUDE( "FindPackageHandleStandardArgs" )
-FIND_PACKAGE_HANDLE_STANDARD_ARGS( "Ismrmrd" DEFAULT_MSG ISMRMRD_INCLUDE_DIR ISMRMRD_LIBRARIES ISMRMRD_SCHEMA_DIR)
-
-MARK_AS_ADVANCED( ISMRMRD_INCLUDE_DIR ISMRMRD_LIBRARIES ISMRMRD_SCHEMA_DIR)
diff --git a/cmake/FindXSD.cmake b/cmake/FindXSD.cmake
deleted file mode 100644
index ed83d61..0000000
--- a/cmake/FindXSD.cmake
+++ /dev/null
@@ -1,96 +0,0 @@
-# - Find CodeSource Xsd
-# This module can be used to find Xsd and it's include path
-# Variables:
-#	XSD_EXECUTABLE
-#	XSD_INCLUDE_DIR
-#	XSD_FOUND
-
-SET(XSD_FOUND FALSE)
-
-if(WIN32)
-	SET(__XSD_NAME xsd.exe)
-else(WIN32)
-	SET(__XSD_NAME xsdcxx xsd)
-endif(WIN32)
-
-if(XSD_INCLUDE_DIR)
-	#in cache already
-	SET(XSD_FOUND TRUE)
-else(XSD_INCLUDE_DIR)
-	IF (WIN32) 
-	find_program(XSD_EXECUTABLE NAMES "bin/${__XSD_NAME}" "${__XSD_NAME}"
-	     PATHS
-		 ${XSD_DIR}
-		 ${XSD_DIR}/bin
-	)
-	ELSE(WIN32)
-	find_file(XSD_EXECUTABLE NAMES ${__XSD_NAME}
-	     PATHS
-	         /usr/local/bin
-		 /usr/bin
-		 ${XSD_DIR}
-		 ${XSD_DIR}/bin
-	)
-	ENDIF(WIN32)
-
-	if(XSD_EXECUTABLE)
-		SET(XSD_FOUND TRUE)
-	else(XSD_EXECUTABLE)
-		SET(XSD_EXECUTABLE "xsd-NOTFOUND" CACHE FILE "xsd executable path")
-	endif(XSD_EXECUTABLE)
-
-	find_path(XSD_INCLUDE_DIR NAMES xsd 
-	    PATHS
-		${XSD_DIR}/include
-		/usr/include
-		/usr/local/include
-	)
-
-	if(XSD_INCLUDE_DIR)
-		SET(XSD_FOUND TRUE)
-	else(XSD_INCLUDE_DIR)
-		SET(XSD_INCLUDE_DIR "xsd-include-NOTFOUND" CACHE PATH "xsd include path")
-	endif(XSD_INCLUDE_DIR)
-endif(XSD_INCLUDE_DIR)
-
-FUNCTION(XSD_EXTRACT_OPTIONS _xsd_files _xsd_options)
-	foreach(current_arg ${ARGN})
-		IF(${current_arg} STREQUAL "OPTIONS")
-			SET(_XSD_DOING_OPTIONS TRUE)
-		else(${current_arg} STREQUAL "OPTIONS")
-			if(_XSD_DOING_OPTIONS)
-				SET(_xsd_options_p ${_xsd_options_p} ${current_arg})
-			else(_XSD_DOING_OPTIONS)
-				SET(_xsd_files_p ${_xsd_files_p} ${current_arg})
-			endif(_XSD_DOING_OPTIONS)
-		endif(${current_arg} STREQUAL "OPTIONS")
-	endforeach(current_arg)
-	SET(${_xsd_files} ${_xsd_files_p} PARENT_SCOPE)
-	SET(${_xsd_options} ${_xsd_options_p} PARENT_SCOPE)
-ENDFUNCTION(XSD_EXTRACT_OPTIONS)
-
-
-FUNCTION(WRAP_XSD XSD_SRCS XSD_INCLUDES OUT_PATH)
-	SET(OUTPUT_DIR  ${CMAKE_CURRENT_BINARY_DIR}/src/xsd)
-	FILE(MAKE_DIRECTORY ${OUTPUT_DIR})
-	SET(${XSD_INCLUDES} ${OUTPUT_DIR} PARENT_SCOPE)
-	XSD_EXTRACT_OPTIONS(xsd_files xsd_options ${ARGN})
-	FOREACH(it ${xsd_files})
-		STRING(REGEX REPLACE ".*/" "" BARE_XSD "${it}" )
-		STRING(REGEX REPLACE ".xsd" ".cxx" SOURCE "${BARE_XSD}" )
-		STRING(REGEX REPLACE ".xsd" ".hxx" HEADER "${BARE_XSD}" )
-		CONFIGURE_FILE(${it} ${OUT_PATH}/${BARE_XSD} COPY_ONLY)
-		SET(SOURCE ${OUTPUT_DIR}/${SOURCE})
-		SET(HEADER ${OUTPUT_DIR}/${HEADER})
-		ADD_CUSTOM_COMMAND(OUTPUT ${SOURCE} ${HEADER}
-				COMMAND ${XSD_EXECUTABLE} ${xsd_options} "--output-dir" ${OUTPUT_DIR} ${OUT_PATH}/${BARE_XSD}
-				DEPENDS ${it}
-				VERBATIM
-		)
-		set_source_files_properties(${HEADER} PROPERTIES GENERATED TRUE)
-		set_source_files_properties(${SOURCE} PROPERTIES GENERATED TRUE)
-		SET(_XSD_SRCS ${_XSD_SRCS} ${SOURCE} ${HEADER})
-	ENDFOREACH(it)
-	SET(${XSD_SRCS} ${_XSD_SRCS} PARENT_SCOPE)
-ENDFUNCTION(WRAP_XSD)
-
diff --git a/cmake/FindXercesC.cmake b/cmake/FindXercesC.cmake
deleted file mode 100644
index 2a40c5b..0000000
--- a/cmake/FindXercesC.cmake
+++ /dev/null
@@ -1,39 +0,0 @@
-# This module defines
-# XERCESC_INCLUDE_DIR, where to find ptlib.h, etc.
-# XERCESC_LIBRARIES, the libraries to link against to use pwlib.
-# XERCESC_FOUND, If false, don't try to use pwlib.
-
-FIND_PATH(XERCESC_INCLUDE_DIR xercesc/dom/DOM.hpp
-  "[HKEY_CURRENT_USER\\software\\xerces-c\\src]"
-  "[HKEY_CURRENT_USER\\xerces-c\\src]"
-  $ENV{XERCESCROOT}/src/
-  /usr/local/include
-  /usr/include
-  /opt/local/include
-)
-
-FIND_LIBRARY(XERCESC_LIBRARIES
-  NAMES 
-    xerces-c
-  PATHS
-    "[HKEY_CURRENT_USER\\software\\xerces-c\\lib]"
-    "[HKEY_CURRENT_USER\\xerces-c\\lib]"
-    $ENV{XERCESCROOT}/lib
-    /usr/local/lib
-    /usr/lib
-    /opt/local/lib
-)
-
-# if the include a the library are found then we have it
-IF(XERCESC_INCLUDE_DIR)
-  IF(XERCESC_LIBRARIES)
-    SET( XERCESC_FOUND "YES" )
-  ENDIF(XERCESC_LIBRARIES)
-ENDIF(XERCESC_INCLUDE_DIR)
-
-
-
-MARK_AS_ADVANCED(
-  XERCESC_INCLUDE_DIR
-  XERCESC_LIBRARIES
-) 
\ No newline at end of file
diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt
deleted file mode 100644
index baf0126..0000000
--- a/doc/CMakeLists.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-find_package(Doxygen)
-if(DOXYGEN_FOUND)
-	add_subdirectory(doxygen)
-else(DOXYGEN_FOUND)
-	MESSAGE("Doxygen not found. Will not be able to build documentation")
-endif(DOXYGEN_FOUND)
\ No newline at end of file
diff --git a/doc/README.rst b/doc/README.rst
deleted file mode 100644
index eb4922f..0000000
--- a/doc/README.rst
+++ /dev/null
@@ -1,531 +0,0 @@
-ISMRM Raw Data Format (ISMRMRD)
-*******************************
-
-.. contents::
-
-Preamble
----------
-
-A prerequisite for sharing magnetic resonance (imaging) reconstruction algorithms and code is a common raw data format. This document describes such a common raw data format and attempts to capture the data fields that are require to describe enough details about the magnetic resonance experiment to reconstruct images from the data.
-
-This standard was developed by a subcommittee of the ISMRM Sedona 2013 workshop. Comments and requests for additions/modifications can be sent to:
-
-* Michael S. Hansen (michael DOT hansen AT nih DOT gov)
-* Wally Block (wblock AT cae DOT wisc DOT edu)
-* Mark Griswold (mag46 AT case DOT edu)
-* Brian Hargreaves (bah AT stanford DOT edu)
-* Peter Boernert (peter DOT boernert AT philips DOT com)
-* Sebastian Kozerke (kozerke AT biomed DOT ee DOT ethz DOT ch)
-* Craig Meyer (cmeyer AT virginia DOT edu)
-* Doug Noll (dnoll AT umich DOT edu)
-* Jim Pipe (Jim.Pipe AT DignityHealth DOT org)
-
-Developers/Contributors
-------------------------
-
-* Michael S. Hansen, National Institutes of Health, USA
-* Nick Zwart, Barrow Neurological Institute, Phoenix, Arizona
-* Souheil Inati, National Institutes of Health, USA
-* Joe Naegele, National Institutes of Health, USA
-* Kaveh Vahedipour, Juelich Research Centre, Juelich, Germany
-
-Obtaining and Installing
--------------------------
-
-The source code, examples, and example datasets can be found on the ISMRM Raw Data Sourceforge website_.
-
-.. _website: http://sourceforge.net/projects/ismrmrd
-
-To download the source code, clone the git archive::
-
-  git clone git://git.code.sf.net/p/ismrmrd/code ismrmrd-code
-
-Alternatively download the zip file with the source code::
-
-  wget https://sourceforge.net/projects/ismrmrd/files/src/ismrmrd_latest.zip
-
-API Documentation can be found at http://ismrmrd.sourceforge.net/api.
-
-
-Dependencies
-.............
-
-The ISMRM Raw Data format is described by an XML schema_ and some C-style structs with fixed memory layout and as such does not have dependencies. However, it uses HDF5 files for storage and a C++ library for reading and writing the ISMRMRD files is included in this distribution. Furthermore, since the XML header is defined with an XML schema_, we encourage using XML data binding when writing software using the format. In the ISMRMRD distribution we use the CodeSynthesis XSD (http://www. [...]
-
-
-* HDF5 (version 1.8 or higher) libraries. Available from http://www.hdfgroup.org/downloads/index.html.
-* Boost (http://www.boost.org/)
-* CodeSynthesis XSD (http://www.codesynthesis.com/products/xsd/)
-* Xerces-C XML parser library (http://xerces.apache.org/xerces-c/)
-* Cmake build tool (http://www.cmake.org/)
-* Doxygen if you would like to generate API documentation (http://www.doxygen.org)
-* Git if you would like to use the source code archive (http://git-scm.com/)
-* FFTW if you would like to compile some of the example applications
-  (http://www.fftw.org)
-
-.. note:: It is only necessary to install the dependencies if you wish to develop compiled C/C++ software, which uses the ISMRMRD format. The format can be read in Matlab without installing any additional software.
-
-
-Linux installation
-...................
-
-The dependencies mentioned above should be included in most linux distributions. On Ubuntu you can install all required dependencies with::
-
-  sudo apt-get install libhdf5-serial-dev h5utils cmake cmake-curses-gui libboost-dev libboost-thread-dev libboost-system-dev libxerces-c-dev xsdcxx doxygen git
-
-After installation of dependencies, the library can be installed with::
-
-  git clone git://git.code.sf.net/p/ismrmrd/code ismrmrd-code
-  cd ismrmrd-code/
-  mkdir build
-  cd build
-  cmake ../
-  make
-  sudo make install
-
-Last command will install the library in ``/usr/local/ismrmrd``.
-
-Mac OSX Installation
-.....................
-
-There are numerous different package management systems for Mac. In this example, we have used MacPorts (http://www.macports.org/). First install the dependencies available in MacPorts::
-
-   sudo port install wget hdf5-18 h5utils boost xercesc3 git-core git-extras cmake doxygen
-
-Next install CodeSynthesis XSD (http://www.codesynthesis.com/products/xsd/)::
-
-   wget http://www.codesynthesis.com/download/xsd/3.3/macosx/i686/xsd-3.3.0-i686-macosx.tar.bz2
-   tar -xzf xsd-3.3.0-i686-macosx.tar.bz2
-   cd xsd-3.3.0-i686-macosx
-   sudo cp bin/xsd /usr/local/bin/
-   sudo cp -r libxsd/xsd /usr/local/include/
-
-See faq_ for details on problems on some Mac OSX Lion systems.
-
-Last step is to download and compile::
-
-   git clone git://git.code.sf.net/p/ismrmrd/code ismrmrd-code
-   cd ismrmrd-code/
-   mkdir build
-   cd build/
-   cmake ../
-   make
-   sudo make install
-
-Last command will install the library in ``/usr/local/ismrmrd``.
-
-
-Windows Installation
-.....................
-
-Setting up a Windows development environment is usually a bit more challenging than working on Unix platforms where most library dependencies are easily installed with package management systems (see above). The general Windows installation instructions (you may have to make adjustments for your setup) is as follows:
-
-* Starting with a Windows 7 (64-bit) machine with Visual Studio 2010 installed.
-
-* Install CMake (http://www.cmake.org/files/v2.8/cmake-2.8.9-win32-x86.exe)
-
-* Install Git (http://msysgit.googlecode.com/files/Git-1.7.11-preview20120710.exe)
-
-* Install HDF5 (http://www.hdfgroup.org/ftp/HDF5/current/bin/windows/HDF5189-win64-vs10-shared.zip)
-
-* Install HDFView (http://www.hdfgroup.org/ftp/HDF5/hdf-java/hdfview/hdfview_install_win64.exe)
-
-* Install CodeSynthesis XSD (http://www.codesynthesis.com/download/xsd/3.3/windows/i686/xsd-3.3.msi)
-
-* Install Boost (http://boostpro.com/download/x64/boost_1_51_setup.exe)
-
-  - Just install everything for VS2010 and worry about which versions you need later.
-
-* Install FFTW (ftp://ftp.fftw.org/pub/fftw/fftw-3.3.2-dll64.zip)
-
-  - You need to create ``.lib`` files manually after installing. See instructions at http://www.fftw.org/install/windows.html
-
-* Make sure the paths to your new libraries are in your PATH environment variable:
-
-  - Boost libraries  (typically ``C:\Program Files\boost\boost_1_51\lib``)
-  - Code Synthesis XSD (typically ``C:\Program Files (x86)\CodeSynthesis XSD 3.3\bin\;C:\Program Files (x86)\CodeSynthesis XSD 3.3\bin64\``)
-  - FFTW libraries (typically ``C:\MRILibraries\fftw3``)
-  - HDF5 libraries (typically ``C:\Program Files\HDF Group\HDF5\1.8.9\bin``)
-  - ISMRMRD (typically ``C:\Program Files\ismrmrd\bin;C:\Program Files\ismrmrd\bin``)
-
-This can seem a bit daunting, we have included a Windows powershell_ script, which you can use to guide you through the installation process.
-
-After installing all dependencies, download the code, e.g. from a git bash shell::
-
-   git clone git://git.code.sf.net/p/ismrmrd/code ismrmrd-code
-   cd ismrmrd-code/
-   mkdir build
-   cd build/
-   cmake-gui.exe
-
-Last command will open CMake's graphical user interface. Hit the configure button and deal with the dependencies that CMake is unable to find. Hit configure again and repeat the process until CMake has enough information to configure. Once the configuration is complete, you can hit generate to generate a Visual Studio project, which you can open and use to build ISMRMRD. There are step-by-step commands included in the powershell_ script below to guide you through the CMake configuration  [...]
-
-    cmake -G"Visual Studio 10 Win64" -DBOOST_ROOT=C:/Program Files/boost/boost_1_51 \
-	-DXERCESC_INCLUDE_DIR=C:/Program Files (x86)/CodeSynthesis XSD 3.3/include/xercesc \
-	-DXERCESC_LIBRARIES=C:/Program Files (x86)/CodeSynthesis XSD 3.3/lib64/vc-10.0/xerces-c_3.lib \
-	-DXSD_DIR=C:/Program Files (x86)/CodeSynthesis XSD 3.3 \
-	-DFFTW3_INCLUDE_DIR=C:/MRILibraries/fftw3 \
-	-DFFTW3F_LIBRARY=C:/MRILibraries/fftw3/libfftw3f-3.lib ../
-
-Again, you may have to adjust for your specific installation paths. After generating the Visual Studio project, you can build from a Visual Studio Command Prompt with::
-
-   msbuild .\ISMRMRD.sln /p:Configuration=Release
-
-
-Overview
----------
-
-The raw data format combines a mix of flexible data structures (XML header) and fixed structures (equivalent to C-structs). A raw data set consist mainly of 2 sections:
-
-1. A flexible XML format document that can contain an arbitrary number of fields and accommodate everything from simple values (b-values, etc.) to entire vendor protocols, etc. This purpose of this XML document is to provide parameters that may be meaningful for some experiments but not for others. This XML format is defined by an XML Schema Definition file (ismrmrd.xsd).
-2. Raw data section. This section contains all the acquired data in the experiment. Each data item is preceded by a C-struct with encoding numbers, etc. Following this data header is a channel header and data for each acquired channel. The raw data headers are defined in a C/C++ header file (ismrmrd.h)
-
-In addition to these sections, the ISMRMRD format also specifies an image header for storing reconstructed images and the accompanying C++ library provides a convenient way of writing such images into HDF5 files along with generic arrays for storing less well defined data structures, e.g. coil sensitivity maps or other calibration data.
-
-Flexible Data Header
-.....................
-
-The flexible data structure is defined by the xml schema definition in ``schema/ismrmrd.xsd`` (schema_ is included in appendix below).
-
-An example of an XML file for a Cartesian 3D acquisition could look like:
-
-.. include:: ../schema/ismrmrd_example.xml
-   :literal:
-
-The most critical elements for image reconstruction are contained in the ``<encoding>`` section of the document, which describes the encoded spaced and also the target reconstructed space. Along with the ``<encodingLimits>`` this section allows the reconstruction program to determine matrix sizes, oversampling factors, partial Fourier, etc. In the example above, data is acquired with two-fold oversampling in the read-out (``x``) direction, which is reflected in the larger matrix size in  [...]
-
-::
-
-   0                                     70                                         139
-   |-------------------------------------|-------------------------------------------|
-                         ****************************************************
-                         ^               ^                                  ^
-                         0              28                                  83
-
-After FFT, only the central 116 lines are kept, i.e. there is a reduced field of view in the phase encoding direction. Center and encoding limits for the readout dimension is not given in the XML header. This is to accommodate sequences where the center of the readout may change from readout to readout (alternating directions of readout). There is a field on the individual data headers (see below) to indicate the center of the readout.
-
-An experiment can have multiple encoding spaces and it is possible to indicate on each acquired data readout, which encoding space the data belongs to (see below).
-
-In addition to the defined field in the xml header, it is possible to add an arbitrary number of user defined parameters to accommodate special sequence parameters. Please consult the xml schema_ to see how user parameters are defined. Briefly, the XML header can have a section at the end which looks like:
-
-::
-
-   <userParameters>
-     <userParameterLong>
-       <name>MyVar1</name><value>1003</value>
-     </userParameterLong>
-     <userParameterLong>
-       <name>MyVar2</name><value>1999</value>
-     </userParameterLong>
-     <userParameterDouble>
-       <name>MyDoubleVar</name><value>87.6676</value>
-     </userParameterDouble>
-   </userParameters>
-
-
-Fixed Data structures
-......................
-
-Each raw data acquisition is preceded by the following fixed layout structure:
-
-.. include:: ../ismrmrd.h
-   :literal:
-   :start-line: 125
-   :end-line: 150
-
-Where EncodingCounters are defined as:
-
-.. include:: ../ismrmrd.h
-   :literal:
-   :start-line: 109
-   :end-line: 121
-
-The interpretation of some of these fields may vary from sequence to sequence, i.e. for a Cartesian sequence, ``kspace_encode_step_1`` would be the phase encoding step, for a spiral sequence where phase encoding direction does not make sense, it would be the spiral interleave number. The ``encoding_space_ref`` enables the user to tie an acquisition to a specific encoding space (see above) in case there are multiple, e.g. in situations where a calibration scan may be integrated in the acq [...]
-
-The flags field is a bit mask, which in principle can be used freely by the user, but suggested flag values are given in ``ismrmrd.h``, it is recommended not to use already designated flag bits for custom purposes. There are a set of bits reserved for prototyping (bits 57-64), please see ``ismrmrd.h`` for details.
-
-The header contains a ``trajectory_dimensions`` field. If the value of this field is larger than 0, it means that trajectories are stored with each individual acquisition. For a 2D acquisition, the ``trajectory_dimensions`` would typically be 2 and the convention (for memory layout) is that the header is followed immediately by the trajectory before the complex data. There is an example of how this memory layout could be implemented with a C++ class in the ``ismrmrd.h`` file:
-
-::
-
-   class Acquisition
-   {
-
-   //....
-
-   AcquisitionHeader head_; //Header, see above
-
-   float* traj_;            //Trajectory, elements = head_.trajectory_dimensions*head_.number_of_samples
-                            //   [kx,ky,kx,ky.....]        (for head_.trajectory_dimensions = 2)
-                            //   [kx,ky,kz,kx,ky,kz,.....] (for head_.trajectory_dimensions = 3)
-
-   float* data_;            //Actual data, elements = head_.number_of_samples*head_.active_channels*2
-                            //   [re,im,re,im,.....,re,im,re,im,.....,re,im,re,im,.....]
-                            //    ---channel 1-------channel 2---------channel 3-----
-
-   };
-
-This suggested memory layout is only a suggestion. The HDF5 interface (see below) can be used to read the data into many different data structures. In fact, the user can choose to read only part of the header or not read the data, etc.
-
-As mentioned above, the ISMRMRD format also suggests a way to store reconstructed images (or maybe image data used for calibration). An ``ImageHeader`` structure is defined in ``ismrmrd.h``:
-
-.. include:: ../ismrmrd.h
-   :literal:
-   :start-line: 293
-   :end-line: 319
-
-In a similar fashion to the raw data acquisition data, the intention is to store a header followed by the image data. Since image data can be in several different format (e.g. float, complex, etc.), the memory layout is less well defined but can be described as::
-
-  template <typename T> class Image {
-
-  ImageHeader head_;     //ImageHeader as defined above
-  T* data_;              //Data, array of size (matrix_size[0]*matrix_size[1]*matrix_size[2]*channels),
-                         //first spatial dimension is fastest changing array index, channels outer most (slowest changing).
-  };
-
-
-
-File Storage
--------------
-
-The ISMRM Raw Data format is stored in HDF5 format. Details on this format can be found at the HDF5_ website. Briefly it is a hierarchical data format (much like a file system), which can contain multiple variable organized in groups (like folders in a file system). The variables can contain arrays of data values, custom defined structs, or simple text fields. It is the convention (but not a requirement) that the ISMRMRD datasets are stored in a group called ``/dataset``. The XML configu [...]
-
-::
-
-   >> data = h5read('simple_gre.h5', '/dataset/data');
-   >> data
-
-   data =
-
-   head: [1x1 struct]
-   traj: {1x1281 cell}
-   data: {1x1281 cell}
-
-    >> data.head
-
-    ans =
-
-                   version: [1x1281 uint16]
-                     flags: [1x1281 uint64]
-           measurement_uid: [1x1281 uint32]
-              scan_counter: [1x1281 uint32]
-    acquisition_time_stamp: [1x1281 uint32]
-     physiology_time_stamp: [3x1281 uint32]
-         number_of_samples: [1x1281 uint16]
-        available_channels: [1x1281 uint16]
-           active_channels: [1x1281 uint16]
-              channel_mask: [16x1281 uint64]
-               discard_pre: [1x1281 uint16]
-              discard_post: [1x1281 uint16]
-             center_sample: [1x1281 uint16]
-        encoding_space_ref: [1x1281 uint16]
-     trajectory_dimensions: [1x1281 uint16]
-            sample_time_us: [1x1281 single]
-                  position: [3x1281 single]
-                quaternion: [4x1281 single]
-    patient_table_position: [3x1281 single]
-                       idx: [1x1 struct]
-                  user_int: [8x1281 int32]
-                user_float: [8x1281 single]
-
-    >>
-
-The HDF5 file format can be access from C, C++, and java using the libraries provided on the HDF5 website. The ISMRMRD distribution also comes with some C++ wrappers that can be used for easy access (read and write) from C++ programs. See below.
-
-In addition to storing acquisition data and images as defined by the headers above, the HDF5 format also enables storage of generic multi-dimensional arrays. The ISMRMRD format does not explicitly define how such data should be stored, but leaves it open for the user to add variables and data as dictated by a given application.
-
-.. _HDF5: http://www.hdfgroup.org/HDF5/
-
-C++ Support Library
---------------------
-
-To enable easy prototyping of C++ software using the ISMRMRD data format, a simple C++ wrapper class is provided (defined in ``ismrmrd_hdf5.h``):
-
-::
-
-   class EXPORTISMRMRD IsmrmrdDataset
-   {
-    public:
-
-	IsmrmrdDataset(const char* filename, const char* groupname, bool create_file_if_needed = true)
-	: filename_(filename)
-	, groupname_(groupname)
-	, file_open_(false)
-	, dataset_open_(false)
-	, create_file_if_needed_(create_file_if_needed)
-	{
-		std::ifstream ifile(filename_.c_str());
-		file_exists_ = ifile;
-
-		if (openHDF5File() < 0) {
-			std::cerr << "IsmrmrdDataset: Error opening HDF file." << std::endl;
-		}
-
-		if (!linkExists(groupname_.c_str())) {
-			if (createGroupForDataset(groupname_.c_str()) < 0) {
-				std::cerr << "IsmrmrdDataset: Error create HDF5 group." << std::endl;
-			}
-		}
-
-		xml_header_path_ = groupname_ + std::string("/xml");
-		data_path_ = groupname_ + std::string("/data");
- 	}
-
-	int appendAcquisition(Acquisition* a);
-	boost::shared_ptr<Acquisition> readAcquisition(unsigned long index = 0);
-	unsigned long getNumberOfAcquisitions();
-
-	int writeHeader(std::string& xml);
-	boost::shared_ptr<std::string> readHeader();
-
-	template <typename T> int appendImage(Image<T>& m, const char* varname);
-	template <typename T> boost::shared_ptr< Image<T> > readImage(const char* varname, unsigned long index = 0);
-
-	int appendImageHeader(ImageHeader& h, const char* varname);
-	boost::shared_ptr< ImageHeader > readImageHeader(const char* varname, unsigned long index = 0);
-
-	template <typename T> int appendArray(NDArrayContainer<T>& a, const char* varname);
-	template <typename T> int appendArray(std::vector<unsigned int>& dimensions, T* data, const char* varname);
-	template <typename T> boost::shared_ptr< NDArrayContainer<T> > readArray(const char* varname, unsigned long index = 0);
-    };
-
-
-Using this wrapper, C++ applications can be programmed as:
-
-::
-
-   boost::shared_ptr<ISMRMRD::IsmrmrdDataset> ismrmrd_dataset(new ISMRMRD::IsmrmrdDataset(hdf5_in_data_file,hdf5_in_group));
-   boost::shared_ptr<std::string> xml_config = ismrmrd_dataset->readHeader();
-
-   //Do something with the header
-
-   unsigned long acquisitions = ismrmrd_dataset->getNumberOfAcquisitions();
-
-   for (unsigned long int i = 0; i < acquisitions; i++) {
-     boost::shared_ptr<ISMRMRD::Acquisition> acq_tmp = ismrmrd_dataset->readAcquisition(i);
-     //Do something with the data
-   }
-
-Since the XML part of the header is defined in the ``schema/ismrmrd.xsd`` file, it is possible to use XML data binding tools such as CodeSynthesys XSD to generate a C++ class representation of the header for easy access to the fields. The ``cmake`` build files that accompany the ISMRMRD distribution automatically tries to find CodeSynthesis XSD and generate such a binding. With the C++ representation of the header it can be parsed with something like:
-
-::
-
-   xml_schema::properties props;
-   props.schema_location ("http://www.ismrm.org/ISMRMRD",std::string("/full/path/to/ismrmrd.xsd"));
-   std::istringstream str_stream(xml, std::stringstream::in);
-   boost::shared_ptr<ISMRMRD::ismrmrdHeader> cfg;
-
-   try {
-      cfg = boost::shared_ptr<ISMRMRD::ismrmrdHeader>(ISMRMRD::ismrmrdHeader_ (str_stream,0,props));
-   }  catch (const xml_schema::exception& e) {
-      std::cout << "Failed to parse XML Parameters: " << e.what() << std::endl;
-   }
-
-   //Use the configuration, e.g.:
-   std::cout << "Number of encoding spaces: " << cfg->encoding().size() << std::endl;
-
-Again, this is not a requirement for using the ISMRMRD format, the XML can be parsed with numerous other xml parsing libraries. The schema file ``schema/ismrmrd.xsd`` gives the user the option of validating the XML header before parsing, which is recommended to reduce the chance of hard to detect errors in your code due to missing or malformed parameters.
-
-C++ Example Applications
-..........................
-
-The distribution includes two example applications, one that creates a simple 2D single-channel dataset from scratch and one that reconstructs this dataset (you need FFTW installed to compile these test applications). The data generation application looks like this (``test_create_dataset.cpp``):
-
-.. include:: ../examples/c++/test_create_dataset.cpp
-   :literal:
-   :start-after: /* MAIN APPLICATION */
-
-To reconstruct this synthetic dataset, you can use the test reconstruction application (``test_recon_dataset.cpp``):
-
-.. include:: ../examples/c++/test_recon_dataset.cpp
-   :literal:
-   :start-after: /* MAIN APPLICATION */
-
-
-Matlab Example Code and Datasets
---------------------------------
-
-The ``examples`` folder contains some matlab code to illustrate simple interaction with the ISMRMRD data format. The examples use test data sets, wich can be downloaded from the Sourceforge website_. Go to the ``examples/data`` folder and type the following to download the data::
-
-  wget https://sourceforge.net/projects/ismrmrd/files/data/3D_partial_fourier.h5
-  wget https://sourceforge.net/projects/ismrmrd/files/data/simple_gre.h5
-  wget https://sourceforge.net/projects/ismrmrd/files/data/simple_spiral.h5
-
-
-For instance, to reconstruct a 2D Cartesian acquisition (10 image repetitions), type (from the ``examples/matlab`` folder):
-
-::
-
-   >> images = simple_cartesian_recon('../data/simple_gre.h5');
-   Reconstructing image 1....done
-   Reconstructing image 2....done
-   Reconstructing image 3....done
-   Reconstructing image 4....done
-   Reconstructing image 5....done
-   Reconstructing image 6....done
-   Reconstructing image 7....done
-   Reconstructing image 8....done
-   Reconstructing image 9....done
-   Reconstructing image 10....done
-   >>
-
-You should see one of the reconstructed images display. An example is also given of a 3D acquisition with partial Fourier, phase and slice oversampling, etc. Reconstruct this dataset with:
-
-::
-
-   >> images = simple_cartesian_recon('../data/3D_partial_fourier.h5');
-   Reconstructing image 1....done
-
-The center slice of the volume should be displayed at the end of the reconstruction.
-
-Finally, there is also a spiral dataset. This dataset illustrates how the flexible section of the ``<trajectoryDescription>`` can be used to add user defined parameters and an identifier to describe the trajectory. This dataset is also an example of storing the trajectory with the data for direct reconstruction. Reconstruct this dataset with:
-
-::
-
-   >> images = simple_spiral_recon('../data/simple_spiral.h5');
-   Reconstructing image 1....done
-   Reconstructing image 2....done
-   Reconstructing image 3....done
-   Reconstructing image 4....done
-   Reconstructing image 5....done
-   Reconstructing image 6....done
-   Reconstructing image 7....done
-   Reconstructing image 8....done
-   Reconstructing image 9....done
-   Reconstructing image 10....done
-   >>
-
-Appendix
----------
-
-Frequently Asked Questions
-...........................
-.. _faq:
-
-*   I am trying to compile on Mac OSX Lion and I am getting strange errors.
-
-	in version 3.3.0 of CodeSynthesis XSD there is a problem with the clang compiler. It can build with clang on os x 10.7 (Lion) by editing
-	`/usr/local/include/xsd/cxx/zc-istream.txx`. Change line 35 from::
-
-      		setg (b, b, e);
-
-	to::
-
-      		std::streambuf::setg (b, b, e);
-
-	See also:
-	http://codesynthesis.com/pipermail/xsd-users/2011-May/003283.html
-
-XML Schema Definition
-......................
-.. _schema:
-
-.. include:: ../schema/ismrmrd.xsd
-   :literal:
-
-Windows 7 (64-bit) Powershell Install Script
-.............................................
-.. _powershell:
-
-.. include:: WindowsISMRMRDInstallDependencies.ps1
-   :literal:
diff --git a/doc/TODO.rst b/doc/TODO.rst
deleted file mode 100644
index 7f68a55..0000000
--- a/doc/TODO.rst
+++ /dev/null
@@ -1,19 +0,0 @@
-TODO
--------------------------
-
-* Make More Example Datasets
-
-	- Radial
-	- Diffusion
-	- Phase contrast flow
-
-* Flag definitions.
-
-	- Do we need more flags?
-
-* Converters for vendor raw data 
-
-	- Siemens (Hansen)
-	- Philips (Kozerke? Boernert?)
-	- GE (Hargreaves?)
-	- Bruker (Hansen?)
diff --git a/doc/WindowsISMRMRDInstallDependencies.ps1 b/doc/WindowsISMRMRDInstallDependencies.ps1
deleted file mode 100644
index d50c91e..0000000
Binary files a/doc/WindowsISMRMRDInstallDependencies.ps1 and /dev/null differ
diff --git a/doc/doxygen/CMakeLists.txt b/doc/doxygen/CMakeLists.txt
deleted file mode 100644
index caa1691..0000000
--- a/doc/doxygen/CMakeLists.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-if(DOXYGEN_FOUND)
-	configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
-	add_custom_target(apidoc ${DOXYGEN_EXECUTABLE}
-	${CMAKE_CURRENT_BINARY_DIR}/Doxyfile WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
-		COMMENT "Generating API documentation with Doxygen" VERBATIM)
-else(DOXYGEN_FOUND)
-	MESSAGE("Doxygen not found. Will not be able to build documentation")
-endif(DOXYGEN_FOUND)
\ No newline at end of file
diff --git a/doc/doxygen/Doxyfile.in b/doc/doxygen/Doxyfile.in
deleted file mode 100644
index b11e86e..0000000
--- a/doc/doxygen/Doxyfile.in
+++ /dev/null
@@ -1,1757 +0,0 @@
-# Doxyfile 1.7.5.1
-
-# This file describes the settings to be used by the documentation system
-# doxygen (www.doxygen.org) for a project.
-#
-# All text after a hash (#) is considered a comment and will be ignored.
-# The format is:
-#       TAG = value [value, ...]
-# For lists items can also be appended using:
-#       TAG += value [value, ...]
-# Values that contain spaces should be placed between quotes (" ").
-
-#---------------------------------------------------------------------------
-# Project related configuration options
-#---------------------------------------------------------------------------
-
-# This tag specifies the encoding used for all characters in the config file
-# that follow. The default is UTF-8 which is also the encoding used for all
-# text before the first occurrence of this tag. Doxygen uses libiconv (or the
-# iconv built into libc) for the transcoding. See
-# http://www.gnu.org/software/libiconv for the list of possible encodings.
-
-DOXYFILE_ENCODING      = UTF-8
-
-# The PROJECT_NAME tag is a single word (or sequence of words) that should
-# identify the project. Note that if you do not use Doxywizard you need
-# to put quotes around the project name if it contains spaces.
-
-PROJECT_NAME           = ISMRMRD
-
-# The PROJECT_NUMBER tag can be used to enter a project or revision number.
-# This could be handy for archiving the generated documentation or
-# if some version control system is used.
-
-PROJECT_NUMBER         =
-
-# Using the PROJECT_BRIEF tag one can provide an optional one line description
-# for a project that appears at the top of each page and should give viewer
-# a quick idea about the purpose of the project. Keep the description short.
-
-PROJECT_BRIEF          = ISMRM Raw Data Format
-
-# With the PROJECT_LOGO tag one can specify an logo or icon that is
-# included in the documentation. The maximum height of the logo should not
-# exceed 55 pixels and the maximum width should not exceed 200 pixels.
-# Doxygen will copy the logo to the output directory.
-
-PROJECT_LOGO           =
-
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
-# base path where the generated documentation will be put.
-# If a relative path is entered, it will be relative to the location
-# where doxygen was started. If left blank the current directory will be used.
-
-OUTPUT_DIRECTORY       = doc
-
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
-# 4096 sub-directories (in 2 levels) under the output directory of each output
-# format and will distribute the generated files over these directories.
-# Enabling this option can be useful when feeding doxygen a huge amount of
-# source files, where putting all generated files in the same directory would
-# otherwise cause performance problems for the file system.
-
-CREATE_SUBDIRS         = NO
-
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all
-# documentation generated by doxygen is written. Doxygen will use this
-# information to generate all constant output in the proper language.
-# The default language is English, other supported languages are:
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
-# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
-# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
-# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
-# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak,
-# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
-
-OUTPUT_LANGUAGE        = English
-
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
-# include brief member descriptions after the members that are listed in
-# the file and class documentation (similar to JavaDoc).
-# Set to NO to disable this.
-
-BRIEF_MEMBER_DESC      = YES
-
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
-# the brief description of a member or function before the detailed description.
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
-# brief descriptions will be completely suppressed.
-
-REPEAT_BRIEF           = YES
-
-# This tag implements a quasi-intelligent brief description abbreviator
-# that is used to form the text in various listings. Each string
-# in this list, if found as the leading text of the brief description, will be
-# stripped from the text and the result after processing the whole list, is
-# used as the annotated text. Otherwise, the brief description is used as-is.
-# If left blank, the following values are used ("$name" is automatically
-# replaced with the name of the entity): "The $name class" "The $name widget"
-# "The $name file" "is" "provides" "specifies" "contains"
-# "represents" "a" "an" "the"
-
-ABBREVIATE_BRIEF       =
-
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
-# Doxygen will generate a detailed section even if there is only a brief
-# description.
-
-ALWAYS_DETAILED_SEC    = NO
-
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
-# inherited members of a class in the documentation of that class as if those
-# members were ordinary class members. Constructors, destructors and assignment
-# operators of the base classes will not be shown.
-
-INLINE_INHERITED_MEMB  = NO
-
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
-# path before files name in the file list and in the header files. If set
-# to NO the shortest path that makes the file name unique will be used.
-
-FULL_PATH_NAMES        = NO
-
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
-# can be used to strip a user-defined part of the path. Stripping is
-# only done if one of the specified strings matches the left-hand part of
-# the path. The tag can be used to show relative paths in the file list.
-# If left blank the directory from which doxygen is run is used as the
-# path to strip.
-
-STRIP_FROM_PATH        =
-
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
-# the path mentioned in the documentation of a class, which tells
-# the reader which header file to include in order to use a class.
-# If left blank only the name of the header file containing the class
-# definition is used. Otherwise one should specify the include paths that
-# are normally passed to the compiler using the -I flag.
-
-STRIP_FROM_INC_PATH    =
-
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
-# (but less readable) file names. This can be useful if your file system
-# doesn't support long names like on DOS, Mac, or CD-ROM.
-
-SHORT_NAMES            = NO
-
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
-# will interpret the first line (until the first dot) of a JavaDoc-style
-# comment as the brief description. If set to NO, the JavaDoc
-# comments will behave just like regular Qt-style comments
-# (thus requiring an explicit @brief command for a brief description.)
-
-JAVADOC_AUTOBRIEF      = NO
-
-# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
-# interpret the first line (until the first dot) of a Qt-style
-# comment as the brief description. If set to NO, the comments
-# will behave just like regular Qt-style comments (thus requiring
-# an explicit \brief command for a brief description.)
-
-QT_AUTOBRIEF           = NO
-
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
-# treat a multi-line C++ special comment block (i.e. a block of //! or ///
-# comments) as a brief description. This used to be the default behaviour.
-# The new default is to treat a multi-line C++ comment block as a detailed
-# description. Set this tag to YES if you prefer the old behaviour instead.
-
-MULTILINE_CPP_IS_BRIEF = NO
-
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
-# member inherits the documentation from any documented member that it
-# re-implements.
-
-INHERIT_DOCS           = YES
-
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
-# a new page for each member. If set to NO, the documentation of a member will
-# be part of the file/class/namespace that contains it.
-
-SEPARATE_MEMBER_PAGES  = NO
-
-# The TAB_SIZE tag can be used to set the number of spaces in a tab.
-# Doxygen uses this value to replace tabs by spaces in code fragments.
-
-TAB_SIZE               = 8
-
-# This tag can be used to specify a number of aliases that acts
-# as commands in the documentation. An alias has the form "name=value".
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to
-# put the command \sideeffect (or @sideeffect) in the documentation, which
-# will result in a user-defined paragraph with heading "Side Effects:".
-# You can put \n's in the value part of an alias to insert newlines.
-
-ALIASES                =
-
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
-# sources only. Doxygen will then generate output that is more tailored for C.
-# For instance, some of the names that are used will be different. The list
-# of all members will be omitted, etc.
-
-OPTIMIZE_OUTPUT_FOR_C  = NO
-
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
-# sources only. Doxygen will then generate output that is more tailored for
-# Java. For instance, namespaces will be presented as packages, qualified
-# scopes will look different, etc.
-
-OPTIMIZE_OUTPUT_JAVA   = NO
-
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
-# sources only. Doxygen will then generate output that is more tailored for
-# Fortran.
-
-OPTIMIZE_FOR_FORTRAN   = NO
-
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
-# sources. Doxygen will then generate output that is tailored for
-# VHDL.
-
-OPTIMIZE_OUTPUT_VHDL   = NO
-
-# Doxygen selects the parser to use depending on the extension of the files it
-# parses. With this tag you can assign which parser to use for a given extension.
-# Doxygen has a built-in mapping, but you can override or extend it using this
-# tag. The format is ext=language, where ext is a file extension, and language
-# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C,
-# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make
-# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C
-# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions
-# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen.
-
-EXTENSION_MAPPING      =
-
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
-# to include (a tag file for) the STL sources as input, then you should
-# set this tag to YES in order to let doxygen match functions declarations and
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
-# func(std::string) {}). This also makes the inheritance and collaboration
-# diagrams that involve STL classes more complete and accurate.
-
-BUILTIN_STL_SUPPORT    = NO
-
-# If you use Microsoft's C++/CLI language, you should set this option to YES to
-# enable parsing support.
-
-CPP_CLI_SUPPORT        = NO
-
-# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
-# Doxygen will parse them like normal C++ but will assume all classes use public
-# instead of private inheritance when no explicit protection keyword is present.
-
-SIP_SUPPORT            = NO
-
-# For Microsoft's IDL there are propget and propput attributes to indicate getter
-# and setter methods for a property. Setting this option to YES (the default)
-# will make doxygen replace the get and set methods by a property in the
-# documentation. This will only work if the methods are indeed getting or
-# setting a simple type. If this is not the case, or you want to show the
-# methods anyway, you should set this option to NO.
-
-IDL_PROPERTY_SUPPORT   = YES
-
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
-# tag is set to YES, then doxygen will reuse the documentation of the first
-# member in the group (if any) for the other members of the group. By default
-# all members of a group must be documented explicitly.
-
-DISTRIBUTE_GROUP_DOC   = NO
-
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
-# the same type (for instance a group of public functions) to be put as a
-# subgroup of that type (e.g. under the Public Functions section). Set it to
-# NO to prevent subgrouping. Alternatively, this can be done per class using
-# the \nosubgrouping command.
-
-SUBGROUPING            = YES
-
-# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and
-# unions are shown inside the group in which they are included (e.g. using
-# @ingroup) instead of on a separate page (for HTML and Man pages) or
-# section (for LaTeX and RTF).
-
-INLINE_GROUPED_CLASSES = NO
-
-# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and
-# unions with only public data fields will be shown inline in the documentation
-# of the scope in which they are defined (i.e. file, namespace, or group
-# documentation), provided this scope is documented. If set to NO (the default),
-# structs, classes, and unions are shown on a separate page (for HTML and Man
-# pages) or section (for LaTeX and RTF).
-
-INLINE_SIMPLE_STRUCTS  = NO
-
-# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
-# is documented as struct, union, or enum with the name of the typedef. So
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
-# with name TypeT. When disabled the typedef will appear as a member of a file,
-# namespace, or class. And the struct will be named TypeS. This can typically
-# be useful for C code in case the coding convention dictates that all compound
-# types are typedef'ed and only the typedef is referenced, never the tag name.
-
-TYPEDEF_HIDES_STRUCT   = NO
-
-# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
-# determine which symbols to keep in memory and which to flush to disk.
-# When the cache is full, less often used symbols will be written to disk.
-# For small to medium size projects (<1000 input files) the default value is
-# probably good enough. For larger projects a too small cache size can cause
-# doxygen to be busy swapping symbols to and from disk most of the time
-# causing a significant performance penalty.
-# If the system has enough physical memory increasing the cache will improve the
-# performance by keeping more symbols in memory. Note that the value works on
-# a logarithmic scale so increasing the size by one will roughly double the
-# memory usage. The cache size is given by this formula:
-# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
-# corresponding to a cache size of 2^16 = 65536 symbols
-
-SYMBOL_CACHE_SIZE      = 0
-
-#---------------------------------------------------------------------------
-# Build related configuration options
-#---------------------------------------------------------------------------
-
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
-# documentation are documented, even if no documentation was available.
-# Private class members and static file members will be hidden unless
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
-
-EXTRACT_ALL            = NO
-
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
-# will be included in the documentation.
-
-EXTRACT_PRIVATE        = NO
-
-# If the EXTRACT_STATIC tag is set to YES all static members of a file
-# will be included in the documentation.
-
-EXTRACT_STATIC         = NO
-
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
-# defined locally in source files will be included in the documentation.
-# If set to NO only classes defined in header files are included.
-
-EXTRACT_LOCAL_CLASSES  = YES
-
-# This flag is only useful for Objective-C code. When set to YES local
-# methods, which are defined in the implementation section but not in
-# the interface are included in the documentation.
-# If set to NO (the default) only methods in the interface are included.
-
-EXTRACT_LOCAL_METHODS  = NO
-
-# If this flag is set to YES, the members of anonymous namespaces will be
-# extracted and appear in the documentation as a namespace called
-# 'anonymous_namespace{file}', where file will be replaced with the base
-# name of the file that contains the anonymous namespace. By default
-# anonymous namespaces are hidden.
-
-EXTRACT_ANON_NSPACES   = NO
-
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
-# undocumented members of documented classes, files or namespaces.
-# If set to NO (the default) these members will be included in the
-# various overviews, but no documentation section is generated.
-# This option has no effect if EXTRACT_ALL is enabled.
-
-HIDE_UNDOC_MEMBERS     = NO
-
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
-# undocumented classes that are normally visible in the class hierarchy.
-# If set to NO (the default) these classes will be included in the various
-# overviews. This option has no effect if EXTRACT_ALL is enabled.
-
-HIDE_UNDOC_CLASSES     = NO
-
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
-# friend (class|struct|union) declarations.
-# If set to NO (the default) these declarations will be included in the
-# documentation.
-
-HIDE_FRIEND_COMPOUNDS  = NO
-
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
-# documentation blocks found inside the body of a function.
-# If set to NO (the default) these blocks will be appended to the
-# function's detailed documentation block.
-
-HIDE_IN_BODY_DOCS      = NO
-
-# The INTERNAL_DOCS tag determines if documentation
-# that is typed after a \internal command is included. If the tag is set
-# to NO (the default) then the documentation will be excluded.
-# Set it to YES to include the internal documentation.
-
-INTERNAL_DOCS          = NO
-
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
-# file names in lower-case letters. If set to YES upper-case letters are also
-# allowed. This is useful if you have classes or files whose names only differ
-# in case and if your file system supports case sensitive file names. Windows
-# and Mac users are advised to set this option to NO.
-
-CASE_SENSE_NAMES       = NO
-
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
-# will show members with their full class and namespace scopes in the
-# documentation. If set to YES the scope will be hidden.
-
-HIDE_SCOPE_NAMES       = NO
-
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
-# will put a list of the files that are included by a file in the documentation
-# of that file.
-
-SHOW_INCLUDE_FILES     = YES
-
-# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen
-# will list include files with double quotes in the documentation
-# rather than with sharp brackets.
-
-FORCE_LOCAL_INCLUDES   = NO
-
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
-# is inserted in the documentation for inline members.
-
-INLINE_INFO            = YES
-
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
-# will sort the (detailed) documentation of file and class members
-# alphabetically by member name. If set to NO the members will appear in
-# declaration order.
-
-SORT_MEMBER_DOCS       = YES
-
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
-# brief documentation of file, namespace and class members alphabetically
-# by member name. If set to NO (the default) the members will appear in
-# declaration order.
-
-SORT_BRIEF_DOCS        = NO
-
-# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen
-# will sort the (brief and detailed) documentation of class members so that
-# constructors and destructors are listed first. If set to NO (the default)
-# the constructors will appear in the respective orders defined by
-# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.
-# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO
-# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
-
-SORT_MEMBERS_CTORS_1ST = NO
-
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
-# hierarchy of group names into alphabetical order. If set to NO (the default)
-# the group names will appear in their defined order.
-
-SORT_GROUP_NAMES       = NO
-
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
-# sorted by fully-qualified names, including namespaces. If set to
-# NO (the default), the class list will be sorted only by class name,
-# not including the namespace part.
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
-# Note: This option applies only to the class list, not to the
-# alphabetical list.
-
-SORT_BY_SCOPE_NAME     = NO
-
-# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to
-# do proper type resolution of all parameters of a function it will reject a
-# match between the prototype and the implementation of a member function even
-# if there is only one candidate or it is obvious which candidate to choose
-# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen
-# will still accept a match between prototype and implementation in such cases.
-
-STRICT_PROTO_MATCHING  = NO
-
-# The GENERATE_TODOLIST tag can be used to enable (YES) or
-# disable (NO) the todo list. This list is created by putting \todo
-# commands in the documentation.
-
-GENERATE_TODOLIST      = YES
-
-# The GENERATE_TESTLIST tag can be used to enable (YES) or
-# disable (NO) the test list. This list is created by putting \test
-# commands in the documentation.
-
-GENERATE_TESTLIST      = YES
-
-# The GENERATE_BUGLIST tag can be used to enable (YES) or
-# disable (NO) the bug list. This list is created by putting \bug
-# commands in the documentation.
-
-GENERATE_BUGLIST       = YES
-
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
-# disable (NO) the deprecated list. This list is created by putting
-# \deprecated commands in the documentation.
-
-GENERATE_DEPRECATEDLIST= YES
-
-# The ENABLED_SECTIONS tag can be used to enable conditional
-# documentation sections, marked by \if sectionname ... \endif.
-
-ENABLED_SECTIONS       =
-
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
-# the initial value of a variable or macro consists of for it to appear in
-# the documentation. If the initializer consists of more lines than specified
-# here it will be hidden. Use a value of 0 to hide initializers completely.
-# The appearance of the initializer of individual variables and macros in the
-# documentation can be controlled using \showinitializer or \hideinitializer
-# command in the documentation regardless of this setting.
-
-MAX_INITIALIZER_LINES  = 30
-
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
-# at the bottom of the documentation of classes and structs. If set to YES the
-# list will mention the files that were used to generate the documentation.
-
-SHOW_USED_FILES        = YES
-
-# If the sources in your project are distributed over multiple directories
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
-# in the documentation. The default is NO.
-
-SHOW_DIRECTORIES       = NO
-
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
-# This will remove the Files entry from the Quick Index and from the
-# Folder Tree View (if specified). The default is YES.
-
-SHOW_FILES             = YES
-
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
-# Namespaces page.
-# This will remove the Namespaces entry from the Quick Index
-# and from the Folder Tree View (if specified). The default is YES.
-
-SHOW_NAMESPACES        = YES
-
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that
-# doxygen should invoke to get the current version for each file (typically from
-# the version control system). Doxygen will invoke the program by executing (via
-# popen()) the command <command> <input-file>, where <command> is the value of
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
-# provided by doxygen. Whatever the program writes to standard output
-# is used as the file version. See the manual for examples.
-
-FILE_VERSION_FILTER    =
-
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
-# by doxygen. The layout file controls the global structure of the generated
-# output files in an output format independent way. The create the layout file
-# that represents doxygen's defaults, run doxygen with the -l option.
-# You can optionally specify a file name after the option, if omitted
-# DoxygenLayout.xml will be used as the name of the layout file.
-
-LAYOUT_FILE            =
-
-# The CITE_BIB_FILES tag can be used to specify one or more bib files
-# containing the references data. This must be a list of .bib files. The
-# .bib extension is automatically appended if omitted. Using this command
-# requires the bibtex tool to be installed. See also
-# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style
-# of the bibliography can be controlled using LATEX_BIB_STYLE.
-
-CITE_BIB_FILES         =
-
-#---------------------------------------------------------------------------
-# configuration options related to warning and progress messages
-#---------------------------------------------------------------------------
-
-# The QUIET tag can be used to turn on/off the messages that are generated
-# by doxygen. Possible values are YES and NO. If left blank NO is used.
-
-QUIET                  = NO
-
-# The WARNINGS tag can be used to turn on/off the warning messages that are
-# generated by doxygen. Possible values are YES and NO. If left blank
-# NO is used.
-
-WARNINGS               = YES
-
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
-# automatically be disabled.
-
-WARN_IF_UNDOCUMENTED   = YES
-
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
-# potential errors in the documentation, such as not documenting some
-# parameters in a documented function, or documenting parameters that
-# don't exist or using markup commands wrongly.
-
-WARN_IF_DOC_ERROR      = YES
-
-# The WARN_NO_PARAMDOC option can be enabled to get warnings for
-# functions that are documented, but have no documentation for their parameters
-# or return value. If set to NO (the default) doxygen will only warn about
-# wrong or incomplete parameter documentation, but not about the absence of
-# documentation.
-
-WARN_NO_PARAMDOC       = NO
-
-# The WARN_FORMAT tag determines the format of the warning messages that
-# doxygen can produce. The string should contain the $file, $line, and $text
-# tags, which will be replaced by the file and line number from which the
-# warning originated and the warning text. Optionally the format may contain
-# $version, which will be replaced by the version of the file (if it could
-# be obtained via FILE_VERSION_FILTER)
-
-WARN_FORMAT            = "$file:$line: $text"
-
-# The WARN_LOGFILE tag can be used to specify a file to which warning
-# and error messages should be written. If left blank the output is written
-# to stderr.
-
-WARN_LOGFILE           =
-
-#---------------------------------------------------------------------------
-# configuration options related to the input files
-#---------------------------------------------------------------------------
-
-# The INPUT tag can be used to specify the files and/or directories that contain
-# documented source files. You may enter file names like "myfile.cpp" or
-# directories like "/usr/src/myproject". Separate the files or directories
-# with spaces.
-
-INPUT                  = @CMAKE_CURRENT_SOURCE_DIR@/../../ @CMAKE_CURRENT_BINARY_DIR@/../../src/xsd/
-
-# This tag can be used to specify the character encoding of the source files
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
-# also the default input encoding. Doxygen uses libiconv (or the iconv built
-# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
-# the list of possible encodings.
-
-INPUT_ENCODING         = UTF-8
-
-# If the value of the INPUT tag contains directories, you can use the
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
-# and *.h) to filter out the source-files in the directories. If left
-# blank the following patterns are tested:
-# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh
-# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py
-# *.f90 *.f *.for *.vhd *.vhdl
-
-FILE_PATTERNS          =
-
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories
-# should be searched for input files as well. Possible values are YES and NO.
-# If left blank NO is used.
-
-RECURSIVE              = YES
-
-# The EXCLUDE tag can be used to specify files and/or directories that should
-# excluded from the INPUT source files. This way you can easily exclude a
-# subdirectory from a directory tree whose root is specified with the INPUT tag.
-# Note that relative paths are relative to directory from which doxygen is run.
-
-EXCLUDE                =
-
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
-# directories that are symbolic links (a Unix file system feature) are excluded
-# from the input.
-
-EXCLUDE_SYMLINKS       = NO
-
-# If the value of the INPUT tag contains directories, you can use the
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
-# certain files from those directories. Note that the wildcards are matched
-# against the file with absolute path, so to exclude all test directories
-# for example use the pattern */test/*
-
-EXCLUDE_PATTERNS       =
-
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
-# (namespaces, classes, functions, etc.) that should be excluded from the
-# output. The symbol name can be a fully qualified name, a word, or if the
-# wildcard * is used, a substring. Examples: ANamespace, AClass,
-# AClass::ANamespace, ANamespace::*Test
-
-EXCLUDE_SYMBOLS        = ISMRMRD::complex_t ISMRMRD::double_complex_t ISMRMRD::AcquisitionHeader_with_data ISMRMRD::ImageHeader_with_data 
-
-# The EXAMPLE_PATH tag can be used to specify one or more files or
-# directories that contain example code fragments that are included (see
-# the \include command).
-
-EXAMPLE_PATH           =
-
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
-# and *.h) to filter out the source-files in the directories. If left
-# blank all files are included.
-
-EXAMPLE_PATTERNS       =
-
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
-# searched for input files to be used with the \include or \dontinclude
-# commands irrespective of the value of the RECURSIVE tag.
-# Possible values are YES and NO. If left blank NO is used.
-
-EXAMPLE_RECURSIVE      = NO
-
-# The IMAGE_PATH tag can be used to specify one or more files or
-# directories that contain image that are included in the documentation (see
-# the \image command).
-
-IMAGE_PATH             =
-
-# The INPUT_FILTER tag can be used to specify a program that doxygen should
-# invoke to filter for each input file. Doxygen will invoke the filter program
-# by executing (via popen()) the command <filter> <input-file>, where <filter>
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
-# input file. Doxygen will then use the output that the filter program writes
-# to standard output.
-# If FILTER_PATTERNS is specified, this tag will be
-# ignored.
-
-INPUT_FILTER           =
-
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
-# basis.
-# Doxygen will compare the file name with each pattern and apply the
-# filter if there is a match.
-# The filters are a list of the form:
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
-# info on how filters are used. If FILTER_PATTERNS is empty or if
-# non of the patterns match the file name, INPUT_FILTER is applied.
-
-FILTER_PATTERNS        =
-
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
-# INPUT_FILTER) will be used to filter the input files when producing source
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).
-
-FILTER_SOURCE_FILES    = NO
-
-# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
-# pattern. A pattern will override the setting for FILTER_PATTERN (if any)
-# and it is also possible to disable source filtering for a specific pattern
-# using *.ext= (so without naming a filter). This option only has effect when
-# FILTER_SOURCE_FILES is enabled.
-
-FILTER_SOURCE_PATTERNS =
-
-#---------------------------------------------------------------------------
-# configuration options related to source browsing
-#---------------------------------------------------------------------------
-
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will
-# be generated. Documented entities will be cross-referenced with these sources.
-# Note: To get rid of all source code in the generated output, make sure also
-# VERBATIM_HEADERS is set to NO.
-
-SOURCE_BROWSER         = NO
-
-# Setting the INLINE_SOURCES tag to YES will include the body
-# of functions and classes directly in the documentation.
-
-INLINE_SOURCES         = NO
-
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
-# doxygen to hide any special comment blocks from generated source code
-# fragments. Normal C and C++ comments will always remain visible.
-
-STRIP_CODE_COMMENTS    = YES
-
-# If the REFERENCED_BY_RELATION tag is set to YES
-# then for each documented function all documented
-# functions referencing it will be listed.
-
-REFERENCED_BY_RELATION = NO
-
-# If the REFERENCES_RELATION tag is set to YES
-# then for each documented function all documented entities
-# called/used by that function will be listed.
-
-REFERENCES_RELATION    = NO
-
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
-# link to the source code.
-# Otherwise they will link to the documentation.
-
-REFERENCES_LINK_SOURCE = YES
-
-# If the USE_HTAGS tag is set to YES then the references to source code
-# will point to the HTML generated by the htags(1) tool instead of doxygen
-# built-in source browser. The htags tool is part of GNU's global source
-# tagging system (see http://www.gnu.org/software/global/global.html). You
-# will need version 4.8.6 or higher.
-
-USE_HTAGS              = NO
-
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
-# will generate a verbatim copy of the header file for each class for
-# which an include is specified. Set to NO to disable this.
-
-VERBATIM_HEADERS       = YES
-
-#---------------------------------------------------------------------------
-# configuration options related to the alphabetical class index
-#---------------------------------------------------------------------------
-
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
-# of all compounds will be generated. Enable this if the project
-# contains a lot of classes, structs, unions or interfaces.
-
-ALPHABETICAL_INDEX     = YES
-
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
-# in which this list will be split (can be a number in the range [1..20])
-
-COLS_IN_ALPHA_INDEX    = 5
-
-# In case all classes in a project start with a common prefix, all
-# classes will be put under the same header in the alphabetical index.
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
-# should be ignored while generating the index headers.
-
-IGNORE_PREFIX          =
-
-#---------------------------------------------------------------------------
-# configuration options related to the HTML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
-# generate HTML output.
-
-GENERATE_HTML          = YES
-
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `html' will be used as the default path.
-
-HTML_OUTPUT            = html
-
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
-# doxygen will generate files with .html extension.
-
-HTML_FILE_EXTENSION    = .html
-
-# The HTML_HEADER tag can be used to specify a personal HTML header for
-# each generated HTML page. If it is left blank doxygen will generate a
-# standard header. Note that when using a custom header you are responsible
-#  for the proper inclusion of any scripts and style sheets that doxygen
-# needs, which is dependent on the configuration options used.
-# It is adviced to generate a default header using "doxygen -w html
-# header.html footer.html stylesheet.css YourConfigFile" and then modify
-# that header. Note that the header is subject to change so you typically
-# have to redo this when upgrading to a newer version of doxygen or when
-# changing the value of configuration settings such as GENERATE_TREEVIEW!
-
-HTML_HEADER            =
-
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for
-# each generated HTML page. If it is left blank doxygen will generate a
-# standard footer.
-
-HTML_FOOTER            =
-
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
-# style sheet that is used by each HTML page. It can be used to
-# fine-tune the look of the HTML output. If the tag is left blank doxygen
-# will generate a default style sheet. Note that doxygen will try to copy
-# the style sheet file to the HTML output directory, so don't put your own
-# stylesheet in the HTML output directory as well, or it will be erased!
-
-HTML_STYLESHEET        =
-
-# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
-# other source files which should be copied to the HTML output directory. Note
-# that these files will be copied to the base HTML output directory. Use the
-# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
-# files. In the HTML_STYLESHEET file, use the file name only. Also note that
-# the files will be copied as-is; there are no commands or markers available.
-
-HTML_EXTRA_FILES       =
-
-# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
-# Doxygen will adjust the colors in the stylesheet and background images
-# according to this color. Hue is specified as an angle on a colorwheel,
-# see http://en.wikipedia.org/wiki/Hue for more information.
-# For instance the value 0 represents red, 60 is yellow, 120 is green,
-# 180 is cyan, 240 is blue, 300 purple, and 360 is red again.
-# The allowed range is 0 to 359.
-
-HTML_COLORSTYLE_HUE    = 220
-
-# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of
-# the colors in the HTML output. For a value of 0 the output will use
-# grayscales only. A value of 255 will produce the most vivid colors.
-
-HTML_COLORSTYLE_SAT    = 100
-
-# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to
-# the luminance component of the colors in the HTML output. Values below
-# 100 gradually make the output lighter, whereas values above 100 make
-# the output darker. The value divided by 100 is the actual gamma applied,
-# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,
-# and 100 does not change the gamma.
-
-HTML_COLORSTYLE_GAMMA  = 80
-
-# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
-# page will contain the date and time when the page was generated. Setting
-# this to NO can help when comparing the output of multiple runs.
-
-HTML_TIMESTAMP         = YES
-
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
-# files or namespaces will be aligned in HTML using tables. If set to
-# NO a bullet list will be used.
-
-HTML_ALIGN_MEMBERS     = YES
-
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
-# documentation will contain sections that can be hidden and shown after the
-# page has loaded. For this to work a browser that supports
-# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox
-# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
-
-HTML_DYNAMIC_SECTIONS  = NO
-
-# If the GENERATE_DOCSET tag is set to YES, additional index files
-# will be generated that can be used as input for Apple's Xcode 3
-# integrated development environment, introduced with OSX 10.5 (Leopard).
-# To create a documentation set, doxygen will generate a Makefile in the
-# HTML output directory. Running make will produce the docset in that
-# directory and running "make install" will install the docset in
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
-# it at startup.
-# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
-# for more information.
-
-GENERATE_DOCSET        = NO
-
-# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
-# feed. A documentation feed provides an umbrella under which multiple
-# documentation sets from a single provider (such as a company or product suite)
-# can be grouped.
-
-DOCSET_FEEDNAME        = "Doxygen generated docs"
-
-# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
-# should uniquely identify the documentation set bundle. This should be a
-# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
-# will append .docset to the name.
-
-DOCSET_BUNDLE_ID       = org.doxygen.Project
-
-# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify
-# the documentation publisher. This should be a reverse domain-name style
-# string, e.g. com.mycompany.MyDocSet.documentation.
-
-DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
-
-# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
-
-DOCSET_PUBLISHER_NAME  = Publisher
-
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files
-# will be generated that can be used as input for tools like the
-# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
-# of the generated HTML documentation.
-
-GENERATE_HTMLHELP      = NO
-
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
-# be used to specify the file name of the resulting .chm file. You
-# can add a path in front of the file if the result should not be
-# written to the html output directory.
-
-CHM_FILE               =
-
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
-# be used to specify the location (absolute path including file name) of
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
-# the HTML help compiler on the generated index.hhp.
-
-HHC_LOCATION           =
-
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
-# controls if a separate .chi index file is generated (YES) or that
-# it should be included in the master .chm file (NO).
-
-GENERATE_CHI           = NO
-
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
-# is used to encode HtmlHelp index (hhk), content (hhc) and project file
-# content.
-
-CHM_INDEX_ENCODING     =
-
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
-# controls whether a binary table of contents is generated (YES) or a
-# normal table of contents (NO) in the .chm file.
-
-BINARY_TOC             = NO
-
-# The TOC_EXPAND flag can be set to YES to add extra items for group members
-# to the contents of the HTML help documentation and to the tree view.
-
-TOC_EXPAND             = NO
-
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
-# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated
-# that can be used as input for Qt's qhelpgenerator to generate a
-# Qt Compressed Help (.qch) of the generated HTML documentation.
-
-GENERATE_QHP           = NO
-
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can
-# be used to specify the file name of the resulting .qch file.
-# The path specified is relative to the HTML output folder.
-
-QCH_FILE               =
-
-# The QHP_NAMESPACE tag specifies the namespace to use when generating
-# Qt Help Project output. For more information please see
-# http://doc.trolltech.com/qthelpproject.html#namespace
-
-QHP_NAMESPACE          = org.doxygen.Project
-
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
-# Qt Help Project output. For more information please see
-# http://doc.trolltech.com/qthelpproject.html#virtual-folders
-
-QHP_VIRTUAL_FOLDER     = doc
-
-# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to
-# add. For more information please see
-# http://doc.trolltech.com/qthelpproject.html#custom-filters
-
-QHP_CUST_FILTER_NAME   =
-
-# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the
-# custom filter to add. For more information please see
-# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">
-# Qt Help Project / Custom Filters</a>.
-
-QHP_CUST_FILTER_ATTRS  =
-
-# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
-# project's
-# filter section matches.
-# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">
-# Qt Help Project / Filter Attributes</a>.
-
-QHP_SECT_FILTER_ATTRS  =
-
-# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
-# be used to specify the location of Qt's qhelpgenerator.
-# If non-empty doxygen will try to run qhelpgenerator on the generated
-# .qhp file.
-
-QHG_LOCATION           =
-
-# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
-#  will be generated, which together with the HTML files, form an Eclipse help
-# plugin. To install this plugin and make it available under the help contents
-# menu in Eclipse, the contents of the directory containing the HTML and XML
-# files needs to be copied into the plugins directory of eclipse. The name of
-# the directory within the plugins directory should be the same as
-# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before
-# the help appears.
-
-GENERATE_ECLIPSEHELP   = NO
-
-# A unique identifier for the eclipse help plugin. When installing the plugin
-# the directory name containing the HTML and XML files should also have
-# this name.
-
-ECLIPSE_DOC_ID         = org.doxygen.Project
-
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
-# top of each HTML page. The value NO (the default) enables the index and
-# the value YES disables it.
-
-DISABLE_INDEX          = NO
-
-# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values
-# (range [0,1..20]) that doxygen will group on one line in the generated HTML
-# documentation. Note that a value of 0 will completely suppress the enum
-# values from appearing in the overview section.
-
-ENUM_VALUES_PER_LINE   = 4
-
-# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
-# structure should be generated to display hierarchical information.
-# If the tag value is set to YES, a side panel will be generated
-# containing a tree-like index structure (just like the one that
-# is generated for HTML Help). For this to work a browser that supports
-# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
-# Windows users are probably better off using the HTML help feature.
-
-GENERATE_TREEVIEW      = NO
-
-# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories,
-# and Class Hierarchy pages using a tree view instead of an ordered list.
-
-USE_INLINE_TREES       = NO
-
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
-# used to set the initial width (in pixels) of the frame in which the tree
-# is shown.
-
-TREEVIEW_WIDTH         = 250
-
-# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open
-# links to external symbols imported via tag files in a separate window.
-
-EXT_LINKS_IN_WINDOW    = NO
-
-# Use this tag to change the font size of Latex formulas included
-# as images in the HTML documentation. The default is 10. Note that
-# when you change the font size after a successful doxygen run you need
-# to manually remove any form_*.png images from the HTML output directory
-# to force them to be regenerated.
-
-FORMULA_FONTSIZE       = 10
-
-# Use the FORMULA_TRANPARENT tag to determine whether or not the images
-# generated for formulas are transparent PNGs. Transparent PNGs are
-# not supported properly for IE 6.0, but are supported on all modern browsers.
-# Note that when changing this option you need to delete any form_*.png files
-# in the HTML output before the changes have effect.
-
-FORMULA_TRANSPARENT    = YES
-
-# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax
-# (see http://www.mathjax.org) which uses client side Javascript for the
-# rendering instead of using prerendered bitmaps. Use this if you do not
-# have LaTeX installed or if you want to formulas look prettier in the HTML
-# output. When enabled you also need to install MathJax separately and
-# configure the path to it using the MATHJAX_RELPATH option.
-
-USE_MATHJAX            = NO
-
-# When MathJax is enabled you need to specify the location relative to the
-# HTML output directory using the MATHJAX_RELPATH option. The destination
-# directory should contain the MathJax.js script. For instance, if the mathjax
-# directory is located at the same level as the HTML output directory, then
-# MATHJAX_RELPATH should be ../mathjax. The default value points to the
-# mathjax.org site, so you can quickly see the result without installing
-# MathJax, but it is strongly recommended to install a local copy of MathJax
-# before deployment.
-
-MATHJAX_RELPATH        = http://www.mathjax.org/mathjax
-
-# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension
-# names that should be enabled during MathJax rendering.
-
-MATHJAX_EXTENSIONS     =
-
-# When the SEARCHENGINE tag is enabled doxygen will generate a search box
-# for the HTML output. The underlying search engine uses javascript
-# and DHTML and should work on any modern browser. Note that when using
-# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets
-# (GENERATE_DOCSET) there is already a search function so this one should
-# typically be disabled. For large projects the javascript based search engine
-# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
-
-SEARCHENGINE           = YES
-
-# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
-# implemented using a PHP enabled web server instead of at the web client
-# using Javascript. Doxygen will generate the search PHP script and index
-# file to put on the web server. The advantage of the server
-# based approach is that it scales better to large projects and allows
-# full text search. The disadvantages are that it is more difficult to setup
-# and does not have live searching capabilities.
-
-SERVER_BASED_SEARCH    = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the LaTeX output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
-# generate Latex output.
-
-GENERATE_LATEX         = YES
-
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `latex' will be used as the default path.
-
-LATEX_OUTPUT           = latex
-
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
-# invoked. If left blank `latex' will be used as the default command name.
-# Note that when enabling USE_PDFLATEX this option is only used for
-# generating bitmaps for formulas in the HTML output, but not in the
-# Makefile that is written to the output directory.
-
-LATEX_CMD_NAME         = latex
-
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
-# generate index for LaTeX. If left blank `makeindex' will be used as the
-# default command name.
-
-MAKEINDEX_CMD_NAME     = makeindex
-
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
-# LaTeX documents. This may be useful for small projects and may help to
-# save some trees in general.
-
-COMPACT_LATEX          = NO
-
-# The PAPER_TYPE tag can be used to set the paper type that is used
-# by the printer. Possible values are: a4, letter, legal and
-# executive. If left blank a4wide will be used.
-
-PAPER_TYPE             = a4
-
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
-# packages that should be included in the LaTeX output.
-
-EXTRA_PACKAGES         =
-
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
-# the generated latex document. The header should contain everything until
-# the first chapter. If it is left blank doxygen will generate a
-# standard header. Notice: only use this tag if you know what you are doing!
-
-LATEX_HEADER           =
-
-# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for
-# the generated latex document. The footer should contain everything after
-# the last chapter. If it is left blank doxygen will generate a
-# standard footer. Notice: only use this tag if you know what you are doing!
-
-LATEX_FOOTER           =
-
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will
-# contain links (just like the HTML output) instead of page references
-# This makes the output suitable for online browsing using a pdf viewer.
-
-PDF_HYPERLINKS         = YES
-
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
-# plain latex in the generated Makefile. Set this option to YES to get a
-# higher quality PDF documentation.
-
-USE_PDFLATEX           = YES
-
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
-# command to the generated LaTeX files. This will instruct LaTeX to keep
-# running if errors occur, instead of asking the user for help.
-# This option is also used when generating formulas in HTML.
-
-LATEX_BATCHMODE        = NO
-
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not
-# include the index chapters (such as File Index, Compound Index, etc.)
-# in the output.
-
-LATEX_HIDE_INDICES     = NO
-
-# If LATEX_SOURCE_CODE is set to YES then doxygen will include
-# source code with syntax highlighting in the LaTeX output.
-# Note that which sources are shown also depends on other settings
-# such as SOURCE_BROWSER.
-
-LATEX_SOURCE_CODE      = NO
-
-# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
-# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See
-# http://en.wikipedia.org/wiki/BibTeX for more info.
-
-LATEX_BIB_STYLE        = plain
-
-#---------------------------------------------------------------------------
-# configuration options related to the RTF output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
-# The RTF output is optimized for Word 97 and may not look very pretty with
-# other RTF readers or editors.
-
-GENERATE_RTF           = NO
-
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `rtf' will be used as the default path.
-
-RTF_OUTPUT             = rtf
-
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
-# RTF documents. This may be useful for small projects and may help to
-# save some trees in general.
-
-COMPACT_RTF            = NO
-
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
-# will contain hyperlink fields. The RTF file will
-# contain links (just like the HTML output) instead of page references.
-# This makes the output suitable for online browsing using WORD or other
-# programs which support those fields.
-# Note: wordpad (write) and others do not support links.
-
-RTF_HYPERLINKS         = NO
-
-# Load stylesheet definitions from file. Syntax is similar to doxygen's
-# config file, i.e. a series of assignments. You only have to provide
-# replacements, missing definitions are set to their default value.
-
-RTF_STYLESHEET_FILE    =
-
-# Set optional variables used in the generation of an rtf document.
-# Syntax is similar to doxygen's config file.
-
-RTF_EXTENSIONS_FILE    =
-
-#---------------------------------------------------------------------------
-# configuration options related to the man page output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
-# generate man pages
-
-GENERATE_MAN           = NO
-
-# The MAN_OUTPUT tag is used to specify where the man pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `man' will be used as the default path.
-
-MAN_OUTPUT             = man
-
-# The MAN_EXTENSION tag determines the extension that is added to
-# the generated man pages (default is the subroutine's section .3)
-
-MAN_EXTENSION          = .3
-
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
-# then it will generate one additional man file for each entity
-# documented in the real man page(s). These additional files
-# only source the real man page, but without them the man command
-# would be unable to find the correct page. The default is NO.
-
-MAN_LINKS              = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the XML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_XML tag is set to YES Doxygen will
-# generate an XML file that captures the structure of
-# the code including all documentation.
-
-GENERATE_XML           = NO
-
-# The XML_OUTPUT tag is used to specify where the XML pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `xml' will be used as the default path.
-
-XML_OUTPUT             = xml
-
-# The XML_SCHEMA tag can be used to specify an XML schema,
-# which can be used by a validating XML parser to check the
-# syntax of the XML files.
-
-XML_SCHEMA             =
-
-# The XML_DTD tag can be used to specify an XML DTD,
-# which can be used by a validating XML parser to check the
-# syntax of the XML files.
-
-XML_DTD                =
-
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
-# dump the program listings (including syntax highlighting
-# and cross-referencing information) to the XML output. Note that
-# enabling this will significantly increase the size of the XML output.
-
-XML_PROGRAMLISTING     = YES
-
-#---------------------------------------------------------------------------
-# configuration options for the AutoGen Definitions output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
-# generate an AutoGen Definitions (see autogen.sf.net) file
-# that captures the structure of the code including all
-# documentation. Note that this feature is still experimental
-# and incomplete at the moment.
-
-GENERATE_AUTOGEN_DEF   = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the Perl module output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will
-# generate a Perl module file that captures the structure of
-# the code including all documentation. Note that this
-# feature is still experimental and incomplete at the
-# moment.
-
-GENERATE_PERLMOD       = NO
-
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able
-# to generate PDF and DVI output from the Perl module output.
-
-PERLMOD_LATEX          = NO
-
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
-# nicely formatted so it can be parsed by a human reader.
-# This is useful
-# if you want to understand what is going on.
-# On the other hand, if this
-# tag is set to NO the size of the Perl module output will be much smaller
-# and Perl will parse it just the same.
-
-PERLMOD_PRETTY         = YES
-
-# The names of the make variables in the generated doxyrules.make file
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
-# This is useful so different doxyrules.make files included by the same
-# Makefile don't overwrite each other's variables.
-
-PERLMOD_MAKEVAR_PREFIX =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor
-#---------------------------------------------------------------------------
-
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
-# evaluate all C-preprocessor directives found in the sources and include
-# files.
-
-ENABLE_PREPROCESSING   = YES
-
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
-# names in the source code. If set to NO (the default) only conditional
-# compilation will be performed. Macro expansion can be done in a controlled
-# way by setting EXPAND_ONLY_PREDEF to YES.
-
-MACRO_EXPANSION        = NO
-
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
-# then the macro expansion is limited to the macros specified with the
-# PREDEFINED and EXPAND_AS_DEFINED tags.
-
-EXPAND_ONLY_PREDEF     = NO
-
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
-# pointed to by INCLUDE_PATH will be searched when a #include is found.
-
-SEARCH_INCLUDES        = YES
-
-# The INCLUDE_PATH tag can be used to specify one or more directories that
-# contain include files that are not input files but should be processed by
-# the preprocessor.
-
-INCLUDE_PATH           =
-
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
-# patterns (like *.h and *.hpp) to filter out the header-files in the
-# directories. If left blank, the patterns specified with FILE_PATTERNS will
-# be used.
-
-INCLUDE_FILE_PATTERNS  =
-
-# The PREDEFINED tag can be used to specify one or more macro names that
-# are defined before the preprocessor is started (similar to the -D option of
-# gcc). The argument of the tag is a list of macros of the form: name
-# or name=definition (no spaces). If the definition and the = are
-# omitted =1 is assumed. To prevent a macro definition from being
-# undefined via #undef or recursively expanded use the := operator
-# instead of the = operator.
-
-PREDEFINED             = __cplusplus
-
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
-# this tag can be used to specify a list of macro names that should be expanded.
-# The macro definition that is found in the sources will be used.
-# Use the PREDEFINED tag if you want to use a different macro definition that
-# overrules the definition found in the source code.
-
-EXPAND_AS_DEFINED      =
-
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
-# doxygen's preprocessor will remove all references to function-like macros
-# that are alone on a line, have an all uppercase name, and do not end with a
-# semicolon, because these will confuse the parser if not removed.
-
-SKIP_FUNCTION_MACROS   = YES
-
-#---------------------------------------------------------------------------
-# Configuration::additions related to external references
-#---------------------------------------------------------------------------
-
-# The TAGFILES option can be used to specify one or more tagfiles.
-# Optionally an initial location of the external documentation
-# can be added for each tagfile. The format of a tag file without
-# this location is as follows:
-#
-# TAGFILES = file1 file2 ...
-# Adding location for the tag files is done as follows:
-#
-# TAGFILES = file1=loc1 "file2 = loc2" ...
-# where "loc1" and "loc2" can be relative or absolute paths or
-# URLs. If a location is present for each tag, the installdox tool
-# does not have to be run to correct the links.
-# Note that each tag file must have a unique name
-# (where the name does NOT include the path)
-# If a tag file is not located in the directory in which doxygen
-# is run, you must also specify the path to the tagfile here.
-
-TAGFILES               =
-
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create
-# a tag file that is based on the input files it reads.
-
-GENERATE_TAGFILE       =
-
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed
-# in the class index. If set to NO only the inherited external classes
-# will be listed.
-
-ALLEXTERNALS           = NO
-
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
-# in the modules index. If set to NO, only the current project's groups will
-# be listed.
-
-EXTERNAL_GROUPS        = YES
-
-# The PERL_PATH should be the absolute path and name of the perl script
-# interpreter (i.e. the result of `which perl').
-
-PERL_PATH              = /usr/bin/perl
-
-#---------------------------------------------------------------------------
-# Configuration options related to the dot tool
-#---------------------------------------------------------------------------
-
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
-# or super classes. Setting the tag to NO turns the diagrams off. Note that
-# this option also works with HAVE_DOT disabled, but it is recommended to
-# install and use dot, since it yields more powerful graphs.
-
-CLASS_DIAGRAMS         = YES
-
-# You can define message sequence charts within doxygen comments using the \msc
-# command. Doxygen will then run the mscgen tool (see
-# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where
-# the mscgen tool resides. If left empty the tool is assumed to be found in the
-# default search path.
-
-MSCGEN_PATH            =
-
-# If set to YES, the inheritance and collaboration graphs will hide
-# inheritance and usage relations if the target is undocumented
-# or is not a class.
-
-HIDE_UNDOC_RELATIONS   = YES
-
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
-# available from the path. This tool is part of Graphviz, a graph visualization
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section
-# have no effect if this option is set to NO (the default)
-
-HAVE_DOT               = NO
-
-# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is
-# allowed to run in parallel. When set to 0 (the default) doxygen will
-# base this on the number of processors available in the system. You can set it
-# explicitly to a value larger than 0 to get control over the balance
-# between CPU load and processing speed.
-
-DOT_NUM_THREADS        = 0
-
-# By default doxygen will use the Helvetica font for all dot files that
-# doxygen generates. When you want a differently looking font you can specify
-# the font name using DOT_FONTNAME. You need to make sure dot is able to find
-# the font, which can be done by putting it in a standard location or by setting
-# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the
-# directory containing the font.
-
-DOT_FONTNAME           = Helvetica
-
-# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
-# The default size is 10pt.
-
-DOT_FONTSIZE           = 10
-
-# By default doxygen will tell dot to use the Helvetica font.
-# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to
-# set the path where dot can find it.
-
-DOT_FONTPATH           =
-
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for each documented class showing the direct and
-# indirect inheritance relations. Setting this tag to YES will force the
-# the CLASS_DIAGRAMS tag to NO.
-
-CLASS_GRAPH            = YES
-
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for each documented class showing the direct and
-# indirect implementation dependencies (inheritance, containment, and
-# class references variables) of the class with other documented classes.
-
-COLLABORATION_GRAPH    = YES
-
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for groups, showing the direct groups dependencies
-
-GROUP_GRAPHS           = YES
-
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
-# collaboration diagrams in a style similar to the OMG's Unified Modeling
-# Language.
-
-UML_LOOK               = NO
-
-# If set to YES, the inheritance and collaboration graphs will show the
-# relations between templates and their instances.
-
-TEMPLATE_RELATIONS     = NO
-
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
-# tags are set to YES then doxygen will generate a graph for each documented
-# file showing the direct and indirect include dependencies of the file with
-# other documented files.
-
-INCLUDE_GRAPH          = YES
-
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
-# documented header file showing the documented files that directly or
-# indirectly include this file.
-
-INCLUDED_BY_GRAPH      = YES
-
-# If the CALL_GRAPH and HAVE_DOT options are set to YES then
-# doxygen will generate a call dependency graph for every global function
-# or class method. Note that enabling this option will significantly increase
-# the time of a run. So in most cases it will be better to enable call graphs
-# for selected functions only using the \callgraph command.
-
-CALL_GRAPH             = NO
-
-# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
-# doxygen will generate a caller dependency graph for every global function
-# or class method. Note that enabling this option will significantly increase
-# the time of a run. So in most cases it will be better to enable caller
-# graphs for selected functions only using the \callergraph command.
-
-CALLER_GRAPH           = NO
-
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
-# will generate a graphical hierarchy of all classes instead of a textual one.
-
-GRAPHICAL_HIERARCHY    = YES
-
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
-# then doxygen will show the dependencies a directory has on other directories
-# in a graphical way. The dependency relations are determined by the #include
-# relations between the files in the directories.
-
-DIRECTORY_GRAPH        = YES
-
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
-# generated by dot. Possible values are svg, png, jpg, or gif.
-# If left blank png will be used. If you choose svg you need to set
-# HTML_FILE_EXTENSION to xhtml in order to make the SVG files
-# visible in IE 9+ (other browsers do not have this requirement).
-
-DOT_IMAGE_FORMAT       = png
-
-# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
-# enable generation of interactive SVG images that allow zooming and panning.
-# Note that this requires a modern browser other than Internet Explorer.
-# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you
-# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files
-# visible. Older versions of IE do not have SVG support.
-
-INTERACTIVE_SVG        = NO
-
-# The tag DOT_PATH can be used to specify the path where the dot tool can be
-# found. If left blank, it is assumed the dot tool can be found in the path.
-
-DOT_PATH               =
-
-# The DOTFILE_DIRS tag can be used to specify one or more directories that
-# contain dot files that are included in the documentation (see the
-# \dotfile command).
-
-DOTFILE_DIRS           =
-
-# The MSCFILE_DIRS tag can be used to specify one or more directories that
-# contain msc files that are included in the documentation (see the
-# \mscfile command).
-
-MSCFILE_DIRS           =
-
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
-# nodes that will be shown in the graph. If the number of nodes in a graph
-# becomes larger than this value, doxygen will truncate the graph, which is
-# visualized by representing a node as a red box. Note that doxygen if the
-# number of direct children of the root node in a graph is already larger than
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
-# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
-
-DOT_GRAPH_MAX_NODES    = 50
-
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
-# graphs generated by dot. A depth value of 3 means that only nodes reachable
-# from the root by following a path via at most 3 edges will be shown. Nodes
-# that lay further from the root node will be omitted. Note that setting this
-# option to 1 or 2 may greatly reduce the computation time needed for large
-# code bases. Also note that the size of a graph can be further restricted by
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
-
-MAX_DOT_GRAPH_DEPTH    = 0
-
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
-# background. This is disabled by default, because dot on Windows does not
-# seem to support this out of the box. Warning: Depending on the platform used,
-# enabling this option may lead to badly anti-aliased labels on the edges of
-# a graph (i.e. they become hard to read).
-
-DOT_TRANSPARENT        = NO
-
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
-# files in one run (i.e. multiple -o and -T options on the command line). This
-# makes dot run faster, but since only newer versions of dot (>1.8.10)
-# support this, this feature is disabled by default.
-
-DOT_MULTI_TARGETS      = NO
-
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
-# generate a legend page explaining the meaning of the various boxes and
-# arrows in the dot generated graphs.
-
-GENERATE_LEGEND        = YES
-
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
-# remove the intermediate dot files that are used to generate
-# the various graphs.
-
-DOT_CLEANUP            = YES
diff --git a/examples/c++/CMakeLists-Standalone.txt b/examples/c++/CMakeLists-Standalone.txt
deleted file mode 100644
index dbf50bc..0000000
--- a/examples/c++/CMakeLists-Standalone.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-cmake_minimum_required(VERSION 2.8)
-project(ISMRMRD_EXAMPLES)
-
-set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
-
-if (WIN32)
-ADD_DEFINITIONS(-DWIN32 -D_WIN32 -D_WINDOWS)
-ADD_DEFINITIONS(-DUNICODE -D_UNICODE)
-ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS)
-SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc")
-SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3")
-endif (WIN32)
-
-set(CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}/ismrmrd)
-
-find_package(Ismrmrd REQUIRED)
-find_package(FFTW3 COMPONENTS single REQUIRED)
-
-include_directories (
-    ${CMAKE_CURRENT_SOURCE_DIR}
-    ${ISMRMRD_INCLUDE_DIR}
-    ${FFTW3_INCLUDE_DIR}
-)
-
-add_executable(ismrmrd_create_dataset test_create_dataset.cpp)
-target_link_libraries(
-    ismrmrd_create_dataset
-    ${ISMRMRD_LIBRARIES}
-    ${ISMRMRD_XSD_LIBRARIES}
-    ${FFTW3_LIBRARIES}
-)
-INSTALL(TARGETS ismrmrd_create_dataset DESTINATION bin)
-
-add_executable(ismrmrd_recon_dataset test_recon_dataset.cpp)
-target_link_libraries(
-    ismrmrd_recon_dataset
-    ${ISMRMRD_LIBRARIES}
-    ${ISMRMRD_XSD_LIBRARIES}
-    ${FFTW3_LIBRARIES}
-)
-INSTALL(TARGETS ismrmrd_recon_dataset DESTINATION bin)
-
-
diff --git a/examples/c++/CMakeLists.txt b/examples/c++/CMakeLists.txt
deleted file mode 100644
index b15c565..0000000
--- a/examples/c++/CMakeLists.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-find_package(FFTW3 COMPONENTS single)
-IF(FFTW3_FOUND)
-       MESSAGE("FFTW3 Found, building test applications")
-       INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../.. ${FFTW3_INCLUDE_DIR})
-       add_executable(ismrmrd_create_dataset test_create_dataset.cpp)
-       target_link_libraries(ismrmrd_create_dataset ${XERCESC_LIBRARIES} ismrmrd ismrmrd_xsd ${FFTW3_LIBRARIES})
-       INSTALL(TARGETS ismrmrd_create_dataset DESTINATION bin)
-       add_executable(ismrmrd_recon_dataset test_recon_dataset.cpp)
-       target_link_libraries(ismrmrd_recon_dataset ${XERCESC_LIBRARIES} ismrmrd ismrmrd_xsd ${FFTW3_LIBRARIES})
-       INSTALL(TARGETS ismrmrd_recon_dataset DESTINATION bin)
-ELSE(FFTW3_FOUND)
-       MESSAGE("FFTW3 NOT Found....cannot build test applications")
-ENDIF(FFTW3_FOUND)
-
diff --git a/examples/c++/cmake/FindFFTW3.cmake b/examples/c++/cmake/FindFFTW3.cmake
deleted file mode 100644
index eccfe9f..0000000
--- a/examples/c++/cmake/FindFFTW3.cmake
+++ /dev/null
@@ -1,93 +0,0 @@
-# - Try to find FFTW3.
-# Usage: find_package(FFTW3 [COMPONENTS [single double long-double threads]])
-#
-# Variables used by this module:
-#  FFTW3_ROOT_DIR             - FFTW3 root directory
-# Variables defined by this module:
-#  FFTW3_FOUND                - system has FFTW3
-#  FFTW3_INCLUDE_DIR          - the FFTW3 include directory (cached)
-#  FFTW3_INCLUDE_DIRS         - the FFTW3 include directories
-#                               (identical to FFTW3_INCLUDE_DIR)
-#  FFTW3[FL]?_LIBRARY         - the FFTW3 library - double, single(F), 
-#                               long-double(L) precision (cached)
-#  FFTW3[FL]?_THREADS_LIBRARY - the threaded FFTW3 library - double, single(F), 
-#                               long-double(L) precision (cached)
-#  FFTW3_LIBRARIES            - list of all FFTW3 libraries found
-
-# Copyright (C) 2009-2010
-# ASTRON (Netherlands Institute for Radio Astronomy)
-# P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
-#
-# This file is part of the LOFAR software suite.
-# The LOFAR software suite 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 LOFAR software suite 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 the LOFAR software suite. If not, see <http://www.gnu.org/licenses/>.
-#
-# $Id: FindFFTW3.cmake 15918 2010-06-25 11:12:42Z loose $
-
-# Use double precision by default.
-if(FFTW3_FIND_COMPONENTS MATCHES "^$")
-  set(_components double)
-else()
-  set(_components ${FFTW3_FIND_COMPONENTS})
-endif()
-
-# Loop over each component.
-set(_libraries)
-foreach(_comp ${_components})
-  if(_comp STREQUAL "single")
-    list(APPEND _libraries fftw3f)
-  elseif(_comp STREQUAL "double")
-    list(APPEND _libraries fftw3)
-  elseif(_comp STREQUAL "long-double")
-    list(APPEND _libraries fftw3l)
-  elseif(_comp STREQUAL "threads")
-    set(_use_threads ON)
-  else(_comp STREQUAL "single")
-    message(FATAL_ERROR "FindFFTW3: unknown component `${_comp}' specified. "
-      "Valid components are `single', `double', `long-double', and `threads'.")
-  endif(_comp STREQUAL "single")
-endforeach(_comp ${_components})
-
-# If using threads, we need to link against threaded libraries as well.
-if(_use_threads)
-  set(_thread_libs)
-  foreach(_lib ${_libraries})
-    list(APPEND _thread_libs ${_lib}_threads)
-  endforeach(_lib ${_libraries})
-  set(_libraries ${_thread_libs} ${_libraries})
-endif(_use_threads)
-
-# Keep a list of variable names that we need to pass on to
-# find_package_handle_standard_args().
-set(_check_list)
-
-# Search for all requested libraries.
-foreach(_lib ${_libraries})
-  string(TOUPPER ${_lib} _LIB)
-  find_library(${_LIB}_LIBRARY ${_lib}
-    HINTS ${FFTW3_ROOT_DIR} PATH_SUFFIXES lib)
-  mark_as_advanced(${_LIB}_LIBRARY)
-  list(APPEND FFTW3_LIBRARIES ${${_LIB}_LIBRARY})
-  list(APPEND _check_list ${_LIB}_LIBRARY)
-endforeach(_lib ${_libraries})
-
-# Search for the header file.
-find_path(FFTW3_INCLUDE_DIR fftw3.h 
-  HINTS ${FFTW3_ROOT_DIR} PATH_SUFFIXES include)
-mark_as_advanced(FFTW3_INCLUDE_DIR)
-list(APPEND _check_list FFTW3_INCLUDE_DIR)
-
-# Handle the QUIETLY and REQUIRED arguments and set FFTW_FOUND to TRUE if
-# all listed variables are TRUE
-include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(FFTW3 DEFAULT_MSG ${_check_list})
diff --git a/examples/c++/cmake/FindIsmrmrd.cmake b/examples/c++/cmake/FindIsmrmrd.cmake
deleted file mode 100644
index 3defaf4..0000000
--- a/examples/c++/cmake/FindIsmrmrd.cmake
+++ /dev/null
@@ -1,29 +0,0 @@
-# - Find ISMRMRRD
-#   ISMRMRD_FOUND        - True if ISMRMRD found.
-#   ISMRMRD_INCLUDE_DIR  - where to find ismrmrd.h, etc.
-#   ISMRMRD_LIBRARIES    - libismrmrd.so.
-#   ISMRMRD_XSD_LIBRARIES    - libismrmrd.so.
-#   ISMRMRD_SCHEMA_DIR   - Where to find ismrmrd.xsd
-
-FIND_PATH( ISMRMRD_INCLUDE_DIR ismrmrd.h
-    HINTS $ENV{ISMRMRD_HOME}
-    PATHS /usr/local/ /usr/include /usr/local/include
-    PATH_SUFFIXES ismrmrd ismrmrd/include include)
-
-FIND_PATH( ISMRMRD_SCHEMA_DIR ismrmrd.xsd
-    HINTS $ENV{ISMRMRD_HOME}
-    PATHS /usr/local/ /usr/include /usr/local/include
-    PATH_SUFFIXES ismrmrd ismrmrd/schema schema)
-
-FIND_LIBRARY( ISMRMRD_LIBRARIES
-              NAMES "ismrmrd"
-              PATHS  /usr/local/lib ${ISMRMRD_INCLUDE_DIR}/../lib /usr/lib )
-
-FIND_LIBRARY( ISMRMRD_XSD_LIBRARIES
-              NAMES "ismrmrd_xsd"
-              PATHS  /usr/local/lib ${ISMRMRD_INCLUDE_DIR}/../lib /usr/lib )
-
-INCLUDE( "FindPackageHandleStandardArgs" )
-FIND_PACKAGE_HANDLE_STANDARD_ARGS( "Ismrmrd" DEFAULT_MSG ISMRMRD_INCLUDE_DIR ISMRMRD_LIBRARIES ISMRMRD_SCHEMA_DIR)
-
-MARK_AS_ADVANCED( ISMRMRD_INCLUDE_DIR ISMRMRD_LIBRARIES ISMRMRD_SCHEMA_DIR)
diff --git a/examples/c++/test_create_dataset.cpp b/examples/c++/test_create_dataset.cpp
deleted file mode 100644
index a67331d..0000000
--- a/examples/c++/test_create_dataset.cpp
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * test_create_dataset.cpp
- *
- *  Created on: Sep 4, 2012
- *      Author: Michael S. Hansen (michael.hansen at nih.gov)
- */
-
-#include <iostream>
-#include "ismrmrd_hdf5.h"
-#include "fftw3.h"
-#include "ismrmrd.hxx"
-
-//Utility function for appending different sizes of arrays, used for testing here
-template <typename T, int size_x, int size_y> int appendImageArray(ISMRMRD::IsmrmrdDataset& d, const char* varname)
-{
-	T a[size_x*size_y];
-	std::vector<unsigned int> dims(2,0);
-	dims[0] = size_x;
-	dims[1] = size_y;
-
-	//Let's make a simple square (rectangle depending on dimensions)
-	for (int y = 0; y < size_y; y++) {
-		for (int x = 0; x < size_x; x++) {
-			if ( (x > (size_x>>2)) && (x < (size_x-(size_x>>2))) &&
-				 (y > (size_y>>3)) && (y < (size_y-(size_y>>3)))) {
-				a[y*size_x + x] = 1.0;
-			} else {
-				a[y*size_x + x] = 0.0;
-			}
-		}
-	}
-
-	ISMRMRD::NDArrayContainer<T> tmp(dims,a);
-
-	return d.appendArray(tmp, varname);
-}
-
-//Helper function for the FFTW library
-template<typename TI, typename TO> void circshift(TO *out, const TI *in, int xdim, int ydim, int xshift, int yshift)
-{
-  for (int i =0; i < ydim; i++) {
-    int ii = (i + yshift) % ydim;
-    for (int j = 0; j < xdim; j++) {
-      int jj = (j + xshift) % xdim;
-      out[ii * xdim + jj] = in[i * xdim + j];
-    }
-  }
-}
-
-#define fftshift(out, in, x, y) circshift(out, in, x, y, (x/2), (y/2))
-
-/* MAIN APPLICATION */
-int main(int argc, char** argv)
-{
-	std::cout << "ISMRMRD Test Dataset Creation App" << std::endl;
-
-	const unsigned int readout = 256;
-	const unsigned int phase_encoding_lines = 128;
-
-	ISMRMRD::IsmrmrdDataset d("testdata.h5","dataset");
-
-	//Let's create the "original" image in the file for reference
-	if (appendImageArray< std::complex<float>, readout, phase_encoding_lines >(d, "the_square") < 0) {
-		std::cout << "Error adding image to dataset" << std::endl;
-		return -1;
-	}
-
-	//Read it back from the file
-	boost::shared_ptr< ISMRMRD::NDArrayContainer<std::complex<float> > > img_test =
-			d.readArray< std::complex<float> >("the_square", 0);
-
-	if (img_test.get() == 0) {
-		std::cout << "Error reading image array from file" << std::endl;
-		return -1;
-	}
-
-	std::cout << "Image Array dimensions: ";
-	for (int di = 0; di < img_test->dimensions_.size(); di++) {
-		std::cout << img_test->dimensions_[di] << " ";
-	}
-	std::cout << std::endl;
-
-	//Let's FFT this image to k-space
-	fftwf_complex* tmp = (fftwf_complex*)fftwf_malloc(sizeof(fftwf_complex)*img_test->data_.size());
-
-	if (!tmp) {
-		std::cout << "Error allocating temporary storage for FFTW" << std::endl;
-		return -1;
-	}
-
-	fftshift(reinterpret_cast<std::complex<float>*>(tmp),&img_test->data_[0],img_test->dimensions_[0],img_test->dimensions_[1]);
-
-	//Create the FFTW plan
-	fftwf_plan p = fftwf_plan_dft_2d(img_test->dimensions_[1], img_test->dimensions_[0], tmp,tmp, FFTW_FORWARD, FFTW_ESTIMATE);
-
-	fftwf_execute(p);
-
-	fftshift(&img_test->data_[0],reinterpret_cast<std::complex<float>*>(tmp),img_test->dimensions_[0],img_test->dimensions_[1]);
-
-	//Clean up.
-	fftwf_destroy_plan(p);
-	fftwf_free(tmp);
-
-	//Let keep the "original" k-space in the file for reference
-	if (d.appendArray(*img_test,"the_square_k") < 0) {
-		std::cout << "Error adding kspace to dataset" << std::endl;
-		return -1;
-	}
-
-	//Let's append the data to the file
-	ISMRMRD::Acquisition acq;
-
-	acq.data_ = new float[readout*2];
-	if (!acq.data_) {
-		std::cout << "Error allocating memory for the acquisition" << std::endl;
-	}
-
-	for (unsigned int i = 0; i < phase_encoding_lines; i++) {
-		acq.head_.flags = 0;
-		//Set some flags
-		if (i == 0) {
-			acq.setFlag(ISMRMRD::FlagBit(ISMRMRD::ACQ_FIRST_IN_SLICE));
-		}
-		if (i == (phase_encoding_lines-1)) {
-			acq.setFlag(ISMRMRD::FlagBit(ISMRMRD::ACQ_LAST_IN_SLICE));
-		}
-		acq.head_.idx.kspace_encode_step_1 = i;
-		acq.head_.active_channels = 1;
-		acq.head_.available_channels = 1;
-		acq.head_.number_of_samples = readout;
-		acq.head_.center_sample = (readout>>1);
-		acq.head_.sample_time_us = 5.0;
-		memcpy(acq.data_,&img_test->data_[i*readout],sizeof(float)*readout*2);
-		d.appendAcquisition(&acq);
-	}
-
-	//Let's create a header, we will use the C++ class generated by XSD
-	ISMRMRD::experimentalConditionsType exp(63500000); //~1.5T
-	ISMRMRD::ismrmrdHeader h(exp);
-
-	//Create an encoding section
-	ISMRMRD::encodingSpaceType es(ISMRMRD::matrixSize(readout,phase_encoding_lines,1),ISMRMRD::fieldOfView_mm(600,300,6));
-	ISMRMRD::encodingSpaceType rs(ISMRMRD::matrixSize((readout>>1),phase_encoding_lines,1),ISMRMRD::fieldOfView_mm(300,300,6));
-	ISMRMRD::encodingLimitsType el;
-	el.kspace_encoding_step_1(ISMRMRD::limitType(0,phase_encoding_lines-1,(phase_encoding_lines>>1)));
-	ISMRMRD::encoding e(es,rs,el,ISMRMRD::trajectoryType::cartesian);
-
-	//Add the encoding section to the header
-	h.encoding().push_back(e);
-
-	//Add any additional fields that you may want would go here....
-
-	//e.g. parallel imaging
-	//ISMRMRD::parallelImagingType parallel(ISMRMRD::accelerationFactorType(2,1));
-	//parallel.calibrationMode(ISMRMRD::calibrationModeType::embedded);
-    //h.parallelImaging(parallel);
-
-	//Serialize the header
-	xml_schema::namespace_infomap map;
-	map[""].name = "http://www.ismrm.org/ISMRMRD";
-	map[""].schema = "ismrmrd.xsd";
-	std::stringstream str;
-	ISMRMRD::ismrmrdHeader_(str, h, map);
-	std::string xml_header = str.str();
-
-	//Write the header to the data file.
-	d.writeHeader(xml_header);
-
-	return 0;
-}
diff --git a/examples/c++/test_recon_dataset.cpp b/examples/c++/test_recon_dataset.cpp
deleted file mode 100644
index 1e2e6e3..0000000
--- a/examples/c++/test_recon_dataset.cpp
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * test_recon_dataset.cpp
- *
- *  Created on: Sep 6, 2012
- *      Author: Michael S. Hansen (michael.hansen at nih.gov)
- *
- */
-
-#include <iostream>
-#include "ismrmrd.h"
-#include "ismrmrd.hxx"
-#include "ismrmrd_hdf5.h"
-#include "fftw3.h"
-
-//Helper function for the FFTW library
-template<typename TI, typename TO> void circshift(TO *out, const TI *in, int xdim, int ydim, int xshift, int yshift)
-{
-  for (int i =0; i < ydim; i++) {
-    int ii = (i + yshift) % ydim;
-    for (int j = 0; j < xdim; j++) {
-      int jj = (j + xshift) % xdim;
-      out[ii * xdim + jj] = in[i * xdim + j];
-    }
-  }
-}
-
-#define fftshift(out, in, x, y) circshift(out, in, x, y, (x/2), (y/2))
-
-void print_usage(const char* application)
-{
-	std::cout << "Usage:" << std::endl;
-	std::cout << "  - " << application << " <HDF5_FILENAME> " << "<SCHEMA_FILENAME>" << std::endl;
-}
-
-/* MAIN APPLICATION */
-int main(int argc, char** argv)
-{
-	if (argc < 3) {
-		print_usage(argv[0]);
-		return -1;
-	}
-
-	std::string datafile(argv[1]);
-	std::string schemafile(argv[2]);
-
-	std::cout << "Simple ISMRMRD Reconstruction program" << std::endl;
-	std::cout << "   - filename: " << datafile << std::endl;
-	std::cout << "   - schema  : " << schemafile << std::endl;
-
-	//Let's open the dataset
-	ISMRMRD::IsmrmrdDataset d(datafile.c_str(),"dataset");
-
-	//We will start by getting the header and turning it into a C++ class
-	//In order to do true validation of the XML, we will use the XML schema
-	xml_schema::properties props;
-	props.schema_location ("http://www.ismrm.org/ISMRMRD", schemafile);
-
-	boost::shared_ptr<std::string> xml = d.readHeader();
-	std::istringstream str_stream(*xml, std::stringstream::in);
-
-	boost::shared_ptr<ISMRMRD::ismrmrdHeader> cfg;
-
-	try {
-		cfg = boost::shared_ptr<ISMRMRD::ismrmrdHeader>(ISMRMRD::ismrmrdHeader_ (str_stream,0,props));
-	}  catch (const xml_schema::exception& e) {
-		std::cout << "Failed to parse XML Parameters: " << e.what() << std::endl;
-	}
-
-	//Let's print some information from the header
-	ISMRMRD::ismrmrdHeader::encoding_sequence e_seq = cfg->encoding();
-	if (e_seq.size() != 1) {
-		std::cout << "Number of encoding spaces: " << e_seq.size() << std::endl;
-		std::cout << "This simple reconstruction application only supports one encoding space" << std::endl;
-		return -1;
-	}
-
-	ISMRMRD::encodingSpaceType e_space = (*e_seq.begin()).encodedSpace();
-	ISMRMRD::encodingSpaceType r_space = (*e_seq.begin()).reconSpace();
-	ISMRMRD::encodingLimitsType e_limits = (*e_seq.begin()).encodingLimits();
-
-	std::cout << "Encoding Matrix Size        : [" << e_space.matrixSize().x() << ", " << e_space.matrixSize().y() << ", " << e_space.matrixSize().z() << "]" << std::endl;
-	std::cout << "Reconstruction Matrix Size  : [" << r_space.matrixSize().x() << ", " << r_space.matrixSize().y() << ", " << r_space.matrixSize().z() << "]" << std::endl;
-	std::cout << "Number of acquisitions      : " << d.getNumberOfAcquisitions() << std::endl;
-
-	if (e_space.matrixSize().z() != 1) {
-		std::cout << "This simple reconstruction application only supports 2D encoding spaces" << std::endl;
-		return -1;
-	}
-
-	//Allocate a buffer for the data
-	ISMRMRD::NDArrayContainer< std::complex<float> > buffer;
-	buffer.dimensions_.push_back(e_space.matrixSize().x());
-	buffer.dimensions_.push_back(e_space.matrixSize().y());
-	buffer.data_.resize(e_space.matrixSize().x()*e_space.matrixSize().y(), std::complex<float>(0.0,0.0));
-
-	//Now loop through and copy data
-	unsigned int number_of_acquisitions = d.getNumberOfAcquisitions();
-	for (unsigned int i = 0; i < number_of_acquisitions; i++) {
-		//Read one acquisition at a time
-		boost::shared_ptr<ISMRMRD::Acquisition> acq = d.readAcquisition(i);
-
-		//Copy data, we should probably be more careful here and do more tests....
-		//We are not considering multiple channels here.
-		unsigned int offset = acq->head_.idx.kspace_encode_step_1*buffer.dimensions_[0];
-		memcpy(&buffer.data_[offset],acq->data_,sizeof(float)*2*buffer.dimensions_[0]);
-	}
-
-	//Let's FFT the k-space to image
-	fftwf_complex* tmp = (fftwf_complex*)fftwf_malloc(sizeof(fftwf_complex)*buffer.data_.size());
-
-	if (!tmp) {
-		std::cout << "Error allocating temporary storage for FFTW" << std::endl;
-		return -1;
-	}
-
-	fftshift(reinterpret_cast<std::complex<float>*>(tmp),&buffer.data_[0],buffer.dimensions_[0],buffer.dimensions_[1]);
-
-	//Create the FFTW plan
-	fftwf_plan p = fftwf_plan_dft_2d(buffer.dimensions_[1], buffer.dimensions_[0], tmp,tmp, FFTW_BACKWARD, FFTW_ESTIMATE);
-
-	fftwf_execute(p);
-
-	fftshift(&buffer.data_[0],reinterpret_cast<std::complex<float>*>(tmp),buffer.dimensions_[0],buffer.dimensions_[1]);
-
-	//Clean up.
-	fftwf_destroy_plan(p);
-	fftwf_free(tmp);
-
-	//Now, let's remove the oversampling in the readout and take the magnitude
-	//Allocate a buffer for the data
-	ISMRMRD::NDArrayContainer< float > img;
-	img.dimensions_.push_back(r_space.matrixSize().x());
-	img.dimensions_.push_back(r_space.matrixSize().y());
-	img.data_.resize(r_space.matrixSize().x()*r_space.matrixSize().y(), 0.0);
-
-	for (unsigned int y = 0; y < img.dimensions_[1]; y++) {
-		for (unsigned int x = 0; x < img.dimensions_[0]; x++) {
-			img.data_[y*img.dimensions_[0]+x] =
-				std::abs(buffer.data_[y*buffer.dimensions_[0] + x + ((e_space.matrixSize().x()-r_space.matrixSize().x())>>1)]);
-		}
-	}
-
-	//Let's write the reconstructed image straight in the same data file
-	ISMRMRD::ImageHeader img_h;
-	img_h.channels = 1;
-	img_h.image_data_type = ISMRMRD::DATA_COMPLEX_FLOAT; //This is actually just guidance
-	img_h.image_type      = ISMRMRD::TYPE_COMPLEX;       //This is actually just guidance
-	img_h.slice = 0;
-	//And so on
-
-	//Now append, we will append image and header separately (in two different datasets)
-	d.appendImageHeader(img_h,"myimage.head");
-	d.appendArray(img,"myimage.img");
-
-
-	return 0;
-}
diff --git a/examples/data/.gitignore b/examples/data/.gitignore
deleted file mode 100644
index 424e4bc..0000000
--- a/examples/data/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-*.h5
\ No newline at end of file
diff --git a/examples/data/README.txt b/examples/data/README.txt
deleted file mode 100644
index 92962b7..0000000
--- a/examples/data/README.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-ISMRM Raw Data Example files
------------------------------
-
-
-
-Please download the example data files from:
-
-https://sourceforge.net/projects/ismrmrd/files/data/
-
-On Linux command line, simply type:
-
-wget https://sourceforge.net/projects/ismrmrd/files/data/3D_partial_fourier.h5
-wget https://sourceforge.net/projects/ismrmrd/files/data/simple_gre.h5
-wget https://sourceforge.net/projects/ismrmrd/files/data/simple_spiral.h5
-
-
-
diff --git a/examples/matlab/ismrmrd_header2struct.m b/examples/matlab/ismrmrd_header2struct.m
deleted file mode 100644
index 34e2370..0000000
--- a/examples/matlab/ismrmrd_header2struct.m
+++ /dev/null
@@ -1,25 +0,0 @@
-function s = ismrmrd_header2struct(header)
-%
-%
-%  s = ismrmrd_header2struct(header)
-%
-%  Converts and ISMRMRD xml header to a struct.
-%
-
-    if (iscell(header)),
-        header_string = header{1};
-    else
-        header_string = header;
-    end
-
-    if (ischar(header_string) < 1),
-        error('Malformed input header. Is not a character string.');
-    end
-
-    tmp_nam = tempname;
-    f=fopen(tmp_nam,'w');
-    fwrite(f,header_string);
-    fclose(f);
-
-    s = xml2struct(tmp_nam);
-return
\ No newline at end of file
diff --git a/examples/matlab/simple_cartesian_recon.m b/examples/matlab/simple_cartesian_recon.m
deleted file mode 100644
index 9e9daec..0000000
--- a/examples/matlab/simple_cartesian_recon.m
+++ /dev/null
@@ -1,82 +0,0 @@
-function [images] = simple_cartesian_recon(ismrmrdfile)
-%
-%   [images] = simple_cartesian_recon(ismrmrdfile)
-%
-%   Simple example of how to reconstruct a 2D/3D cartesian dataset stored
-%   in ISMRMRD dataformat. Reconstruction handles partial fourier,
-%   oversampling, etc. 
-%
-%   Michael S. Hansen (michael.hansen at nih.gov), 2012
-%
-
-
-%read the header
-header = ismrmrd_header2struct(h5read(ismrmrdfile,'/dataset/xml'));
-
-
-%Is this a cartesian acquisition
-if (~strcmp(header.ismrmrdHeader.encoding.trajectory.Text,'cartesian')),
-   error('This is not a cartesian dataset'); 
-end
-
-%if (str2num(header.ismrmrdHeader.encoding.encodedSpace.matrixSize.z.Text) <= 1),
-%    error('This is not a 3D dataset'); 
-%end
-    
-%Let's get the matrix size
-matrix_size = [str2num(header.ismrmrdHeader.encoding.encodedSpace.matrixSize.x.Text), ...
-               str2num(header.ismrmrdHeader.encoding.encodedSpace.matrixSize.y.Text), ...
-               str2num(header.ismrmrdHeader.encoding.encodedSpace.matrixSize.z.Text)];
-
-           
-recon_size = [str2num(header.ismrmrdHeader.encoding.reconSpace.matrixSize.x.Text), ...
-              str2num(header.ismrmrdHeader.encoding.reconSpace.matrixSize.y.Text), ...
-              str2num(header.ismrmrdHeader.encoding.reconSpace.matrixSize.z.Text)];
-
-
-%Let's load the data
-raw_data = h5read(ismrmrdfile,'/dataset/data');
-
-channels = max(raw_data.head.active_channels);
-samples = max(raw_data.head.number_of_samples);
-center_line = str2num(header.ismrmrdHeader.encoding.encodingLimits.kspace_encoding_step_1.center.Text);
-center_partition = str2num(header.ismrmrdHeader.encoding.encodingLimits.kspace_encoding_step_2.center.Text);
-
-if (samples ~= matrix_size(1)),
-    error('Mismatch between number of samples and matrix size');
-end
-
-buffer = zeros(matrix_size(1),matrix_size(2),matrix_size(3),channels);           
-counter = 0;
-for p=1:length(raw_data.head.flags),
-   if (bitget(uint64(raw_data.head.flags(p)),19)), %if this is noise, we will skip it
-      continue; 
-   end
-   line_number      = (int32(raw_data.head.idx.kspace_encode_step_1(p))-center_line)+bitshift(matrix_size(2),-1);  
-   partition_number = (int32(raw_data.head.idx.kspace_encode_step_2(p))-center_partition)+bitshift(matrix_size(3),-1);  
-   buffer(:,line_number+1,partition_number+1,:) = reshape(complex(raw_data.data{p}(1:2:end), raw_data.data{p}(2:2:end)), samples, 1, 1, channels);
-   
-   if (bitget(uint64(raw_data.head.flags(p)),8)), %Is this the last in slice? We should make an image
-      fprintf('Reconstructing image %d....', counter+1); 
-
-      img = fftshift(ifft(ifftshift(buffer),[],1)) ./ sqrt(size(buffer,1));
-      img = fftshift(ifft(ifftshift(img),[],2)) ./ sqrt(size(img,2));
-      if (matrix_size(3) > 1), 
-          img = fftshift(ifft(ifftshift(img),[],3)) ./ sqrt(size(img,3));
-      end
-      
-      img = img((1:recon_size(1))+bitshift(matrix_size(1)-recon_size(1),-1), ...
-                (1:recon_size(2))+bitshift(matrix_size(2)-recon_size(2),-1), ...
-                (1:recon_size(3))+bitshift(matrix_size(3)-recon_size(3),-1), :);
-      
-      images(:,:,:,counter+1) = sqrt(sum(abs(img).^2,4)); %RMS coil combination
-      counter = counter + 1;
-      fprintf('done\n'); 
-      buffer = zeros(matrix_size(1),matrix_size(2),matrix_size(3), channels);           
-   end  
-end
-
-%Let's just show the middle slice image
-imagesc(images(:,:,bitshift(size(images,3),-1)+1, 1));colormap(gray);axis image;
-
-
diff --git a/examples/matlab/simple_gridder.m b/examples/matlab/simple_gridder.m
deleted file mode 100644
index cb65fb5..0000000
--- a/examples/matlab/simple_gridder.m
+++ /dev/null
@@ -1,100 +0,0 @@
-function img = simple_gridder(co,data,weight,matrix_size)
-%
-%   img = simple_gridder(co,data,weight,matrix_size)
-%
-%   A very simple gridder written purely in Matlab. 
-%   Only tested for 2D
-%
-%   Input arguments:
-%     - co [N,2], k-space coordinates in the range [-0.5:0.5]
-%     - data, vector of N complex data points
-%     - weight, vector of N data weights (density compensation)
-%     - matrix_size, 2-element vector, e.g. [128 128]
-%
-%   Michael S. Hansen (michael.hansen at nih.gov), 2012
-%
-%
-
-over_sampling = 2.0;
-kernel_width = 8;
-kernel_samples = 100000;
-kernel_beta = 18.5547;
-matrix_size_oversampled = matrix_size*over_sampling;
-
-kernel_table = 1.0-(2.0*[-bitshift(kernel_samples,-1):(bitshift(kernel_samples,-1)-1)]/kernel_samples).^2;
-
-kernel_table(kernel_table<0) = 0;
-kernel_table=sqrt(kernel_table);
-kernel_table = bessi0(kernel_beta .* kernel_table);
-knorm = sum(kernel_table(:))/numel(kernel_table);
-kernel_table = kernel_table ./ knorm;
-
-grid_cells = ceil(co .* repmat(matrix_size_oversampled,size(co,1),1)-(kernel_width/2));
-kernel_idx = grid_cells-(co .* repmat(matrix_size_oversampled,size(co,1),1));
-grid_cells = uint32(grid_cells+repmat(bitshift(matrix_size_oversampled+kernel_width,-1),size(co,1),1));
-kernel_idx = uint32(floor(((kernel_idx + kernel_width/2)/kernel_width)*kernel_samples));
-kernel_step = uint32(floor(kernel_samples/kernel_width));
-
-%Calculate deapodization
-kern = -bitshift(kernel_width,-1):(-bitshift(kernel_width,-1)+kernel_width-1);
-kern = 1.0-(2.0*kern/kernel_width).^2;
-kern = bessi0(kernel_beta .* kern);
-kern = repmat(kern,kernel_width,1) .* repmat(kern',1,kernel_width);
-deapodization = zeros(matrix_size_oversampled);
-deapodization((1:kernel_width) + bitshift(matrix_size_oversampled(1)-kernel_width,-1), ...
-              (1:kernel_width) + bitshift(matrix_size_oversampled(2)-kernel_width,-1)) = kern;  
-deapodization = fftshift(ifftn(ifftshift(deapodization))) ./ sqrt(numel(deapodization));
-
-%Do convolution
-oversampled_grid_padded = zeros(matrix_size_oversampled+kernel_width);
-for y=1:(kernel_width),
-    for x=1:(kernel_width),       
-        oversampled_grid_padded = oversampled_grid_padded + ...
-            accumarray([grid_cells(:,1)+(x-1),grid_cells(:,2)+(y-1)], ...
-            weight(:).*data(:).*(kernel_table(kernel_idx(:,1)+(x-1)*kernel_step+1).*kernel_table(kernel_idx(:,2)+(y-1).*kernel_step+1))', ...
-            matrix_size_oversampled+kernel_width);
-    end
-end
-
-osps = size(oversampled_grid_padded);
-oss = matrix_size_oversampled;
-
-%Let's just get rid of the padding, it should really be folded in
-oversampled_grid = oversampled_grid_padded(bitshift(osps(1)-oss(1),-1):bitshift(osps(1)-oss(1),-1)+matrix_size_oversampled(1)-1, ...
-                                           bitshift(osps(2)-oss(2),-1):bitshift(osps(1)-oss(2),-1)+matrix_size_oversampled(2)-1); 
-
-%FFT to image space                                       
-img = fftshift(ifftn(ifftshift(oversampled_grid))) ./ sqrt(numel(oversampled_grid));
-
-%Deapodization
-img = img ./ deapodization;
-
-%Remove oversampling
-img = img((1:matrix_size(1))+bitshift(matrix_size_oversampled(1)-matrix_size(1),-1), ...
-          (1:matrix_size(2))+bitshift(matrix_size_oversampled(2)-matrix_size(2),-1));
-
-%TODO
-% - fold padding back in
-
-return
-
-function ans = bessi0(x)
-
-ax = abs(x);
-ans = zeros(size(x));
-
-% ax<3.75
-k = find(ax<3.75);
-y=x(k)./3.75;
-y=y.^2;
-ans(k)=1.0+y.*(3.5156229+y.*(3.0899424+y.*(1.2067492 ...
-    +y.*(0.2659732+y.*(0.360768e-1+y.*0.45813e-2)))));
-
-% ax>=3.75
-k = find(ax>=3.75);
-y=3.75./ax(k);
-ans(k)=(exp(ax(k))./sqrt(ax(k))).*(0.39894228+y.*(0.1328592e-1 ...
-    +y.*(0.225319e-2+y.*(-0.157565e-2+y.*(0.916281e-2 ...
-    +y.*(-0.2057706e-1+y.*(0.2635537e-1+y.*(-0.1647633e-1 ...
-    +y.*0.392377e-2))))))));
-return
\ No newline at end of file
diff --git a/examples/matlab/simple_spiral_recon.m b/examples/matlab/simple_spiral_recon.m
deleted file mode 100644
index 3815580..0000000
--- a/examples/matlab/simple_spiral_recon.m
+++ /dev/null
@@ -1,78 +0,0 @@
-function [images] = simple_spiral_recon(ismrmrdfile)
-%
-%   [images] = simple_spiral_recon(ismrmrdfile)
-%
-%   Simple example of how to reconstruct a 2D spiral dataset stored
-%   in ISMRMRD dataformat
-%
-%   Michael S. Hansen (michael.hansen at nih.gov), 2012
-%
-
-header = ismrmrd_header2struct(h5read(ismrmrdfile,'/dataset/xml'));
-
-%Is this a spiral acquisition
-if (~strcmp(header.ismrmrdHeader.encoding.trajectory.Text,'spiral')),
-   error('This is not a spiral dataset'); 
-end
-
-%Let's get the matrix size
-matrix_size = [str2num(header.ismrmrdHeader.encoding.encodedSpace.matrixSize.x.Text), ...
-               str2num(header.ismrmrdHeader.encoding.encodedSpace.matrixSize.y.Text)];
-
-%Let's load the data
-raw_data = h5read(ismrmrdfile,'/dataset/data');
-
-interleaves = max(raw_data.head.idx.kspace_encode_step_1)+1;
-repetitions = max(raw_data.head.idx.repetition)+1;
-samples = max(raw_data.head.number_of_samples);
-samples_to_skip_end = max(raw_data.head.discard_post);
-samples_to_skip_start = max(raw_data.head.discard_pre);
-net_samples = samples-samples_to_skip_end-samples_to_skip_start;
-channels = max(raw_data.head.active_channels);
-
-trajectory = zeros(2,net_samples,interleaves);
-data = zeros(net_samples,interleaves,channels);
-
-images = [];
-
-counter = 0;
-for p=1:length(raw_data.head.flags),
-
-   if (bitget(uint64(raw_data.head.flags(p)),19)), %if this is noise, we will skip it
-      continue; 
-   end
-   
-   d = reshape(complex(raw_data.data{p}(1:2:end), raw_data.data{p}(2:2:end)), samples, channels);
-   t = reshape(raw_data.traj{p}, raw_data.head.trajectory_dimensions(p), samples);
-   current_interleave = raw_data.head.idx.kspace_encode_step_1(p)+1;
-   start_sample = samples_to_skip_start+1;
-   end_sample = samples-samples_to_skip_end;
-
-   data(:,current_interleave,:) = reshape(d(start_sample:end_sample,:), net_samples, 1, channels);
-   trajectory(:,:,current_interleave) = t(:,start_sample:end_sample);
-   
-   if (bitget(uint64(raw_data.head.flags(p)),8)), %Is this the last in slice? We should make an image
-      fprintf('Reconstructing image %d....', counter+1); 
-      co = permute(trajectory(:,:),[2 1]);
-
-      %Some simple density compensation
-      k = complex(co(:,1),co(:,2));
-      g = complex(diff(co(:,1)),diff(co(:,2)));
-      g(end+1) = g(end);
-      weights = abs(g(:)) .* abs(sin(angle(g(:))-angle(k(:)))); %Estimating weights from Meyer et al. Magn Reson Med. 1992 Dec;28(2):202-13.
-      
-      %Loop over coils and grid images
-      for c=1:size(data,3), 
-           img(:,:,c) = simple_gridder(co,data(:,:,c),weights, matrix_size); 
-      end;
-      images(:,:,counter+1) = sqrt(sum(abs(img).^2,3)); %RMS coil combination
-      counter = counter + 1;
-      fprintf('done\n'); 
-   end
-   
-end
-
-%Let's just display the first image
-imagesc(images(:,:,1));colormap(gray);axis image;
-
-return
diff --git a/examples/matlab/testsynth.m b/examples/matlab/testsynth.m
deleted file mode 100644
index ee8ed5c..0000000
--- a/examples/matlab/testsynth.m
+++ /dev/null
@@ -1,85 +0,0 @@
-%% ISMRM Raw Data Matlab Interface
-% Tutorial introduction to the MATLAB interface of the ISMRM Raw Data
-% file format.
-
-%% Overview
-% For a detailed description of the ISMRM Raw Data file format, please
-% consult the documentation on the project home page:
-% <http://ismrmrd.sourceforge.com>
-%
-% The ISMRM Raw Data Matlab interface is distributed as a package folder
-% (+ismrmrd) containing a set of Matlab classes and functions and a Java
-% interface to the XML header.
-%
-% Install the package folder and add it to your Matlab path.
-% Change the path below to match your install location.
-%addpath('/usr/local/ismrmd/matlab');
-
-%% Creating an ISMRMRD file with synthetic data
-%
-
-% A simulated object: a square in the middle of an image with value 1.
-nx = 256; ny = 256;
-rho = zeros(nx,ny,'single');
-rho(nx/4+1:3*nx/4,ny/4+1:3*ny/4) = 1;
-
-% The synthetic k-space signal from a conventional evenly sampled MR experiment
-kdata = fftshift(fft2(fftshift(rho)));
-
-% Create a new ISMRMRD file
-g = ismrmrd.file('synthetic.h5');
-
-% Construct the XML header
-
-% Write the XML header
-g.writexml(xmlhdr);
-
-% Initialize the acquisition object
-acq = ismrmrd.Acquisition;
-acq.head.available_channels = 1;
-acq.head.active_channels = 1;
-acq.head.number_of_samples = nx;
-acq.head.center_sample = nx/2;
-
-% Loop over the acquisitions, set the looping variables, 
-% stuff the data, and append.  For this example, read ky from top to bottom.
-for p = ny:-1:1
-    acq.head.idx.kspace_encode_step_1 = p-1;
-    acq.data = kdata(:,p);
-    f.appendAcquisition(acq);
-end
-
-% close
-f.close();
-
-%% Reconstruct an image from an existing ISMRMRD file
-%
-% Open the ISMRMRD file
-g = ismrmrd.file(synthfile);
-
-% Read the XML header
-xml = g.readxml();
-
-% Read the number of acquisitions
-nky = g.getNumberOfAcquisitions();
-
-% Read the first acquisition
-acq1 = g.readAcquisition(1);
-nx = acq1.head.number_of_samples;
-
-% Loop over the acquisitions and read them in
-% stuffing into the correct part of the k-space data array
-kdata = zeros(nx,nky);
-for p = 1:nky
-    acq = f.readAcquisition(p);
-    kdata(:,acq.head.idx.kspace_encode_step_1+1) = acq.data;
-end
-
-% Simple reconstruction
-rhohat = fftshift(ifft2(fftshift(kdata)));
-
-imagesc(abs(rhohat)); axis image; axis off; colorbar
-title('Reconstructed image');
-
-% close the original dataset
-f.close();
diff --git a/ismrmrd.h b/ismrmrd.h
deleted file mode 100644
index 081d443..0000000
--- a/ismrmrd.h
+++ /dev/null
@@ -1,465 +0,0 @@
-/* ISMRMRD MR Raw Data Strutures                           */
-/* DRAFT - July 2012                                       */
-
-/* Authors:                                                */
-/*    Michael S. Hansen (michael.hansen at nih.gov)           */
-/*    Brian Hargreaves  (bah at stanford.edu)                 */
-/*    Sebastian Kozerke (kozerke at biomed.ee.ethz.ch)        */
-/*    Kaveh Vahedipour  (k.vahedipour at fz-juelich.de)       */
-
-#pragma once
-#ifndef ISMRMRD_H
-#define ISMRMRD_H
-
-/* Cross platform section for defining integer types */
-#ifndef ISMRMRD_HAS_BASIC_TYPES
-#ifdef _MSC_VER
-typedef __int16 int16_t;
-typedef unsigned __int16 uint16_t;
-typedef __int32 int32_t;
-typedef unsigned __int32 uint32_t;
-typedef __int64 int64_t;
-typedef unsigned __int64 uint64_t;
-#else
-#include <stdint.h>
-#endif
-#endif
-
-#ifdef __cplusplus
-#include <stdio.h>
-#include <string.h>
-#include <exception>
-#include <iostream>
-#include <vector>
-#include <valarray>
-#endif
-
-#pragma pack(push, 2) //Use 2 byte alignment
-
-#define ISMRMRD_VERSION 1
-
-#ifdef __cplusplus
-namespace ISMRMRD
-{
-
-class FlagBit
-{
-
-public:
-	FlagBit(unsigned short b)
-	: bitmask_(0)
-	{
-		if (b > 0) {
-			bitmask_ = 1;
-			bitmask_ = (bitmask_ << (b-1));
-		}
-	}
-
-	bool isSet(const uint64_t& m) const {
-		return ((m & bitmask_)>0);
-	}
-
-	uint64_t bitmask_;
-
-};
-#endif //__cplusplus
-
-/** ACQUISITION FLAGS */
-enum AcquisitionFlags {
-	/* Looping indicators */
-	ACQ_FIRST_IN_ENCODE_STEP1                	= 1,
-	ACQ_LAST_IN_ENCODE_STEP1    				= 2,
-	ACQ_FIRST_IN_ENCODE_STEP2   				= 3,
-	ACQ_LAST_IN_ENCODE_STEP2    				= 4,
-	ACQ_FIRST_IN_AVERAGE        				= 5,
-	ACQ_LAST_IN_AVERAGE         				= 6,
-	ACQ_FIRST_IN_SLICE          				= 7,
-	ACQ_LAST_IN_SLICE           				= 8,
-	ACQ_FIRST_IN_CONTRAST       				= 9,
-	ACQ_LAST_IN_CONTRAST        				= 10,
-	ACQ_FIRST_IN_PHASE          				= 11,
-	ACQ_LAST_IN_PHASE           				= 12,
-	ACQ_FIRST_IN_REPETITION     				= 13,
-	ACQ_LAST_IN_REPETITION      				= 14,
-	ACQ_FIRST_IN_SET            				= 15,
-	ACQ_LAST_IN_SET             				= 16,
-	ACQ_FIRST_IN_SEGMENT        				= 17,
-	ACQ_LAST_IN_SEGMENT         				= 18,
-
-	ACQ_IS_NOISE_MEASUREMENT                	= 19,
-	ACQ_IS_PARALLEL_CALIBRATION             	= 20,
-	ACQ_IS_PARALLEL_CALIBRATION_AND_IMAGING 	= 21,
-	ACQ_IS_REVERSE              				= 22,
-	ACQ_IS_NAVIGATION_DATA      				= 23,
-
-	ACQ_USER1                   				= 57,
-	ACQ_USER2                   				= 58,
-	ACQ_USER3                   				= 59,
-	ACQ_USER4                   				= 60,
-	ACQ_USER5                   				= 61,
-	ACQ_USER6                   				= 62,
-	ACQ_USER7                   				= 63,
-	ACQ_USER8                   				= 64
-};
-
-
-/**
-     Struct used for keeping track of typical loop counters in MR experiment.
-
- */
-struct EncodingCounters {
-	uint16_t kspace_encode_step_1; /**< e.g. phase encoding line number */
-	uint16_t kspace_encode_step_2; /**< e.g. partition encodning number */
-	uint16_t average;              /**< e.g. signal average number */
-	uint16_t slice;                /**< e.g. imaging slice number */
-	uint16_t contrast;             /**< e.g. echo number in multi-echo */
-	uint16_t phase;                /**< e.g. cardiac phase number */
-	uint16_t repetition;           /**< e.g. dynamic number for dynamic scanning */
-	uint16_t set;                  /**< e.g. flow encodning set */
-	uint16_t segment;              /**< e.g. segment number for segmented acquisition */
-	uint16_t user[8];              /**< Free user parameters */
-};
-
-/**
-     Header for each MR acquisition. 
- */
-struct AcquisitionHeader
-{
-	uint16_t           version;                        /**< First unsigned int indicates the version */
-	uint64_t           flags;                          /**< bit field with flags */
-	uint32_t           measurement_uid;                /**< Unique ID for the measurement */
-	uint32_t           scan_counter;                   /**< Current acquisition number in the measurement */
-	uint32_t           acquisition_time_stamp;         /**< Acquisition clock */
-	uint32_t           physiology_time_stamp[3];       /**< Physiology time stamps, e.g. ecg, breating, etc. */
-	uint16_t           number_of_samples;              /**< Number of samples acquired */
-	uint16_t           available_channels;             /**< Available coils */
-	uint16_t           active_channels;                /**< Active coils on current acquisiton */
-	uint64_t           channel_mask[16];               /**< Mask to indicate which channels are active. Support for 1024 channels */
-	uint16_t           discard_pre;                    /**< Samples to be discarded at the beginning of acquisition */
-	uint16_t           discard_post;                   /**< Samples to be discarded at the end of acquisition */
-	uint16_t           center_sample;                  /**< Sample at the center of k-space */
-	uint16_t           encoding_space_ref;             /**< Reference to an encoding space, typically only one per acquisition */
-	uint16_t           trajectory_dimensions;          /**< Indicates the dimensionality of the trajectory vector (0 means no trajectory) */
-	float              sample_time_us;                 /**< Time between samples in micro seconds, sampling BW */
-	float              position[3];                    /**< Three-dimensional spatial offsets from isocenter */
-	float              quaternion[4];                  /**< Angulation of acquisition */
-	float              patient_table_position[3];      /**< Patient table off-center */
-	EncodingCounters   idx;                            /**< Encoding loop counters, see above */
-	int32_t            user_int[8];                    /**< Free user parameters */
-	float              user_float[8];                  /**< Free user parameters */
-};
-
-#ifdef __cplusplus
-class Acquisition
-{
-
-public:
-	Acquisition()
-	: traj_(0)
-	, data_(0)
-	{
-		memset(&head_,0,sizeof(AcquisitionHeader));
-		head_.version = ISMRMRD_VERSION;
-	}
-
-	~Acquisition() {
-		deleteData();
-	}
-
-	bool isFlagSet(const FlagBit& f) const {
-		return f.isSet(head_.flags);
-	}
-
-	void setFlag(const FlagBit& f) {
-		head_.flags |= f.bitmask_;
-	}
-
-	Acquisition(const Acquisition& a) {   // copy constructor
-		
-		if (this != &a) {
-
-			head_ = a.head_;
-			if (head_.trajectory_dimensions > 0) {
-				size_t trajectory_elements = head_.number_of_samples*head_.trajectory_dimensions;
-				try {
-					traj_ = new float[trajectory_elements];
-				} catch (std::exception& e) {
-					std::cerr << "Unable to allocate trajectory in ISMRMRD::Acquisition: " << e.what() << std::endl;
-				}
-				memcpy(traj_,a.traj_,sizeof(float)*trajectory_elements);
-			} else {
-				traj_ = 0;
-			}
-			
-			size_t data_elements = head_.number_of_samples*head_.active_channels;
-			if (data_elements > 0) {
-				try {
-					data_ = new float[data_elements*2]; //*2 for complex
-				} catch (std::exception& e) {
-					std::cerr << "Unable to allocate trajectory in ISMRMRD::Acquisition: " << e.what() << std::endl;
-				}
-				memcpy(data_,a.data_,sizeof(float)*2*data_elements);
-			} else {
-				data_ = 0;
-			}
-
-		}
-
-	}
-
-	Acquisition& operator=(const Acquisition& a) {
-
-		if (this != &a) {
-
-			head_ = a.head_;
-			deleteData(); // IMHO: Check if we can't use the old data and just overwrite. Way cheaper.
-			if (head_.trajectory_dimensions > 0) {
-				size_t trajectory_elements = head_.number_of_samples*head_.trajectory_dimensions;
-				try {
-					traj_ = new float[trajectory_elements];
-				} catch (std::exception& e) {
-					std::cerr << "Unable to allocate trajectory in ISMRMRD::Acquisition: " << e.what() << std::endl;
-				}
-				memcpy(traj_,a.traj_,sizeof(float)*trajectory_elements);
-			}
-			
-			size_t data_elements = head_.number_of_samples*head_.active_channels;
-			if (data_elements > 0) {
-				try {
-					data_ = new float[data_elements*2]; //*2 for complex
-				} catch (std::exception& e) {
-					std::cerr << "Unable to allocate trajectory in ISMRMRD::Acquisition: " << e.what() << std::endl;
-				}
-				memcpy(data_,a.data_,sizeof(float)*2*data_elements);
-			}
-
-		}
-		
-		return *this;
-	}
-	
-	AcquisitionHeader head_; /**< Header, see above */
-
-	float* traj_;            /**< Trajectory, elements = head_.trajectory_dimensions*head_.number_of_samples
-							       [kx,ky,kx,ky.....]        (for head_.trajectory_dimensions = 2)
-							       [kx,ky,kz,kx,ky,kz,.....] (for head_.trajectory_dimensions = 3)           */
-
-	float* data_;            /**< Actual data, elements = head_.number_of_samples*head_.active_channels*2
-	                               [re,im,re,im,.....,re,im,re,im,.....,re,im,re,im,.....]
-	                                 ---channel 1-------channel 2---------channel 3-----                     */
-
-protected:
-	void deleteData() {
-		if (traj_) {delete [] traj_; traj_ = 0;}
-		if (data_) {delete [] data_; data_ = 0;}
-	}
-};
-#endif //__cplusplus
-
-enum ImageDataType
-{
-	DATA_FLOAT = 1,
-	DATA_DOUBLE,
-	DATA_COMPLEX_FLOAT,
-	DATA_COMPLEX_DOUBLE,
-	DATA_UNSIGNED_SHORT
-};
-
-enum ImageType
-{
-	TYPE_MAGNITUDE = 1,
-	TYPE_PHASE,
-	TYPE_REAL,
-	TYPE_IMAG,
-	TYPE_COMPLEX
-};
-
-/** IMAGE FLAGS */
-enum ImageFlags {
-	IMAGE_IS_NAVIGATION_DATA      				= 23,
-
-	IMAGE_USER1                   				= 57,
-	IMAGE_USER2                   				= 58,
-	IMAGE_USER3                   				= 59,
-	IMAGE_USER4                   				= 60,
-	IMAGE_USER5                   				= 61,
-	IMAGE_USER6                   				= 62,
-	IMAGE_USER7                   				= 63,
-	IMAGE_USER8                   				= 64
-};
-
-/**
- *  Definition of ISMRM Raw Data Image structure
- */
-struct ImageHeader
-{
-	uint16_t           	version;                        /**< First unsigned int indicates the version */
-	uint64_t           	flags;                          /**< bit field with flags */
-	uint32_t           	measurement_uid;                /**< Unique ID for the measurement  */
-	uint16_t           	matrix_size[3];                 /**< Pixels in the 3 spatial dimensions */
-	float              	field_of_view[3];               /**< Size (in mm) of the 3 spatial dimensions */
-	uint16_t           	channels;                       /**< Number of receive channels */
-	float              	position[3];                    /**< Three-dimensional spatial offsets from isocenter */
-	float              	quaternion[4];                  /**< Angulation of acquisition */
-	float              	patient_table_position[3];      /**< Patient table off-center */
-	uint16_t           	average;                        /**< e.g. signal average number */
-	uint16_t           	slice;                          /**< e.g. imaging slice number */
-	uint16_t           	contrast;                       /**< e.g. echo number in multi-echo */
-	uint16_t           	phase;                          /**< e.g. cardiac phase number */
-	uint16_t           	repetition;                     /**< e.g. dynamic number for dynamic scanning */
-	uint16_t           	set;                            /**< e.g. flow encodning set */
-	uint32_t           	acquisition_time_stamp;         /**< Acquisition clock */
-	uint32_t           	physiology_time_stamp[3];       /**< Physiology time stamps, e.g. ecg, breating, etc. */
-	uint16_t           	image_data_type;                /**< e.g. unsigned short, float, complex float, etc. */
-	uint16_t           	image_type;                     /**< e.g. magnitude, phase, complex, real, imag, etc. */
-	uint16_t           	image_index;					/**< e.g. image number in series of images  */
-	uint16_t			image_series_index;             /**< e.g. series number */
-	int32_t            	user_int[8];                    /**< Free user parameters */
-	float              	user_float[8];                  /**< Free user parameters */
-};
-
-#ifdef __cplusplus
-/**
- *   Container for an image (header and data)
- */
-template <typename T> class Image {
-
-public:
-	Image()
-	: data_(0)
-	{
-		memset(&head_,0,sizeof(ImageHeader));
-		head_.version = ISMRMRD_VERSION;
-	}
-
-	~Image()
-	{
-		deleteData();
-	}
-
-	bool isFlagSet(FlagBit& f) const {
-		return f.isSet(head_.flags);
-	}
-
-	void setFlag(FlagBit& f) {
-		head_.flags |= f.bitmask_;
-	}
-
-	Image(const Image& a) {   // copy constructor
-
-		if (this &= &a) {
-
-		head_ = a.head_;
-
-		size_t elements = getNumberOfElements();
-		if (elements > 0) {
-			try {
-				data_ = new T[elements];
-			} catch (std::exception& e) {
-				std::cerr << "Unable to allocate data in ISMRMRD::Image: " << e.what() << std::endl;
-			}
-			memcpy(data_,a.data_,sizeof(T)*elements);
-		} else {
-			data_ = 0;
-		}
-
-		}
-
-	}
-
-	Image& operator=(const Image& a) {
-
-		if (this &= &a) {
-		head_ = a.head_;
-
-		deleteData();
-		size_t elements = getNumberOfElements();
-		if (elements > 0) {
-			try {
-				data_ = new float[elements];
-			} catch (std::exception& e) {
-				std::cerr << "Unable to allocate data in ISMRMRD::Image: " << e.what() << std::endl;
-			}
-			memcpy(data_,a.data_,sizeof(T)*elements);
-		}
-
-		}
-
-		return *this;
-	}
-
-	size_t getNumberOfElements() const {
-		return head_.matrix_size[0]*
-				head_.matrix_size[1]*
-				head_.matrix_size[2]*
-				head_.channels;
-	}
-
-	ImageHeader head_;     /**< ImageHeader as defined above */
-	T* data_;              /**< Data, array of size (matrix_size[0]*matrix_size[1]*matrix_size[2]*channels),
-	                            first spatial dimension is fastest changing array index, channels outer most (slowest changing). */
-
-protected:
-	void deleteData() {
-		if (data_) {
-			delete [] data_;
-			data_ = 0;
-		}
-	}
-
-};
-
-/**
- *  Container for generic array. This structure is used through the HDF5 file interaction.
- */
-template <typename T> class NDArrayContainer
-{
-public:
-	NDArrayContainer() {}
-
-	NDArrayContainer(const std::vector<unsigned int>& dimensions, T* d) {
-		dimensions_ = dimensions;
-		data_.resize(elements());
-		memcpy(&data_[0],d,sizeof(T)*elements());
-	}
-
-	virtual ~NDArrayContainer() {}
-
-	std::vector<unsigned int> dimensions_; /**< Array with dimensions of the array. First dimension is fastest moving in the array */
-	std::valarray<T> data_;               /**< The data itself. A vector is used here for easy memory management                  */
-
-	size_t elements() const {
-		if (dimensions_.size() == 0) {
-			return 0;
-		}
-		size_t elements = 1;
-		std::vector<unsigned int>::const_iterator it = dimensions_.begin();
-		while (it != dimensions_.end()) {
-			elements *= *(it++);
-		}
-		return elements;
-	}
-
-	bool is_consistent() const {
-		return (elements() == data_.size());
-	}
-
-	size_t ndims() const {
-		size_t i = 1, n_dimensions = 1;
-		for (; i < dimensions_.size(); i++)
-			n_dimensions += (size_t) (dimensions_[i] > 1);
-		return n_dimensions;
-	}
-
-};
-
-#endif //__cplusplus
-
-
-#ifdef __cplusplus
-} //End of ISMRMRD namespace
-#endif //__cplusplus
-
-#pragma pack(pop) //Restore old alignment
-
-#endif //ISMRMRD_H
diff --git a/ismrmrd_export.h b/ismrmrd_export.h
deleted file mode 100644
index 57d57bc..0000000
--- a/ismrmrd_export.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#ifndef ISMRMRD_EXPORT_H_
-#define ISMRMRD_EXPORT_H_
-
-#if defined (WIN32)
-#if defined (ismrmrd_EXPORTS)
-#define EXPORTISMRMRD __declspec(dllexport)
-#else
-#define EXPORTISMRMRD __declspec(dllimport)
-#endif
-#else
-#define EXPORTISMRMRD
-#endif
-
-#endif /* ISMRMRD_EXPORT_H_ */
diff --git a/ismrmrd_hdf5.cpp b/ismrmrd_hdf5.cpp
deleted file mode 100644
index 145d40a..0000000
--- a/ismrmrd_hdf5.cpp
+++ /dev/null
@@ -1,589 +0,0 @@
-#include "ismrmrd_hdf5.h"
-#include "ismrmrd_hdf5_datatypes.h"
-
-
-#include <iostream>
-#include <boost/algorithm/string.hpp>
-
-
-namespace ISMRMRD
-{
-
-int IsmrmrdDataset::openHDF5File()
-{
-
-	if (file_exists_) {
-		try {
-			if (!H5File::isHdf5(filename_.c_str())) {
-				std::cerr << "File \"" << filename_ << "\" is not an HDF file file" << std::endl;
-				return -1;
-			}
-			file_ = boost::shared_ptr<H5File>(new H5File(filename_, H5F_ACC_RDWR));
-
-		} catch (...) {
-			std::cerr << "Failed to open HDF5 file." << std::endl;
-			return -1;
-		}
-		file_open_ = true;
-	} else if (create_file_if_needed_){
-		try {
-			file_ = boost::shared_ptr<H5File>(new H5File(filename_, H5F_ACC_TRUNC));
-
-			//We will close and then immediately open the file again.
-			//We need to make sure the file is saved as an HDF5 file in case other processes and functions
-			//need to access it immediately. The line above does not cause the file to be marked as and HDF5 file.
-			//H5File::isHdf5(filename_.c_str()) will return false at this point.
-			file_->close();
-			file_ = boost::shared_ptr<H5File>(new H5File(filename_, H5F_ACC_RDWR));
-
-		} catch (...) {
-			std::cerr << "Failed to create and open HDF5 file." << std::endl;
-			return -1;
-		}
-		file_open_ = true;
-		file_exists_ = true;
-	} else {
-		std::cerr << "Unable to find HDF5 file (" << filename_ << "), and file cannot be created." << std::endl;
-		return -1;
-	}
-
-	return 0;
-}
-
-
-bool IsmrmrdDataset::linkExists(const char* name)
-{
-	if (!file_open_) {
-		std::cerr << "IsmrmrdDataset::linkExists: file not open." << std::endl;
-		return false;
-	}
-	std::vector<std::string> name_elements;
-	std::string splitstr("/");
-	std::string namestr(name);
-	boost::split(name_elements, namestr, boost::is_any_of(splitstr));
-	std::string current_path("");
-	for (unsigned int i = 0; i < name_elements.size(); i++) {
-		if (name_elements[i].size() > 0) {
-			current_path = current_path + std::string("/") + name_elements[i];
-			if (!H5Lexists(file_->getId(), current_path.c_str(), H5P_DEFAULT )) {
-				return false;
-			}
-		}
-	}
-	return true;
-}
-
-int IsmrmrdDataset::createGroupForDataset(const char* name)
-{
-	if (!file_open_) {
-		std::cerr << "IsmrmrdDataset::linkExists: file not open." << std::endl;
-		return -1;
-	}
-
-	std::vector<std::string> name_elements;
-	std::string splitstr("/");
-	std::string namestr(name);
-	boost::split(name_elements, namestr, boost::is_any_of(splitstr));
-	std::string current_path("");
-	for (unsigned int i = 0; i < name_elements.size(); i++) {
-		if (name_elements[i].size() > 0) {
-			current_path = current_path + std::string("/") + name_elements[i];
-			if (!H5Lexists(file_->getId(), current_path.c_str(), H5P_DEFAULT )) {
-				file_->createGroup( current_path.c_str());
-			}
-		}
-	}
-	return 0;
-}
-
-template <typename T> int IsmrmrdDataset::appendArray(NDArrayContainer<T>& a, const char* varname)
-{
-
-	std::string data_path = groupname_ + std::string("/") + std::string(varname);
-
-	if (!a.is_consistent()) {
-		std::cerr << "IsmrmrdDataset::append(..): Asking to append inconsistent array." << std::endl;
-		return -1;
-	}
-
-	boost::shared_ptr<DataSet> dataset;
-    boost::shared_ptr<DataType> datatype = getIsmrmrdHDF5Type<T>();
-
-	std::vector<hsize_t> dims;
-	std::vector<hsize_t> max_dims;
-	if (!linkExists(data_path.c_str())) {
-		std::vector<hsize_t> dims;
-		std::vector<hsize_t> max_dims;
-		dims.push_back(1);
-		max_dims.push_back(H5S_UNLIMITED);
-		for (std::vector<unsigned int>::reverse_iterator it = a.dimensions_.rbegin(); it != a.dimensions_.rend(); it++) {
-			dims.push_back(static_cast<unsigned long long int>(*it));
-			max_dims.push_back(static_cast<unsigned long long int>(*it));
-		}
-
-		try {
-
-			if (createGroupForDataset(groupname_.c_str()) < 0) {
-				std::cout << "Failed to create group in HDF 5 file." << std::endl;
-				return -1;
-			}
-
-			DataSpace mspace1( dims.size(), &dims[0], &max_dims[0]);
-
-			DSetCreatPropList cparms;
-			cparms.setChunk( dims.size(), &dims[0] );
-
-			dataset = boost::shared_ptr<DataSet>(new DataSet(file_->createDataSet( data_path.c_str(), *datatype, mspace1, cparms)));
-			mspace1 = dataset->getSpace();
-
-			DataSpace mspace2( dims.size(), &dims[0] );
-
-			std::vector<hsize_t> offset(dims.size());
-			mspace1.selectHyperslab(H5S_SELECT_SET, &dims[0], &offset[0]);
-			dataset->write( &(a.data_[0]), *datatype, mspace2, mspace1 );
-
-		} catch( Exception& e ) {
-			std::cerr << "Exception caught while creating HDF5 dataset" << std::endl;
-			std::cerr << e.getDetailMsg() << std::endl;
-			return -1;
-		}
-	} else {
-		try {  // to determine if the dataset exists in the group
-			dataset = boost::shared_ptr<DataSet>(new DataSet(file_->openDataSet(data_path.c_str())));
-
-			DataType mtype = dataset->getDataType();
-			if (!(mtype == (*datatype))) {
-				std::cout << "Attempting to append data to HDF5 dataset with the wrong type" << std::endl;
-				return -1;
-			}
-
-			DataSpace mspace1 = dataset->getSpace();
-			int rank = mspace1.getSimpleExtentNdims();
-			std::vector<hsize_t> ddims(rank,0);
-			mspace1.getSimpleExtentDims(&ddims[0], NULL);
-
-
-			if ((ddims.size()-1) != a.dimensions_.size()) {
-				std::cerr << "Dimensions in dataset does not match with existing HDF5 dataset" << std::endl;
-			}
-
-			dims.push_back(1);
-			for (unsigned int i = 1; i < ddims.size(); i++) {
-				if (a.dimensions_[ddims.size()-1-i] != ddims[i]) {
-					std::cerr << "Error trying to write array to existing HDF5 file. Variable has wrong size." << std::endl;
-					std::cerr << a.dimensions_[ddims.size()-1-i] << ", " << ddims[i] << std::endl;
-					return -1;
-				}
-				dims.push_back(ddims[i]);
-			}
-
-			std::vector<hsize_t> offset(rank, 0);
-			offset[0] = ddims[0];
-
-			ddims[0]++;
-
-			dataset->extend(&ddims[0]);
-
-			DataSpace fspace2 = dataset->getSpace();
-			fspace2.selectHyperslab( H5S_SELECT_SET, &dims[0], &offset[0] );
-
-			DataSpace mspace2( rank, &dims[0] );
-
-			dataset->write( &(a.data_[0]), *datatype, mspace2, fspace2 );
-
-		 }
-		 catch( FileIException& not_found_error)
-		 {
-			 std::cout << "Dataset is not found. At this point, it should have been created!" << std::endl;
-			 return -1;
-		 }
-	}
-	return 0;
-}
-
-template EXPORTISMRMRD int IsmrmrdDataset::appendArray(NDArrayContainer< unsigned short int >& a,const char* varname);
-template EXPORTISMRMRD int IsmrmrdDataset::appendArray(NDArrayContainer< float >& a,const char* varname);
-template EXPORTISMRMRD int IsmrmrdDataset::appendArray(NDArrayContainer< double >& a,const char* varname);
-template EXPORTISMRMRD int IsmrmrdDataset::appendArray(NDArrayContainer< std::complex<float> >& a,const char* varname);
-template EXPORTISMRMRD int IsmrmrdDataset::appendArray(NDArrayContainer< std::complex<double> >& a,const char* varname);
-template EXPORTISMRMRD int IsmrmrdDataset::appendArray(NDArrayContainer< ImageHeader >& a,const char* varname);
-
-template <typename T> boost::shared_ptr< NDArrayContainer<T> > IsmrmrdDataset::readArray(const char* varname, unsigned long int index)
-{
-	boost::shared_ptr< NDArrayContainer<T> > ret(new NDArrayContainer<T>());
-    boost::shared_ptr<DataType> datatype = getIsmrmrdHDF5Type<T>();
-
-    std::string data_path = groupname_ + std::string("/") + std::string(varname);
-
-	try {
-
-		if (!linkExists(data_path.c_str())) {
-			std::cout << "Trying to access non-existing variable in HDF5 file." << std::endl;
-			return ret;
-		}
-
-		DataSet d = file_->openDataSet(H5std_string(data_path.c_str()));
-		DataSpace dataspace = d.getSpace();
-		DataType dtype = d.getDataType();
-
-		if (!(dtype == *datatype)) {
-			std::cout << "HDF5 datatype for selected variable does not match signature of reading function" << std::endl;
-			return ret;
-		}
-
-		int rank = dataspace.getSimpleExtentNdims();
-		std::vector<hsize_t> dims(rank,0);
-		dataspace.getSimpleExtentDims(&dims[0]);
-
-		if (dims[0] <= index) {
-			std::cout << "Attempting to access non-existing hyperslice" << std::endl;
-			return ret;
-		}
-
-		std::vector<hsize_t> slice_dims(rank,0);
-		std::vector<hsize_t> offset(rank,0);
-		ret->dimensions_ = std::vector<unsigned int>(rank-1,0);
-		slice_dims[0] = 1;
-		offset[0] = index;
-
-		for (unsigned int i = 1; i < rank; i++) {
-			slice_dims[i] = dims[i];
-			ret->dimensions_[ret->dimensions_.size()-i] = dims[i]; //Flip dimensions for NDArray.
-		}
-
-		dataspace.selectHyperslab( H5S_SELECT_SET, &slice_dims[0], &offset[0] );
-
-		DataSpace memspace(rank,&slice_dims[0]);
-
-		ret->data_.resize(ret->elements());
-
-		//OK finally ready, now read the data.
-		d.read(reinterpret_cast<void*>(&(ret->data_[0])), *datatype, memspace, dataspace, H5P_DEFAULT);
-
-	} catch (...) {
-		std::cout << "Error caught while attempting to read HDF5 file" << std::endl;
-		return ret;
-	}
-
-	return ret;
-
-}
-
-template EXPORTISMRMRD boost::shared_ptr< NDArrayContainer<unsigned short int> > IsmrmrdDataset::readArray(const char* varname, unsigned long int index);
-template EXPORTISMRMRD boost::shared_ptr< NDArrayContainer<float> > IsmrmrdDataset::readArray(const char* varname, unsigned long int index);
-template EXPORTISMRMRD boost::shared_ptr< NDArrayContainer<double> > IsmrmrdDataset::readArray(const char* varname, unsigned long int index);
-template EXPORTISMRMRD boost::shared_ptr< NDArrayContainer< std::complex<float> > > IsmrmrdDataset::readArray(const char* varname, unsigned long int index);
-template EXPORTISMRMRD boost::shared_ptr< NDArrayContainer< std::complex<double> > > IsmrmrdDataset::readArray(const char* varname, unsigned long int index);
-
-
-int IsmrmrdDataset::appendAcquisition(Acquisition* a)
-{
-	std::vector<hsize_t> dims(2,1);
-	std::vector<hsize_t> max_dims(2,1);max_dims[0] = H5S_UNLIMITED;
-
-	int rank = 2;
-	std::vector<hsize_t> ddims = dims;
-	std::vector<hsize_t> offset(rank,0);
-
-	bool new_dataset = false;
-
-	if (!dataset_open_) {
-		try {
-			boost::shared_ptr<DataType> datatype = getIsmrmrdHDF5Type<AcquisitionHeader_with_data>();
-			if (!linkExists(data_path_.c_str())) {
-				DataSpace mspace1( dims.size(), &dims[0], &max_dims[0]);
-				DSetCreatPropList cparms;
-				cparms.setChunk( dims.size(), &dims[0] );
-				dataset_ = boost::shared_ptr<DataSet>(new DataSet(file_->createDataSet( data_path_.c_str(), *datatype, mspace1, cparms)));
-				new_dataset = true;
-			} else {
-				dataset_ = boost::shared_ptr<DataSet>(new DataSet(file_->openDataSet(data_path_.c_str())));
-				DataType mtype = dataset_->getDataType();
-				if (!(mtype == (*datatype))) {
-					std::cout << "Attempting to append data to HDF5 dataset with the wrong type" << std::endl;
-					return -1;
-				}
-
-			}
-			dataset_open_ = true;
-		} catch( Exception& e ) {
-			std::cout << "Exception caught while opening (creating) HDF5 dataset" << std::endl;
-			std::cout << e.getDetailMsg() << std::endl;
-			return -1;
-		}
-	}
-
-	try {
-		boost::shared_ptr<DataType> datatype = getIsmrmrdHDF5Type<AcquisitionHeader_with_data>();
-		AcquisitionHeader_with_data tmp;
-		tmp.head = a->head_;
-		tmp.traj.len = tmp.head.trajectory_dimensions*tmp.head.number_of_samples;
-		tmp.traj.p = static_cast<void*>(a->traj_);
-
-		tmp.data.len = tmp.head.active_channels*tmp.head.number_of_samples*2;
-		tmp.data.p = static_cast<void*>(a->data_);
-
-		DataSpace mspace1 = dataset_->getSpace();
-		rank = mspace1.getSimpleExtentNdims();
-		if (rank != 2) {
-			std::cerr << "Wrong rank (" << rank << ") found in HDF5 dataset" << std::endl;
-			return -1;
-		}
-
-		if (!new_dataset) {
-			mspace1.getSimpleExtentDims(&ddims[0], NULL);
-			offset[0] = ddims[0];
-			ddims[0]++;
-
-			dataset_->extend(&ddims[0]);
-		}
-		DataSpace fspace2 = dataset_->getSpace();
-		fspace2.selectHyperslab( H5S_SELECT_SET, &dims[0], &offset[0] );
-
-		DataSpace mspace2( rank, &dims[0] );
-		dataset_->write( &tmp, *datatype, mspace2, fspace2 );
-
-	} catch( Exception& e ) {
-		std::cout << "Exception caught while writing HDF5 data" << std::endl;
-		std::cout << e.getDetailMsg() << std::endl;
-		return -1;
-	}
-
-	return 0;
-}
-
-
-
-unsigned long IsmrmrdDataset::getNumberOfAcquisitions()
-{
-	unsigned long ret = 0;
-
-	if (!linkExists(data_path_.c_str())) {
-		std::cerr << "Data path (" << data_path_ << ") does not exist in HDF5 dataset" << std::endl;
-		return ret;
-	}
-
-	if (!dataset_open_) {
-		try{
-			dataset_ = boost::shared_ptr<DataSet>(new DataSet(file_->openDataSet(data_path_.c_str())));
-			dataset_open_ = true;
-		} catch( Exception& e ) {
-			std::cout << "Exception caught while opening HDF5 dataset" << std::endl;
-			std::cout << e.getDetailMsg() << std::endl;
-			return ret;
-		}
-	}
-
-	try {
-		DataSpace dataspace = dataset_->getSpace();
-		int rank = dataspace.getSimpleExtentNdims();
-		std::vector<hsize_t> dims(rank,0);
-		dataspace.getSimpleExtentDims(&dims[0]);
-		ret = dims[0];
-	} catch (...) {
-		std::cout << "Error caught while attempting to access the number of elements in HDF5 file" << std::endl;
-		return ret;
-	}
-
-	return ret;
-}
-
-boost::shared_ptr< Acquisition > IsmrmrdDataset::readAcquisition(unsigned long int index)
-{
-	boost::shared_ptr<Acquisition> ret;
-
-	if (!linkExists(data_path_.c_str())) {
-		std::cerr << "Data path does not exist in HDF5 dataset" << std::endl;
-		return ret;
-	}
-
-
-	boost::shared_ptr<DataType> datatype = getIsmrmrdHDF5Type<AcquisitionHeader_with_data>();
-	if (!dataset_open_) {
-		try{
-			dataset_ = boost::shared_ptr<DataSet>(new DataSet(file_->openDataSet(data_path_.c_str())));
-			dataset_open_ = true;
-		} catch( Exception& e ) {
-			std::cout << "Exception caught while opening (creating) HDF5 dataset" << std::endl;
-			std::cout << e.getDetailMsg() << std::endl;
-			return ret;
-		}
-	}
-
-	try {
-		DataSpace dataspace = dataset_->getSpace();
-		DataType dtype = dataset_->getDataType();
-
-		if (!(dtype == *datatype)) {
-			std::cout << "Attempting to open HDF5 dataset with the wrong type" << std::endl;
-			return ret;
-		}
-
-		int rank = dataspace.getSimpleExtentNdims();
-		std::vector<hsize_t> dims(rank,0);
-		dataspace.getSimpleExtentDims(&dims[0]);
-
-		if (dims[0] <= index) {
-			std::cout << "Attempting to access non-existing hyperslice in HDF5 dataset" << std::endl;
-			return ret;
-		}
-
-		std::vector<hsize_t> slice_dims(rank,1);
-		std::vector<hsize_t> offset(rank,0);
-
-		slice_dims[0] = 1;
-		offset[0] = index;
-
-
-		dataspace.selectHyperslab( H5S_SELECT_SET, &slice_dims[0], &offset[0] );
-
-		DataSpace memspace(rank,&slice_dims[0]);
-
-		AcquisitionHeader_with_data tmp;
-
-		//OK finally ready, now read the data.
-		dataset_->read(reinterpret_cast<void*>(&tmp), *datatype, memspace, dataspace, H5P_DEFAULT);
-
-		ret = boost::shared_ptr<Acquisition>(new Acquisition());
-		ret->head_ = tmp.head;
-		ret->traj_ = reinterpret_cast<float*>(tmp.traj.p);
-		ret->data_ = reinterpret_cast<float*>(tmp.data.p);
-
-	} catch (...) {
-		std::cout << "Error caught while attempting to read HDF5 file" << std::endl;
-		return ret;
-	}
-
-	return ret;
-
-}
-
-int IsmrmrdDataset::writeHeader(std::string& xml) {
-	std::vector<hsize_t> dims(1,1);
-	std::vector<hsize_t> max_dims(1,1);
-
-	boost::shared_ptr<DataSet> xml_dataset;
-	boost::shared_ptr<DataType> datatype(new StrType(0, H5T_VARIABLE));
-	try {
-		if (!linkExists(xml_header_path_.c_str())) {
-			DataSpace mspace1( dims.size(), &dims[0], &max_dims[0]);
-			xml_dataset = boost::shared_ptr<DataSet>(new DataSet(file_->createDataSet( xml_header_path_.c_str(), *datatype, mspace1)));
-		} else {
-			xml_dataset = boost::shared_ptr<DataSet>(new DataSet(file_->openDataSet(xml_header_path_.c_str())));
-			DataType mtype = xml_dataset->getDataType();
-			if (!(mtype == (*datatype))) {
-				std::cout << "Attempting to append XML data to HDF5 dataset with the wrong type" << std::endl;
-				return -1;
-			}
-		}
-		DataSpace mspace1 = xml_dataset->getSpace();
-		xml_dataset->write(xml,*datatype,mspace1);
-
-	} catch( Exception& e ) {
-			std::cout << "Exception caught while writing XML Header to HDF5 file" << std::endl;
-			std::cout << e.getDetailMsg() << std::endl;
-			return -1;
-	}
- return 0;
-}
-
-boost::shared_ptr<std::string> IsmrmrdDataset::readHeader()
-{
-	boost::shared_ptr<std::string> ret(new std::string(""));
-
-	if (!linkExists(xml_header_path_.c_str())) {
-		std::cerr << "Path for XML parameters not found in HDF5 file" << std::endl;
-		return ret;
-	}
-
-	try {
-		boost::shared_ptr<DataSet> xml_dataset = boost::shared_ptr<DataSet>(new DataSet(file_->openDataSet(xml_header_path_.c_str())));
-		boost::shared_ptr<DataType> datatype(new StrType(0, H5T_VARIABLE));
-		DataType dt = xml_dataset->getDataType();
-		xml_dataset->read(*ret,dt);
-	} catch( Exception& e ) {
-		std::cout << "Exception caught while reading XML Header to HDF5 file" << std::endl;
-		std::cout << e.getDetailMsg() << std::endl;
-		return ret;
-    }
-
-	return ret;
-}
-
-template <typename T> int IsmrmrdDataset::appendImage(Image<T>& m, const char* varname) {
-	ImageHeader_with_data<T> tmp;
-	tmp.head = m.head_;
-	tmp.data.len = m.getNumberOfElements();
-	tmp.data.p = m.data_;
-	std::vector<unsigned int> dims(1,1);
-	NDArrayContainer<ImageHeader_with_data<T> > cont(dims, &tmp);
-	return appendArray<ImageHeader_with_data<T> >(cont, varname);
-}
-
-template <typename T> boost::shared_ptr< Image<T> > IsmrmrdDataset::readImage(const char* varname, unsigned long index)
-{
-	boost::shared_ptr< Image<T> > ret(new Image<T>);
-
-	boost::shared_ptr<NDArrayContainer<ImageHeader_with_data<T> > > tmp = readArray<ImageHeader_with_data<T> >(varname, index);
-
-	if (tmp->elements() != 1) {
-		std::cerr << "IsmrmrdDataset::readImage(..): readArray returned an unexpected number of elements (" << tmp->elements() << "). Should be 1." << std::endl;
-		return ret;
-	}
-	//We will copy the header
-	memcpy(&ret->head_, &(tmp->data_[0].head), sizeof(ImageHeader));
-
-	//Here we grab the data, which is part of the hvl_t member of ImageHeader_with_data, which does NOT get deallocated automatically.
-	ret->data_ = reinterpret_cast<T*>(tmp->data_[0].data.p);
-	return ret;
-}
-
-boost::shared_ptr< ImageHeader > IsmrmrdDataset::readImageHeader(const char* varname, unsigned long index)
-{
-	boost::shared_ptr< ImageHeader > ret(new ImageHeader);
-
-	boost::shared_ptr<NDArrayContainer<ImageHeader> > tmp = readArray<ImageHeader>(varname,index);
-	if (tmp->elements() != 1) {
-		std::cerr << "IsmrmrdDataset::readImageHeader(..): readArray returned an unexpected number of elements (" << tmp->elements() << "). Should be 1." << std::endl;
-		return ret;
-	}
-
-	*ret = tmp->data_[0];
-
-	return ret;
-}
-
-template EXPORTISMRMRD int IsmrmrdDataset::appendImage(Image<float>& m, const char* varname);
-template EXPORTISMRMRD int IsmrmrdDataset::appendImage(Image<double>& m, const char* varname);
-template EXPORTISMRMRD int IsmrmrdDataset::appendImage(Image<unsigned short>& m, const char* varname);
-template EXPORTISMRMRD int IsmrmrdDataset::appendImage(Image< std::complex<float> >& m, const char* varname);
-template EXPORTISMRMRD int IsmrmrdDataset::appendImage(Image< std::complex<double> >& m, const char* varname);
-
-template EXPORTISMRMRD boost::shared_ptr< Image<float> > IsmrmrdDataset::readImage(const char* varname, unsigned long index);
-template EXPORTISMRMRD boost::shared_ptr< Image<double> > IsmrmrdDataset::readImage(const char* varname, unsigned long index);
-template EXPORTISMRMRD boost::shared_ptr< Image<unsigned short> > IsmrmrdDataset::readImage(const char* varname, unsigned long index);
-template EXPORTISMRMRD boost::shared_ptr< Image< std::complex<float> > > IsmrmrdDataset::readImage(const char* varname, unsigned long index);
-template EXPORTISMRMRD boost::shared_ptr< Image< std::complex<double> > > IsmrmrdDataset::readImage(const char* varname, unsigned long index);
-
-
-HDF5Lock* HDF5Lock::instance()
-{
-		if (!instance_) instance_ = new HDF5Lock();
-		return instance_;
-}
-
-void HDF5Lock::acquire()
-{
-	mutex_.lock();
-}
-
-void HDF5Lock::release()
-{
-	mutex_.unlock();
-}
-
-EXPORTISMRMRD HDF5Lock* HDF5Lock::instance_ = NULL;
-
-
-} //End of ISMRMRD namespace
-
diff --git a/ismrmrd_hdf5.h b/ismrmrd_hdf5.h
deleted file mode 100644
index 24ba78a..0000000
--- a/ismrmrd_hdf5.h
+++ /dev/null
@@ -1,242 +0,0 @@
-#pragma once
-#ifndef ISMRMRD_HDF5_H
-#define ISMRMRD_HDF5_H
-
-#include "ismrmrd_export.h"
-#include "ismrmrd.h"
-
-#include <fstream>
-#include <boost/shared_ptr.hpp>
-#include <boost/thread.hpp>
-
-
-#include <H5Cpp.h>
-
-#ifndef H5_NO_NAMESPACE
-using namespace H5;
-#endif
-
-
-namespace ISMRMRD
-{
-
-struct AcquisitionHeader_with_data
-{
-	AcquisitionHeader head;
-	hvl_t traj;
-	hvl_t data;
-};
-
-template <typename T> struct ImageHeader_with_data
-{
-	ImageHeader head;
-	hvl_t data;
-};
-
-}
-
-
-#include "ismrmrd_hdf5_datatypes.h"
-
-namespace ISMRMRD
-{
-
-
-/**
- *   This class provides a simple interface for accessing an ISMRMRD Data Set stored
- *   in HDF5 format.
- *
- *
- *   A given ISMRMRD dataset if assumed to be stored under one group name in the HDF5 file. To make the datasets consistent,
- *   this library enforces that the XML configuration is stored in the variable groupname/xml and the Acquisitions are
- *   stored in groupname/data.
- *
- */
-class EXPORTISMRMRD IsmrmrdDataset
-{
-public:
-	/**
-	 *   Constructor.
-	 *
-	 *   @param filename is the full path to HDF5 file used for storing the data set
-	 *   @param groupname is the group name within the HDF5 file used for this data set.
-	 *   @param create_file_if_needed can be used to automatically create the file if needed.
-	 *
-	 */
-	IsmrmrdDataset(const char* filename, const char* groupname, bool create_file_if_needed = true)
-	: filename_(filename)
-	, groupname_(groupname)
-	, file_open_(false)
-	, dataset_open_(false)
-	, create_file_if_needed_(create_file_if_needed)
-	{
-		std::ifstream ifile(filename_.c_str());
-		file_exists_ = ifile.is_open();
-
-		if (openHDF5File() < 0) {
-			std::cerr << "IsmrmrdDataset: Error opening HDF file." << std::endl;
-		}
-
-		if (!linkExists(groupname_.c_str())) {
-			if (createGroupForDataset(groupname_.c_str()) < 0) {
-				std::cerr << "IsmrmrdDataset: Error create HDF5 group." << std::endl;
-			}
-		}
-
-		xml_header_path_ = groupname_ + std::string("/xml");
-		data_path_ = groupname_ + std::string("/data");
- 	}
-
-	/**
-	 *   Appends and NMR/MRI acquisition to the data set.
-	 *
-	 *	 Please consult @See Acquisition class for details.
-	 */
-	int appendAcquisition(Acquisition* a);
-
-	/**
-	 *  Reads the acquisition with the specified index from the HDF5 file.
-	 */
-	boost::shared_ptr<Acquisition> readAcquisition(unsigned long index = 0);
-
-	/**
-	 *  Return the number of acquisitions in the dataset.
-	 */
-	unsigned long getNumberOfAcquisitions();
-
-	/**
-	 *  Writes the xml string to the XML header field.
-	 *
-	 *  @warning There is no check of whether the string is a valid XML document at this point.
-	 *
-	 */
-	int writeHeader(std::string& xml);
-
-	/**
-	 *  Reads the XML configuration header from the data set.
-	 */
-	boost::shared_ptr<std::string> readHeader();
-
-	/**
-	 *  Appends an Image to the variable named varname.
-	 *
-	 *  With this function, the image data is stored as a field in the variable (as a one dimensional array)
-	 *  and when reading it, it would need to be reshaped according to the image dimensions.
-	 *
-	 *  If you would like to store header and image data separately for easy viewing and reading in other applications,
-	 *  please use the appendImageHeader and appendArray functions to store the data in separate variables.
-	 *
-	 */
-	template <typename T> int appendImage(Image<T>& m, const char* varname);
-
-	/**
-	 *   Reads an image stored with appendImage above. The index indicates which image to read.
-	 */
-	template <typename T> boost::shared_ptr< Image<T> > readImage(const char* varname, unsigned long index = 0);
-
-	/**
-	 *  This function appends only the ImageHeader to the data set. Typically used in conjunction with
-	 *  appendArray to store data and header in separate variables.
-	 *
-	 */
-	int appendImageHeader(ImageHeader& h, const char* varname) {
-		std::vector<unsigned int> dims(1,1);
-		NDArrayContainer<ImageHeader> tmp(dims,&h);
-		return appendArray<ImageHeader>(tmp,varname);
-	}
-
-	/**
-	 *   Returns the image header with the indicated index.
-	 */
-	boost::shared_ptr< ImageHeader > readImageHeader(const char* varname, unsigned long index = 0);
-
-	/**
-	 * Appends a generic array (which can contain simple data elements such as float, double, etc).
-	 *
-	 * In the file the variable (with name varname) will contain a multidimensional array with one
-	 * more dimension than the array in a. The first dimension can expand and when new arrays are appended the
-	 * first dimension will grow accordingly.
-	 *
-	 */
-	template <typename T> int appendArray(NDArrayContainer<T>& a, const char* varname);
-
-	/**
-	 * Appends an array directly without using the NDArrayContainer class.
-	 *
-	 */
-	template <typename T> int appendArray(std::vector<unsigned int>& dimensions, T* data, const char* varname) {
-		NDArrayContainer<T> tmp(dimensions, data);
-		return appendArray<T>(tmp,varname);
-	}
-
-	/**
-	 *  Reads a multi-dimensional array from the data file.
-	 */
-	template <typename T> boost::shared_ptr< NDArrayContainer<T> > readArray(const char* varname, unsigned long index = 0);
-
-
-
-protected:
-	int openHDF5File();
-	bool linkExists(const char* name);
-	int createGroupForDataset(const char* name);
-
-	bool fileExists() {
-		return file_exists_;
-	}
-
-	std::string filename_;
-	std::string groupname_;
-	std::string xml_header_path_;
-	std::string data_path_;
-
-	bool file_open_;
-	bool file_exists_;
-	bool create_file_if_needed_;
-	bool dataset_open_;
-
-	boost::shared_ptr<H5File> file_;
-	boost::shared_ptr<DataSet> dataset_;
-};
-
-/**
- *  Convenience class to provide thread-safe access to HDF5 in cases
- *  where that is not compiled into the HDF5 library.
- */
-class EXPORTISMRMRD  HDF5Lock
-{
-
-public:
-	static HDF5Lock* instance();
-
-	void acquire();
-	void release();
-
-protected:
-	HDF5Lock()
-	: mutex_() { }
-
-	virtual ~HDF5Lock() { }
-
-	static HDF5Lock* instance_;
-
-	boost::mutex mutex_;
-};
-
-class HDF5Exclusive
-{
-public:
-	HDF5Exclusive() {
-		HDF5Lock::instance()->acquire();
-	}
-
-	~HDF5Exclusive() {
-		HDF5Lock::instance()->release();
-	}
-
-};
-
-
-} //end of ISMRMRD namespace
-
-#endif //ISMRMRD_HDF5_H
diff --git a/ismrmrd_hdf5_datatypes.h b/ismrmrd_hdf5_datatypes.h
deleted file mode 100644
index c802135..0000000
--- a/ismrmrd_hdf5_datatypes.h
+++ /dev/null
@@ -1,319 +0,0 @@
-#pragma once
-#ifndef ISMRMRD_HDF5_DATATYPES_H_
-#define ISMRMRD_HDF5_DATATYPES_H_
-
-#include "ismrmrd.h"
-
-#include <H5Cpp.h>
-#include <boost/shared_ptr.hpp>
-
-
-#include <vector>
-#include <complex>
-
-#ifndef H5_NO_NAMESPACE
-	using namespace H5;
-#endif
-
-namespace ISMRMRD
-{
-
-
-template <typename T> boost::shared_ptr<DataType> getIsmrmrdHDF5Type();
-
-
-template <> inline boost::shared_ptr<DataType> getIsmrmrdHDF5Type<float>()
-{
-	boost::shared_ptr<DataType> ret(new DataType(H5Tcopy(H5T_NATIVE_FLOAT)));
-	return ret;
-}
-
-template <> inline boost::shared_ptr<DataType> getIsmrmrdHDF5Type<double>()
-{
-	boost::shared_ptr<DataType> ret(new DataType(H5Tcopy(H5T_NATIVE_DOUBLE)));
-	return ret;
-}
-
-template <> inline boost::shared_ptr<DataType> getIsmrmrdHDF5Type<char>()
-{
-	boost::shared_ptr<DataType> ret(new DataType(H5Tcopy(H5T_NATIVE_CHAR)));
-	return ret;
-}
-
-template <> inline boost::shared_ptr<DataType> getIsmrmrdHDF5Type< std::complex<float> >()
-{
-	CompType* ct = new CompType(sizeof( std::complex<float> ));
-	ct->insertMember( "real",  0,              PredType::NATIVE_FLOAT);
-	ct->insertMember( "imag",  sizeof(float),  PredType::NATIVE_FLOAT);
-	boost::shared_ptr<DataType> ret(ct);
-	return ret;
-}
-
-template <> inline boost::shared_ptr<DataType> getIsmrmrdHDF5Type< std::complex<double> >()
-{
-	CompType* ct = new CompType(sizeof( std::complex<double> ));
-	ct->insertMember( "real",  0,              PredType::NATIVE_DOUBLE);
-	ct->insertMember( "imag",  sizeof(double), PredType::NATIVE_DOUBLE);
-	boost::shared_ptr<DataType> ret(ct);
-	return ret;
-}
-
-
-template <> inline boost::shared_ptr<DataType> getIsmrmrdHDF5Type< unsigned short >()
-{
-	boost::shared_ptr<DataType> ret(new DataType(H5Tcopy(H5T_NATIVE_USHORT)));
-	return ret;
-}
-
-template <> inline boost::shared_ptr<DataType> getIsmrmrdHDF5Type<EncodingCounters>()
-{
-
-	boost::shared_ptr<CompType> ret = boost::shared_ptr<CompType>(new CompType(sizeof(EncodingCounters)));
-
-	ret->insertMember( "kspace_encode_step_1", 	HOFFSET(EncodingCounters, kspace_encode_step_1), PredType::NATIVE_UINT16);
-	ret->insertMember( "kspace_encode_step_2", 	HOFFSET(EncodingCounters, kspace_encode_step_2), PredType::NATIVE_UINT16);
-	ret->insertMember( "average", 				HOFFSET(EncodingCounters, average), 				PredType::NATIVE_UINT16);
-	ret->insertMember( "slice", 				HOFFSET(EncodingCounters, slice), 				PredType::NATIVE_UINT16);
-	ret->insertMember( "contrast", 				HOFFSET(EncodingCounters, contrast), 			PredType::NATIVE_UINT16);
-	ret->insertMember( "phase", 				HOFFSET(EncodingCounters, phase), 				PredType::NATIVE_UINT16);
-	ret->insertMember( "repetition", 			HOFFSET(EncodingCounters, repetition), 			PredType::NATIVE_UINT16);
-	ret->insertMember( "set", 					HOFFSET(EncodingCounters, set), 					PredType::NATIVE_UINT16);
-	ret->insertMember( "segment", 				HOFFSET(EncodingCounters, segment), 				PredType::NATIVE_UINT16);
-
-	std::vector<hsize_t> dims(1,8);
-	boost::shared_ptr<DataType> array_type(new ArrayType(PredType::NATIVE_UINT16, 1, &dims[0]));
-	ret->insertMember( "user", 					HOFFSET(EncodingCounters, user), 				*array_type);
-
-	return ret;
-};
-
-template <> inline boost::shared_ptr<DataType> getIsmrmrdHDF5Type<AcquisitionHeader>()
-{
-	boost::shared_ptr<CompType> ret = boost::shared_ptr<CompType>(new CompType(sizeof(AcquisitionHeader)));
-	ret->insertMember( "version", 					HOFFSET(AcquisitionHeader, version), 				PredType::NATIVE_UINT16);
-	ret->insertMember( "flags", 					HOFFSET(AcquisitionHeader, flags), 					PredType::NATIVE_UINT64);
-	ret->insertMember( "measurement_uid", 			HOFFSET(AcquisitionHeader, measurement_uid), 		PredType::NATIVE_UINT32);
-	ret->insertMember( "scan_counter", 				HOFFSET(AcquisitionHeader, scan_counter), 			PredType::NATIVE_UINT32);
-	ret->insertMember( "acquisition_time_stamp", 	HOFFSET(AcquisitionHeader, acquisition_time_stamp), PredType::NATIVE_UINT32);
-
-	std::vector<hsize_t> dims(1,3);
-	boost::shared_ptr<DataType> array_type(new ArrayType(PredType::NATIVE_UINT32, 1, &dims[0]));
-	ret->insertMember( "physiology_time_stamp", HOFFSET(AcquisitionHeader, physiology_time_stamp), 		*array_type);
-
-	ret->insertMember( "number_of_samples", 		HOFFSET(AcquisitionHeader, number_of_samples), 		PredType::NATIVE_UINT16);
-	ret->insertMember( "available_channels", 		HOFFSET(AcquisitionHeader, available_channels), 	PredType::NATIVE_UINT16);
-	ret->insertMember( "active_channels", 			HOFFSET(AcquisitionHeader, active_channels), 		PredType::NATIVE_UINT16);
-
-	dims[0] = 16;
-	boost::shared_ptr<DataType> mask_array_type(new ArrayType(PredType::NATIVE_UINT64, 1, &dims[0]));
-	ret->insertMember( "channel_mask", 				HOFFSET(AcquisitionHeader, channel_mask), 			*mask_array_type);
-	ret->insertMember( "discard_pre", 				HOFFSET(AcquisitionHeader, discard_pre), 			PredType::NATIVE_UINT16);
-	ret->insertMember( "discard_post", 				HOFFSET(AcquisitionHeader, discard_post), 			PredType::NATIVE_UINT16);
-	ret->insertMember( "center_sample", 			HOFFSET(AcquisitionHeader, center_sample), 			PredType::NATIVE_UINT16);
-	ret->insertMember( "encoding_space_ref", 		HOFFSET(AcquisitionHeader, encoding_space_ref), 	PredType::NATIVE_UINT16);
-	ret->insertMember( "trajectory_dimensions",		HOFFSET(AcquisitionHeader, trajectory_dimensions), 	PredType::NATIVE_UINT16);
-	ret->insertMember( "sample_time_us", 			HOFFSET(AcquisitionHeader, sample_time_us), 		PredType::NATIVE_FLOAT);
-
-	dims[0] = 3;
-	boost::shared_ptr<DataType> position_array_type(new ArrayType(PredType::NATIVE_FLOAT, 1, &dims[0]));
-	ret->insertMember( "position", 					HOFFSET(AcquisitionHeader, position), 				*position_array_type);
-
-	dims[0] = 4;
-	boost::shared_ptr<DataType> quaterion_array_type(new ArrayType(PredType::NATIVE_FLOAT, 1, &dims[0]));
-	ret->insertMember( "quaternion", 				HOFFSET(AcquisitionHeader, quaternion), 			*quaterion_array_type);
-
-	dims[0] = 3;
-	boost::shared_ptr<DataType> table_array_type(new ArrayType(PredType::NATIVE_FLOAT, 1, &dims[0]));
-	ret->insertMember( "patient_table_position", 	HOFFSET(AcquisitionHeader, patient_table_position), *table_array_type);
-
-	boost::shared_ptr<DataType>  ec_type = getIsmrmrdHDF5Type<EncodingCounters>();
-	ret->insertMember( "idx", 						HOFFSET(AcquisitionHeader, idx), 					*ec_type);
-
-	dims[0] = 8;
-	boost::shared_ptr<DataType> user_int_array_type(new ArrayType(PredType::NATIVE_INT32, 1, &dims[0]));
-	ret->insertMember( "user_int", 					HOFFSET(AcquisitionHeader, user_int), 				*user_int_array_type);
-
-	dims[0] = 8;
-	boost::shared_ptr<DataType> user_float_array_type(new ArrayType(PredType::NATIVE_FLOAT, 1, &dims[0]));
-	ret->insertMember( "user_float", 					HOFFSET(AcquisitionHeader, user_float), 		*user_float_array_type);
-
-	return ret;
-
-}
-
-
-struct complex_t
-{
-	float real;
-	float imag;
-};
-
-struct double_complex_t
-{
-	double real;
-	double imag;
-};
-
-
-template <> inline boost::shared_ptr<DataType> getIsmrmrdHDF5Type<complex_t>()
-{
-	boost::shared_ptr<CompType> ret = boost::shared_ptr<CompType>(new CompType(sizeof(complex_t)));
-	ret->insertMember( "real",  HOFFSET(complex_t,real),   PredType::NATIVE_FLOAT);
-	ret->insertMember( "imag",  HOFFSET(complex_t,imag),   PredType::NATIVE_FLOAT);
-	return ret;
-}
-
-template <> inline boost::shared_ptr<DataType> getIsmrmrdHDF5Type<double_complex_t>()
-{
-	boost::shared_ptr<CompType> ret = boost::shared_ptr<CompType>(new CompType(sizeof(double_complex_t)));
-	ret->insertMember( "real",  HOFFSET(complex_t,real),   PredType::NATIVE_DOUBLE);
-	ret->insertMember( "imag",  HOFFSET(complex_t,imag),   PredType::NATIVE_DOUBLE);
-	return ret;
-}
-
-template <> inline boost::shared_ptr<DataType> getIsmrmrdHDF5Type<AcquisitionHeader_with_data>()
-{
-	boost::shared_ptr<CompType> ret = boost::shared_ptr<CompType>(new CompType(sizeof(AcquisitionHeader_with_data)));
-
-	boost::shared_ptr<DataType>  head_type = getIsmrmrdHDF5Type<AcquisitionHeader>();
-	//boost::shared_ptr<DataType> cxvdatatype = getIsmrmrdHDF5Type<complex_t>();
-	//cxvdatatype = boost::shared_ptr<DataType>(new DataType(H5Tvlen_create (cxvdatatype->getId())));
-	boost::shared_ptr<DataType> realvdatatype = boost::shared_ptr<DataType>(new DataType(H5Tvlen_create (PredType::NATIVE_FLOAT.getId())));
-
-	ret->insertMember( "head",  HOFFSET(AcquisitionHeader_with_data,head),   	*head_type);
-	ret->insertMember( "traj", HOFFSET(AcquisitionHeader_with_data,traj),  		*realvdatatype);
-	ret->insertMember( "data", HOFFSET(AcquisitionHeader_with_data,data),  		*realvdatatype);
-	return ret;
-}
-
-template <> inline boost::shared_ptr<DataType> getIsmrmrdHDF5Type<ImageHeader>()
-{
-
-	boost::shared_ptr<CompType> ret = boost::shared_ptr<CompType>(new CompType(sizeof(ImageHeader)));
-
-	ret->insertMember( "version", 					HOFFSET(ImageHeader, version), 					PredType::NATIVE_UINT16);
-	ret->insertMember( "flags", 					HOFFSET(ImageHeader, flags), 				   	PredType::NATIVE_UINT64);
-	ret->insertMember( "measurement_uid", 			HOFFSET(ImageHeader, measurement_uid), 		    PredType::NATIVE_UINT32);
-
-	std::vector<hsize_t> dims(1,0);
-
-	dims[0] = 3;
-	boost::shared_ptr<DataType> mat_size_array_type(new ArrayType(PredType::NATIVE_UINT16, 1, &dims[0]));
-	ret->insertMember( "matrix_size", 				HOFFSET(ImageHeader, matrix_size), 		*mat_size_array_type);
-
-	dims[0] = 3;
-	boost::shared_ptr<DataType> fov_array_type(new ArrayType(PredType::NATIVE_FLOAT, 1, &dims[0]));
-	ret->insertMember( "field_of_view", 			HOFFSET(ImageHeader, field_of_view), 		*fov_array_type);
-
-	ret->insertMember( "channels", 					HOFFSET(ImageHeader, channels), 					PredType::NATIVE_UINT16);
-
-	dims[0] = 3;
-	boost::shared_ptr<DataType> position_array_type(new ArrayType(PredType::NATIVE_FLOAT, 1, &dims[0]));
-	ret->insertMember( "position", 					HOFFSET(ImageHeader, position), 				*position_array_type);
-
-	dims[0] = 4;
-	boost::shared_ptr<DataType> quaterion_array_type(new ArrayType(PredType::NATIVE_FLOAT, 1, &dims[0]));
-	ret->insertMember( "quaternion", 				HOFFSET(ImageHeader, quaternion), 			*quaterion_array_type);
-
-	dims[0] = 3;
-	boost::shared_ptr<DataType> table_array_type(new ArrayType(PredType::NATIVE_FLOAT, 1, &dims[0]));
-	ret->insertMember( "patient_table_position", 	HOFFSET(ImageHeader, patient_table_position), *table_array_type);
-
-
-	ret->insertMember( "average", 					HOFFSET(ImageHeader, average), 					PredType::NATIVE_UINT16);
-	ret->insertMember( "slice", 					HOFFSET(ImageHeader, slice), 					PredType::NATIVE_UINT16);
-	ret->insertMember( "contrast", 					HOFFSET(ImageHeader, contrast), 				PredType::NATIVE_UINT16);
-	ret->insertMember( "phase", 					HOFFSET(ImageHeader, phase), 					PredType::NATIVE_UINT16);
-	ret->insertMember( "repetition", 				HOFFSET(ImageHeader, repetition), 				PredType::NATIVE_UINT16);
-	ret->insertMember( "set",   					HOFFSET(ImageHeader, set), 						PredType::NATIVE_UINT16);
-	ret->insertMember( "acquisition_time_stamp", 	HOFFSET(ImageHeader, acquisition_time_stamp),   PredType::NATIVE_UINT32);
-
-	dims[0] = 3;
-	boost::shared_ptr<DataType> array_type(new ArrayType(PredType::NATIVE_UINT32, 1, &dims[0]));
-	ret->insertMember( "physiology_time_stamp", HOFFSET(ImageHeader, physiology_time_stamp), 		*array_type);
-
-	ret->insertMember( "image_data_type",   		HOFFSET(ImageHeader, image_data_type),			PredType::NATIVE_UINT16);
-	ret->insertMember( "image_type",   				HOFFSET(ImageHeader, image_type),				PredType::NATIVE_UINT16);
-	ret->insertMember( "image_index",   			HOFFSET(ImageHeader, image_index),				PredType::NATIVE_UINT16);
-	ret->insertMember( "image_series_index",		HOFFSET(ImageHeader, image_series_index),		PredType::NATIVE_UINT16);
-
-	dims[0] = 8;
-	boost::shared_ptr<DataType> user_int_array_type(new ArrayType(PredType::NATIVE_INT32, 1, &dims[0]));
-	ret->insertMember( "user_int", 				HOFFSET(ImageHeader, user_int), *user_int_array_type);
-
-	dims[0] = 8;
-	boost::shared_ptr<DataType> user_float_array_type(new ArrayType(PredType::NATIVE_FLOAT, 1, &dims[0]));
-	ret->insertMember( "user_float", 				HOFFSET(ImageHeader, user_float), *user_float_array_type);
-
-	return ret;
-}
-
-
-template <> inline boost::shared_ptr<DataType> getIsmrmrdHDF5Type<ImageHeader_with_data<float> >()
-{
-	boost::shared_ptr<CompType> ret = boost::shared_ptr<CompType>(new CompType(sizeof(ImageHeader_with_data<float>)));
-	boost::shared_ptr<DataType>  head_type = getIsmrmrdHDF5Type<ImageHeader>();
-	boost::shared_ptr<DataType> vdatatype = getIsmrmrdHDF5Type<float>();
-	vdatatype = boost::shared_ptr<DataType>(new DataType(H5Tvlen_create (vdatatype->getId())));
-	ret->insertMember( "head",  HOFFSET(ImageHeader_with_data<float>,head),   	*head_type);
-	ret->insertMember( "data", HOFFSET(ImageHeader_with_data<float>,data),  	*vdatatype);
-	return ret;
-}
-
-template <> inline boost::shared_ptr<DataType> getIsmrmrdHDF5Type<ImageHeader_with_data<double> >()
-{
-	boost::shared_ptr<CompType> ret = boost::shared_ptr<CompType>(new CompType(sizeof(ImageHeader_with_data<double>)));
-	boost::shared_ptr<DataType>  head_type = getIsmrmrdHDF5Type<ImageHeader>();
-	boost::shared_ptr<DataType> vdatatype = getIsmrmrdHDF5Type<double>();
-	vdatatype = boost::shared_ptr<DataType>(new DataType(H5Tvlen_create (vdatatype->getId())));
-	ret->insertMember( "head",  HOFFSET(ImageHeader_with_data<double>,head),   	*head_type);
-	ret->insertMember( "data", HOFFSET(ImageHeader_with_data<double>,data),  	*vdatatype);
-	return ret;
-}
-
-template <> inline boost::shared_ptr<DataType> getIsmrmrdHDF5Type<ImageHeader_with_data<unsigned short> >()
-{
-	boost::shared_ptr<CompType> ret = boost::shared_ptr<CompType>(new CompType(sizeof(ImageHeader_with_data<unsigned short>)));
-	boost::shared_ptr<DataType>  head_type = getIsmrmrdHDF5Type<ImageHeader>();
-	boost::shared_ptr<DataType> vdatatype = getIsmrmrdHDF5Type<unsigned short>();
-	vdatatype = boost::shared_ptr<DataType>(new DataType(H5Tvlen_create (vdatatype->getId())));
-	ret->insertMember( "head",  HOFFSET(ImageHeader_with_data<unsigned short>,head),   	*head_type);
-	ret->insertMember( "data", HOFFSET(ImageHeader_with_data<unsigned short>,data),  	*vdatatype);
-	return ret;
-}
-
-template <> inline boost::shared_ptr<DataType> getIsmrmrdHDF5Type<ImageHeader_with_data<complex_t> >()
-{
-	boost::shared_ptr<CompType> ret = boost::shared_ptr<CompType>(new CompType(sizeof(ImageHeader_with_data<complex_t>)));
-	boost::shared_ptr<DataType>  head_type = getIsmrmrdHDF5Type<ImageHeader>();
-	boost::shared_ptr<DataType> vdatatype = getIsmrmrdHDF5Type<complex_t>();
-	vdatatype = boost::shared_ptr<DataType>(new DataType(H5Tvlen_create (vdatatype->getId())));
-	ret->insertMember( "head",  HOFFSET(ImageHeader_with_data<complex_t>,head),   	*head_type);
-	ret->insertMember( "data", HOFFSET(ImageHeader_with_data<complex_t>,data),  	*vdatatype);
-	return ret;
-}
-
-template <> inline boost::shared_ptr<DataType> getIsmrmrdHDF5Type<ImageHeader_with_data<double_complex_t> >()
-{
-	boost::shared_ptr<CompType> ret = boost::shared_ptr<CompType>(new CompType(sizeof(ImageHeader_with_data<double_complex_t>)));
-	boost::shared_ptr<DataType>  head_type = getIsmrmrdHDF5Type<ImageHeader>();
-	boost::shared_ptr<DataType> vdatatype = getIsmrmrdHDF5Type<double_complex_t>();
-	vdatatype = boost::shared_ptr<DataType>(new DataType(H5Tvlen_create (vdatatype->getId())));
-	ret->insertMember( "head",  HOFFSET(ImageHeader_with_data<double_complex_t>,head),   	*head_type);
-	ret->insertMember( "data", HOFFSET(ImageHeader_with_data<double_complex_t>,data),  	*vdatatype);
-	return ret;
-}
-
-template <> inline boost::shared_ptr<DataType> getIsmrmrdHDF5Type<ImageHeader_with_data< std::complex<float> > >()
-{
-	return getIsmrmrdHDF5Type<ImageHeader_with_data<complex_t> >();
-}
-
-template <> inline boost::shared_ptr<DataType> getIsmrmrdHDF5Type<ImageHeader_with_data< std::complex<double> > >()
-{
-	return getIsmrmrdHDF5Type<ImageHeader_with_data<double_complex_t> >();
-}
-
-}
-
-#endif /* ISMRMRD_HDF5_DATATYPES_H_ */
diff --git a/ismrmrd_xsd_export.h b/ismrmrd_xsd_export.h
deleted file mode 100644
index cbb30de..0000000
--- a/ismrmrd_xsd_export.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * ismrmrd_xsd_export.h
- *
- *  Created on: Sep 13, 2012
- *      Author: hansenms
- */
-
-#ifndef ISMRMRD_XSD_EXPORT_H_
-#define ISMRMRD_XSD_EXPORT_H_
-
-#if defined (WIN32)
-#if defined (ismrmrd_xsd_EXPORTS)
-#define EXPORTISMRMRDXSD __declspec(dllexport)
-#else
-#define EXPORTISMRMRDXSD __declspec(dllimport)
-#endif
-#else
-#define EXPORTISMRMRDXSD
-#endif
-
-#endif /* ISMRMRD_XSD_EXPORT_H_ */
diff --git a/matlab/+ismrmrd/Acquisition.m b/matlab/+ismrmrd/Acquisition.m
deleted file mode 100644
index e9e4fe3..0000000
--- a/matlab/+ismrmrd/Acquisition.m
+++ /dev/null
@@ -1,49 +0,0 @@
-% Acquisition
-classdef Acquisition
-    
-    % Properties
-    properties
-
-        head = ismrmrd.AcquisitionHeader;
-        traj = single([]);
-        data = single([]);
-
-    end % Properties
-    
-    % Methods
-    methods
-        
-        function obj = set.head(obj,v)
-            if isa(v,'ismrmrd.AcquisitionHeader')
-                obj.head = v;
-            else
-                % not of the correct type, hope it's a struct 
-                % and try to copy one element at a time
-                u = fieldnames(obj.head);
-                for p = 1:length(u)
-                    obj.head = setfield(obj.head,u{p},getfield(v,u{p}));
-                end
-            end
-        end
-        
-        function obj = set.traj(obj,v)
-            obj.traj = single(v);
-        end
-        
-        function obj = set.data(obj,v)
-            obj.data = single(v);        
-        end
-
-        function b = isFlagSet(obj,flag)
-            bitflag = ismrmrd.FlagBit(flag);
-            b = bitflag.isSet(obj.head.flag);
-        end
-        
-        function obj = setFlag(obj,flag)
-            bitflag = ismrmrd.FlagBit(flag);            
-            obj.head.flag = bitor(obj.head.flag, bitflag.bitmask);
-        end
-        
-    end % Methods
-    
-end
\ No newline at end of file
diff --git a/matlab/+ismrmrd/AcquisitionFlags.m b/matlab/+ismrmrd/AcquisitionFlags.m
deleted file mode 100644
index f8ea364..0000000
--- a/matlab/+ismrmrd/AcquisitionFlags.m
+++ /dev/null
@@ -1,38 +0,0 @@
-classdef AcquisitionFlags
-    properties(Constant)
-        % Looping indicators %
-        ACQ_FIRST_IN_ENCODE_STEP1                	= 1,
-        ACQ_LAST_IN_ENCODE_STEP1    				= 2,
-        ACQ_FIRST_IN_ENCODE_STEP2   				= 3,
-        ACQ_LAST_IN_ENCODE_STEP2    				= 4,
-        ACQ_FIRST_IN_AVERAGE        				= 5,
-        ACQ_LAST_IN_AVERAGE         				= 6,
-        ACQ_FIRST_IN_SLICE          				= 7,
-        ACQ_LAST_IN_SLICE           				= 8,
-        ACQ_FIRST_IN_CONTRAST       				= 9,
-        ACQ_LAST_IN_CONTRAST        				= 10,
-        ACQ_FIRST_IN_PHASE          				= 11,
-        ACQ_LAST_IN_PHASE           				= 12,
-        ACQ_FIRST_IN_REPETITION     				= 13,
-        ACQ_LAST_IN_REPETITION      				= 14,
-        ACQ_FIRST_IN_SET            				= 15,
-        ACQ_LAST_IN_SET             				= 16,
-        ACQ_FIRST_IN_SEGMENT        				= 17,
-        ACQ_LAST_IN_SEGMENT         				= 18,
-
-        ACQ_IS_NOISE_MEASUREMENT                	= 19,
-        ACQ_IS_PARALLEL_CALIBRATION             	= 20,
-        ACQ_IS_PARALLEL_CALIBRATION_AND_IMAGING 	= 21,
-        ACQ_IS_REVERSE              				= 22,
-        ACQ_IS_NAVIGATION_DATA      				= 23,
-
-        ACQ_USER1                   				= 57,
-        ACQ_USER2                   				= 58,
-        ACQ_USER3                   				= 59,
-        ACQ_USER4                   				= 60,
-        ACQ_USER5                   				= 61,
-        ACQ_USER6                   				= 62,
-        ACQ_USER7                   				= 63,
-        ACQ_USER8                   				= 64
-    end
-end
\ No newline at end of file
diff --git a/matlab/+ismrmrd/AcquisitionHeader.m b/matlab/+ismrmrd/AcquisitionHeader.m
deleted file mode 100644
index f333c74..0000000
--- a/matlab/+ismrmrd/AcquisitionHeader.m
+++ /dev/null
@@ -1,150 +0,0 @@
-classdef AcquisitionHeader
-    
-    properties
-        version = uint16(0);                           % First unsigned int indicates the version %
-        flags = uint64(0);                             % bit field with flags %
-        measurement_uid = uint32(0);                   % Unique ID for the measurement %
-        scan_counter = uint32(0);                      % Current acquisition number in the measurement %
-        acquisition_time_stamp = uint32(0);            % Acquisition clock %
-        physiology_time_stamp = zeros(3,1,'uint32');   % Physiology time stamps, e.g. ecg, breating, etc. %
-        number_of_samples = uint16(0);                 % Number of samples acquired %
-        available_channels = uint16(0);                % Available coils %
-        active_channels = uint16(0);                   % Active coils on current acquisiton %
-        channel_mask = zeros(16,1,'uint64');           % Mask to indicate which channels are active. Support for 1024 channels %
-        discard_pre = uint16(0);                       % Samples to be discarded at the beginning of acquisition %
-        discard_post = uint16(0);                      % Samples to be discarded at the end of acquisition %
-        center_sample = uint16(0);                     % Sample at the center of k-space %
-        encoding_space_ref = uint16(0);                % Reference to an encoding space, typically only one per acquisition %
-        trajectory_dimensions = uint16(0);             % Indicates the dimensionality of the trajectory vector (0 means no trajectory) %
-        sample_time_us = single(0);                    % Time between samples in micro seconds, sampling BW %
-        position = zeros(3,1,'single');                % Three-dimensional spatial offsets from isocenter %
-        quaternion = zeros(4,1,'single');              % Angulation of acquisition %
-        patient_table_position = zeros(3,1, 'single'); % Patient table off-center %
-        idx = ismrmrd.EncodingCounters;                % Encoding loop counters, see above %
-        user_int = zeros(8,1,'int32');                 % Free user parameters %
-        user_float = zeros(8,1,'single');              % Free user parameters %
-    end
-    
-    methods
-        
-        function obj = set.version(obj,v)
-            obj.version = uint16(v);
-        end
-
-        function obj = set.flags(obj,v)
-            obj.flags = uint64(v);
-        end
-        
-        function obj = set.measurement_uid(obj,v)
-            obj.measurement_uid = uint32(v);
-        end
-        
-        function obj = set.scan_counter(obj,v)
-            obj.scan_counter = uint32(v);
-        end
-        
-        function obj = set.acquisition_time_stamp(obj,v)
-            obj.acquisition_time_stamp = uint32(v);
-        end
-        
-        function obj = set.physiology_time_stamp(obj,v)
-            if (length(v)~=3)
-                error('AcquisitionHeader.physiology_time_stamp must have 3 elements')
-            end
-            obj.physiology_time_stamp = uint32(v);
-        end
-        
-        function obj = set.number_of_samples(obj,v)
-            obj.number_of_samples = uint16(v);
-        end
-        
-        function obj = set.available_channels(obj,v)
-            obj.available_channels = uint16(v);
-        end
-        
-        function obj = set.active_channels(obj,v)
-            obj.active_channels = uint16(v);
-        end
-        
-        function obj = set.channel_mask(obj,v)
-            if (length(v)~=16)
-                error('AcquisitionHeader.channel_mask must have 16 elements')
-            end
-            obj.channel_mask = uint64(v);
-        end
-        
-        function obj = set.discard_pre(obj,v)
-            obj.discard_pre = uint16(v);
-        end
-        
-        function obj = set.discard_post(obj,v)
-            obj.discard_post = uint16(v);
-        end
-        
-        function obj = set.center_sample(obj,v)
-            obj.center_sample = uint16(v);
-        end
-        
-        function obj = set.encoding_space_ref(obj,v)
-            obj.encoding_space_ref = uint16(v);
-        end
-        
-        function obj = set.trajectory_dimensions(obj,v)
-            obj.trajectory_dimensions = uint16(v);
-        end
-        
-        function obj = set.sample_time_us(obj,v)
-            obj.sample_time_us = single(v);
-        end
-
-        function obj = set.position(obj,v)
-            if (length(v)~=3)
-                error('AcquisitionHeader.position must have 3 elements')
-            end
-            obj.position = single(v);
-        end
-        
-        function obj = set.quaternion(obj,v)
-            if (length(v)~=4)
-                error('AcquisitionHeader.quaternion must have 4 elements')
-            end            
-            obj.quaternion = single(v);
-        end
-        
-        function obj = set.patient_table_position(obj,v)
-            if (length(v)~=3)
-                error('AcquisitionHeader.patient_table_position must have 3 elements')
-            end
-            obj.patient_table_position = single(v);
-        end
-                
-        function obj = set.idx(obj,v)
-            if isa(v,'ismrmrd.EncodingCounters')
-                obj.idx = v;
-            else
-                % not of the correct type, hope it's a struct 
-                % and try to copy one element at a time
-                u = fieldnames(obj.idx);
-                for p = 1:length(u)
-                    obj.idx = setfield(obj.idx,u{p},getfield(v,u{p}));
-                end
-            end
-        end
-        
-        function obj = set.user_int(obj,v)
-            if (length(v)~=8)
-                error('AcquisitionHeader.user_int must have 8 elements')
-            end
-            obj.user_int = int32(v);
-        end
-        
-        function obj = set.user_float(obj,v)
-            if (length(v)~=8)
-                error('AcquisitionHeader.user_float must have 8 elements')
-            end
-            obj.user_float = single(v);
-        end
-        
-    end
-    
-end
\ No newline at end of file
diff --git a/matlab/+ismrmrd/EncodingCounters.m b/matlab/+ismrmrd/EncodingCounters.m
deleted file mode 100644
index aee7e07..0000000
--- a/matlab/+ismrmrd/EncodingCounters.m
+++ /dev/null
@@ -1,62 +0,0 @@
-classdef EncodingCounters
-    
-    properties
-        kspace_encode_step_1 = uint16(0); % e.g. phase encoding line number %
-        kspace_encode_step_2 = uint16(0); % e.g. partition encodning number %
-        average              = uint16(0); % e.g. signal average number %
-        slice                = uint16(0); % e.g. imaging slice number %
-        contrast             = uint16(0); % e.g. echo number in multi-echo %
-        phase                = uint16(0); % e.g. cardiac phase number %
-        repetition           = uint16(0); % e.g. dynamic number for dynamic scanning %
-        set                  = uint16(0); % e.g. flow encodning set %
-        segment              = uint16(0); % e.g. segment number for segmented acquisition %
-        user                 = zeros(1,8,'uint16'); % Free user parameters %
-    end
-    
-    methods
-        function obj = set.kspace_encode_step_1(obj,v)
-            obj.kspace_encode_step_1 = uint16(v);
-        end
-        
-        function obj = set.kspace_encode_step_2(obj,v)
-            obj.kspace_encode_step_2 = uint16(v);
-        end
-        
-        function obj = set.average(obj,v)
-            obj.average = uint16(v);
-        end
-        
-        function obj = set.slice(obj,v)
-            obj.slice = uint16(v);
-        end
-        
-        function obj = set.contrast(obj,v)
-            obj.contrast = uint16(v);
-        end
-        
-        function obj = set.phase(obj,v)
-            obj.phase = uint16(v);
-        end
-        
-        function obj = set.repetition(obj,v)
-            obj.repetition = uint16(v);
-        end
-        
-        function obj = set.set(obj,v)
-            obj.set = uint16(v);
-        end
-        
-        function obj = set.segment(obj,v)
-            obj.segment = uint16(v);
-        end
-        
-        function obj = set.user(obj,v)
-            if (length(v)~=8)
-                error('EncodingCounters.user must have 8 elements')
-            end
-            obj.user = uint16(v);
-        end
-        
-    end
-   
-end % EncodingCounters
diff --git a/matlab/+ismrmrd/FlagBit.m b/matlab/+ismrmrd/FlagBit.m
deleted file mode 100644
index 1432238..0000000
--- a/matlab/+ismrmrd/FlagBit.m
+++ /dev/null
@@ -1,32 +0,0 @@
-classdef FlagBit
-
-    properties
-        bitmask = uint64(0);
-    end
-    
-    methods
-        function fb = FlagBit(b)
-            if ~(b>0)
-                error('b must be positive');
-            else
-                fb.bitmask_ = bitshift(uint16(1),(b-1));
-            end
-        end % FlagBit
-    end
-    
-    methods
-        
-        function obj = set.bitmask(obj,b)
-            obj.bitmask = uint64(b);
-        end % bitmask_ set function
-        
-        function b = isSet(obj,m)
-            if (bitand(obj.bitmask, uint64(m))>0)
-                b = true;
-            else
-                b = false;
-            end
-        end % isSet
-    end
-    
-end % classdef
\ No newline at end of file
diff --git a/matlab/+ismrmrd/Image.m b/matlab/+ismrmrd/Image.m
deleted file mode 100644
index fe591b8..0000000
--- a/matlab/+ismrmrd/Image.m
+++ /dev/null
@@ -1,35 +0,0 @@
-% Image
-classdef Image
-    
-    % Properties
-    properties
-
-        head_ = ismrmrd.ImageHeader;
-        data_ = [];
-
-    end % Properties
-    
-    % Methods
-    methods
-
-        function obj = set.head_(obj,v)
-            obj.head_ = v;
-        end
-        
-        function obj = set.data_(obj,v)
-            obj.data_ = single(complex(v));
-        end
-        
-        function b = isFlagSet(obj,flag)
-            bitflag = ismrmrd.FlagBit(flag);
-            b = bitflag.isSet(obj.head_.flag);
-        end
-        
-        function obj = setFlag(obj,flag)
-            bitflag = ismrmrd.FlagBit(flag);            
-            obj.head_.flag = bitor(obj.head_.flag, bitflag.bitmask_);
-        end
-        
-    end % Methods
-    
-end
\ No newline at end of file
diff --git a/matlab/+ismrmrd/ImageDataType.m b/matlab/+ismrmrd/ImageDataType.m
deleted file mode 100644
index e231a58..0000000
--- a/matlab/+ismrmrd/ImageDataType.m
+++ /dev/null
@@ -1,9 +0,0 @@
-classdef ImageDataType
-    properties(Constant)
-        DATA_FLOAT = 1,
-        DATA_DOUBLE = 2,
-        DATA_COMPLEX_FLOAT = 3,
-        DATA_COMPLEX_DOUBLE = 4,
-        DATA_UNSIGNED_SHORT = 5
-    end
-end
diff --git a/matlab/+ismrmrd/ImageFlags.m b/matlab/+ismrmrd/ImageFlags.m
deleted file mode 100644
index fda74b5..0000000
--- a/matlab/+ismrmrd/ImageFlags.m
+++ /dev/null
@@ -1,14 +0,0 @@
-% IMAGE FLAGS %
-classdef ImageFlags
-    properties(Constant)
-        IMAGE_IS_NAVIGATION_DATA      				= 23,
-        IMAGE_USER1                   				= 57,
-        IMAGE_USER2                   				= 58,
-        IMAGE_USER3                   				= 59,
-        IMAGE_USER4                   				= 60,
-        IMAGE_USER5                   				= 61,
-        IMAGE_USER6                   				= 62,
-        IMAGE_USER7                   				= 63,
-        IMAGE_USER8                   				= 64
-    end
-end
\ No newline at end of file
diff --git a/matlab/+ismrmrd/ImageHeader.m b/matlab/+ismrmrd/ImageHeader.m
deleted file mode 100644
index 6d1558e..0000000
--- a/matlab/+ismrmrd/ImageHeader.m
+++ /dev/null
@@ -1,148 +0,0 @@
-classdef ImageHeader
-
-    properties
-        version = uint16(0);                          % First unsigned int indicates the version %
-        flag = uint64(0);                             % bit field with flags %
-        measurement_uid = uint32(0);                  % Unique ID for the measurement %
-        matrix_size = zeros(3,1,'uint16');            % Pixels in the 3 spatial dimensions
-        field_of_view = zeros(3,1,'single');          % Size (in mm) of the 3 spatial dimensions %
-        channels = uint16(0);                         % Number of receive channels %
-        position = zeros(3,1,'single');               % Three-dimensional spatial offsets from isocenter %
-        quaternion = zeros(4,1,'single');             % Angulation of acquisition %
-        patient_table_position = zeros(3,1,'single'); % Patient table off-center %
-        average = uint16(0);                          % e.g. signal average number %
-        slice = uint16(0);                            % e.g. imaging slice number %
-        contrast = uint16(0);                         % e.g. echo number in multi-echo %
-        phase = uint16(0);                            % e.g. cardiac phase number %
-        repetition = uint16(0);                       % e.g. dynamic number for dynamic scanning %
-        set = uint16(0);                              % e.g. flow encodning set %
-        acquisition_time_stamp = uint32(0);           % Acquisition clock %
-        physiology_time_stamp = zeros(3,1,'uint32');  % Physiology time stamps, e.g. ecg, breating, etc. %
-        image_data_type = uint16(0);                  % e.g. unsigned short, float, complex float, etc. %
-        image_type = uint16(0);                       % e.g. magnitude, phase, complex, real, imag, etc. %
-        image_index = uint16(0);					  % e.g. image number in series of images  %
-        image_series_index = uint16(0);               % e.g. series number %
-        user_int = zeros(8,1,'int32');                % Free user parameters %
-        user_float = zeros(8,1,'single');             % Free user parameters %
-    end
-    
-    methods
-        
-        function obj = set.version(obj,v)
-            obj.version = uint16(v);
-        end
-
-        function obj = set.flag(obj,v)
-            obj.flag = uint64(v);
-        end
-        
-        function obj = set.measurement_uid(obj,v)
-            obj.measurement_uid = uint32(v);
-        end
-        
-        function obj = set.matrix_size(obj,v)
-            if (length(v)~=3)
-                error('ImageHeader.matrix_size must have 3 elements')
-            end
-            obj.matrix_size = uint16(v);
-        end
-
-        function obj = set.field_of_view(obj,v)
-            if (length(v)~=3)
-                error('ImageHeader.field_of_view must have 3 elements')
-            end
-            obj.field_of_view = single(v);
-        end
-        
-        function obj = set.channels(obj,v)
-            obj.channels = uint16(v);
-        end
-        
-        function obj = set.position(obj,v)
-            if (length(v)~=3)
-                error('AcquisitionHeader.position must have 3 elements')
-            end
-            obj.position = single(v);
-        end
-        
-        function obj = set.quaternion(obj,v)
-            if (length(v)~=4)
-                error('AcquisitionHeader.quaternion must have 4 elements')
-            end            
-            obj.quaternion = single(v);
-        end
-        
-        function obj = set.patient_table_position(obj,v)
-            if (length(v)~=3)
-                error('AcquisitionHeader.patient_table_position must have 3 elements')
-            end
-            obj.patient_table_position = single(v);
-        end
-                
-        function obj = set.average(obj,v)
-            obj.average = uint16(v);
-        end
-        
-        function obj = set.slice(obj,v)
-            obj.slice = uint16(v);
-        end
-        
-        function obj = set.contrast(obj,v)
-            obj.contrast = uint16(v);
-        end
-        
-        function obj = set.phase(obj,v)
-            obj.phase = uint16(v);
-        end
-        
-        function obj = set.repetition(obj,v)
-            obj.repetition = uint16(v);
-        end
-        
-        function obj = set.set(obj,v)
-            obj.set = uint16(v);
-        end
-        
-        function obj = set.acquisition_time_stamp(obj,v)
-            obj.acquisition_time_stamp = uint32(v);
-        end
-        
-        function obj = set.physiology_time_stamp(obj,v)
-            if (length(v)~=3)
-                error('AcquisitionHeader.physiology_time_stamp must have 3 elements')
-            end
-            obj.physiology_time_stamp = uint32(v);
-        end
-        
-        function obj = set.image_data_type(obj,v)
-            obj.image_data_type = uint16(v);
-        end
-        
-        function obj = set.image_type(obj,v)
-            obj.image_type = uint16(v);
-        end
-        
-        function obj = set.image_index(obj,v)
-            obj.image_index = uint16(v);
-        end
-        function obj = set.image_series_index(obj,v)
-            obj.image_series_index = uint16(v);
-        end
-        
-        function obj = set.user_int(obj,v)
-            if (length(v)~=8)
-                error('AcquisitionHeader.user_int must have 8 elements')
-            end
-            obj.user_int = int32(v);
-        end
-        
-        function obj = set.user_float(obj,v)
-            if (length(v)~=8)
-                error('AcquisitionHeader.user_float must have 8 elements')
-            end
-            obj.user_float = single(v);
-        end
-                
-    end
-    
-end
diff --git a/matlab/+ismrmrd/ImageType.m b/matlab/+ismrmrd/ImageType.m
deleted file mode 100644
index 7e1cd59..0000000
--- a/matlab/+ismrmrd/ImageType.m
+++ /dev/null
@@ -1,9 +0,0 @@
-classdef ImageType
-    properties(Constant)
-        TYPE_MAGNITUDE = 1,
-        TYPE_PHASE = 2,
-        TYPE_REAL = 3,
-        TYPE_IMAG = 4,
-        TYPE_COMPLEX = 5
-    end
-end
diff --git a/matlab/+ismrmrd/XMLHeader.m b/matlab/+ismrmrd/XMLHeader.m
deleted file mode 100644
index 9d064f7..0000000
--- a/matlab/+ismrmrd/XMLHeader.m
+++ /dev/null
@@ -1,37 +0,0 @@
-% XMLHeader
-classdef XMLHeader
-
-    properties
-        factory = []
-    end
-
-    methods
-
-        function obj = XMLHeader()
-            obj.factory = org.ismrm.ismrmrd.xmlhdr.ObjectFactory(); 
-        end
-
-        function hdr = fromString(obj,xmlstring)
-            import javax.xml.bind.*
-            jc = JAXBContext.newInstance('org.ismrm.ismrmrd.xmlhdr', obj.factory.getClass().getClassLoader());
-            u  = jc.createUnmarshaller();
-            jstr = java.lang.String(xmlstring);
-            hdr = u.unmarshal(java.io.ByteArrayInputStream(jstr.getBytes()));
-
-        end
-
-        function xmlstring = toString(obj)
-            import javax.xml.bind.*
-            jc = JAXBContext.newInstance('org.ismrm.ismrmrd.xmlhdr', obj.factory.getClass().getClassLoader());
-            m  = jc.createMarshaller();
-            m.setProperty(Marshaller.JAXB_SCHEMA_LOCATION, 'http://www.ismrm.org/ISMRMD ismrmrd.xsd');
-
-            strbuff = java.io.StringWriter();
-            m.marshal(hdr, strbuff);
-            xmlstring = strbuff.toString();
-
-        end
-
-    end
-
-end
diff --git a/matlab/+ismrmrd/file.m b/matlab/+ismrmrd/file.m
deleted file mode 100644
index ff71db1..0000000
--- a/matlab/+ismrmrd/file.m
+++ /dev/null
@@ -1,256 +0,0 @@
-% File
-classdef file
-
-    properties
-        fid = -1;
-        filename = '';
-        datapath = '';
-        xmlpath = '';
-        xmlhdr = [];
-    end
-    
-    methods
-        
-        function obj = file(filename,groupname)
-            
-            % If the file exists, open it for read/write
-            % otherwise, create it
-            if exist(filename,'file')
-                obj.fid = H5F.open(filename,'H5F_ACC_RDWR','H5P_DEFAULT');
-            else
-                fcpl = H5P.create('H5P_FILE_CREATE');
-                obj.fid = H5F.create(filename,'H5F_ACC_TRUNC',fcpl,'H5P_DEFAULT');
-                H5P.close(fcpl);
-            end
-            
-            % Set the filename
-            obj.filename = filename;
-            
-            % Set the group name
-            %   default is dataset
-            if nargin == 1
-                groupname = 'dataset';
-            end
-            % Set the paths
-            grouppath = ['/' groupname];
-            obj.xmlpath   = ['/' groupname '/xml'];
-            obj.datapath  = ['/' groupname '/data'];
-            
-            % Check if the group exists
-            lapl_id=H5P.create('H5P_LINK_ACCESS');
-            if (H5L.exists(obj.fid,grouppath,lapl_id) == 0)
-                % group does not exist, create it and set a default header
-                group_id = H5G.create(obj.fid, grouppath, 0);
-                H5G.close(group_id);
-                % create a default xml header object
-                obj.xmlhdr = ismrmrd.XMLHeader();
-            else
-                % group exists, read the xml header
-                % and create a new convert it to an xml header object
-                obj.xmlhdr = ismrmrd.XMLHeader().stringToHeader(obj.readxml());
-            end
-            H5P.close(lapl_id);
-        
-        end
-        
-        function obj = close(obj)
-            % synchronize the xml header
-            xmlstring = ismrmrd.XMLHeader.headerToString(obj.xmlhdr);
-            obj.writexml(xmlstring);
-            % close the file
-            H5F.close(obj.fid);
-        end
-        
-        function xmlstring = readxml(obj)
-            
-            % Check if the XML header exists
-            % TODO: set it's value to the default
-            lapl_id=H5P.create('H5P_LINK_ACCESS');
-            if (H5L.exists(obj.fid,obj.xmlpath,lapl_id) == 0)
-                error('No XML header found.');
-            end
-            H5P.close(lapl_id);
-
-            % Open
-            xml_id = H5D.open(obj.fid, obj.xmlpath);
-            
-            % Get the type
-            xml_dtype = H5D.get_type(xml_id);
-            
-            % Read the data
-            hdr = H5D.read(xml_id, xml_dtype, 'H5S_ALL', 'H5S_ALL', 'H5P_DEFAULT');
-            
-            % Output depends on whether or not the stored string was variale length
-            if (H5T.is_variable_str(xml_dtype))
-                xmlstring = hdr{1};
-            else
-                xmlstring = hdr';
-            end
-
-            % Close the XML
-            H5T.close(xml_dtype);
-            H5D.close (xml_id); 
-        end
-        
-        function writexml(obj,xmlstring)
-            % No validation is performed.  You're on your own.
-            
-            % TODO: add error checking on the write and return a status
-            % TODO: if the matlab variable length string bug is resolved
-            % then we should change this logic to just modify the length
-            % and overwrite.
-            
-            % Check if the XML header exists
-            %   if it does not exist, create it
-            %   if it exists, modify the size appropriately
-            lapl_id=H5P.create('H5P_LINK_ACCESS');
-            if (H5L.exists(obj.fid,obj.xmlpath,lapl_id) == 1)
-                % Delete it
-                H5L.delete(obj.fid, obj.xmlpath,'H5P_DEFAULT');
-            end
-            H5P.close(lapl_id);
-            
-            % Set variable length string type
-            xml_dtype = H5T.copy('H5T_C_S1');
-            % Matlab is having trouble writing variable length strings
-            % that are longer that 512 characters.  Switched to fixed
-            % length.
-            % H5T.set_size(xml_dtype,'H5T_VARIABLE');
-            H5T.set_size(xml_dtype, length(xmlstring));
-            xml_space_id = H5S.create_simple (1, 1, []);
-            xml_id = H5D.create (obj.fid, obj.xmlpath, xml_dtype, ....
-                                 xml_space_id, 'H5P_DEFAULT');
-            H5S.close(xml_space_id);
-            
-            % Write the data
-            H5D.write(xml_id, xml_dtype, ...
-                      'H5S_ALL', 'H5S_ALL', 'H5P_DEFAULT', xmlstring);
-            
-            % Close the XML
-            H5D.close(xml_id);
-            
-        end
-        
-        function nacq = getNumberOfAcquisitions(obj)
-            
-            dset = H5D.open(obj.fid, obj.datapath);
-            space = H5D.get_space(dset);
-            H5S.get_simple_extent_dims(space);
-            [~,dims,~] = H5S.get_simple_extent_dims(space);
-            nacq = dims(1);
-            H5S.close(space);
-            H5D.close(dset);
-
-        end
-
-        function acq = readAcquisition(obj, nacq)
-
-            % Open the data
-            dset_id = H5D.open(obj.fid, obj.datapath);
-
-            % Open the data space
-            file_space_id = H5D.get_space(dset_id);
-
-            % Initialize the return object
-            acq = ismrmrd.Acquisition;
-        
-            % Create a mem_space for reading
-            dims = [1 1];
-            mem_space_id = H5S.create_simple(2,dims,[]);
-
-            % Read the desired acquisition
-            offset = [nacq-1 0];
-            H5S.select_hyperslab(file_space_id,'H5S_SELECT_SET',offset,[1 1],[1 1],[1 1]);
-            d = H5D.read(dset_id, ismrmrd.hdf5_datatypes.getType_Acquisition, ...
-                            mem_space_id, file_space_id, 'H5P_DEFAULT');
-
-            % Set the structure bits
-            acq.head = d.head(1);
-            acq.traj = d.traj{1};
-            t = d.data{1};
-            acq.data = t(1:2:end) + 1j*t(2:2:end);
-            
-            % Clean up
-            H5S.close(mem_space_id);
-            H5S.close(file_space_id);
-            H5D.close(dset_id);
-        end
-                
-        function appendAcquisition(obj, acq)
-            % Append an acquisition
-            
-            % TODO: Check the type of the input
-            
-            % Check if the Data exists
-            %   if it does not exist, create it
-            %   if it does exist increase it's size by one
-            lapl_id=H5P.create('H5P_LINK_ACCESS');
-            if (H5L.exists(obj.fid, obj.datapath, lapl_id) == 0)
-                % Data does not exist
-                %   create with rank 2, unlimited, and set the chunk size
-                dims    = [1 1];
-                maxdims = [H5ML.get_constant_value('H5S_UNLIMITED') 1];
-                file_space_id = H5S.create_simple(2, dims, maxdims);
-                
-                dcpl = H5P.create('H5P_DATASET_CREATE');
-                chunk = [1 1];
-                H5P.set_chunk (dcpl, chunk);
-                data_id = H5D.create(obj.fid, obj.datapath, ...
-                                     ismrmrd.hdf5_datatypes.getType_Acquisition, ...
-                                     file_space_id, dcpl);
-                H5P.close(dcpl);
-                H5S.close(file_space_id);
-                
-            else
-                % Open the data
-                data_id = H5D.open(obj.fid, obj.datapath);
-
-                % Open the data space
-                file_space_id = H5D.get_space(data_id);
-
-                % Get the size, increment by one
-                H5S.get_simple_extent_dims(file_space_id);
-                [~,dims,~] = H5S.get_simple_extent_dims(file_space_id);
-                dims = [dims(1)+1, 1];
-                H5D.set_extent (data_id, dims);
-                H5S.close(file_space_id);
-
-            end
-            H5P.close(lapl_id);
-            
-            % Get the file space (room for one more acq)
-            file_space_id = H5D.get_space(data_id);
-            [~,dims,~] = H5S.get_simple_extent_dims(file_space_id);
-            
-            % Select the last block
-            offset = [dims(1)-1 0];
-            H5S.select_hyperslab(file_space_id,'H5S_SELECT_SET',offset,[],[],[]);
-            
-            % Mem space
-            mem_space_id = H5S.create_simple(2,[1 1],[]);
-
-            % Pack the acquisition into the correct struct for writing
-            swarn = warning('query','MATLAB:structOnObject');
-            warning('off', 'MATLAB:structOnObject')
-            d.head(1) = struct(acq.head);
-            d.head(1).idx = struct(acq.head.idx);
-            warning(swarn.state, 'MATLAB:structOnObject')            
-            d.traj{1} = acq.traj;
-            t = zeros(2*length(acq.data),1,'single');
-            t(1:2:end) = real(acq.data);
-            t(2:2:end) = imag(acq.data);
-            d.data{1} = t;
-            
-            % Write
-            H5D.write(data_id, ismrmrd.hdf5_datatypes.getType_Acquisition(), ...
-                      mem_space_id, file_space_id, 'H5P_DEFAULT', d);
-
-            % Clean up
-            H5S.close(mem_space_id);
-            H5S.close(file_space_id);
-            H5D.close(data_id);
-        end
-        
-    end
-    
-end
diff --git a/matlab/+ismrmrd/hdf5_datatypes.m b/matlab/+ismrmrd/hdf5_datatypes.m
deleted file mode 100644
index c2315c1..0000000
--- a/matlab/+ismrmrd/hdf5_datatypes.m
+++ /dev/null
@@ -1,334 +0,0 @@
-classdef hdf5_datatypes
-    
-    methods (Static)
-        
-        function b = getType_float()
-            b = H5T.copy('H5T_NATIVE_FLOAT');
-        end
-        
-        function b = getType_double()
-            b = H5T.copy('H5T_NATIVE_DOUBLE');
-        end
-        
-        function b = getType_char()
-            b = H5T.copy('H5T_NATIVE_CHAR');
-        end
-        
-        function b = getType_complexfloat()
-            typesize = 2*H5T.get_size('H5T_NATIVE_FLOAT');
-            b = H5T.create ('H5T_COMPOUND', typesize);
-            H5T.insert (b, 'real', 0, 'H5T_NATIVE_FLOAT');
-            H5T.insert (b, 'imag', H5T.get_size('H5T_NATIVE_FLOAT'), 'H5T_NATIVE_FLOAT');
-        end
-        
-        function b = getType_complexdouble()
-            b = H5T.create ('H5T_COMPOUND', ...
-                             2*H5T.get_size('H5T_NATIVE_DOUBLE'));
-            H5T.insert (b, 'real', 0, 'H5T_NATIVE_DOUBLE');
-            H5T.insert (b, 'imag', H5T.get_size('H5T_NATIVE_DOUBLE'), 'H5T_NATIVE_DOUBLE');
-        end
-        
-        function b = getType_ushort()
-            b = H5T.copy('H5T_NATIVE_USHORT');
-        end
-        
-        function b = getType_EncodingCounters()
-            
-            typesize = 17*H5T.get_size('H5T_NATIVE_UINT16');
-            b = H5T.create ('H5T_COMPOUND', typesize);
-            
-            offset = 0;
-            H5T.insert(b, 'kspace_encode_step_1', offset, 'H5T_NATIVE_UINT16');
-            
-            offset = offset + H5T.get_size('H5T_NATIVE_UINT16');
-            H5T.insert(b, 'kspace_encode_step_2', offset, 'H5T_NATIVE_UINT16');            
-            offset = offset + H5T.get_size('H5T_NATIVE_UINT16');
-            
-            H5T.insert(b, 'average', offset, 'H5T_NATIVE_UINT16');
-            offset = offset + H5T.get_size('H5T_NATIVE_UINT16');
-            
-            H5T.insert(b, 'slice', offset, 'H5T_NATIVE_UINT16');
-            offset = offset + H5T.get_size('H5T_NATIVE_UINT16');
-            
-            H5T.insert(b, 'contrast', offset, 'H5T_NATIVE_UINT16');
-            offset = offset + H5T.get_size('H5T_NATIVE_UINT16');
-            
-            H5T.insert(b, 'phase', offset, 'H5T_NATIVE_UINT16');
-            offset = offset + H5T.get_size('H5T_NATIVE_UINT16');
-            
-            H5T.insert(b, 'repetition', offset, 'H5T_NATIVE_UINT16');
-            offset = offset + H5T.get_size('H5T_NATIVE_UINT16');
-            
-            H5T.insert(b, 'set', offset, 'H5T_NATIVE_UINT16');
-            offset = offset + H5T.get_size('H5T_NATIVE_UINT16');
-            
-            H5T.insert(b, 'segment', offset, 'H5T_NATIVE_UINT16');
-            offset = offset + H5T.get_size('H5T_NATIVE_UINT16');
-            
-            H5T.insert(b, 'user', offset, H5T.array_create('H5T_NATIVE_UINT16',[8]));
-            
-        end
- 
-        function b = getType_AcquisitionHeader()
-            
-            typesize = 0;
-            typesize = typesize + H5T.get_size('H5T_NATIVE_UINT16'); % version
-            typesize = typesize + H5T.get_size('H5T_NATIVE_UINT64'); % flag
-            typesize = typesize + H5T.get_size('H5T_NATIVE_UINT32'); % measurement_uid
-            typesize = typesize + H5T.get_size('H5T_NATIVE_UINT32'); % scan_counter
-            typesize = typesize + H5T.get_size('H5T_NATIVE_UINT32'); % acquisition_time_stamp
-            typesize = typesize + 3*H5T.get_size('H5T_NATIVE_UINT32'); % pysio_time_stampe(3)
-            typesize = typesize + H5T.get_size('H5T_NATIVE_UINT16'); % number_of_samples
-            typesize = typesize + H5T.get_size('H5T_NATIVE_UINT16'); % available_channels
-            typesize = typesize + H5T.get_size('H5T_NATIVE_UINT16'); % active_channels
-            typesize = typesize + 16*H5T.get_size('H5T_NATIVE_UINT64'); % channel_mask
-            typesize = typesize + H5T.get_size('H5T_NATIVE_UINT16'); % discard_pre
-            typesize = typesize + H5T.get_size('H5T_NATIVE_UINT16'); % discard_post
-            typesize = typesize + H5T.get_size('H5T_NATIVE_UINT16'); % center_sample
-            typesize = typesize + H5T.get_size('H5T_NATIVE_UINT16'); % encoding_space_ref
-            typesize = typesize + H5T.get_size('H5T_NATIVE_UINT16'); % trajectory_dimension
-            typesize = typesize + H5T.get_size('H5T_NATIVE_FLOAT');  % sample_time_us 
-            typesize = typesize + 3*H5T.get_size('H5T_NATIVE_FLOAT'); % position
-            typesize = typesize + 4*H5T.get_size('H5T_NATIVE_FLOAT'); % quaternion
-            typesize = typesize + 3*H5T.get_size('H5T_NATIVE_FLOAT'); % patient_table_position
-            typesize = typesize + H5T.get_size(ismrmrd.hdf5_datatypes.getType_EncodingCounters()); % idx
-            typesize = typesize + 8*H5T.get_size('H5T_NATIVE_INT32'); % user_int
-            typesize = typesize + 8*H5T.get_size('H5T_NATIVE_FLOAT'); % user_float
-            
-            b = H5T.create ('H5T_COMPOUND', typesize);
-            
-            offset = 0;
-            H5T.insert(b, 'version', offset, 'H5T_NATIVE_UINT16'); 
-            offset = offset + H5T.get_size('H5T_NATIVE_UINT16');
-
-            H5T.insert(b, 'flags', offset, 'H5T_NATIVE_UINT64');
-            offset = offset + H5T.get_size('H5T_NATIVE_UINT64');
-            
-            H5T.insert(b, 'measurement_uid', offset, 'H5T_NATIVE_UINT32');
-            offset = offset + H5T.get_size('H5T_NATIVE_UINT32');
-            
-            H5T.insert(b, 'scan_counter', offset, 'H5T_NATIVE_UINT32');
-            offset = offset + H5T.get_size('H5T_NATIVE_UINT32');
-            
-            H5T.insert(b, 'acquisition_time_stamp', offset, 'H5T_NATIVE_UINT32');
-            offset = offset + H5T.get_size('H5T_NATIVE_UINT32');
-            
-            H5T.insert(b, 'physiology_time_stamp', offset, H5T.array_create('H5T_NATIVE_UINT32',[3]));
-            offset = offset + 3*H5T.get_size('H5T_NATIVE_UINT32');
-            
-            H5T.insert(b, 'number_of_samples', offset, 'H5T_NATIVE_UINT16');
-            offset = offset + H5T.get_size('H5T_NATIVE_UINT16');
-
-            H5T.insert(b, 'available_channels', offset, 'H5T_NATIVE_UINT16');
-            offset = offset + H5T.get_size('H5T_NATIVE_UINT16');
-
-            H5T.insert(b, 'active_channels', offset, 'H5T_NATIVE_UINT16');
-            offset = offset + H5T.get_size('H5T_NATIVE_UINT16');
-            
-            H5T.insert(b, 'channel_mask', offset, H5T.array_create('H5T_NATIVE_UINT64',[16]));
-            offset = offset + 16*H5T.get_size('H5T_NATIVE_UINT64');
-            
-            H5T.insert(b, 'discard_pre', offset, 'H5T_NATIVE_UINT16');
-            offset = offset + H5T.get_size('H5T_NATIVE_UINT16');
-
-            H5T.insert(b, 'discard_post', offset, 'H5T_NATIVE_UINT16');
-            offset = offset + H5T.get_size('H5T_NATIVE_UINT16');
-
-            H5T.insert(b, 'center_sample', offset, 'H5T_NATIVE_UINT16');
-            offset = offset + H5T.get_size('H5T_NATIVE_UINT16');
-
-            H5T.insert(b, 'encoding_space_ref', offset, 'H5T_NATIVE_UINT16');
-            offset = offset + H5T.get_size('H5T_NATIVE_UINT16');
-            
-            H5T.insert(b, 'trajectory_dimensions', offset, 'H5T_NATIVE_UINT16');
-            offset = offset + H5T.get_size('H5T_NATIVE_UINT16');
-            
-            H5T.insert(b, 'sample_time_us', offset, 'H5T_NATIVE_FLOAT');
-            offset = offset + H5T.get_size('H5T_NATIVE_FLOAT');
-
-            H5T.insert(b, 'position', offset, H5T.array_create('H5T_NATIVE_FLOAT',[3]));
-            offset = offset + 3*H5T.get_size('H5T_NATIVE_FLOAT');
-
-            H5T.insert(b, 'quaternion', offset, H5T.array_create('H5T_NATIVE_FLOAT',[4]));
-            offset = offset + 4*H5T.get_size('H5T_NATIVE_FLOAT');
-            
-            H5T.insert(b, 'patient_table_position', offset, H5T.array_create('H5T_NATIVE_FLOAT',[3]));
-            offset = offset + 3*H5T.get_size('H5T_NATIVE_FLOAT');
-            
-            H5T.insert(b, 'idx', offset, ismrmrd.hdf5_datatypes.getType_EncodingCounters);
-            offset = offset + H5T.get_size(ismrmrd.hdf5_datatypes.getType_EncodingCounters);
-            
-            H5T.insert(b, 'user_int', offset, H5T.array_create('H5T_NATIVE_INT32',[8]));
-            offset = offset + 8*H5T.get_size('H5T_NATIVE_INT32');
-
-            H5T.insert(b, 'user_float', offset, H5T.array_create('H5T_NATIVE_FLOAT',[8]));
-            %offset = offset + 8*H5T.get_size('H5T_NATIVE_FLOAT');
-
-        end
-
-        function b = getType_Acquisition()
-            
-            head = H5T.copy(ismrmrd.hdf5_datatypes.getType_AcquisitionHeader);
-            traj = H5T.vlen_create(ismrmrd.hdf5_datatypes.getType_float());
-            data = H5T.vlen_create(ismrmrd.hdf5_datatypes.getType_float());
-            
-            typesize = H5T.get_size(head) + H5T.get_size(traj) + H5T.get_size(data);
-            
-            b = H5T.create ('H5T_COMPOUND', typesize);
-
-            offset = 0;
-            H5T.insert(b, 'head', offset, head);
-            offset = offset + H5T.get_size(head);
-            H5T.insert(b, 'traj', offset, traj);
-            offset = offset + H5T.get_size(traj);
-            H5T.insert(b, 'data', offset, data);
-            
-        end
-    end % Methods (Static)
-    
-end
-
-% 	boost::shared_ptr<CompType> ret = boost::shared_ptr<CompType>(new CompType(sizeof(AcquisitionHeader_with_data)));
-% 
-% 	boost::shared_ptr<DataType>  head_type = getIsmrmrdHDF5Type<AcquisitionHeader>();
-% 	boost::shared_ptr<DataType> cxvdatatype = getIsmrmrdHDF5Type<complex_t>();
-% 	cxvdatatype = boost::shared_ptr<DataType>(new DataType(H5Tvlen_create (cxvdatatype->getId())));
-% 	boost::shared_ptr<DataType> realvdatatype = boost::shared_ptr<DataType>(new DataType(H5Tvlen_create (PredType::NATIVE_FLOAT.getId())));
-% 
-% 	ret->insertMember( "head",  HOFFSET(AcquisitionHeader_with_data,head),   	*head_type);
-% 	ret->insertMember( "traj", HOFFSET(AcquisitionHeader_with_data,traj),  		*realvdatatype);
-% 	ret->insertMember( "data", HOFFSET(AcquisitionHeader_with_data,data),  		*cxvdatatype);
-
-
-
-% 
-% template <> boost::shared_ptr<DataType> getIsmrmrdHDF5Type<ImageHeader>()
-% {
-% 
-% 	boost::shared_ptr<CompType> ret = boost::shared_ptr<CompType>(new CompType(sizeof(ImageHeader)));
-% 
-% 	ret->insertMember( "version", 					HOFFSET(ImageHeader, version), 					PredType::NATIVE_UINT16);
-% 	ret->insertMember( "flags", 					HOFFSET(ImageHeader, flags), 				   	PredType::NATIVE_UINT64);
-% 	ret->insertMember( "measurement_uid", 			HOFFSET(ImageHeader, measurement_uid), 		    PredType::NATIVE_UINT32);
-% 
-% 	std::vector<hsize_t> dims(1,0);
-% 
-% 	dims[0] = 3;
-% 	boost::shared_ptr<DataType> mat_size_array_type(new ArrayType(PredType::NATIVE_UINT16, 1, &dims[0]));
-% 	ret->insertMember( "matrix_size", 				HOFFSET(ImageHeader, matrix_size), 		*mat_size_array_type);
-% 
-% 	dims[0] = 3;
-% 	boost::shared_ptr<DataType> fov_array_type(new ArrayType(PredType::NATIVE_FLOAT, 1, &dims[0]));
-% 	ret->insertMember( "field_of_view", 			HOFFSET(ImageHeader, field_of_view), 		*fov_array_type);
-% 
-% 	ret->insertMember( "channels", 					HOFFSET(ImageHeader, channels), 					PredType::NATIVE_UINT16);
-% 
-% 	dims[0] = 3;
-% 	boost::shared_ptr<DataType> position_array_type(new ArrayType(PredType::NATIVE_FLOAT, 1, &dims[0]));
-% 	ret->insertMember( "position", 					HOFFSET(ImageHeader, position), 				*position_array_type);
-% 
-% 	dims[0] = 4;
-% 	boost::shared_ptr<DataType> quaterion_array_type(new ArrayType(PredType::NATIVE_FLOAT, 1, &dims[0]));
-% 	ret->insertMember( "quaternion", 				HOFFSET(ImageHeader, quaternion), 			*quaterion_array_type);
-% 
-% 	dims[0] = 3;
-% 	boost::shared_ptr<DataType> table_array_type(new ArrayType(PredType::NATIVE_FLOAT, 1, &dims[0]));
-% 	ret->insertMember( "patient_table_position", 	HOFFSET(ImageHeader, patient_table_position), *table_array_type);
-% 
-% 
-% 	ret->insertMember( "average", 					HOFFSET(ImageHeader, average), 					PredType::NATIVE_UINT16);
-% 	ret->insertMember( "slice", 					HOFFSET(ImageHeader, slice), 					PredType::NATIVE_UINT16);
-% 	ret->insertMember( "contrast", 					HOFFSET(ImageHeader, contrast), 				PredType::NATIVE_UINT16);
-% 	ret->insertMember( "phase", 					HOFFSET(ImageHeader, phase), 					PredType::NATIVE_UINT16);
-% 	ret->insertMember( "repetition", 				HOFFSET(ImageHeader, repetition), 				PredType::NATIVE_UINT16);
-% 	ret->insertMember( "set",   					HOFFSET(ImageHeader, set), 						PredType::NATIVE_UINT16);
-% 	ret->insertMember( "acquisition_time_stamp", 	HOFFSET(ImageHeader, acquisition_time_stamp),   PredType::NATIVE_UINT32);
-% 
-% 	dims[0] = 3;
-% 	boost::shared_ptr<DataType> array_type(new ArrayType(PredType::NATIVE_UINT32, 1, &dims[0]));
-% 	ret->insertMember( "physiology_time_stamp", HOFFSET(ImageHeader, physiology_time_stamp), 		*array_type);
-% 
-% 	ret->insertMember( "image_data_type",   		HOFFSET(ImageHeader, image_data_type),			PredType::NATIVE_UINT16);
-% 	ret->insertMember( "image_type",   				HOFFSET(ImageHeader, image_type),				PredType::NATIVE_UINT16);
-% 	ret->insertMember( "image_index",   			HOFFSET(ImageHeader, image_index),				PredType::NATIVE_UINT16);
-% 	ret->insertMember( "image_series_index",		HOFFSET(ImageHeader, image_series_index),		PredType::NATIVE_UINT16);
-% 
-% 	dims[0] = 8;
-% 	boost::shared_ptr<DataType> user_int_array_type(new ArrayType(PredType::NATIVE_INT32, 1, &dims[0]));
-% 	ret->insertMember( "user_int", 				HOFFSET(ImageHeader, user_int), *user_int_array_type);
-% 
-% 	dims[0] = 8;
-% 	boost::shared_ptr<DataType> user_float_array_type(new ArrayType(PredType::NATIVE_FLOAT, 1, &dims[0]));
-% 	ret->insertMember( "user_float", 				HOFFSET(ImageHeader, user_float), *user_float_array_type);
-% 
-% 	return ret;
-% }
-% 
-% 
-% template <> boost::shared_ptr<DataType> getIsmrmrdHDF5Type<ImageHeader_with_data<float> >()
-% {
-% 	boost::shared_ptr<CompType> ret = boost::shared_ptr<CompType>(new CompType(sizeof(ImageHeader_with_data<float>)));
-% 	boost::shared_ptr<DataType>  head_type = getIsmrmrdHDF5Type<ImageHeader>();
-% 	boost::shared_ptr<DataType> vdatatype = getIsmrmrdHDF5Type<float>();
-% 	vdatatype = boost::shared_ptr<DataType>(new DataType(H5Tvlen_create (vdatatype->getId())));
-% 	ret->insertMember( "head",  HOFFSET(ImageHeader_with_data<float>,head),   	*head_type);
-% 	ret->insertMember( "data", HOFFSET(ImageHeader_with_data<float>,data),  	*vdatatype);
-% 	return ret;
-% }
-% 
-% template <> boost::shared_ptr<DataType> getIsmrmrdHDF5Type<ImageHeader_with_data<double> >()
-% {
-% 	boost::shared_ptr<CompType> ret = boost::shared_ptr<CompType>(new CompType(sizeof(ImageHeader_with_data<double>)));
-% 	boost::shared_ptr<DataType>  head_type = getIsmrmrdHDF5Type<ImageHeader>();
-% 	boost::shared_ptr<DataType> vdatatype = getIsmrmrdHDF5Type<double>();
-% 	vdatatype = boost::shared_ptr<DataType>(new DataType(H5Tvlen_create (vdatatype->getId())));
-% 	ret->insertMember( "head",  HOFFSET(ImageHeader_with_data<double>,head),   	*head_type);
-% 	ret->insertMember( "data", HOFFSET(ImageHeader_with_data<double>,data),  	*vdatatype);
-% 	return ret;
-% }
-% 
-% template <> boost::shared_ptr<DataType> getIsmrmrdHDF5Type<ImageHeader_with_data<unsigned short> >()
-% {
-% 	boost::shared_ptr<CompType> ret = boost::shared_ptr<CompType>(new CompType(sizeof(ImageHeader_with_data<unsigned short>)));
-% 	boost::shared_ptr<DataType>  head_type = getIsmrmrdHDF5Type<ImageHeader>();
-% 	boost::shared_ptr<DataType> vdatatype = getIsmrmrdHDF5Type<unsigned short>();
-% 	vdatatype = boost::shared_ptr<DataType>(new DataType(H5Tvlen_create (vdatatype->getId())));
-% 	ret->insertMember( "head",  HOFFSET(ImageHeader_with_data<unsigned short>,head),   	*head_type);
-% 	ret->insertMember( "data", HOFFSET(ImageHeader_with_data<unsigned short>,data),  	*vdatatype);
-% 	return ret;
-% }
-% 
-% template <> boost::shared_ptr<DataType> getIsmrmrdHDF5Type<ImageHeader_with_data<complex_t> >()
-% {
-% 	boost::shared_ptr<CompType> ret = boost::shared_ptr<CompType>(new CompType(sizeof(ImageHeader_with_data<complex_t>)));
-% 	boost::shared_ptr<DataType>  head_type = getIsmrmrdHDF5Type<ImageHeader>();
-% 	boost::shared_ptr<DataType> vdatatype = getIsmrmrdHDF5Type<complex_t>();
-% 	vdatatype = boost::shared_ptr<DataType>(new DataType(H5Tvlen_create (vdatatype->getId())));
-% 	ret->insertMember( "head",  HOFFSET(ImageHeader_with_data<complex_t>,head),   	*head_type);
-% 	ret->insertMember( "data", HOFFSET(ImageHeader_with_data<complex_t>,data),  	*vdatatype);
-% 	return ret;
-% }
-% 
-% template <> boost::shared_ptr<DataType> getIsmrmrdHDF5Type<ImageHeader_with_data<double_complex_t> >()
-% {
-% 	boost::shared_ptr<CompType> ret = boost::shared_ptr<CompType>(new CompType(sizeof(ImageHeader_with_data<double_complex_t>)));
-% 	boost::shared_ptr<DataType>  head_type = getIsmrmrdHDF5Type<ImageHeader>();
-% 	boost::shared_ptr<DataType> vdatatype = getIsmrmrdHDF5Type<double_complex_t>();
-% 	vdatatype = boost::shared_ptr<DataType>(new DataType(H5Tvlen_create (vdatatype->getId())));
-% 	ret->insertMember( "head",  HOFFSET(ImageHeader_with_data<double_complex_t>,head),   	*head_type);
-% 	ret->insertMember( "data", HOFFSET(ImageHeader_with_data<double_complex_t>,data),  	*vdatatype);
-% 	return ret;
-% }
-% 
-% template <> boost::shared_ptr<DataType> getIsmrmrdHDF5Type<ImageHeader_with_data< std::complex<float> > >()
-% {
-% 	return getIsmrmrdHDF5Type<ImageHeader_with_data<complex_t> >();
-% }
-% 
-% template <> boost::shared_ptr<DataType> getIsmrmrdHDF5Type<ImageHeader_with_data< std::complex<double> > >()
-% {
-% 	return getIsmrmrdHDF5Type<ImageHeader_with_data<double_complex_t> >();
-% }
-% 
-% }
-% 
diff --git a/matlab/+ismrmrd/isInt.m b/matlab/+ismrmrd/isInt.m
deleted file mode 100644
index f12a0aa..0000000
--- a/matlab/+ismrmrd/isInt.m
+++ /dev/null
@@ -1,5 +0,0 @@
-function b = isInt(a)
-
-    b = isa(a,'integer') || (imag(a)==0 && mod(a,1)==0);
-
-end
\ No newline at end of file
diff --git a/matlab/README.txt b/matlab/README.txt
deleted file mode 100644
index ffeea07..0000000
--- a/matlab/README.txt
+++ /dev/null
@@ -1,64 +0,0 @@
-The ISMRMRD Matlab Interface
-============================
-
-The ISMRM raw data file format is based on HDF5.  Each dataset consists of an XML text header and a set of acquisitions or images.  Matlab has very good built-in support for reading HDF5, this makes reading ISMRMRD files into Matlab very straightforward.
-
-XML Header Interface
---------------------
-The two methods, readxml and writexml, read and write a XML header
-from an ISMRMRD dataset: readxml returns a string writexml takes a
-string as input This provides the user with the flexibility to use
-whatever tools they prefer to create or modify the XML header string.
-
-Unfortunately, working with XML directly can be difficult and is
-error-prone, therefore, the ISMRMRD Matlab interface class provides a
-JAVA class for a convient way to interact with the XML header.  This
-class is automatically generated from the XML schema describing the
-XML header and is therefore guaranteed to be valid.  The examples
-provided use this feature to manipulate the XML header.  If you want
-to use this feature, then you must have a version that is compiled for
-the version of JAVA that your Matlab installation is using.
-
-Installation
-------------
-The matlab interface consists of a package in a directory called
-"+ismrmrd". Warning, the name and the plus sign are important.
-Put the +ismrmrd folder somewhere, for example in
-/home/jane/ismrmrd/matlab, then add that somewhere to your matlab
-search path.
-
-Installing with the Pre-Compiled XML Header Bindings
----------------------------------------------------- 
-The compiled XML header JAVA class bundle must be installed and the
-Matlab JAVA classpath.  Copy the compiled java class bundle
-(xmlhdr.jar) somewhere on your system, for example into the folder
-/home/jane/ismrmrd/matlab/+ismrmrd.  The specific location doesn't
-matter, but it's important to keep things tidy.  Then modify your
-static java classpath.  For example, if you are running R2012b on
-linux, create (or edit) the file ~/.matlab/R2012b/javaclasspath.txt
-and add the following line:
-  /home/jane/ismrmrd/matlab/+ismrmrd/xmlhdr.jar 
-Note that you must restart Matlab for the changes to take
-effect. Please refer to the Matlab documentation for more information
-on the java class path.
-
-Compiling the JAVA bindings to the XML Header
---------------------------------------------- 
-Assuming the ismrmrd library was installed in ${ISMRMRD_HOME}, the JAVA interface to the XML header can be created from the XML schema using the JAXB bindings in the following way: 
-  cd ${ISMRMRD_HOME}/matlab/+ismrmrd
-  xjc -p org.ismrm.ismrmrd.xmlhdr ../schema/ismrmrd.xsd
-  javac org/ismrm/ismrmrd/xmlhdr/*.java
-  jar -cvf xmlhdr.jar org/ismrm/ismrmrd/xmlhdr/*.class
-  javadoc -d xmlhdr.javadoc org/ismrm/ismrmrd/xmlhdr/*.java
-  rm -rf org
-
-
-Modify your Matlab java classpath as described in previous
-section. You will need to make sure that you are using the same
-version of the java compiler as the jre that matlab is using.  A
-description of how Matlab works with the JAVA runtime (JRE) is beyond
-the scope of this document.  Please refer to the matlab documentation
-for details. Two good starting points are:
-  http://www.mathworks.com/help/matlab/ref/version.html
-  http://www.mathworks.com/support/solutions/en/data/1-1812J/
-
diff --git a/matlab/xml2struct.m b/matlab/xml2struct.m
deleted file mode 100644
index dcd85a2..0000000
--- a/matlab/xml2struct.m
+++ /dev/null
@@ -1,183 +0,0 @@
-function [ s ] = xml2struct( file )
-%Convert xml file into a MATLAB structure
-% [ s ] = xml2struct( file )
-%
-% A file containing:
-% <XMLname attrib1="Some value">
-%   <Element>Some text</Element>
-%   <DifferentElement attrib2="2">Some more text</Element>
-%   <DifferentElement attrib3="2" attrib4="1">Even more text</DifferentElement>
-% </XMLname>
-%
-% Will produce:
-% s.XMLname.Attributes.attrib1 = "Some value";
-% s.XMLname.Element.Text = "Some text";
-% s.XMLname.DifferentElement{1}.Attributes.attrib2 = "2";
-% s.XMLname.DifferentElement{1}.Text = "Some more text";
-% s.XMLname.DifferentElement{2}.Attributes.attrib3 = "2";
-% s.XMLname.DifferentElement{2}.Attributes.attrib4 = "1";
-% s.XMLname.DifferentElement{2}.Text = "Even more text";
-%
-% Please note that the following characters are substituted
-% '-' by '_dash_', ':' by '_colon_' and '.' by '_dot_'
-%
-% Written by W. Falkena, ASTI, TUDelft, 21-08-2010
-% Attribute parsing speed increased by 40% by A. Wanner, 14-6-2011
-% Added CDATA support by I. Smirnov, 20-3-2012
-%
-% Modified by X. Mo, University of Wisconsin, 12-5-2012
-
-    if (nargin < 1)
-        clc;
-        help xml2struct
-        return
-    end
-    
-    if isa(file, 'org.apache.xerces.dom.DeferredDocumentImpl') || isa(file, 'org.apache.xerces.dom.DeferredElementImpl')
-        % input is a java xml object
-        xDoc = file;
-    else
-        %check for existance
-        if (exist(file,'file') == 0)
-            %Perhaps the xml extension was omitted from the file name. Add the
-            %extension and try again.
-            if (isempty(strfind(file,'.xml')))
-                file = [file '.xml'];
-            end
-            
-            if (exist(file,'file') == 0)
-                error(['The file ' file ' could not be found']);
-            end
-        end
-        %read the xml file
-        xDoc = xmlread(file);
-    end
-    
-    %parse xDoc into a MATLAB structure
-    s = parseChildNodes(xDoc);
-    
-end
-
-% ----- Subfunction parseChildNodes -----
-function [children,ptext,textflag] = parseChildNodes(theNode)
-    % Recurse over node children.
-    children = struct;
-    ptext = struct; textflag = 'Text';
-    if hasChildNodes(theNode)
-        childNodes = getChildNodes(theNode);
-        numChildNodes = getLength(childNodes);
-
-        for count = 1:numChildNodes
-            theChild = item(childNodes,count-1);
-            [text,name,attr,childs,textflag] = getNodeData(theChild);
-            
-            if (~strcmp(name,'#text') && ~strcmp(name,'#comment') && ~strcmp(name,'#cdata_dash_section'))
-                %XML allows the same elements to be defined multiple times,
-                %put each in a different cell
-                if (isfield(children,name))
-                    if (~iscell(children.(name)))
-                        %put existsing element into cell format
-                        children.(name) = {children.(name)};
-                    end
-                    index = length(children.(name))+1;
-                    %add new element
-                    children.(name){index} = childs;
-                    if(~isempty(fieldnames(text)))
-                        children.(name){index} = text; 
-                    end
-                    if(~isempty(attr)) 
-                        children.(name){index}.('Attributes') = attr; 
-                    end
-                else
-                    %add previously unknown (new) element to the structure
-                    children.(name) = childs;
-                    if(~isempty(text) && ~isempty(fieldnames(text)))
-                        children.(name) = text; 
-                    end
-                    if(~isempty(attr)) 
-                        children.(name).('Attributes') = attr; 
-                    end
-                end
-            else
-                ptextflag = 'Text';
-                if (strcmp(name, '#cdata_dash_section'))
-                    ptextflag = 'CDATA';
-                elseif (strcmp(name, '#comment'))
-                    ptextflag = 'Comment';
-                end
-                
-                %this is the text in an element (i.e., the parentNode) 
-                if (~isempty(regexprep(text.(textflag),'[\s]*','')))
-                    if (~isfield(ptext,ptextflag) || isempty(ptext.(ptextflag)))
-                        ptext.(ptextflag) = text.(textflag);
-                    else
-                        %what to do when element data is as follows:
-                        %<element>Text <!--Comment--> More text</element>
-                        
-                        %put the text in different cells:
-                        % if (~iscell(ptext)) ptext = {ptext}; end
-                        % ptext{length(ptext)+1} = text;
-                        
-                        %just append the text
-                        ptext.(ptextflag) = [ptext.(ptextflag) text.(textflag)];
-                    end
-                end
-            end
-            
-        end
-    end
-end
-
-% ----- Subfunction getNodeData -----
-function [text,name,attr,childs,textflag] = getNodeData(theNode)
-    % Create structure of node info.
-    
-    %make sure name is allowed as structure name
-    name = toCharArray(getNodeName(theNode))';
-    name = strrep(name, '-', '_dash_');
-    name = strrep(name, ':', '_colon_');
-    name = strrep(name, '.', '_dot_');
-
-    attr = parseAttributes(theNode);
-    if (isempty(fieldnames(attr))) 
-        attr = []; 
-    end
-    
-    %parse child nodes
-    [childs,text,textflag] = parseChildNodes(theNode);
-    
-    if (isempty(fieldnames(childs)) && isempty(fieldnames(text)))
-        %get the data of any childless nodes
-        % faster than if any(strcmp(methods(theNode), 'getData'))
-        % no need to try-catch (?)
-        % faster than text = char(getData(theNode));
-        text.(textflag) = toCharArray(getTextContent(theNode))';
-    end
-    
-end
-
-% ----- Subfunction parseAttributes -----
-function attributes = parseAttributes(theNode)
-    % Create attributes structure.
-
-    attributes = struct;
-    if hasAttributes(theNode)
-       theAttributes = getAttributes(theNode);
-       numAttributes = getLength(theAttributes);
-
-       for count = 1:numAttributes
-            %attrib = item(theAttributes,count-1);
-            %attr_name = regexprep(char(getName(attrib)),'[-:.]','_');
-            %attributes.(attr_name) = char(getValue(attrib));
-
-            %Suggestion of Adrian Wanner
-            str = toCharArray(toString(item(theAttributes,count-1)))';
-            k = strfind(str,'='); 
-            attr_name = str(1:(k(1)-1));
-            attr_name = strrep(attr_name, '-', '_dash_');
-            attr_name = strrep(attr_name, ':', '_colon_');
-            attr_name = strrep(attr_name, '.', '_dot_');
-            attributes.(attr_name) = str((k(1)+2):(end-1));
-       end
-    end
-end
\ No newline at end of file
diff --git a/schema/ismrmrd.xsd b/schema/ismrmrd.xsd
deleted file mode 100644
index 0c18a81..0000000
--- a/schema/ismrmrd.xsd
+++ /dev/null
@@ -1,268 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<xs:schema xmlns="http://www.ismrm.org/ISMRMRD" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://www.ismrm.org/ISMRMRD">
-
-  <xs:element name="ismrmrdHeader">
-    <xs:complexType>
-      <xs:sequence>
-	<xs:element maxOccurs="1" minOccurs="0" name="subjectInformation" type="subjectInformationType"/>
-	<xs:element maxOccurs="1" minOccurs="0" name="studyInformation" type="studyInformationType"/>
-	<xs:element maxOccurs="1" minOccurs="0" name="measurementInformation" type="measurementInformationType"/>
-	<xs:element maxOccurs="1" minOccurs="0" name="acquisitionSystemInformation" type="acquisitionSystemInformationType"/>
-	<xs:element maxOccurs="1" minOccurs="1" name="experimentalConditions" type="experimentalConditionsType"/>
-	<xs:element maxOccurs="unbounded" minOccurs="1" name="encoding">
-	  <xs:complexType>
-	    <xs:all>
-	      <xs:element maxOccurs="1" minOccurs="1" name="encodedSpace" type="encodingSpaceType"/>
-	      <xs:element maxOccurs="1" minOccurs="1" name="reconSpace" type="encodingSpaceType"/>
-	      <xs:element maxOccurs="1" minOccurs="1" name="encodingLimits" type="encodingLimitsType"/>
-	      <xs:element maxOccurs="1" minOccurs="1" name="trajectory" type="trajectoryType"/>
-	      <xs:element maxOccurs="1" minOccurs="0" name="trajectoryDescription" type="trajectoryDescriptionType"/>
-	    </xs:all>
-	  </xs:complexType>
-	</xs:element>
-	<xs:element maxOccurs="1" minOccurs="0" name="parallelImaging" type="parallelImagingType"/>
-	<xs:element maxOccurs="1" minOccurs="0" name="sequenceParameters" type="sequenceParametersType"/>
-        <xs:element maxOccurs="1" minOccurs="0" name="dicomParameters" type="dicomParametersType"/>
-	<xs:element maxOccurs="1" minOccurs="0" name="userParameters">
-	  <xs:complexType>
-	    <xs:sequence>
-	      <xs:element maxOccurs="unbounded" minOccurs="0" name="userParameterLong" type="userParameterLongType"/>
-	      <xs:element maxOccurs="unbounded" minOccurs="0" name="userParameterDouble" type="userParameterDoubleType"/>
-	    </xs:sequence>
-	  </xs:complexType>
-	</xs:element>
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-
-  <xs:complexType name="subjectInformationType">
-    <xs:all>
-      <xs:element minOccurs="0" name="patientName" type="xs:string"/>
-      <xs:element minOccurs="0" name="patientWeight_kg" type="xs:float"/>
-      <xs:element minOccurs="0" name="patientID" type="xs:string"/>
-      <xs:element minOccurs="0" name="patientBirthdate" type="xs:date"/>
-      <xs:element minOccurs="0" name="patientGender">
-        <xs:simpleType>
-          <xs:restriction base="xs:string">
-            <xs:pattern value="[MFO]"/>
-          </xs:restriction>
-        </xs:simpleType>
-      </xs:element>
-    </xs:all>
-  </xs:complexType>
-
-  <xs:complexType name="studyInformationType">
-    <xs:all>
-      <xs:element minOccurs="1" name="studyDate" type="xs:date"/>
-      <xs:element minOccurs="1" name="studyTime" type="xs:time"/>
-      <xs:element minOccurs="0" name="studyID" type="xs:string"/>
-      <xs:element minOccurs="0" name="accessionNumber" type="xs:long"/>
-      <xs:element minOccurs="0" name="referringPhysicianName" type="xs:string"/>
-      <xs:element minOccurs="0" name="studyDescription" type="xs:string"/>
-    </xs:all>
-  </xs:complexType>
-
-  <xs:complexType name="experimentalConditionsType">
-    <xs:all>
-      <xs:element name="H1resonanceFrequency_Hz" type="xs:long"/>
-    </xs:all>
-  </xs:complexType>
-
-  <xs:complexType name="acquisitionSystemInformationType">
-    <xs:all>
-      <xs:element minOccurs="0" name="systemVendor" type="xs:string"/>
-      <xs:element minOccurs="0" name="systemModel" type="xs:string"/>
-      <xs:element minOccurs="0" name="systemFieldStrength_T" type="xs:float"/>
-      <xs:element minOccurs="0" name="relativeReceiverNoiseBandwidth" type="xs:float"/>
-      <xs:element minOccurs="0" name="receiverChannels" type="xs:unsignedShort"/>
-      <xs:element minOccurs="0" name="institutionName" type="xs:string"/>
-      <xs:element minOccurs="0" name="stationName" type="xs:string"/>
-    </xs:all>
-  </xs:complexType>
-
-  <xs:complexType name="encodingSpaceType">
-    <xs:all>
-      <xs:element name="matrixSize">
-	<xs:complexType>
-	  <xs:sequence>
-	    <xs:element default="1" maxOccurs="1" minOccurs="1" name="x" type="xs:unsignedShort"/>
-	    <xs:element default="1" maxOccurs="1" minOccurs="1" name="y" type="xs:unsignedShort"/>
-	    <xs:element default="1" maxOccurs="1" minOccurs="1" name="z" type="xs:unsignedShort"/>
-	  </xs:sequence>
-	</xs:complexType>
-      </xs:element>
-      <xs:element name="fieldOfView_mm">
-	<xs:complexType>
-	  <xs:sequence>
-	    <xs:element maxOccurs="1" minOccurs="1" name="x" type="xs:float"/>
-	    <xs:element maxOccurs="1" minOccurs="1" name="y" type="xs:float"/>
-	    <xs:element maxOccurs="1" minOccurs="1" name="z" type="xs:float"/>
-	  </xs:sequence>
-	</xs:complexType>
-      </xs:element>
-    </xs:all>
-  </xs:complexType>
-
-  <xs:complexType name="limitType">
-    <xs:all>
-      <xs:element default="0" name="minimum" type="xs:unsignedShort"/>
-      <xs:element default="0" name="maximum" type="xs:unsignedShort"/>
-      <xs:element default="0" name="center" type="xs:unsignedShort"/>
-    </xs:all>
-  </xs:complexType>
-
-  <xs:complexType name="encodingLimitsType">
-    <xs:all>
-      <xs:element maxOccurs="1" minOccurs="0" name="kspace_encoding_step_0" type="limitType"/>
-      <xs:element maxOccurs="1" minOccurs="0" name="kspace_encoding_step_1" type="limitType"/>
-      <xs:element maxOccurs="1" minOccurs="0" name="kspace_encoding_step_2" type="limitType"/>
-      <xs:element maxOccurs="1" minOccurs="0" name="average" type="limitType"/>
-      <xs:element maxOccurs="1" minOccurs="0" name="slice" type="limitType"/>
-      <xs:element maxOccurs="1" minOccurs="0" name="contrast" type="limitType"/>
-      <xs:element maxOccurs="1" minOccurs="0" name="phase" type="limitType"/>
-      <xs:element maxOccurs="1" minOccurs="0" name="repetition" type="limitType"/>
-      <xs:element maxOccurs="1" minOccurs="0" name="set" type="limitType"/>
-      <xs:element maxOccurs="1" minOccurs="0" name="segment" type="limitType"/>
-    </xs:all>
-  </xs:complexType>
-
-  <xs:simpleType name="trajectoryType">
-    <xs:restriction base="xs:string">
-      <xs:enumeration value="cartesian"/>
-      <xs:enumeration value="epi"/>
-      <xs:enumeration value="radial"/>
-      <xs:enumeration value="goldenangle"/>
-      <xs:enumeration value="spiral"/>
-      <xs:enumeration value="other"/>
-    </xs:restriction>
-  </xs:simpleType>
-
-  <xs:complexType name="trajectoryDescriptionType">
-    <xs:sequence>
-      <xs:element maxOccurs="1" minOccurs="1" name="identifier" type="xs:string"/>
-      <xs:element maxOccurs="unbounded" minOccurs="0" name="userParameterLong" type="userParameterLongType"/>
-      <xs:element maxOccurs="unbounded" minOccurs="0" name="userParameterDouble" type="userParameterDoubleType"/>
-      <xs:element maxOccurs="1" minOccurs="0" name="comment" type="xs:string"/>
-    </xs:sequence>
-  </xs:complexType>
-
-  <xs:complexType name="sequenceParametersType">
-  	<xs:sequence>
-  		<xs:element minOccurs="1" maxOccurs="unbounded" type="xs:float" name="TR"/>
-  		<xs:element minOccurs="1" maxOccurs="unbounded" type="xs:float" name="TE"/>
-  		<xs:element minOccurs="0" maxOccurs="unbounded" type="xs:float" name="TI"/>
-  	</xs:sequence>
-  </xs:complexType>
-
-  <xs:complexType name="userParameterLongType">
-    <xs:all>
-      <xs:element name="name" type="xs:string"/>
-      <xs:element name="value" type="xs:long"/>
-    </xs:all>
-  </xs:complexType>
-
-  <xs:complexType name="userParameterDoubleType">
-    <xs:all>
-      <xs:element name="name" type="xs:string"/>
-      <xs:element name="value" type="xs:double"/>
-    </xs:all>
-  </xs:complexType>
-
-  <xs:complexType name="measurementInformationType">
-    <xs:all>
-      <xs:element minOccurs="1" name="seriesDate" type="xs:date"/>
-      <xs:element minOccurs="1" name="seriesTime" type="xs:time"/>
-      <xs:element minOccurs="1" name="patientPosition">
-        <xs:simpleType>
-          <xs:restriction base="xs:string">
-            <xs:enumeration value="HFP"/>
-            <xs:enumeration value="HFS"/>
-            <xs:enumeration value="HFDR"/>
-            <xs:enumeration value="HFDL"/>
-            <xs:enumeration value="FFP"/>
-            <xs:enumeration value="FFS"/>
-            <xs:enumeration value="FFDR"/>
-            <xs:enumeration value="FFDL"/>
-          </xs:restriction>
-        </xs:simpleType>
-      </xs:element>
-      <xs:element minOccurs="0" name="protocolName" type="xs:string"/>
-      <xs:element minOccurs="0" name="seriesDescription" type="xs:string"/>
-    </xs:all>
-  </xs:complexType>
-
-  <xs:complexType name="dicomParametersType">
-    <xs:all>
-      <xs:element minOccurs="1" name="studyInstanceUID" type="xs:string"/>
-      <xs:element minOccurs="0" name="seriesInstanceUIDRoot" type="xs:string"/>
-      <xs:element minOccurs="0" name="frameOfReferenceUID" type="xs:string"/>
-
-      <xs:element minOccurs="0" name="referencedImageSequence">
-        <xs:complexType>
-          <xs:sequence>
-            <xs:element minOccurs="0" maxOccurs="unbounded" name="referencedSOPInstanceUID" type="xs:string"/>
-          </xs:sequence>
-        </xs:complexType>
-      </xs:element>
-
-      <xs:element minOccurs="0" name="MRImageModule">
-        <xs:complexType>
-          <xs:all>
-            <xs:element minOccurs="0" name="imageType" type="xs:string"/>
-            <xs:element minOccurs="0" name="scanningSequence" type="xs:string"/>
-            <xs:element minOccurs="0" name="sequenceVariant" type="xs:string"/>
-            <xs:element minOccurs="0" name="scanOptions" type="xs:string"/>
-            <xs:element minOccurs="0" name="mrAcquisitionType" type="xs:string"/>
-            <xs:element minOccurs="0" name="echoTrainLength" type="xs:long"/>
-            <xs:element minOccurs="0" name="triggerTime" type="xs:float"/>
-            <xs:element minOccurs="0" name="flipAngle_deg" type="xs:long"/>
-            <xs:element minOccurs="0" name="freqEncodingDirection">
-              <xs:simpleType>
-                <xs:restriction base="xs:string">
-                  <xs:enumeration value="ROW"/>
-                  <xs:enumeration value="COL"/>
-                </xs:restriction>
-              </xs:simpleType>
-            </xs:element>
-          </xs:all>
-        </xs:complexType>
-      </xs:element>
-
-    </xs:all>
-  </xs:complexType>
-
-  <xs:complexType name="accelerationFactorType">
-    <xs:all>
-      <xs:element name="kspace_encoding_step_1" type="xs:unsignedShort"/>
-      <xs:element name="kspace_encoding_step_2" type="xs:unsignedShort"/>
-    </xs:all>
-  </xs:complexType>
-
-  <xs:simpleType name="calibrationModeType">
-    <xs:restriction base="xs:string">
-      <xs:enumeration value="embedded"/>
-      <xs:enumeration value="interleaved"/>
-      <xs:enumeration value="separate"/>
-      <xs:enumeration value="external"/>
-      <xs:enumeration value="other"/>
-    </xs:restriction>
-  </xs:simpleType>
-
-  <xs:simpleType name="interleavingDimensionType">
-    <xs:restriction base="xs:string">
-      <xs:enumeration value="phase"/>
-      <xs:enumeration value="repetition"/>
-      <xs:enumeration value="contrast"/>
-      <xs:enumeration value="average"/>
-      <xs:enumeration value="other"/>
-    </xs:restriction>
-  </xs:simpleType>
-
-  <xs:complexType name="parallelImagingType">
-  	<xs:sequence>
-  	 <xs:element type="accelerationFactorType" name="accelerationFactor"/>
-  	 <xs:element maxOccurs="1" minOccurs="0" type="calibrationModeType" name="calibrationMode"/>
-  	 <xs:element maxOccurs="1" minOccurs="0" type="interleavingDimensionType" name="interleavingDimension"/>
-  	</xs:sequence>
-  </xs:complexType>
-</xs:schema>
diff --git a/schema/ismrmrd_example.xml b/schema/ismrmrd_example.xml
deleted file mode 100644
index 3e5c157..0000000
--- a/schema/ismrmrd_example.xml
+++ /dev/null
@@ -1,79 +0,0 @@
-<?xml version="1.0"?>
-<ismrmrdHeader xmlns="http://www.ismrm.org/ISMRMRD" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:schemaLocation="http://www.ismrm.org/ISMRMRD ismrmrd.xsd">
-  <subjectInformation>
-    <patientName>phantom</patientName>
-    <patientWeight_kg>70.3068</patientWeight_kg>
-  </subjectInformation>
-  <acquisitionSystemInformation>
-    <systemVendor>SIEMENS</systemVendor>
-    <systemModel>Avanto</systemModel>
-    <systemFieldStrength_T>1.494</systemFieldStrength_T>
-    <receiverChannels>32</receiverChannels>
-    <relativeReceiverNoiseBandwidth>0.79</relativeReceiverNoiseBandwidth>
-  </acquisitionSystemInformation>
-  <experimentalConditions>
-    <H1resonanceFrequency_Hz>63642459</H1resonanceFrequency_Hz>
-  </experimentalConditions>
-  <encoding>
-    <trajectory>cartesian</trajectory>
-    <encodedSpace>
-      <matrixSize>
-        <x>256</x>
-        <y>140</y>
-        <z>80</z>
-      </matrixSize>
-      <fieldOfView_mm>
-        <x>600</x>
-        <y>328.153125</y>
-        <z>160</z>
-      </fieldOfView_mm>
-    </encodedSpace>
-    <reconSpace>
-      <matrixSize>
-        <x>128</x>
-        <y>116</y>
-        <z>64</z>
-      </matrixSize>
-      <fieldOfView_mm>
-        <x>300</x>
-        <y>271.875</y>
-        <z>128</z>
-      </fieldOfView_mm>
-    </reconSpace>
-    <encodingLimits>
-      <kspace_encoding_step_1>
-        <minimum>0</minimum>
-        <maximum>83</maximum>
-        <center>28</center>
-      </kspace_encoding_step_1>
-      <kspace_encoding_step_2>
-        <minimum>0</minimum>
-        <maximum>45</maximum>
-        <center>20</center>
-      </kspace_encoding_step_2>
-      <slice>
-        <minimum>0</minimum>
-        <maximum>0</maximum>
-        <center>0</center>
-      </slice>
-      <set>
-        <minimum>0</minimum>
-        <maximum>0</maximum>
-        <center>0</center>
-      </set>
-    </encodingLimits>
-  </encoding>
-  <parallelImaging>
-    <accelerationFactor>
-      <kspace_encoding_step_1>1</kspace_encoding_step_1>
-      <kspace_encoding_step_2>1</kspace_encoding_step_2>
-    </accelerationFactor>
-    <calibrationMode>other</calibrationMode>
-  </parallelImaging>
-  <sequenceParameters>
-    <TR>4.6</TR>
-    <TE>2.35</TE>
-    <TI>300</TI>
-  </sequenceParameters>
-</ismrmrdHeader>
-

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/ismrmrd.git



More information about the debian-science-commits mailing list