Code Monkey home page Code Monkey logo

arbor-gui's People

Contributors

akuesters avatar bcumming avatar brenthuisman avatar helveg avatar noraabiakar avatar schmitts avatar thorstenhater avatar

Stargazers

 avatar  avatar

Watchers

 avatar

arbor-gui's Issues

Stochastic ASC parsing error

Sporadically the attached ASC file throws the following error, but usually it loads fine:

[2021-05-18 18:12:04.928] [debug] Reading ACC from /home/robin/stellate.asc
terminate called after throwing an instance of 'arborio::cableio_parse_error'
  what():  Unexpected term Unexpected '(' at the end of input. at :5:1
Aborted

stellate.zip

Flatten frustrum caps.

Frustrum caps look weird due to lighting/normals. Add proper normals on the proper vertices.

Zooming, panning, rotating

Right now rotating requires a pointer input with horizontal scrolling, i.e. a mousepad. For those without laptops, a UI control for this would be nice (and/or CTRL+vert scroll or sth). Panning is not possible, would also be nice (click+drag).

Improve marker visuals

  • need some differentiations from the actual geometry. Perhaps a black border?
  • currently, a single skew triangle is drawn. Which is not very clear to read.

Catch more exceptions

Using undefined names or unavailable segments in the regions or marker definitions lead to exceptions, e.g.,

terminate called after throwing an instance of 'arb::unbound_name'
  what():  no definition for 'proximal-dend-locs'

or

terminate called after throwing an instance of 'arb::no_such_segment'
  what():  segment 1545 out of bounds

These exceptions should be catched.

Malformed locset crashes thingify

Putting the malformed locset (uniform () 0 9 0) in arbor-gui crashes thingify.

Arbor at 1ec287b54c6d1d42448d3824ea4c8b0776485a93.

[2021-05-12 13:28:23.138] [info] Making markers for locset Locset 1 '(uniform () 0 9 0)'

Thread 1 "arbor-gui" received signal SIGSEGV, Segmentation fault.
0x0000000000690306 in arb::ls::thingify_ (u=..., p=...) at /home/sschmitt/HBP/arbor-gui/3rd-party/arbor/arbor/morph/locset.cpp:442
442             auto cable = reg_cables[cable_idx];
(gdb) where
#0  0x0000000000690306 in arb::ls::thingify_ (u=..., p=...) at /home/sschmitt/HBP/arbor-gui/3rd-party/arbor/arbor/morph/locset.cpp:442
#1  0x000000000069c32b in arb::locset::wrap<arb::ls::uniform_>::thingify (this=0x151d210, m=...) at /home/sschmitt/HBP/arbor-gui/3rd-party/arbor/arbor/include/arbor/morph/locset.hpp:106
#2  0x0000000000470386 in arb::thingify (p=..., m=...) at /home/sschmitt/HBP/arbor-gui/3rd-party/arbor/arbor/include/arbor/morph/locset.hpp:63
#3  0x000000000046f77f in cell_builder::make_points (this=0x7fffffffd500, locset=...) at /home/sschmitt/HBP/arbor-gui/src/cell_builder.cpp:54
#4  0x0000000000482e30 in gui_state::event_visitor::operator() (this=0x7fffffffd388, c=...) at /home/sschmitt/HBP/arbor-gui/src/gui_state.cpp:1060
#5  0x0000000000487f41 in std::__invoke_impl<void, gui_state::update()::event_visitor, evt_upd_locdef<loc_def<arb::locset> >&>(std::__invoke_other, gui_state::event_visitor &&) (__f=...)
    at /home/sschmitt/spack/opt/spack/linux-ubuntu20.04-haswell/gcc-9.3.0/gcc-10.2.0-eily4eebiagzzlfboeezmfy3cei7zz3s/include/c++/10.2.0/bits/invoke.h:60
#6  0x000000000048715f in std::__invoke<gui_state::update()::event_visitor, evt_upd_locdef<loc_def<arb::locset> >&>(gui_state::event_visitor &&) (__fn=...)
    at /home/sschmitt/spack/opt/spack/linux-ubuntu20.04-haswell/gcc-9.3.0/gcc-10.2.0-eily4eebiagzzlfboeezmfy3cei7zz3s/include/c++/10.2.0/bits/invoke.h:95
