🚧 Work in progress 🚧
Experimental visualizer for studying networks / graphs / circuits and properties of their adjacency matrices.
The big-picture goal for this project is to inform how best to stimulate neural circuits in order to infer their connectivity.
m
)n
: enter "add n
ew edges" editing mode, click a node and drag to another to connect them, do the same again to remove an edge
m
: enter "m
ove" mode, drag nodes to reposition them
o
: enter "o
pen-loop stimulation mode", clicking on a node delivers stimulation
s
: toggle showing edges
r
: toggle showing indirect connections
w
: w
iggle nodes, display outputs
x
: ex
port graph to text field
<space>
: create a new random, sparse network
- graph import from text field
- can use bidirectional arrows <->
- and multi input multi output lines a,b,c<->d,e
- graph export to text field
- toggle directional edges! (with s)
- highlight edges from a second adjacency matrix
- basic binary matrix reps
- can import connections from binary string (check order / convention)
- can bitshift to "rotate connections"
- can toggle connections via adj mat
- can add connections via drag arrows
- will also remove redundant connections!
- clearMat()
closed-loop control of a node reveals a lot if node N has many (non-reciprocal) inputs
for two nodes A,B,
if corr(A,B) > th for both ctrl(A) and ctrl(B) A ⟷ B
chains contain both colliders and forks
reach(un(M)) is insufficient to predict correlation in forks
closed-loop control can eliminate colliders (by serving inputs to junction) closed-loop control interrrupts chains
[ ] all node creation functions reference global variables, this makes it difficult to extend
[ ] signal propogation for correlation inspection is "too correlated"
[ ] should fork-shaped and collider shaped reachability be undirected?
[ ] calculate "passes through node X" reachability
[~] split edge drawing and matrix highlights into 2 functions
[ ] have data generation, but currently only works with pure sources
[ ] have adjacency measure as anonymous function that can be reused? or non-anonymous is fine too ...
[ ] topological sort -> y position
[ ] print to console control severance score!
[x] visualize where we're controlling
[~] in / out degree quant & viz
[~] - actually! this phase propogation thing is what we want to do instead of reachability(Unidirect(M))
which doesn't identify "common cause" correlation
[~] after calculating reachability, topologically sort the network
[ x] calculate reachability (floyd warshall ??)
[x.] vis reachability (in adjMat only?)
[ ] system for drawing wiggly high order connections
[~] delete edges / nodes gracefully
[~] visualize self-connection with loop arrow
[ ] nodes wiggle to show correlation :)
[ ] visualize open-loop stim
[ ] import-export adjacency
in this format:
{a,b,c,d,e,f,g}
a→b
b→c,d
d→a
f⟷g
export
to matlab, python, (GML?) txt
[ ] "mute/unmute" all inputs/outputs by toggling column / row in adjacency matrix
[ ] nicer UI elements (with ControlP5)
[~] viz multiple mats on one tile
[~] highlight control-severed edges csev = m & !ctrl(m) overlay red Xs
[ ] color nodes by community see: Clustering and Community Detection in Directed Networks: A Survey
[ ] color nodes by K-means after force-directed layout?
[ ] duplicate edge protection (have collection of children be Sets)
e->a->b->d
c->b
big fork:
a->b->c->d
a->j->i->h
big collider:
h->i->j->a
d->c->b->a
a->j
b->e
c->e
f->e,h,j
g->g,h
i->d
j->c,e