thorstenhater / arbor-gui Goto Github PK
View Code? Open in Web Editor NEWThis project forked from arbor-sim/gui
License: Other
This project forked from arbor-sim/gui
License: Other
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
Make standard three light setup: Key, fill, back.
Cf. #45 - it would be nice if it would be possible to set the resolution of the snapshot.
Frustrum caps look weird due to lighting/normals. Add proper normals on the proper vertices.
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).
E.g. color scale for potential (per segment).
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.
Given a morphology and a arb::cv_policy
we should be able to show the CVs as a 3D rendering.
We can build everything in CI.
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
The cell window needs an indicator for the current orientation.
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.
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.
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.
A small coordinate system and a scale (or even better a ruler function) would be nice to have.
It will help fix arbor-sim/arbor#1229
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.
Along with arbor 0.6, we will release a first official version of the GUI.
Things to do until then:
No matter what my position in the scene is, snap to center always makes the cell disappear/somewhere far outside of viewport.
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
v
is pushed to master, then create a Github Release with AppImage+Bundle from it.nightly
Github release. See https://stackoverflow.com/questions/63014786/how-to-schedule-a-github-actions-nightly-build-but-run-it-only-when-there-whereCurrently, we parse each region standalone, thus there can be no cross-references, eg a := (tag 1) b := (region "a")
.
Fix that by adding a temporary label-dict.
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
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
We have stb_image already, so just read the texture and store it as png.
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
The executable needs an icon in the taskbars/docks and titlebars of this world.
glReadPixel
is very slow, sometimes exceeding frame budgets.
Here's an idea:
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.
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.
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.
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.
Using AppImage downloaded from here: https://github.com/thorstenhater/arbor-gui/actions/runs/1146342777
App crashes when a new region is defined as an empty s-expression()
.
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
f
to all points in the renderer that is 0
on the proximal and 1
on the distal end. Ensure linear interpolation.(u, v)
to each frustrum when rendering based on the fractions above. Ensure constant.discard
if not u < f < v
.Issues
(u, v)
from (p, q, p', q')
See: NeuroML/NeuroML2#144
To reproduce
Behaviour: At first, soma_group will change in random garbled text (might change continuously). After a while a segfault will occur
Suggestion: Add a branch for each supported version of arbor.
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?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.