#7  0x0000000000484ad9 in std::__detail::__variant::__gen_vtable_impl<std::__detail::__variant::_Multi_array<std::__detail::__variant::__deduce_visit_result<void> (*)(gui_state::update()::event_visitor&&, std::variant<evt_upd_cv, evt_add_mechanism, evt_del_mechanism, evt_add_ion, evt_del_ion, evt_add_probe, evt_del_probe, evt_add_stimulus, evt_del_stimulus, evt_add_detector, evt_del_detector, evt_add_locdef<loc_def<arb::region> >, evt_upd_locdef<loc_def<arb::region> >, evt_del_locdef<loc_def<arb::region> >, evt_add_locdef<loc_def<arb::locset> >, evt_upd_locdef<loc_def<arb::locset> >, evt_del_locdef<loc_def<arb::locset> > >&)>, std::integer_sequence<long unsigned int, 15> >::__visit_invoke(gui_state::event_visitor &&, std::variant<evt_upd_cv, evt_add_mechanism, evt_del_mechanism, evt_add_ion, evt_del_ion, evt_add_probe, evt_del_probe, evt_add_stimulus, evt_del_stimulus, evt_add_detector, evt_del_detector, evt_add_locdef<loc_def<arb::region> >, evt_upd_locdef<loc_def<arb::region> >, evt_del_locdef<loc_def<arb::region> >, evt_add_locdef<loc_def<arb::locset> >, evt_upd_locdef<loc_def<arb::locset> >, evt_del_locdef<loc_def<arb::locset> > > &) (__visitor=..., __vars#0=...) at /home/sschmitt/spack/opt/spack/linux-ubuntu20.04-haswell/gcc-9.3.0/gcc-10.2.0-eily4eebiagzzlfboeezmfy3cei7zz3s/include/c++/10.2.0/variant:1012
#8  0x0000000000484bdc in std::__do_visit<std::__detail::__variant::__deduce_visit_result<void>, gui_state::update()::event_visitor, std::variant<evt_upd_cv, evt_add_mechanism, evt_del_mechanism, evt_add_ion, evt_del_ion, evt_add_probe, evt_del_probe, evt_add_stimulus, evt_del_stimulus, evt_add_detector, evt_del_detector, evt_add_locdef<loc_def<arb::region> >, evt_upd_locdef<loc_def<arb::region> >, evt_del_locdef<loc_def<arb::region> >, evt_add_locdef<loc_def<arb::locset> >, evt_upd_locdef<loc_def<arb::locset> >, evt_del_locdef<loc_def<arb::locset> > >&>(gui_state::event_visitor &&) (__visitor=...) at /home/sschmitt/spack/opt/spack/linux-ubuntu20.04-haswell/gcc-9.3.0/gcc-10.2.0-eily4eebiagzzlfboeezmfy3cei7zz3s/include/c++/10.2.0/variant:1694
#9  0x0000000000484c37 in std::visit<gui_state::update()::event_visitor, std::variant<evt_upd_cv, evt_add_mechanism, evt_del_mechanism, evt_add_ion, evt_del_ion, evt_add_probe, evt_del_probe, evt_add_stimulus, evt_del_stimulus, evt_add_detector, evt_del_detector, evt_add_locdef<loc_def<arb::region> >, evt_upd_locdef<loc_def<arb::region> >, evt_del_locdef<loc_def<arb::region> >, evt_add_locdef<loc_def<arb::locset> >, evt_upd_locdef<loc_def<arb::locset> >, evt_del_locdef<loc_def<arb::locset> > >&>(gui_state::event_visitor &&) (
    __visitor=...) at /home/sschmitt/spack/opt/spack/linux-ubuntu20.04-haswell/gcc-9.3.0/gcc-10.2.0-eily4eebiagzzlfboeezmfy3cei7zz3s/include/c++/10.2.0/variant:1710
#10 0x0000000000484cc4 in gui_state::update (this=0x7fffffffd400) at /home/sschmitt/HBP/arbor-gui/src/gui_state.cpp:1155
#11 0x000000000047d656 in gui_state::gui (this=0x7fffffffd400) at /home/sschmitt/HBP/arbor-gui/src/gui_state.cpp:746
#12 0x000000000040da04 in main () at /home/sschmitt/HBP/arbor-gui/src/main.cpp:24

Changing default configurations

The default flavor for parsing SWC files is currently Neuron, I think it should be Arbor instead.
The traces page is the default page that is selected when launching the gui. I think it makes more sense for it to be cell instead.

Allow to change drawing order of regions

When defining regions to be colored, it would be good if the order in which the coloring is done can be chosen. Like e.g. layers in a graphics program. Some level of transparency would also be helpful to define/debug definitions of overlapping regions.

Overlapping regions

Region that overlap are not necessarily painted in the way one would expect. A soluation involves formalizing what we expect, and then the technical challenge of painting to any one (part of a) region just once. Or alpha.

Proper alignment / indentation

Currently the alignment of indented items is off by a few pixels, since the indentation is given in pixels. There should be a way to query ImGui for the proper values.

Prepare Release

Along with arbor 0.6, we will release a first official version of the GUI.

Things to do until then:

  • binary artificats
  • Simulation handling
  • Pull up to arbor 0.6
  • Clean up ACC handling
    • CV policy SerDe
  • Migrate to arbor-sim org
  • Choose a better style
  • Improve UX of viewport.
  • Improve text editing UX.
  • Add CLI options
    • Logging level.

Snap to center seems borked

No matter what my position in the scene is, snap to center always makes the cell disappear/somewhere far outside of viewport.

Opening `Probes` section crashes GUI

When I open the Probes section the following error occurs:

