[OpenWalnut-Dev] Write file reader for WDataSetScalar

Sebastian Eichelbaum eichelbaum at informatik.uni-leipzig.de
Mon May 21 10:08:41 CEST 2012


Hi

The exception tells us that the data vector is not complete. This might have several reasons. Maybe, we mis-interpret some nifti HDR info and think there must be more?! 

One other questions: do you use a 32bit Ubuntu to develop your stuff? We currently have a severe issue with 32bit systems and the Nifti library.

Can someone who knows how to interpret the nifti header info help here? Maybe something wrong with the dimensions?
The nifit_tool provides this header info:


header file 'Downloads/output_05_OK.nii.gz', num_fields = 43

all fields:
name                offset  nvals  values
------------------- ------  -----  ------
sizeof_hdr             0      1    348
data_type              4     10    
db_name               14     18    
extents               32      1    0
session_error         36      1    0
regular               38      1    r
dim_info              39      1    57
dim                   40      8    4 256 256 192 1 0 0 0
intent_p1             56      1    0.0
intent_p2             60      1    0.0
intent_p3             64      1    0.0
intent_code           68      1    0
datatype              70      1    8
bitpix                72      1    32
slice_start           74      1    0
pixdim                76      8    1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0
vox_offset           108      1    352.0
scl_slope            112      1    0.0
scl_inter            116      1    0.0
slice_end            120      1    0
slice_code           122      1    0
xyzt_units           123      1    0
cal_max              124      1    0.0
cal_min              128      1    0.0
slice_duration       132      1    0.0
toffset              136      1    0.0
glmax                140      1    0
glmin                144      1    0
descrip              148     80    WDataSetSingle
aux_file             228     24    
qform_code           252      1    1
sform_code           254      1    1
quatern_b            256      1    0.0
quatern_c            260      1    0.0
quatern_d            264      1    0.0
qoffset_x            268      1    0.0
qoffset_y            272      1    0.0
qoffset_z            276      1    0.0
srow_x               280      4    1.0 0.0 0.0 0.0
srow_y               296      4    0.0 1.0 0.0 0.0
srow_z               312      4    0.0 0.0 1.0 0.0
intent_name          328     16    
magic                344      4    n+1

Bye
Sebastian

On Sun, 20 May 2012, Frank Zisko wrote:

