[Mrtrix-discussion] Re: Problem when rotating fibre tracks with 64
bit Ubuntu
Donald Tournier
d.tournier at brain.org.au
Wed Dec 10 16:52:20 PST 2008
Hi Dave,
Nice bug report... ;)
I've noticed that problem too, but I've never got round to looking
into it. Judging from your backtrace, the issue is in the
MR::Image::Interp class. For some reason, the interpolation weights
(faaa, faab, etc.) are all NaN, which should signal an invalid
position (i.e. outside the image), but the out_of_bounds variable is
false. That shouldn't happen...
Here's the line in the backtrace:
out_of_bounds = false, faaa = -nan(0x400000), faab = -nan(0x400000),
faba = -nan(0x400000), fabb = -nan(0x400000), fbaa = -nan(0x400000),
fbab = -nan(0x400000), fbba = -nan(0x400000), fbbb = -nan(0x400000)}
update_texture = true
Have a look at lib/image/interp.h if you feel like having a go at fixing it...
Cheers,
Donald.
On Wed, Dec 10, 2008 at 7:10 PM, <David.Raffelt at csiro.au> wrote:
> Hi Donald,
> I have been able to get everything in mrtrix to work nicely on the new 64bit version of Ubuntu (Intrepid) except for one problem when displaying fibre tracks. When I overlay some tracks on an anatomical scan I can view them fine, until I turn off 'lock to image axis' and try to rotate the brain. I can often get a number (~10) of frames around the axis however it will eventually crash with a seg fault. I have applied the patch for FOD overlays you previously supplied for Kerstin and it works a treat. I have a nvidia 8800GT and acceleration is on.
>
> Below is a back trace after compiling with -debug, I am keen to have a go at finding the problem however I was hoping you may be able to point me in the right direction. There is no rush as I am not needing to use this feature currently.
>
> Cheers!
> Dave
>
>
>
> Starting program: /home/raf022/builds/mrtrix-0.2.5/bin/mrview anat.nii
> [Thread debugging using libthread_db enabled]
> [New Thread 0x7fff5bdd57c0 (LWP 13195)]
>
> Program received signal SIGSEGV, Segmentation fault.
> [Switching to Thread 0x7fff5bdd57c0 (LWP 13195)]
> 0x000000000048b21c in MR::Image::Mapper::re (this=0x874800, offset=18446638106128941056) at lib/image/mapper.h:253
> 253 return (get_func (segment[nseg], offset - nseg*segsize));
> (gdb) bt full
> #0 0x000000000048b21c in MR::Image::Mapper::re (this=0x874800, offset=18446638106128941056) at lib/image/mapper.h:253
> nseg = 1466007082154
> #1 0x000000000048b45e in MR::Image::Object::re (this=0x8745c0, offset=18446638106128941056) at lib/image/object.h:118
> No locals.
> #2 0x000000000048c670 in MR::Image::Interp::re (this=0xf82060) at lib/image/interp.h:212
> val = 0
> os = 18446638106128941056
> #3 0x00000000004db0a6 in MR::Image::Interp::get (this=0xf82060, format=MR::Image::Real, val=@0x7fff6e817780, val_im=@0x7fff6e817784)
> at lib/image/interp.h:290
> __PRETTY_FUNCTION__ = "void MR::Image::Interp::get(MR::Image::OutputType, float&, float&)"
> #4 0x00000000004db35f in MR::Viewer::ColourMap::get (mode=0, interp=@0xf82060, format=MR::Image::Real, val=0x7fff6e817780) at src/mrview/colourmap.h:203
> No locals.
> #5 0x00000000004db5d4 in MR::Viewer::ColourMap::map (mode=0, scale=@0x8e7990, interp=@0xf82060, format=MR::Image::Real, rgb=0x7fff6e817850 "")
> at src/mrview/colourmap.h:234
> val = {2.00342809e+28, nan(0x400000), nan(0x400000)}
> #6 0x00000000004d72cc in MR::Viewer::Slice::Renderer::update_texture_free (this=0x8e7960) at src/mrview/slice.cpp:291
> x = 0
> y = 0
> I = (MR::Image::Interp &) @0xf82060: {<MR::Image::Position> = {image = @0x8745c0, x = {-2147483648, -2147483648, -2147483648, 0 <repeats 13 times>},
> offset = 18446638106128941056, stride = 0x874858}, PR = {{0.898187101, -0.0486194827, -0.0297463313, -74.0328827}, {0.0486772582, 0.897121012,
> -0.00161212392, -100.644524}, {0.0298417956, 2.10240803e-08, 0.897943497, -125.840485}}, RP = {{1.10887289, 0.0600953735, 0.0368417166, 92.777504}, {
> -0.0602330118, 1.11141253, 2.62355861e-08, 107.398361}, {-0.0368517116, -0.00199720496, 1.11243141, 137.059662}}, bounds = {191.5, 255.5, 255.5},
> out_of_bounds = false, faaa = -nan(0x400000), faab = -nan(0x400000), faba = -nan(0x400000), fabb = -nan(0x400000), fbaa = -nan(0x400000),
> fbab = -nan(0x400000), fbba = -nan(0x400000), fbbb = -nan(0x400000)}
> RGB = "\000\000"
> #7 0x00000000004d8d08 in MR::Viewer::Slice::Renderer::update (this=0x8e7960, S=@0x7fff6e817910) at src/mrview/slice.cpp:83
> I = (MR::Image::Interp &) @0xf82060: {<MR::Image::Position> = {image = @0x8745c0, x = {-2147483648, -2147483648, -2147483648, 0 <repeats 13 times>},
> offset = 18446638106128941056, stride = 0x874858}, PR = {{0.898187101, -0.0486194827, -0.0297463313, -74.0328827}, {0.0486772582, 0.897121012,
> -0.00161212392, -100.644524}, {0.0298417956, 2.10240803e-08, 0.897943497, -125.840485}}, RP = {{1.10887289, 0.0600953735, 0.0368417166, 92.777504}, {
> -0.0602330118, 1.11141253, 2.62355861e-08, 107.398361}, {-0.0368517116, -0.00199720496, 1.11243141, 137.059662}}, bounds = {191.5, 255.5, 255.5},
> out_of_bounds = false, faaa = -nan(0x400000), faab = -nan(0x400000), faba = -nan(0x400000), fabb = -nan(0x400000), fbaa = -nan(0x400000),
> fbab = -nan(0x400000), fbba = -nan(0x400000), fbbb = -nan(0x400000)}
> update_texture = true
> #8 0x00000000004d3f5a in MR::Viewer::Pane::GLArea::on_expose_event (this=0x8e7ac8, event=0x7fff6e817eb0) at src/mrview/pane.cpp:72
> S = {image = @0x8e78a8, colourmap = @0xf81f98, format = @0xf81f9c, scaling = @0xf81fa0, channel = 0xf81fb0, orientation = @0x8e7910,
> projection = @0x8e7920, focus = @0x8e7924, interpolate = @0xf82010}
> error_code = 9337576
> #9 0x00007fff6599d663 in Gtk::Widget_Class::expose_event_callback () from /usr/lib/libgtkmm-2.4.so.1
> No symbol table info available.
> #10 0x00007fff632b1908 in ?? () from /usr/lib/libgtk-x11-2.0.so.0
> No symbol table info available.
> #11 0x00007fff6110c25d in g_closure_invoke () from /usr/lib/libgobject-2.0.so.0
> No symbol table info available.
> #12 0x00007fff61121c3b in ?? () from /usr/lib/libgobject-2.0.so.0
> No symbol table info available.
> #13 0x00007fff6112348a in g_signal_emit_valist () from /usr/lib/libgobject-2.0.so.0
> No symbol table info available.
> #14 0x00007fff61123b33 in g_signal_emit () from /usr/lib/libgobject-2.0.so.0
> No symbol table info available.
> #15 0x00007fff633b474e in ?? () from /usr/lib/libgtk-x11-2.0.so.0
> ---Type <return> to continue, or q <return> to quit---
> No symbol table info available.
> #16 0x00007fff632ab21a in gtk_main_do_event () from /usr/lib/libgtk-x11-2.0.so.0
> No symbol table info available.
> #17 0x00007fff62a015b5 in ?? () from /usr/lib/libgdk-x11-2.0.so.0
> No symbol table info available.
> #18 0x00007fff62a01b41 in gdk_window_process_all_updates () from /usr/lib/libgdk-x11-2.0.so.0
> No symbol table info available.
> #19 0x00007fff62a01b69 in ?? () from /usr/lib/libgdk-x11-2.0.so.0
> No symbol table info available.
> #20 0x00007fff629e595b in ?? () from /usr/lib/libgdk-x11-2.0.so.0
> No symbol table info available.
> #21 0x00007fff60c6ed3b in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0
> No symbol table info available.
> #22 0x00007fff60c7250d in ?? () from /usr/lib/libglib-2.0.so.0
> No symbol table info available.
> #23 0x00007fff60c72a3d in g_main_loop_run () from /usr/lib/libglib-2.0.so.0
> No symbol table info available.
> #24 0x00007fff632ab7a7 in gtk_main () from /usr/lib/libgtk-x11-2.0.so.0
> No symbol table info available.
> #25 0x00007fff6592c73b in Gtk::Main::run () from /usr/lib/libgtkmm-2.4.so.1
> No symbol table info available.
> #26 0x000000000047ee9c in main (argc=2, argv=0x7fff6e818928) at cmd/mrview.cpp:66
> app = {<MR::App> = {_vptr.App = 0x744730, static command_description = 0x75d400, static command_arguments = 0x75d840,
> static command_options = 0x75d8a0, 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 = 9, allow_multiple = 49,
> 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 = 0x7fff665fbc60, _M_finish = 0x72e9890, _M_end_of_storage = 0x15cbc20}}, <No data fields>},
> sname = 0x4868a00 <Address 0x4868a00 out of bounds>, lname = 0x100f11a5bd833109 <Address 0x100f11a5bd833109 out of bounds>,
> desc = 0xeff13a947bdb3109 <Address 0xeff13a947bdb3109 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, 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> >> = {
> ---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 = {<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 = 0x7fff15d45170}}, <No data fields>}, sname = 0x2 <Address 0x2 out of bounds>,
> lname = 0x15c8970 "?w\234>??R?;T?>```f\035`\206??x B?\237?N?{f", desc = 0x0, mandatory = 48, allow_multiple = 92,
> 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>}}},
> 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 = 0x8040f0,
> _M_finish = 0x8040f8, _M_end_of_storage = 0x8040f8}}, <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 = 0x0, _M_finish = 0x0, _M_end_of_storage = 0x0}}, <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 = 0x874a60,
> _M_finish = 0x874a70, _M_end_of_storage = 0x874a70}}, <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 = 0x0,
> _M_finish = 0x0, _M_end_of_storage = 0x0}}, <No data fields>}, static log_level = 1}, <No data fields>}
> kit = <incomplete type>
> window = {<> = {<No data fields>}, images = {<std::_Vector_base<MR::RefPtr<MR::Viewer::Image>,std::allocator<MR::RefPtr<MR::Viewer::Image> > >> = {
> _M_impl = {<std::allocator<MR::RefPtr<MR::Viewer::Image> >> = {<__gnu_cxx::new_allocator<MR::RefPtr<MR::Viewer::Image> >> = {<No data fields>}, <No data fields>}, _M_start = 0xf81c60, _M_finish = 0xf81c70, _M_end_of_storage = 0xf81c70}}, <No data fields>}, image = {ptr = 0xf81f80, count = 0xf81c40}, axes = {
> 3, 4}, slice = {image = {ptr = 0x0, count = 0x883f10}, colourmap = 0, format = MR::Image::Real, scaling = {multiplier = nan(0x400000),
> offset = nan(0x400000), min = nan(0x400000), max = nan(0x400000)}, channel = {0 <repeats 16 times>}, orientation = {x = {nan(0x400000), nan(0x400000),
> nan(0x400000), nan(0x400000)}}, projection = 2, focus = {static Invalid = <error reading variable>, interpolate = true},
> static Main = 0x7fff6e818200, main_box = <incomplete type>, menubar = <incomplete type>, file_menu = <incomplete type>, view_menu = <incomplete type>,
> image_menu = <incomplete type>, help_menu = <incomplete type>, colourmap_menu = <incomplete type>, paned = <incomplete type>,
> statusbar = <incomplete type>, display_area = {<> = {<No data fields>},
> panes = {<std::_Vector_base<MR::RefPtr<MR::Viewer::Pane>,std::allocator<MR::RefPtr<MR::Viewer::Pane> > >> = {
> _M_impl = {<std::allocator<MR::RefPtr<MR::Viewer::Pane> >> = {<__gnu_cxx::new_allocator<MR::RefPtr<MR::Viewer::Pane> >> = {<No data fields>}, <No data fields>}, _M_start = 0x8e7760, _M_finish = 0x8e7770, _M_end_of_storage = 0x8e7770}}, <No data fields>}, NR = 1, NC = 1, idle_connection = {slot_ = 0x0}},
> sidebar = {<> = {<No data fields>}, static names = {0x50e5bc "tractography", 0x50e5c9 "ROI analysis", 0x50e5d6 "orientation plot"},
> entry = {<> = {<No data fields>}, ID = {<Gtk::TreeModelColumnBase> = {type_ = 24, index_ = 0}, <No data fields>}, name = {<Gtk::TreeModelColumnBase> = {
> type_ = 64, index_ = 1}, <No data fields>}}, box = <incomplete type>, selector = <incomplete type>, selector_list = {pCppObject_ = 0x8f8440},
> list = {0x1021480, 0x0, 0x0}}}
> ret = 0
> (gdb)
>
--
Jacques-Donald Tournier (PhD)
Brain Research Institute, Melbourne, Australia
Tel: +61 (0)3 9496 4078
More information about the Mrtrix-discussion
mailing list