terminate called after throwing an instance of 'arb::no_such_mechanism'
  what():  no mechanism BBP in catalogue
Aborted

Error displaying segments

The following SWC morphology, loaded using Arbor flavor:

# id,  tag,      x,      y,      z,      r,    parent
    1     1     0.0     0.0     0.0     2.0        -1
    2     1    40.0     0.0     0.0     2.0         1
    3     3    40.0     0.0     0.0     2.0         2
    4     3   100.0     0.0     0.0     2.0         3

(segment 0) and (segment 1) overlap (segment 2). I would expect (segment 0) to be just the soma, (segment 2) to be just the dendrite and (segment 1) to be a zero-length segment.
I am using the Linux AppImage from the latest nightly release: https://github.com/thorstenhater/arbor-gui/actions/runs/1211712054

Update documentation for OS installation

Please update documentation from

cmake .. -DCMAKE_CXX_COMPILER=/usr/local/opt/llvm/bin/clang++ \
         -DCMAKE_CCOMPILER=/usr/local/opt/llvm/bin/clang      \
         -DCMAKE_BUILD_TYPE=release

to

cmake .. -DCMAKE_CXX_COMPILER=/usr/local/opt/llvm/bin/clang++ \
         -DCMAKE_C_COMPILER=/usr/local/opt/llvm/bin/clang      \
         -DCMAKE_BUILD_TYPE=release

Scrolling/panning: seems to be going diagonally

Might be related to the platform (Linux): when I hold down CTRL and drag to pan, the viewport moves diagonally when the cursor is dragged at right angles, i.e. not in the direction of the cursor. Because this vector always seems to arc rightward, the cell tends to disappear on the LHS of the viewport.

Is it possible that the cell is anchored at the cursor position and dragged in the direction of the cursor, rather than/in addition to scroll? I suppose that was already the intent at [1], but there I can't see what might explain what I see.

[1] https://github.com/thorstenhater/arbor-gui/blob/master/src/window.cpp#L35

Set icons.

The executable needs an icon in the taskbars/docks and titlebars of this world.

  • Titlebar (non-OSX only, not supported by OSX)
  • Dock/executable icon on OSX
  • Icon on Linux

Optimise geometry picking

glReadPixel is very slow, sometimes exceeding frame budgets.

Here's an idea:

  • Shuffle the pick render to the front
  • Define a PBO
  • Initiate PBO transfer after pick render
  • Finalise PBO transfer right before the end of the render step
  • Or right before we read the value (that should be even later in the pipeline)

Proper color management

Currently colors are pulled from a pool of 12 pre-defined choices, which is not really scalable.
Should be reasonably doable via converting to HSV and stepping H by the GoldenRation.

Compile in version/commit information

To ease debugging in case of problems it would be helpful if the version, e.g., the commit hash plus dirty flag, could be retrieved from within the GUI. E.g. in the main window title or some "about" box. Command line usage via arbor-gui --version would also be good to have.

Allow user defined names in regions and locations

It would be nice if user defined names can be used in regions and locations, e.g. (from the examples),

# Regions:

labels['soma'] = '(tag 1)'
labels['axon'] = '(tag 2)'
labels['dend'] = '(tag 3)'
labels['last'] = '(tag 4)'

labels['all'] = '(all)'

labels['gt_1.5'] = '(radius-ge (region "all") 1.5)'
labels['custom'] = '(join (region "last") (region "gt_1.5"))'

# Locsets:

labels['root']     = '(root)'
labels['terminal'] = '(terminal)'
labels['custom_terminal'] = '(restrict (locset "terminal") (region "custom"))'
labels['axon_terminal'] = '(restrict (locset "terminal") (region "axon"))'

where all, axon, custom, etc. are used.

Feature request: export/save-to-file

It would be handy to have an export/save-to-file feature available to avoid having to use screenshots. If possible, the resolution of the saved image could be different from the on screen render.

Process partial segments

arb::pwlin can return an arb::msegment{id, p', q'} describing a subsection of the 'original' segment (id, p, q) such that
p' = q + u(q - p) and q' = p + v(q - p) for u, v: [0, 1].

At the moment, the renderer just inspects the id and returns the full segment regardless of any points.

Idea

  1. Add a field f to all points in the renderer that is 0 on the proximal and 1 on the distal end. Ensure linear interpolation.
  2. Pass a pair (u, v) to each frustrum when rendering based on the fractions above. Ensure constant.
  3. In the fragment shader discard if not u < f < v.

Issues

  • Need to compute (u, v) from (p, q, p', q')
  • Quite wasteful; usually we will show full segments, but have added 4 floats to each point

See: NeuroML/NeuroML2#144

Possible bug

Opening morph.nml from Arbor's python/examples dir gives a segfault. Arbor-Gui configures Arbor with NML support, so, there is a possible problem. This is not with the AppImage btw, a good old CMake build installed to ~/.local, so no potential library problems. Output is not very helpful (straight to segfault). Have nml files been tested?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.