> I'm very sorry for my late reply. I was very busy in the last days.
> 
> 
> > Please be a little bit more specific. What is the error in the histogramView? You verified that each value is between 0-255? Is it possible to send your most recent dataset you wrote with OW as nifti?
> > 
> I verified each value while reading and count them. The number is same as number of voxels.
> 
> The most recent set is in the dropboxfolder "output_05":
> https://www.dropbox.com/sh/k4s36ih29d0r56d/9PsnCXgbTn/output_05_OK.nii.gz
> from folder:
> https://www.dropbox.com/sh/k4s36ih29d0r56d/zAdsTKRkrr
> 
> If needed I can send more code and example data sets. But unfortunately, only private.
> 
> The HistogramView error ist the following:
> 
> *INFO    [HistogramView] Recalculating histogram. 
> Exception thrown! Callstack's backtrace:
> trace: WException::WException(std::exception const&)	->
> lib/libopenwalnut.so.1(_ZN10WExceptionC1ERKSt9exception+0x135)
> [0x7f2596a9ad65]
> trace: WThreadedRunner::threadMainSave()	->
> lib/libopenwalnut.so.1(_ZN15WThreadedRunner14threadMainSaveEv+0xba)
> [0x7f2596a9e23a]
> trace: boost::detail::thread_data<boost::function<void ()> >::run()	->
> lib/libopenwalnut.so.1(_ZN5boost6detail11thread_dataINS_8functionIFvvEEEE3runEv+0x1e) [0x7f2596aa10ae]
> trace: thread_proxy()	->	/usr/lib/libboost_thread.so.1.46.1(thread_proxy
> +0x69) [0x7f2592f36ce9]
> trace: ()	->	/usr/lib/nvidia-current-updates/libGL.so.1(+0xa7b74)
> [0x7f259012cb74]
> 
> *ERROR   [KernelRootContainer] Error in module "HistogramView".
> Forwarding to nesting container. 
> *INFO    [ModuleContainer (KernelRootContainer)] Disconnecting Data
> Module:out from HistogramView:Input dataset #0 
> *ERROR   [Module (HistogramView)] WException. Notifying. Message:
> vector::_M_range_check 
> 
> Greetings 
> 
> Frank
> 
> 
> 
> 
> 
> 
> 
> > 
> > On Mon, 14 May 2012, Frank Zisko wrote:
> > 
> > > Now I got the correct order. In imagej I can see the data set
> > > output_04.nii.gz correctly. But OW is still black. When I re-read the
> > > saved output.nii datas, too. The HistogrammView is also on error. I
> > > don't get my misstake.
> > > All values are int between 0 and 255;
> > > 
> > > Am Montag, den 14.05.2012, 21:36 +0200 schrieb Frank Zisko:
> > > > Hi,
> > > > 
> > > > I changed the read mode. But ... I'm still confused.
> > > > 
> > > > I looked at file in imagej. It looks a super little bit better, but it's
> > > > still wrong.
> > > > 
> > > > Here some data sets in a shared dropbox folder:
> > > > https://www.dropbox.com/sh/u1iiga8nrs4vosv/gdsPaPSd7W
> > > > ( see in comments what changes makes the datasets )
> > > > 
> > > > I'm not shure if the mode of reading the volume is the only one error I
> > > > do. I can'T display the HistogrammView for any data set. 
> > > > 
> > > > 
> > > > 
> > > > 
> > > > SOURCE
> > > > 
> > > > #include ...
> > > > [...]
> > > > boost::shared_ptr< WDataSet > WReaderMy::read()
> > > > {
> > > >      m_ifs = boost::shared_ptr< std::ifstream >( new std::ifstream() );
> > > >      m_ifs->open( m_fname.c_str(), std::ifstream::in |
> > > > std::ifstream::binary );
> > > > [...]
> > > >      wlog::info( "WReaderMy" ) << "Read array ...";
> > > >      // My Data Array.
> > > >      int voxelCount = dimX * dimY * dimZ;
> > > >      int tensorDim = 1; // Scalar values.
> > > >      int order = 0; // ?
> > > >      boost::shared_ptr< std::vector< int > > myData =   
> > > > boost::shared_ptr< std::vector< int > >( new std::vector< int >(  
> > > > voxelCount ) );
> > > > 
> > > > // ##################################################
> > > >     int tmp = 0;
> > > >     int index = 0;
> > > >     for( int x = 0; x < dimX; x++)
> > > >     {
> > > >         for(int y = 0; y < dimY; y++)
> > > >         {
> > > >             for(int z = 0; z < dimZ; z++)
> > > >             {
> > > >                 m_ifs->read( reinterpret_cast<char*>(&tmp),1 );
> > > >                 //index = x*dimY*dimZ + y*dimZ + z; // output_01
> > > >                 //index = (voxelCount-1) - (x*dimY*dimZ + y*dimZ +
> > > > z); // output_02 reversed output_01
> > > >                 //index = (dimX-1-x) + y*(dimX-1) +
> > > > z*(dimX-1)*(dimY-1); // output_03
> > > >                 index = z*dimY*dimX + y*dimX + x; // output_04
> > > >                 (*vmrData)[index] = tmp;
> > > >             }
> > > >         }
> > > >     }
> > > >  // ###########################################
> > > >      wlog::info( "WReaderMy" ) << "Read array ... Done.";
> > > > 
> > > >      boost::shared_ptr< WValueSetBase > myValueSet; // For creatiung  
> > > > DataSetScalar ( WValueSetBase, WGrid).
> > > >      myValueSet = boost::shared_ptr< WValueSetBase >( new WValueSet<  
> > > > int >( order, tensorDim, myData) );
> > > > 
> > > > 
> > > > [...]
> > > >      boost::shared_ptr< WGrid > myGrid;
> > > >      myGrid = boost::shared_ptr< WGridRegular3D >( new WGridRegular3D(
> > > > dimX, dimY, dimZ, WGridTransformOrtho( getStandardTransform() ) ) );
> > > >      boost::shared_ptr< WDataSet > myDataSet;
> > > >      wlog::debug( "WReaderMy" ) << "Load as WDataSetScalar";
> > > >      myDataSet = boost::shared_ptr< WDataSet >( new WDataSetScalar(  
> > > > myValueSet, myGrid ) );
> > > >      myDataSet->setFilename( m_fname );
> > > >      m_ifs->close();
> > > >      return myDataSet;
> > > > }
> > > 
> > > 
> > > _______________________________________________
> > > OpenWalnut-Dev mailing list
> > > OpenWalnut-Dev at lists.informatik.uni-leipzig.de
> > > http://lists.informatik.uni-leipzig.de/mailman/listinfo/openwalnut-dev
> > > 
> > > Archive: http://lists.informatik.uni-leipzig.de/pipermail/openwalnut-dev/
> > > 
> > 
> 
> 
> 
> 
> _______________________________________________
> OpenWalnut-Dev mailing list
> OpenWalnut-Dev at lists.informatik.uni-leipzig.de
> http://lists.informatik.uni-leipzig.de/mailman/listinfo/openwalnut-dev
> 
> Archive: http://lists.informatik.uni-leipzig.de/pipermail/openwalnut-dev/
> 

-- 
Dipl.-Inf. Sebastian Eichelbaum
Universität Leipzig
Institut für Informatik
Abteilung Bild- und Signalverarbeitung
PF 100920
D-04009 Leipzig


More information about the OpenWalnut-Dev mailing list