[Mrtrix-discussion] empty FA images and streamtrack questions

Donald Tournier d.tournier at brain.org.au
Mon Oct 27 23:48:26 PDT 2008


Hi,

Interesting that you cannot build the 32 bit version. I assume one of
the libraries (presumably GSL) is configured to compile only in 64-bit
mode, and includes processor-specific instructions. There might be a
way to get it to compile, but it sounds easier to just compile it in
64-bit mode...

In any case, the debugging information you sent is pretty complete
(thanks!), and it sounds like it might be trivial to fix. I'd just
like to get one last confirmation that whatever is going on is benign,
and not symptomatic of something worse. Could you put the assert()
statements back in, and insert the following lines in
"src/dwi/SH.cpp", at line 304:

        float value_precomputed (const float *values, const Point& unit_dir)
        {
          if (fabs(unit_dir[2]) > 1.0) {   // insert from here
            VAR (unit_dir[2]);
            VAR (acos(unit_dir[2]));
          }     // to here
          calc_index_fractions (acos(unit_dir[2]));

and recompile? Doesn't matter if it's compiled with the -debug option
or not, or whether you run it within the debugger. It should print out
the values that are causing the problem, before failing at one of the
assert statement.

Let me know what it prints out. If the first value is just greater
than one due to rounding errors, it's a trivial fix. If it's a lot
larger than that, something odd is going on...

Thanks again,

Donald.


On Tue, Oct 28, 2008 at 4:37 PM, Kerstin Pannek <k.pannek1 at uq.edu.au> wrote:
> Hi Donald
>
> The default build wouldn't work on my system. This is what happens when I
> try:
>
> [CC] lib/math/vector.o
>
> ERROR: [CC] lib/math/vector.o
>
> g++ -c -Wall -march=i686 -fPIC -fno-strict-aliasing -DGL_GLEXT_PROTOTYPES
> -O3 -pthread -I/usr/include/glibmm-2.4 -I/usr/lib/glibmm-2.4/include
> -I/usr/include/sigc++-2.0 -I/usr/lib/sigc++-2.0/include
> -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -Ilib -Isrc
> lib/math/vector.cpp -o lib/math/vector.o
>
> failed with output:
>
> lib/math/vector.cpp:1: error: CPU you selected does not support x86-64
> instruction set
>
>
> So I installed following the 64bit instructions in the documentation.
> I inserted the lines in src/dwi/SH.cpp and rebuild, and running streamtrack
> I now get an error message:
>
> streamtrack: src/dwi/SH.cpp:58: void
> MR::DWI::SH::<unnamed>::calc_index_fractions(float): Assertion `index <
> num_legendre_coefs' failed.
> Aborted
>
> I removed the lines and recompiled in debug mode. I attached the output of
> bt full - a lot more information in it now!
>
> Cheers
> Kerstin
>
>
>
>
>
> Donald Tournier wrote:
>>
>> Hi Kerstin,
>>
>> I notice you are running on a 64-bit system. Did you compile MRtrix as
>> a 64-bit executable, or did you stick to the default build setup?
>> There are subtle bugs that can come out in 64 bit mode that aren't a
>> problem in 32 bit mode...
>>
>> Otherwise, if you have a minute, could you insert the following lines
>> in the file "src/dwi/SH.cpp":
>>
>> at line 58:
>>            index_frac2 -= index;
>>            index_frac1 = 1.0 - index_frac2;
>>
>>            assert (index >= 0);                             // <---
>> add this line
>>            assert (index < num_legendre_coefs);      // <--- add this line
>>
>>            precomp_p1 = precomp_legendre + index*num_legendre_coefs;
>>            precomp_p2 = precomp_p1 + num_legendre_coefs;
>>
>>
>> and at line 70:
>>          inline float legendre_precomputed (int l, int m)
>>          {
>>            assert (l <= lmax_legendre);         // <--- add this line
>>            return (
>>                index_frac1 * precomp_p1[index_mpos (l,m)] +
>>                index_frac2 * precomp_p2[index_mpos (l,m)]
>>
>>
>> and then recompile in debug mode:
>>
>>>
>>> ./build clean
>>> ./build -debug
>>>
>>
>> and run in the debugger once again. Recompiling in debug mode will
>> provide a lot more information for the debugger, and the "bt full"
>> command should produce a much more detailed report of what's going
>> on...
>>
>> Once everything is sorted and you don't want to run in debug mode any
>> more, you can revert to the default build:
>>
>>>
>>> ./build clean
>>> ./build
>>>
>>
>> Thanks for helping out!
>> Cheers,
>>
>> Donald.
>>
>>
>> On Tue, Oct 28, 2008 at 10:09 AM, Kerstin Pannek <k.pannek1 at uq.edu.au>
>> wrote:
>>
>>>
>>> Hi Donald
>>>
>>> I follow the instructions in the documentation to get the fa. The tensor
>>> image I get is also empty.
>>>
>>> For streamtrack, I use a binary brain mask (generated using FSL bet, then
>>> eroded by 2 voxels) to terminate tracking. I found that segmentation
>>> faults
>>> occur more often (but not only) when I use the -include option. I guess
>>> this
>>> is simply because a larger number of streamlines has to be generated
>>> then,
>>> increasing chances to see a segfault, and does not actually have anything
>>> to
>>> do with -include itself.
>>> This is the command I ran:
>>> $ streamtrack SD_PROB CSD/csd.mif -seed AC-seed.mif -include
>>> AC-target.mif
>>> -number 100 -mask data/mask-ero2.mif AC-targets.tck
>>>
>>> This is the output of the debugger:
>>>
>>> $ gdb --args streamtrack SD_PROB CSD/csd.mif -seed AC-seed.mif -include
>>> AC-target.mif -mask data/mask-ero2.mif AC-targets.tckGNU gdb 6.8-debian
>>>
>>> Copyright (C) 2008 Free Software Foundation, Inc.
>>> License GPLv3+: GNU GPL version 3 or later
>>> <http://gnu.org/licenses/gpl.html>
>>> This is free software: you are free to change and redistribute it.
>>> There is NO WARRANTY, to the extent permitted by law.  Type "show
>>> copying"
>>> and "show warranty" for details.
>>> This GDB was configured as "x86_64-linux-gnu"...
>>> (gdb) run
>>> Starting program: /data/home/kerstin/bin/mrtrix/bin/streamtrack SD_PROB
>>> CSD/csd.mif -seed AC-seed.mif -include AC-target.mif -mask
>>> data/mask-ero2.mif AC-targets.tck
>>> [Thread debugging using libthread_db enabled]
>>> [New Thread 0x7f5b155f2780 (LWP 30061)]
>>>  9096 generated,      537 selected    [ 53%]
>>> Program received signal SIGSEGV, Segmentation fault.
>>> [Switching to Thread 0x7f5b155f2780 (LWP 30061)]
>>> 0x0000000000410404 in MR::DWI::SH::value_precomputed ()
>>> Current language:  auto; currently asm
>>> (gdb) bt full
>>> #0  0x0000000000410404 in MR::DWI::SH::value_precomputed ()
>>> No locals.
>>> #1  0x000000000043066b in
>>> MR::DWI::Tractography::Tracker::SDProb::next_point
>>> ()
>>> No locals.
>>> #2  0x0000000000423b48 in MR::DWI::Tractography::Tracker::Base::next ()
>>> No locals.
>>> #3  0x00000000004094c9 in MyApp::execute ()
>>> No locals.
>>> #4  0x00000000004057c0 in main ()
>>> No locals.
>>>
>>>
>>> Thanks for your help!
>>> Cheers
>>> Kerstin
>>>
>>>
>>>
>>>
>>>
>>>
>>> Donald Tournier wrote:
>>>
>>>>
>>>> Hi Kerstin,
>>>>
>>>> I'm a bit surprised that you're having problem with the tensor
>>>> analysis. Are you generating the tensor image (i.e. the dt.mif file)
>>>> first with dwi2tensor, and then feeding that through tensor2FA? Does
>>>> the tensor image look OK?
>>>>
>>>>
>>>> About your other questions:
>>>>
>>>> 1) the -initdirection option format is -initdirection 0,0.5,1 (i.e. a
>>>> comma-separated list of floating point values, no spaces). The
>>>> direction is relative to the usual coordinate system (in the
>>>> documentation: General Information => Overview).
>>>>
>>>> 2) Any segmentation fault is A Bad Thing. Could you post the entire
>>>> command that you actually type? I would also be interested to know
>>>> whether you use a mask image that allows the tracks to reach the edge
>>>> of the data set: maybe the program crashes if the track wonders
>>>> outside the image data set. In any case, there's a bug and it needs to
>>>> be fixed...
>>>>
>>>> If you're feeling particularly adventurous, maybe you can run the
>>>> tracking within the debugger? That way, if it crashes you would be
>>>> able to attach the full debugging information when/if it crashes. It's
>>>> quite simple to do that. If the command you normally run is:
>>>>
>>>>
>>>>
>>>>>
>>>>> streamtrack SD_PROB some_image.mif track.tck -some_option etc
>>>>>
>>>>>
>>>>
>>>> then just insert "gdb --args" at the beginning, and then type "run" at
>>>> the GDB prompt:
>>>>
>>>>
>>>>
>>>>>
>>>>> gdb --args streamtrack SD_PROB some_image.mif track.tck -some_option
>>>>> etc
>>>>>
>>>>>
>>>>
>>>> GNU gdb 6.8-debian
>>>> Copyright (C) 2008 Free Software Foundation, Inc.
>>>> License GPLv3+: GNU GPL version 3 or later
>>>> <http://gnu.org/licenses/gpl.html>
>>>> This is free software: you are free to change and redistribute it.
>>>> There is NO WARRANTY, to the extent permitted by law.  Type "show
>>>> copying"
>>>> and "show warranty" for details.
>>>> This GDB was configured as "i486-linux-gnu"...
>>>> (gdb) run
>>>>
>>>> If the program crashes it will display something like "SIGSEGV
>>>> exception occurred" or something. If that happens, then type "bt full"
>>>> at the prompt, and copy/paste all of the session into an email so I
>>>> can have a good look at what went wrong.
>>>>
>>>> By the way, this is only for debugging. There is a performance penalty
>>>> for running within the debugger, and it can be significant. I wouldn't
>>>> recommend doing this routinely...
>>>>
>>>> Cheers!
>>>>
>>>> Donald.
>>>>
>>>>
>>>>
>>>> On Fri, Oct 24, 2008 at 4:38 PM, Kerstin Pannek <k.pannek1 at uq.edu.au>
>>>> wrote:
>>>>
>>>>
>>>>>
>>>>> Hello again everyone,
>>>>>
>>>>> Donald, thank you for fixing find_SH_peaks. Unfortunately I did not
>>>>> quite
>>>>> get around to really playing with it yet.
>>>>>
>>>>> I was just trying to analyze some DTI data that had not been optimized
>>>>> for
>>>>> CSD and tractography (b value 1200; slice gap...). When running
>>>>> tensor2FA, I
>>>>> get only an empty image. Image conversion from DICOM works, i.e. I get
>>>>> a
>>>>> non-empty dwi.mif and encoding - just a warning about the slice gap, no
>>>>> error message. What might be causing this problem?
>>>>>
>>>>> Some more question about streamtrack:
>>>>> 1) When I want to use the option -initdirection <dir>, what format
>>>>> should
>>>>> <dir> be?
>>>>> 2) I do get segmentation faults fairly frequently using streamtrack
>>>>> SD_PROB.
>>>>> I did get segmentation faults using fslview in the past, making me
>>>>> think
>>>>> that this was a hardware problem at my end. With the new version of FSL
>>>>> and
>>>>> a different video card, the fslview segmentation fault issue has been
>>>>> resolved, but the streamtrack segmentation fault remains. Any thoughts
>>>>> on
>>>>> what this problem might be related to? I case it is important, I get
>>>>> some
>>>>> "failed to converge" messages from csdeconv.
>>>>>
>>>>> Thanks for your help.
>>>>> Kerstin
>>>>> _______________________________________________
>>>>> Mrtrix-discussion mailing list
>>>>> Mrtrix-discussion at www.nitrc.org
>>>>> http://www.nitrc.org/mailman/listinfo/mrtrix-discussion
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>>
>>
>
>
> #0  0x000000000041c089 in legendre_precomputed (l=0, m=0) at
> src/dwi/SH.cpp:75
> No locals.
> #1  0x000000000041d6b0 in MR::DWI::SH::value_precomputed (
>    values=0x7fff54ac22c0, unit_dir=@0x7fff54ac23e0) at src/dwi/SH.cpp:314
>        l = 0
>        az = -0.926234603
>        val = 0
> #2  0x000000000043ae23 in MR::DWI::Tractography::Tracker::SDProb::next_point
> (
>    this=0x658ac0) at src/dwi/tractography/tracker/sd_prob.cpp:96
>        new_dir = {static Invalid = <error reading variable>
>        val = 0
>        n = 0
>        values = 0x7fff54ac22c0
>        max_val = 0
> #3  0x0000000000431420 in MR::DWI::Tractography::Tracker::Base::next (
>    this=0x658ac0) at src/dwi/tractography/tracker/base.cpp:121
> No locals.
> #4  0x0000000000412ed2 in MyApp::execute (this=0x7fff54ac2ee0)
>    at cmd/streamtrack.cpp:230
>        seed_dir = {static Invalid = <error reading variable>
>        tck = {<std::_Vector_base<MR::Point,std::allocator<MR::Point> >> = {
>    _M_impl = {<std::allocator<MR::Point>> =
> {<__gnu_cxx::new_allocator<MR::Point>> = {<No data fields>}, <No data
> fields>}, _M_start = 0x65c4e0,
> ---Type <return> to continue, or q <return> to quit---
>      _M_finish = 0x65c5dc, _M_end_of_storage = 0x65c660}}, <No data fields>}
>        max_num_tracks = 1000
>        unidirectional = false
>        min_size = 50
>        properties = {<std::map<std::basic_string<char,
> std::char_traits<char>, std::allocator<char> >,std::basic_string<char,
> std::char_traits<char>, std::allocator<char>
>>,std::less<std::basic_string<char, std::char_traits<char>,
> std::allocator<char> > >,std::allocator<std::pair<const
> std::basic_string<char, std::char_traits<char>, std::allocator<char> >,
> std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >
>>> = {_M_t = {
>      _M_impl = {<std::allocator<std::_Rb_tree_node<std::pair<const
> std::basic_string<char, std::char_traits<char>, std::allocator<char> >,
> std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >
>>> = {<__gnu_cxx::new_allocator<std::_Rb_tree_node<std::pair<const
> std::basic_string<char, std::char_traits<char>, std::allocator<char> >,
> std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >
>>> = {<No data fields>}, <No data fields>},
>        _M_key_compare = {<std::binary_function<std::basic_string<char,
> std::char_traits<char>, std::allocator<char> >,std::basic_string<char,
> std::char_traits<char>, std::allocator<char> >,bool>> = {<No data fields>},
> <No data fields>},
>        _M_header = {_M_color = std::_S_red, _M_parent = 0x65b800,
>          _M_left = 0x658a20, _M_right = 0x65af80}, _M_node_count = 13}}},
>  roi =
> {<std::_Vector_base<MR::RefPtr<MR::DWI::Tractography::ROI>,std::allocator<MR::RefPtr<MR::DWI::Tractography::ROI>
>> >> = {
> ---Type <return> to continue, or q <return> to quit---
>      _M_impl = {<std::allocator<MR::RefPtr<MR::DWI::Tractography::ROI> >> =
> {<__gnu_cxx::new_allocator<MR::RefPtr<MR::DWI::Tractography::ROI> >> = {<No
> data fields>}, <No data fields>}, _M_start = 0x65b860, _M_finish = 0x65b890,
>        _M_end_of_storage = 0x65b8a0}}, <No data fields>},
>  comments = {<std::_Vector_base<std::basic_string<char,
> std::char_traits<char>, std::allocator<char>
>>,std::allocator<std::basic_string<char, std::char_traits<char>,
> std::allocator<char> > > >> = {
>      _M_impl = {<std::allocator<std::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >> =
> {<__gnu_cxx::new_allocator<std::basic_string<char, std::char_traits<char>,
> std::allocator<char> > >> = {<No data fields>}, <No data fields>}, _M_start
> = 0x0, _M_finish = 0x0,
>        _M_end_of_storage = 0x0}}, <No data fields>}}
>        opt = {<std::_Vector_base<MR::OptBase,std::allocator<MR::OptBase> >>
> = {_M_impl = {<std::allocator<MR::OptBase>> =
> {<__gnu_cxx::new_allocator<MR::OptBase>> = {<No data fields>}, <No data
> fields>}, _M_start = 0x65b050,
>      _M_finish = 0x65b050, _M_end_of_storage = 0x65b070}}, <No data fields>}
>        grad = {ptr = 0x0, count = 0x65b150}
>        init_dir = {static Invalid = <error reading variable>
>        source = (MR::Image::Object &) @0x654a40: {
>  static handlers = 0x7fad4c8a6880, H = {axes = {dim = {128, 128, 60, 45,
>        0 <repeats 12 times>}, vox = {2.34375, 2.34375, 2.5, 1,
>        nan(0x400000) <repeats 12 times>}, desc = {{
>          static npos = 18446744073709551615,
> ---Type <return> to continue, or q <return> to quit---
>          _M_dataplus = {<std::allocator<char>> =
> {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
> _M_p = 0x6549f8 "left->right"}}, {
>          static npos = 18446744073709551615,
>          _M_dataplus = {<std::allocator<char>> =
> {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
>            _M_p = 0x65abd8 "posterior->anterior"}}, {
>          static npos = 18446744073709551615,
>          _M_dataplus = {<std::allocator<char>> =
> {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
>            _M_p = 0x658908 "inferior->superior"}}, {
>          static npos = 18446744073709551615,
>          _M_dataplus = {<std::allocator<char>> =
> {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
>            _M_p = 0x7fad4b21ae78 ""}} <repeats 13 times>}, units = {{
>          static npos = 18446744073709551615,
>          _M_dataplus = {<std::allocator<char>> =
> {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
> _M_p = 0x65ad28 "mm"}}, {
>          static npos = 18446744073709551615,
>          _M_dataplus = {<std::allocator<char>> =
> {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
> _M_p = 0x65ad58 "mm"}}, {
>          static npos = 18446744073709551615,
>          _M_dataplus = {<std::allocator<char>> =
> {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
> _M_p = 0x65add8 "mm"}}, {
> ---Type <return> to continue, or q <return> to quit---
>          static npos = 18446744073709551615,
>          _M_dataplus = {<std::allocator<char>> =
> {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
>            _M_p = 0x7fad4b21ae78 ""}} <repeats 13 times>}, axis = {1, 2, 3,
>        0, 2147483647 <repeats 12 times>}, forward = {
>        true <repeats 16 times>}, size_p = 4},
>    comments = {<std::_Vector_base<std::basic_string<char,
> std::char_traits<char>, std::allocator<char>
>>,std::allocator<std::basic_string<char, std::char_traits<char>,
> std::allocator<char> > > >> = {
>        _M_impl = {<std::allocator<std::basic_string<char,
> std::char_traits<char>, std::allocator<char> > >> =
> {<__gnu_cxx::new_allocator<std::basic_string<char, std::char_traits<char>,
> std::allocator<char> > >> = {<No data fields>}, <No data fields>}, _M_start
> = 0x65ac10, _M_finish = 0x65ac18,
>          _M_end_of_storage = 0x65ac18}}, <No data fields>}, data_type = {
>      dt = 69 'E', static ComplexNumber = 16 '\020', static Signed = 32 ' ',
>      static LittleEndian = 64 '@', static BigEndian = 128 '\200',
>      static Text = 255 '�', static GroupStart = 254 '�',
>      static GroupEnd = 253 '�', static Undefined = 0 '\0',
>      static Bit = 1 '\001', static UInt8 = 2 '\002',
>      static UInt16 = 3 '\003', static UInt32 = 4 '\004',
>      static Float32 = 5 '\005', static Float64 = 6 '\006',
>      static Int8 = 34 '"', static Int16 = 35 '#', static Int16LE = 99 'c',
>      static UInt16LE = 67 'C', static Int16BE = 163 '�',
> ---Type <return> to continue, or q <return> to quit---
>      static UInt16BE = 131 '\203', static Int32 = 36 '$',
>      static Int32LE = 100 'd', static UInt32LE = 68 'D',
>      static Int32BE = 164 '�', static UInt32BE = 132 '\204',
>      static Float32LE = 69 'E', static Float32BE = 133 '\205',
>      static Float64LE = 70 'F', static Float64BE = 134 '\206',
>      static CFloat32 = 21 '\025', static CFloat32LE = 85 'U',
>      static CFloat32BE = 149 '\225', static CFloat64 = 22 '\026',
>      static CFloat64LE = 86 'V', static CFloat64BE = 150 '\226',
>      static Native = 69 'E'}, DW_scheme = {M = 0x0}, offset = 0, scale = 1,
>    name = {static npos = 18446744073709551615,
>      _M_dataplus = {<std::allocator<char>> =
> {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
> _M_p = 0x657fa8 "CSD/csd.mif"}},
>    read_only = true, format = 0x7fad4c67df46 "MRtrix", trans_I2R = {
>      M = 0x65b530}, trans_R2I = {M = 0x65b420}, trans_P2R = {M = 0x65b310},
>    trans_R2P = {M = 0x65b200}}, M = {output_name = {
>      static npos = 18446744073709551615,
>      _M_dataplus = {<std::allocator<char>> =
> {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
> _M_p = 0x7fad4b21ae78 ""}},
>    list =
> {<std::_Vector_base<MR::Image::Mapper::Entry,std::allocator<MR::Image::Mapper::Entry>
>>> = {
>        _M_impl = {<std::allocator<MR::Image::Mapper::Entry>> =
> {<__gnu_cxx::new_allocator<MR::Image::Mapper::Entry>> = {<No data fields>},
> <No data fields>},
>          _M_start = 0x65b460, _M_finish = 0x65b478,
> ---Type <return> to continue, or q <return> to quit---
>          _M_end_of_storage = 0x65b478}}, <No data fields>}, mem = 0x0,
>    segment = 0x658aa0, segsize = 44236800, optimised = true,
>    temporary = false, files_new = false,
>    get_func = 0x7fad4c6523e6 <MR::Image::Mapper::getFloat32LE(void const*,
> unsigned long)>,
>    put_func = 0x7fad4c6527c6 <MR::Image::Mapper::putFloat32LE(float, void*,
> unsigned long)>}, start = 0, stride = {45, 5760, 737280, 1, 0 <repeats 12
> times>}}
>        tracker = {ptr = 0x658ac0}
>        writer = {count = 359, total_count = 6608, out = <incomplete type>,
>  dtype = {dt = 69 'E', static ComplexNumber = 16 '\020',
>    static Signed = 32 ' ', static LittleEndian = 64 '@',
>    static BigEndian = 128 '\200', static Text = 255 '�',
>    static GroupStart = 254 '�', static GroupEnd = 253 '
>    static Undefined = 0 '\0', static Bit = 1 '\001', static UInt8 = 2
> '\002',
>    static UInt16 = 3 '\003', static UInt32 = 4 '\004',
>    static Float32 = 5 '\005', static Float64 = 6 '\006',
>    static Int8 = 34 '"', static Int16 = 35 '#', static Int16LE = 99 'c',
>    static UInt16LE = 67 'C', static Int16BE = 163 '�',
>    static UInt16BE = 131 '\203', static Int32 = 36 '$',
>    static Int32LE = 100 'd', static UInt32LE = 68 'D',
>    static Int32BE = 164 '�', static UInt32BE = 132 '\204',
>    static Float32LE = 69 'E', static Float32BE = 133 '\205',
>    static Float64LE = 70 'F', static Float64BE = 134 '\206',
> ---Type <return> to continue, or q <return> to quit---
>    static CFloat32 = 21 '\025', static CFloat32LE = 85 'U',
>    static CFloat32BE = 149 '\225', static CFloat64 = 22 '\026',
>    static CFloat64LE = 86 'V', static CFloat64BE = 150 '\226',
>    static Native = 69 'E'}, count_offset = 340}
> #5  0x00007fad4c60ab14 in MR::App::run (this=0x7fff54ac2ee0, argc=12,
>    argv=0x7fff54ac3048) at lib/app.cpp:206
> No locals.
> #6  0x00000000004133ec in main (argc=12, argv=0x7fff54ac3048)
>    at cmd/streamtrack.cpp:115
>        app = {<MR::App> = {_vptr.App = 0x650a90,
>    static command_description = 0x6514a0,
>    static command_arguments = 0x6515a0, static command_options = 0x651660,
>    static default_options = {
>      {<std::vector<MR::Argument,std::allocator<MR::Argument> >> =
> {<std::_Vector_base<MR::Argument,std::allocator<MR::Argument> >> = {
>            _M_impl = {<std::allocator<MR::Argument>> =
> {<__gnu_cxx::new_allocator<MR::Argument>> = {<No data fields>}, <No data
> fields>}, _M_start = 0x0,
>              _M_finish = 0x0, _M_end_of_storage = 0x0}}, <No data fields>},
>        sname = 0x101 <Address 0x101 out of bounds>,
>        lname = 0x2 <Address 0x2 out of bounds>, desc = 0x0, mandatory = 24,
>        allow_multiple = 254,
>        static End = {<std::vector<MR::Argument,std::allocator<MR::Argument>
>>> = {<std::_Vector_base<MR::Argument,std::allocator<MR::Argument> >> = {
> ---Type <return> to continue, or q <return> to quit---
>              _M_impl = {<std::allocator<MR::Argument>> =
> {<__gnu_cxx::new_allocator<MR::Argument>> = {<No data fields>}, <No data
> fields>}, _M_start = 0x0,
>                _M_finish = 0x0, _M_end_of_storage = 0x0}}, <No data
> fields>},
>          sname = 0x0, lname = 0x0, desc = 0x0, mandatory = false,
>          allow_multiple = false,
>          static End = <same as static member of an already seen type>}},
>      {<std::vector<MR::Argument,std::allocator<MR::Argument> >> =
> {<std::_Vector_base<MR::Argument,std::allocator<MR::Argument> >> = {
>            _M_impl = {<std::allocator<MR::Argument>> =
> {<__gnu_cxx::new_allocator<MR::Argument>> = {<No data fields>}, <No data
> fields>},
>              _M_start = 0x7fad4c8a6660, _M_finish = 0x2a64830,
>              _M_end_of_storage = 0x29c3550}}, <No data fields>},
>        sname = 0x9d4620 <Address 0x9d4620 out of bounds>,
>        lname = 0xd004164befa1fe18 <Address 0xd004164befa1fe18 out of
> bounds>,
>        desc = 0x2ffbe32e873dfe18 <Address 0x2ffbe32e873dfe18 out of bounds>,
>        mandatory = true, allow_multiple = false,
>        static End = {<std::vector<MR::Argument,std::allocator<MR::Argument>
>>> = {<std::_Vector_base<MR::Argument,std::allocator<MR::Argument> >> = {
>              _M_impl = {<std::allocator<MR::Argument>> =
> {<__gnu_cxx::new_allocator<MR::Argument>> = {<No data fields>}, <No data
> fields>}, _M_start = 0x0,
>                _M_finish = 0x0, _M_end_of_storage = 0x0}}, <No data
> fields>},
>          sname = 0x0, lname = 0x0, desc = 0x0, mandatory = false,
>          allow_multiple = false,
> ---Type <return> to continue, or q <return> to quit---
>          static End = <same as static member of an already seen type>}},
>      {<std::vector<MR::Argument,std::allocator<MR::Argument> >> =
> {<std::_Vector_base<MR::Argument,std::allocator<MR::Argument> >> = {
>            _M_impl = {<std::allocator<MR::Argument>> =
> {<__gnu_cxx::new_allocator<MR::Argument>> = {<No data fields>}, <No data
> fields>}, _M_start = 0x10000,
>              _M_finish = 0x0, _M_end_of_storage = 0x0}}, <No data fields>},
>        sname = 0x0, lname = 0x0, desc = 0x0, mandatory = false,
>        allow_multiple = false,
>        static End = {<std::vector<MR::Argument,std::allocator<MR::Argument>
>>> = {<std::_Vector_base<MR::Argument,std::allocator<MR::Argument> >> = {
>              _M_impl = {<std::allocator<MR::Argument>> =
> {<__gnu_cxx::new_allocator<MR::Argument>> = {<No data fields>}, <No data
> fields>}, _M_start = 0x0,
>                _M_finish = 0x0, _M_end_of_storage = 0x0}}, <No data
> fields>},
>          sname = 0x0, lname = 0x0, desc = 0x0, mandatory = false,
>          allow_multiple = false,
>          static End = <same as static member of an already seen type>}},
>      {<std::vector<MR::Argument,std::allocator<MR::Argument> >> =
> {<std::_Vector_base<MR::Argument,std::allocator<MR::Argument> >> = {
>            _M_impl = {<std::allocator<MR::Argument>> =
> {<__gnu_cxx::new_allocator<MR::Argument>> = {<No data fields>}, <No data
> fields>}, _M_start = 0x0,
>              _M_finish = 0x0, _M_end_of_storage = 0x0}}, <No data fields>},
>        sname = 0x0, lname = 0x0, desc = 0x0, mandatory = false,
>        allow_multiple = false,
> ---Type <return> to continue, or q <return> to quit---
>        static End = {<std::vector<MR::Argument,std::allocator<MR::Argument>
>>> = {<std::_Vector_base<MR::Argument,std::allocator<MR::Argument> >> = {
>              _M_impl = {<std::allocator<MR::Argument>> =
> {<__gnu_cxx::new_allocator<MR::Argument>> = {<No data fields>}, <No data
> fields>}, _M_start = 0x0,
>                _M_finish = 0x0, _M_end_of_storage = 0x0}}, <No data
> fields>},
>          sname = 0x0, lname = 0x0, desc = 0x0, mandatory = false,
>          allow_multiple = false,
>          static End = <same as static member of an already seen type>}},
>      {<std::vector<MR::Argument,std::allocator<MR::Argument> >> =
> {<std::_Vector_base<MR::Argument,std::allocator<MR::Argument> >> = {
>            _M_impl = {<std::allocator<MR::Argument>> =
> {<__gnu_cxx::new_allocator<MR::Argument>> = {<No data fields>}, <No data
> fields>}, _M_start = 0x0,
>              _M_finish = 0x0,
>              _M_end_of_storage = 0x7ffffafef8a0}}, <No data fields>},
>        sname = 0x2 <Address 0x2 out of bounds>,
>        lname = 0x9d1370 <Address 0x9d1370 out of bounds>, desc = 0x0,
>        mandatory = 144, allow_multiple = 175,
>        static End = {<std::vector<MR::Argument,std::allocator<MR::Argument>
>>> = {<std::_Vector_base<MR::Argument,std::allocator<MR::Argument> >> = {
>              _M_impl = {<std::allocator<MR::Argument>> =
> {<__gnu_cxx::new_allocator<MR::Argument>> = {<No data fields>}, <No data
> fields>}, _M_start = 0x0,
>                _M_finish = 0x0, _M_end_of_storage = 0x0}}, <No data
> fields>},
>          sname = 0x0, lname = 0x0, desc = 0x0, mandatory = false,
> ---Type <return> to continue, or q <return> to quit---
>          allow_multiple = false,
>          static End = <same as static member of an already seen type>}}},
>    parsed_arguments = {<std::_Vector_base<const gchar*,std::allocator<const
> gchar*> >> = {
>        _M_impl = {<std::allocator<const gchar*>> =
> {<__gnu_cxx::new_allocator<const gchar*>> = {<No data fields>}, <No data
> fields>}, _M_start = 0x654890,
>          _M_finish = 0x6548a8,
>          _M_end_of_storage = 0x6548b0}}, <No data fields>},
>    parsed_options =
> {<std::_Vector_base<MR::ParsedOption,std::allocator<MR::ParsedOption> >> = {
>        _M_impl = {<std::allocator<MR::ParsedOption>> =
> {<__gnu_cxx::new_allocator<MR::ParsedOption>> = {<No data fields>}, <No data
> fields>},
>          _M_start = 0x654930, _M_finish = 0x6549b0,
>          _M_end_of_storage = 0x6549b0}}, <No data fields>},
>    argument = {<std::_Vector_base<MR::ArgBase,std::allocator<MR::ArgBase> >>
> = {
>        _M_impl = {<std::allocator<MR::ArgBase>> =
> {<__gnu_cxx::new_allocator<MR::ArgBase>> = {<No data fields>}, <No data
> fields>}, _M_start = 0x65acc0,
>          _M_finish = 0x65acf0,
>          _M_end_of_storage = 0x65ad00}}, <No data fields>},
>    option = {<std::_Vector_base<MR::OptBase,std::allocator<MR::OptBase> >> =
> {
>        _M_impl = {<std::allocator<MR::OptBase>> =
> {<__gnu_cxx::new_allocator<MR::OptBase>> = {<No data fields>}, <No data
> fields>}, _M_start = 0x65b680,
> ---Type <return> to continue, or q <return> to quit---
>          _M_finish = 0x65b700,
>          _M_end_of_storage = 0x65b700}}, <No data fields>},
>    static log_level = 1}, <No data fields>}
>        ret = 0
>
>
>



-- 
Jacques-Donald Tournier (PhD)
Brain Research Institute, Melbourne, Australia
Tel: +61 (0)3 9496 4078


More information about the Mrtrix-discussion mailing list