Commit 96afa79c authored by Sebastian Eichelbaum's avatar Sebastian Eichelbaum
Browse files

[MERGE]

parents fd6ed20b 5cd95e0c
......@@ -12,3 +12,5 @@ Robert Frohl
Robin Ledig
Sebastian Kiunke
Stefan Philips
Matthias Klose
Matthias Berndt
......@@ -483,12 +483,6 @@ MAX_INITIALIZER_LINES = 30
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 = YES
# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
# This will remove the Files entry from the Quick Index and from the
# Folder Tree View (if specified). The default is YES.
......@@ -519,7 +513,7 @@ FILE_VERSION_FILTER =
# file name after the option, if omitted DoxygenLayout.xml will be used as the name
# of the layout file.
#LAYOUT_FILE = doc/developer/doxygenLayout.xml
# LAYOUT_FILE = doc/developer/doxygenLayout.xml
#---------------------------------------------------------------------------
# configuration options related to warning and progress messages
......@@ -823,12 +817,6 @@ HTML_STYLESHEET =
HTML_TIMESTAMP = NO
# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
# files or namespaces will be aligned in HTML using tables. If set to
# NO a bullet list will be used.
HTML_ALIGN_MEMBERS = YES
# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
# documentation will contain sections that can be hidden and shown after the
# page has loaded. For this to work a browser that supports
......@@ -1000,11 +988,6 @@ ENUM_VALUES_PER_LINE = 4
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.
......@@ -1539,7 +1522,7 @@ DOTFILE_DIRS =
# 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
DOT_GRAPH_MAX_NODES = 500
# 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
......
......@@ -483,12 +483,6 @@ MAX_INITIALIZER_LINES = 30
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 = YES
# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
# This will remove the Files entry from the Quick Index and from the
# Folder Tree View (if specified). The default is YES.
......@@ -519,7 +513,7 @@ FILE_VERSION_FILTER =
# file name after the option, if omitted DoxygenLayout.xml will be used as the name
# of the layout file.
LAYOUT_FILE = doc/developer/doxygenLayout.xml
# LAYOUT_FILE = doc/developer/doxygenLayout.xml
#---------------------------------------------------------------------------
# configuration options related to warning and progress messages
......@@ -825,12 +819,6 @@ HTML_STYLESHEET =
HTML_TIMESTAMP = NO
# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
# files or namespaces will be aligned in HTML using tables. If set to
# NO a bullet list will be used.
HTML_ALIGN_MEMBERS = YES
# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
# documentation will contain sections that can be hidden and shown after the
# page has loaded. For this to work a browser that supports
......@@ -1002,11 +990,6 @@ ENUM_VALUES_PER_LINE = 4
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.
......@@ -1541,7 +1524,7 @@ DOTFILE_DIRS =
# 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
DOT_GRAPH_MAX_NODES = 500
# 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
......
<doxygenlayout version="1.0">
<!-- Navigation index tabs for HTML output -->
<navindex>
<tab type="mainpage" visible="yes" title=""/>
<tab type="pages" visible="yes" title=""/>
<tab type="modules" visible="yes" title="Groups"/>
<tab type="namespaces" visible="yes" title="">
<tab type="namespaces" visible="yes" title=""/>
<tab type="namespacemembers" visible="yes" title=""/>
</tab>
<tab type="classes" visible="yes" title="">
<tab type="classes" visible="yes" title=""/>
<tab type="classindex" visible="$ALPHABETICAL_INDEX" title=""/>
<tab type="hierarchy" visible="yes" title=""/>
<tab type="classmembers" visible="yes" title=""/>
</tab>
<tab type="files" visible="yes" title="">
<tab type="files" visible="yes" title=""/>
<tab type="globals" visible="yes" title=""/>
</tab>
<tab type="dirs" visible="yes" title=""/>
<tab type="examples" visible="yes" title=""/>
</navindex>
<!-- Layout definition for a class page -->
<class>
<briefdescription visible="yes"/>
<includes visible="$SHOW_INCLUDE_FILES"/>
<inheritancegraph visible="$CLASS_GRAPH"/>
<collaborationgraph visible="$COLLABORATION_GRAPH"/>
<allmemberslink visible="yes"/>
<memberdecl>
<nestedclasses visible="yes" title=""/>
<publictypes title=""/>
<publicslots title=""/>
<signals title=""/>
<publicmethods title=""/>
<publicstaticmethods title=""/>
<publicattributes title=""/>
<publicstaticattributes title=""/>
<protectedtypes title=""/>
<protectedslots title=""/>
<protectedmethods title=""/>
<protectedstaticmethods title=""/>
<protectedattributes title=""/>
<protectedstaticattributes title=""/>
<packagetypes title=""/>
<packagemethods title=""/>
<packagestaticmethods title=""/>
<packageattributes title=""/>
<packagestaticattributes title=""/>
<properties title=""/>
<events title=""/>
<privatetypes title=""/>
<privateslots title=""/>
<privatemethods title=""/>
<privatestaticmethods title=""/>
<privateattributes title=""/>
<privatestaticattributes title=""/>
<friends title=""/>
<related title="" subtitle=""/>
<membergroups visible="yes"/>
</memberdecl>
<detaileddescription title=""/>
<memberdef>
<typedefs title=""/>
<enums title=""/>
<constructors title=""/>
<functions title=""/>
<related title=""/>
<variables title=""/>
<properties title=""/>
<events title=""/>
</memberdef>
<usedfiles visible="$SHOW_USED_FILES"/>
<authorsection visible="yes"/>
</class>
<!-- Layout definition for a namespace page -->
<namespace>
<briefdescription visible="yes"/>
<memberdecl>
<nestednamespaces visible="yes" title=""/>
<classes visible="yes" title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
<membergroups visible="yes"/>
</memberdecl>
<detaileddescription title=""/>
<memberdef>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
</memberdef>
<authorsection visible="yes"/>
</namespace>
<!-- Layout definition for a file page -->
<file>
<briefdescription visible="yes"/>
<includes visible="$SHOW_INCLUDE_FILES"/>
<includegraph visible="$INCLUDE_GRAPH"/>
<includedbygraph visible="$INCLUDED_BY_GRAPH"/>
<sourcelink visible="yes"/>
<memberdecl>
<classes visible="yes" title=""/>
<namespaces visible="yes" title=""/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
<membergroups visible="yes"/>
</memberdecl>
<detaileddescription title=""/>
<memberdef>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
</memberdef>
<authorsection/>
</file>
<!-- Layout definition for a group page -->
<group>
<briefdescription visible="yes"/>
<groupgraph visible="$GROUP_GRAPHS"/>
<memberdecl>
<classes visible="yes" title=""/>
<namespaces visible="yes" title=""/>
<dirs visible="yes" title=""/>
<nestedgroups visible="yes" title=""/>
<files visible="yes" title=""/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<enumvalues title=""/>
<functions title=""/>
<variables title=""/>
<signals title=""/>
<publicslots title=""/>
<protectedslots title=""/>
<privateslots title=""/>
<events title=""/>
<properties title=""/>
<friends title=""/>
<membergroups visible="yes"/>
</memberdecl>
<detaileddescription title=""/>
<memberdef>
<pagedocs/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<enumvalues title=""/>
<functions title=""/>
<variables title=""/>
<signals title=""/>
<publicslots title=""/>
<protectedslots title=""/>
<privateslots title=""/>
<events title=""/>
<properties title=""/>
<friends title=""/>
</memberdef>
<authorsection visible="yes"/>
</group>
<!-- Layout definition for a directory page -->
<directory>
<briefdescription visible="yes"/>
<directorygraph visible="yes"/>
<memberdecl>
<dirs visible="yes"/>
<files visible="yes"/>
</memberdecl>
<detaileddescription title=""/>
</directory>
</doxygenlayout>
......@@ -40,8 +40,6 @@
#include "WValueSetBase.h"
#include "WGridRegular3D.h"
/**
* Namespace provides some scaling functions for scaling data values to meet the OpenGL requirements.
*/
......
......@@ -52,6 +52,9 @@ namespace wge
* - u_textureXSizeY: height of the texture in pixels
* - u_textureXSizeZ: depth of the texture in pixels
*
* \warning this is not OSG-thread-safe. This method binds the texture immediately. So please use this only for nodes which are not yet used
* in the scene graph. For safely binding textures to a node already in the scene, utilize an update callback.
*
* \param node where to bind
* \param unit the unit to use
* \param texture the texture to use.
......@@ -70,6 +73,9 @@ namespace wge
* - u_textureXSizeZ: depth of the texture in pixels
* If the specified texture is a WGETexture, it additionally adds u_textureXMin and u_textureXScale for unscaling.
*
* \warning this is not OSG-thread-safe. This method binds the texture immediately. So please use this only for nodes which are not yet used
* in the scene graph. For safely binding textures to a node already in the scene, utilize an update callback.
*
* \param node where to bind
* \param unit the unit to use
* \param texture the texture to use.
......
......@@ -231,7 +231,7 @@ void WMAnisotropicFiltering::calcDeriv( std::vector< double >& deriv, // NOLINT
boost::shared_ptr< WGridRegular3D > const& grid, std::size_t image, std::size_t numImages )
{
std::size_t s[] = { grid->getNbCoordsX(), grid->getNbCoordsY(), grid->getNbCoordsZ() };
std::size_t d[] = { fabs( grid->getOffsetX() ), fabs( grid->getOffsetY() ), fabs( grid->getOffsetZ() ) };
double d[] = { fabs( grid->getOffsetX() ), fabs( grid->getOffsetY() ), fabs( grid->getOffsetZ() ) };
for( std::size_t x = 0; x < grid->getNbCoordsX(); ++x )
{
......@@ -283,7 +283,7 @@ void WMAnisotropicFiltering::diffusion( std::vector< double > const& deriv, std:
boost::shared_ptr< WGridRegular3D > const& grid, std::size_t image, std::size_t numImages )
{
std::size_t s[] = { grid->getNbCoordsX(), grid->getNbCoordsY(), grid->getNbCoordsZ() };
std::size_t d[] = { fabs( grid->getOffsetX() ), fabs( grid->getOffsetY() ), fabs( grid->getOffsetZ() ) };
double d[] = { fabs( grid->getOffsetX() ), fabs( grid->getOffsetY() ), fabs( grid->getOffsetZ() ) };
for( std::size_t x = 0; x < grid->getNbCoordsX(); ++x )
{
......
......@@ -5,7 +5,7 @@
IF( CMAKE_GENERATOR MATCHES "Visual Studio" )
SET( CMAKE_C_FLAGS "/TC /DWIN32")
ELSE()
SET( CMAKE_C_FLAGS "-w")
SET( CMAKE_C_FLAGS "-w ${OW_C_FLAGS_INJECT}" )
ENDIF()
FILE( GLOB LIBEEP_SRC "libavr/*.c" "libcnt/*.c" "libeep/*.c" )
......@@ -47,3 +47,20 @@ INSTALL( TARGETS ${OWExtEEPName}
NAMELINK_SKIP
COMPONENT "EXT"
)
# provide an namelink-only target for dev install
INSTALL( TARGETS ${OWExtEEPName}
ARCHIVE # NOTE: this is needed on windows
DESTINATION ${OW_LIBRARY_DIR_RELATIVE}
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE
GROUP_READ GROUP_EXECUTE
WORLD_READ WORLD_EXECUTE
LIBRARY # NOTE: this is needed for all the others
DESTINATION ${OW_LIBRARY_DIR_RELATIVE}
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE
GROUP_READ GROUP_EXECUTE
WORLD_READ WORLD_EXECUTE
NAMELINK_ONLY
COMPONENT "EXT_DEV"
)
......@@ -96,26 +96,24 @@ WMatrix< double > WReaderNIfTI::convertMatrix( const mat44& in )
boost::shared_ptr< WDataSet > WReaderNIfTI::load( DataSetType dataSetType )
{
nifti_image* header = nifti_image_read( m_fname.c_str(), 0 );
boost::shared_ptr< nifti_image > filedata( nifti_image_read( m_fname.c_str(), 1 ), &nifti_image_free );
WAssert( header, "Error during file access to NIfTI file. This probably means that the file is corrupted." );
WAssert( filedata, "Error during file access to NIfTI file. This probably means that the file is corrupted." );
WAssert( header->ndim >= 3,
WAssert( filedata->ndim >= 3,
"The NIfTI file contains data that has less than the three spatial dimension. OpenWalnut is not able to handle this." );
int columns = header->dim[1];
int rows = header->dim[2];
int frames = header->dim[3];
int columns = filedata->dim[1];
int rows = filedata->dim[2];
int frames = filedata->dim[3];
boost::shared_ptr< WValueSetBase > newValueSet;
boost::shared_ptr< WGrid > newGrid;
nifti_image* filedata = nifti_image_read( m_fname.c_str(), 1 );
unsigned int vDim;
if( header->ndim >= 4 )
if( filedata->ndim >= 4 )
{
vDim = header->dim[4];
vDim = filedata->dim[4];
}
else
{
......@@ -125,104 +123,95 @@ boost::shared_ptr< WDataSet > WReaderNIfTI::load( DataSetType dataSetType )
unsigned int order = ( ( vDim == 1 ) ? 0 : 1 ); // TODO(all): Does recognize vectors and scalars only so far.
unsigned int countVoxels = columns * rows * frames;
try
// don't rearrange if this is a time series
if( filedata->dim[ 5 ] <= 1 )
{
// don't rearrange if this is a time series
if( header->dim[ 5 ] <= 1 )
switch( filedata->datatype )
{
switch( header->datatype )
{
case DT_UINT8:
{
boost::shared_ptr< std::vector< uint8_t > > data = copyArray( reinterpret_cast< uint8_t* >( filedata->data ), countVoxels, vDim );
newValueSet = boost::shared_ptr< WValueSetBase >( new WValueSet< uint8_t >( order, vDim, data, W_DT_UINT8 ) );
break;
}
{
boost::shared_ptr< std::vector< uint8_t > > data = copyArray( reinterpret_cast< uint8_t* >( filedata->data ), countVoxels, vDim );
newValueSet = boost::shared_ptr< WValueSetBase >( new WValueSet< uint8_t >( order, vDim, data, W_DT_UINT8 ) );
break;
}
case DT_INT8:
{
boost::shared_ptr< std::vector< int8_t > > data = copyArray( reinterpret_cast< int8_t* >( filedata->data ), countVoxels, vDim );
newValueSet = boost::shared_ptr< WValueSetBase >( new WValueSet< int8_t >( order, vDim, data, W_DT_INT8 ) );
break;
}
{
boost::shared_ptr< std::vector< int8_t > > data = copyArray( reinterpret_cast< int8_t* >( filedata->data ), countVoxels, vDim );
newValueSet = boost::shared_ptr< WValueSetBase >( new WValueSet< int8_t >( order, vDim, data, W_DT_INT8 ) );
break;
}
case DT_INT16:
{
boost::shared_ptr< std::vector< int16_t > > data = copyArray( reinterpret_cast< int16_t* >( filedata->data ), countVoxels, vDim );
newValueSet = boost::shared_ptr< WValueSetBase >( new WValueSet< int16_t >( order, vDim, data, W_DT_INT16 ) );
break;
}
{
boost::shared_ptr< std::vector< int16_t > > data = copyArray( reinterpret_cast< int16_t* >( filedata->data ), countVoxels, vDim );
newValueSet = boost::shared_ptr< WValueSetBase >( new WValueSet< int16_t >( order, vDim, data, W_DT_INT16 ) );
break;
}
case DT_UINT16:
{
boost::shared_ptr< std::vector< uint16_t > > data
= copyArray( reinterpret_cast< uint16_t* >( filedata->data ), countVoxels, vDim );
newValueSet = boost::shared_ptr< WValueSetBase >( new WValueSet< uint16_t >( order, vDim, data, W_DT_UINT16 ) );
break;
}
{
boost::shared_ptr< std::vector< uint16_t > > data
= copyArray( reinterpret_cast< uint16_t* >( filedata->data ), countVoxels, vDim );
newValueSet = boost::shared_ptr< WValueSetBase >( new WValueSet< uint16_t >( order, vDim, data, W_DT_UINT16 ) );
break;
}
case DT_SIGNED_INT:
{
boost::shared_ptr< std::vector< int32_t > > data = copyArray( reinterpret_cast< int32_t* >( filedata->data ), countVoxels, vDim );
newValueSet = boost::shared_ptr< WValueSetBase >( new WValueSet< int32_t >( order, vDim, data, W_DT_SIGNED_INT ) );
break;
}
{
boost::shared_ptr< std::vector< int32_t > > data = copyArray( reinterpret_cast< int32_t* >( filedata->data ), countVoxels, vDim );
newValueSet = boost::shared_ptr< WValueSetBase >( new WValueSet< int32_t >( order, vDim, data, W_DT_SIGNED_INT ) );
break;
}
case DT_UINT32:
{
boost::shared_ptr< std::vector< uint32_t > > data
= copyArray( reinterpret_cast< uint32_t* >( filedata->data ), countVoxels, vDim );
newValueSet = boost::shared_ptr< WValueSetBase >( new WValueSet< uint32_t >( order, vDim, data, W_DT_UINT32 ) );
break;
}
{
boost::shared_ptr< std::vector< uint32_t > > data
= copyArray( reinterpret_cast< uint32_t* >( filedata->data ), countVoxels, vDim );
newValueSet = boost::shared_ptr< WValueSetBase >( new WValueSet< uint32_t >( order, vDim, data, W_DT_UINT32 ) );
break;
}
case DT_INT64:
{
boost::shared_ptr< std::vector< int64_t > > data = copyArray( reinterpret_cast< int64_t* >( filedata->data ), countVoxels, vDim );
newValueSet = boost::shared_ptr< WValueSetBase >( new WValueSet< int64_t >( order, vDim, data, W_DT_INT64 ) );
break;
}
{
boost::shared_ptr< std::vector< int64_t > > data = copyArray( reinterpret_cast< int64_t* >( filedata->data ), countVoxels, vDim );
newValueSet = boost::shared_ptr< WValueSetBase >( new WValueSet< int64_t >( order, vDim, data, W_DT_INT64 ) );
break;
}
case DT_UINT64:
{
boost::shared_ptr< std::vector< uint64_t > > data =
copyArray( reinterpret_cast< uint64_t* >( filedata->data ), countVoxels, vDim );
newValueSet = boost::shared_ptr< WValueSetBase >( new WValueSet< uint64_t >( order, vDim, data, W_DT_UINT64 ) );
break;
}
{
boost::shared_ptr< std::vector< uint64_t > > data =
copyArray( reinterpret_cast< uint64_t* >( filedata->data ), countVoxels, vDim );
newValueSet = boost::shared_ptr< WValueSetBase >( new WValueSet< uint64_t >( order, vDim, data, W_DT_UINT64 ) );
break;
}
case DT_FLOAT:
{
boost::shared_ptr< std::vector< float > > data = copyArray( reinterpret_cast< float* >( filedata->data ), countVoxels, vDim );
newValueSet = boost::shared_ptr< WValueSetBase >( new WValueSet< float >( order, vDim, data, W_DT_FLOAT ) );
break;
}
{
boost::shared_ptr< std::vector< float > > data = copyArray( reinterpret_cast< float* >( filedata->data ), countVoxels, vDim );
newValueSet = boost::shared_ptr< WValueSetBase >( new WValueSet< float >( order, vDim, data, W_DT_FLOAT ) );
break;
}
case DT_DOUBLE:
{
boost::shared_ptr< std::vector< double > > data = copyArray( reinterpret_cast< double* >( filedata->data ), countVoxels, vDim );
newValueSet = boost::shared_ptr< WValueSetBase >( new WValueSet< double >( order, vDim, data, W_DT_DOUBLE ) );
break;
}
{
boost::shared_ptr< std::vector< double > > data = copyArray( reinterpret_cast< double* >( filedata->data ), countVoxels, vDim );
newValueSet = boost::shared_ptr< WValueSetBase >( new WValueSet< double >( order, vDim, data, W_DT_DOUBLE ) );
break;
}
case DT_FLOAT128:
{
boost::shared_ptr< std::vector< long double > > data =
copyArray( reinterpret_cast< long double* >( filedata->data ), countVoxels, vDim );
newValueSet = boost::shared_ptr< WValueSetBase >( new WValueSet< long double >( order, vDim, data, W_DT_FLOAT128 ) );
break;
}
{
boost::shared_ptr< std::vector< long double > > data =
copyArray( reinterpret_cast< long double* >( filedata->data ), countVoxels, vDim );
newValueSet = boost::shared_ptr< WValueSetBase >( new WValueSet< long double >( order, vDim, data, W_DT_FLOAT128 ) );
break;
}
default:
wlog::error( "WReaderNIfTI" ) << "unknown data type " << header->datatype << std::endl;
wlog::error( "WReaderNIfTI" ) << "unknown data type " << filedata->datatype << std::endl;
newValueSet = boost::shared_ptr< WValueSetBase >();
}
}
}
catch( const std::exception& e )
{
nifti_image_free( filedata );
throw e;
}
m_sform = convertMatrix( header->sto_xyz );
m_qform = convertMatrix( header->qto_xyz );
m_sform = convertMatrix( filedata->sto_xyz );
m_qform = convertMatrix( filedata->qto_xyz );
newGrid = boost::shared_ptr< WGridRegular3D >(
new WGridRegular3D( columns, rows, frames, WGridTransformOrtho( getStandardTransform() ) ) );
boost::shared_ptr< WDataSet > newDataSet;
// known description
std::string description( header->descrip );
std::string description( filedata->descrip );
if( !description.compare( "WDataSetSegmentation" ) )
{
wlog::debug( "WReaderNIfTI" ) << "Load as segmentation" << std::endl;
......@@ -236,12 +225,12 @@ boost::shared_ptr< WDataSet > WReaderNIfTI::load( DataSetType dataSetType )
// 4th dimension is the time
// note that in the nifti standard, dim[ 4 ] is the temporal dimension
// we use dim[ 5 ] here
else if( header->dim[ 5 ] > 1 )
else if( filedata->dim[ 5 ] > 1 )
{
WAssert( header->dim[ 4 ] == 1, "Only scalar datasets are supported for time series so far." );
WAssert( filedata->dim[ 4 ] == 1, "Only scalar datasets are supported for time series so far." );
wlog::debug( "WReaderNIfTI" ) << "Load as WDataSetTimeSeries";