version 1.46 | version 1.47 |
---|
| |
## VND -- Visual Neuronal Dynamics I/O, parsing, selection, and data storage | ## VND -- Visual Neuronal Dynamics I/O, parsing, selection, and data storage |
## | ## |
## $Id: vnd_read.tcl,v 1.46 2025/02/13 01:59:17 barryi Exp $ | ## $Id: vnd_read.tcl,v 1.47 2025/04/28 21:30:41 barryi Exp $ |
## | ## |
## | ## |
## Home Page | ## Home Page |
| |
set targetNodes "" | set targetNodes "" |
foreach e $targetGlobalNodeIdList { | foreach e $targetGlobalNodeIdList { |
foreach {ex ey ez exrot eyrot ezrot etype efileset_num epop enode_id egroup_id egroup_index ecartesian} $node($e) {} | foreach {ex ey ez exrot eyrot ezrot etype efileset_num epop enode_id egroup_id egroup_index ecartesian} $node($e) {} |
| |
puts "target node($e) epop= $epop enode_id= $enode_id" | puts "target node($e) epop= $epop enode_id= $enode_id" |
lappend targetNodes [list $epop $enode_id ] | lappend targetNodes [list $epop $enode_id ] |
} | } |
| |
foreach {searchnode_pop searchnode_node_id} $n {} | foreach {searchnode_pop searchnode_node_id} $n {} |
#first, we match only for the source node Id (lsearch -sorted option includes acting like -exact option ) | #first, we match only for the source node Id (lsearch -sorted option includes acting like -exact option ) |
set node_id_match_data_list_indices [lsearch -integer -all -index 1 $globalEdgeDataList $searchnode_node_id] | set node_id_match_data_list_indices [lsearch -integer -all -index 1 $globalEdgeDataList $searchnode_node_id] |
#puts "for node_id $searchnode_node_id, length of node_id_match_data_list_indices is [llength $node_id_match_data_list_indices]" | puts "for node_id $searchnode_node_id (searchnode_pop = $searchnode_pop), length of node_id_match_data_list_indices is [llength $node_id_match_data_list_indices]" |
#second, we search among this node_id_match_data_list for also making pop match | #second, we search among this node_id_match_data_list for also making pop match |
foreach node_match_index $node_id_match_data_list_indices { | foreach node_match_index $node_id_match_data_list_indices { |
# note dataList style, has appended globalEdgeId | # note dataList style, has appended globalEdgeId |
| |
# } | # } |
#} | #} |
puts "search partially complete, matches to only source_node_edge= [llength $source_node_edges]" | puts "search partially complete, matches to only source_node_edge= [llength $source_node_edges]" |
| # display members of this searchnode_pop and searchnode_node_id |
| |
# search this subset of edges which has sourceNode in order to see which of these edges also have targetNodes | # search this subset of edges which has sourceNode in order to see which of these edges also have targetNodes |
set source_and_target_node_edges "" | set source_and_target_node_edges "" |
foreach e $source_node_edges { | foreach e $source_node_edges { |
| |
set edge_target_node_pop $edge_pop_hash(target_node_population,$eedge_fileset_num,$epop) | set edge_target_node_pop $edge_pop_hash(target_node_population,$eedge_fileset_num,$epop) |
foreach n $targetNodes { | foreach n $targetNodes { |
foreach {searchnode_pop searchnode_node_id} $n { | foreach {searchnode_pop searchnode_node_id} $n { |
| #puts "e= $e edge_target_node_pop= $edge_target_node_pop searchnode_pop= $searchnode_pop etarget_node_id= $etarget_node_id (current n of targetNodes)searchnode_node_id= $searchnode_node_id" |
if { ($edge_target_node_pop == $searchnode_pop) && ($etarget_node_id == $searchnode_node_id) } { | if { ($edge_target_node_pop == $searchnode_pop) && ($etarget_node_id == $searchnode_node_id) } { |
# add to the list of edges that reach both source and target | # add to the list of edges that reach both source and target |
| puts "found source target MATCH e= $e" |
lappend source_and_target_node_edges $e | lappend source_and_target_node_edges $e |
} | } |
} | } |
| |
foreach {t_ex t_ey t_ez t_exrot t_eyrot t_ezrot t_etype t_efileset_num t_epop t_enode_id t_egroup_id t_egroup_index t_ecartesian} $node($target_globalNodeId) {} | foreach {t_ex t_ey t_ez t_exrot t_eyrot t_ezrot t_etype t_efileset_num t_epop t_enode_id t_egroup_id t_egroup_index t_ecartesian} $node($target_globalNodeId) {} |
set target_pointList $morphoHash($t_efileset_num,$t_etype) | set target_pointList $morphoHash($t_efileset_num,$t_etype) |
#find match in target_pointList for $eaff_swc_id | #find match in target_pointList for $eaff_swc_id |
puts "t_efileset_num= $t_efileset_num t_etype= $t_etype" | #puts "t_efileset_num= $t_efileset_num t_etype= $t_etype" |
puts "theEdgeId= $theEdgeId target_globalNodeId= $target_globalNodeId t_etype= $t_etype eaff_swc_id is $eaff_swc_id, llength target_pointList= [llength $target_pointList]" | #puts "theEdgeId= $theEdgeId target_globalNodeId= $target_globalNodeId t_etype= $t_etype eaff_swc_id is $eaff_swc_id, llength target_pointList= [llength $target_pointList]" |
set morph_point_num [lsearch -exact -index 0 $target_pointList $eaff_swc_id] | set morph_point_num [lsearch -exact -index 0 $target_pointList $eaff_swc_id] |
puts "morph_point_num= $morph_point_num" | puts "morph_point_num= $morph_point_num" |
if {$morph_point_num == -1} { | if {$morph_point_num == -1} { |
#draw nothing | #instead of drawing nothing, here draw -- in current style -- from source soma to target soma |
puts "Warning: no swc morphology point found to draw" | puts "Warning: no swc morphology point found to draw. Setting target position to target soma." |
| set v_target_pos [list $t_ex $t_ey $t_ez] |
} else { | } else { |
set morph_point [lindex $target_pointList $morph_point_num] | set morph_point [lindex $target_pointList $morph_point_num] |
foreach {mp_n mp_type mp_x mp_y mp_z mp_radius mp_parent} $morph_point {} | foreach {mp_n mp_type mp_x mp_y mp_z mp_radius mp_parent} $morph_point {} |
| |
} | } |
set morph_point_parent [lindex $target_pointList $morph_point_parent_num] | set morph_point_parent [lindex $target_pointList $morph_point_parent_num] |
foreach {mp_par_n mp_par_type mp_par_x mp_par_y mp_par_z mp_par_radius mp_par_parent} $morph_point_parent {} | foreach {mp_par_n mp_par_type mp_par_x mp_par_y mp_par_z mp_par_radius mp_par_parent} $morph_point_parent {} |
puts "morph_point_num= $morph_point_num morph_point_parent_num= $morph_point_parent_num mp_x= $mp_x $mp_y= $mp_y mp_z= $mp_z mp_par_x= $mp_par_x $mp_par_y= $mp_par_y mp_par_z= $mp_par_z" | #puts "morph_point_num= $morph_point_num morph_point_parent_num= $morph_point_parent_num mp_x= $mp_x $mp_y= $mp_y mp_z= $mp_z mp_par_x= $mp_par_x $mp_par_y= $mp_par_y mp_par_z= $mp_par_z" |
| |
##set type_zrot $typeHash(rot_zaxis,$t_efileset_num,$t_etype) | ##set type_zrot $typeHash(rot_zaxis,$t_efileset_num,$t_etype) |
#set m [transmult [transoffset [list $t_ex $t_ey $t_ez]] [transaxis x $t_exrot rad ] [transaxis y $t_eyrot rad] [transaxis z $t_ezrot rad] [transaxis z [expr $type_zrot] rad]] | #set m [transmult [transoffset [list $t_ex $t_ey $t_ez]] [transaxis x $t_exrot rad ] [transaxis y $t_eyrot rad] [transaxis z $t_ezrot rad] [transaxis z [expr $type_zrot] rad]] |
| |
#move the points | #move the points |
set vm [coordtrans $m $v] | set vm [coordtrans $m $v] |
set vm_par [coordtrans $m $v] | set vm_par [coordtrans $m $v] |
puts "vm= $vm vm_par= $vm_par" | |
set v_target_pos [vecadd $vm_par [vecscale $eaff_swc_pos [vecsub $vm $vm_par]]] | set v_target_pos [vecadd $vm_par [vecscale $eaff_swc_pos [vecsub $vm $vm_par]]] |
puts "vm= $vm vm_par= $vm_par vpos= $v_target_pos" | #puts "vm= $vm vm_par= $vm_par vpos= $v_target_pos" |
| } |
| #now draw in requested style. If there was no afferent target in the morphology, v_target_pos will have simply been set to the target soma position, so that something gets drawn to indicate the connection |
switch $style { | switch $style { |
| |
simple_edge_swc { | simple_edge_swc { |
| |
} | } |
} | } |
} | } |
} | |
| |
| |
^source_morphology { | ^source_morphology { |
| |
puts "WARNING: STUB. NOT IMPLEMENTED YET" | puts "WARNING: STUB. NOT IMPLEMENTED YET" |
} | } |
default { | default { |
showError "style $style not recognized for connections (edges). Style should be one of: simple_edge, source_soma, target_soma, source_target_soma, source_morph_sphere, target_morph_sphere, source_target_morph_sphere" | showError "style $style not recognized for connections (edges). Style should be one of: simple_edge, source_soma, target_soma, source_target_soma, source_morph_sphere, target_morph_sphere, source_target_morph_sphere, simple_edge_swc, source_sphere_swc, target_sphere_swc, source_target_sphere_swc" |
return -1 | return -1 |
} | } |
} | } |