List of hooks for after-connectivity¶
FuseConnectivity¶
This strategy accepts a list of connectivity sets to merge. It reconstructs the connectivity tree defined by these sets and creates a new connectivity set for each root–leaf pair.
For example, given a chain: cell_a -> cell_b -> cell_c -> cell_d you can directly connect cell_a to cell_d, bypassing cell_b and cell_c.
This strategy does not allow merging discontinuous connectivity lists (e.g., [cell_a -> cell_b, cell_d -> cell_e]). If the merge results in a cell being connected to itself (i.e., a loop), an error is raised.
Parameters
connections– List of connectivity sets to merge.
Examples¶
"after_connectivity": {
"new_connection": {
"strategy": "bsb.postprocessing.FuseConnectivity",
"connections": ["my_connections_list"]
}
}
config.after_connectivity = dict(
new_connection=dict(
strategy=bsb.postprocessing.FuseConnectivity,
connections=["my_connections_list"],
)
)
If the connectivity tree contains a single root and a single leaf, the hook name is used as the name of the resulting connectivity set. If multiple roots and/or multiple leaves are present, each resulting connectivity set is named using the pattern <root_name>_to_<leaf_name>.
Consider the connectivity tree:
A → C → D
B ↗ ↘ F
{
"after_connectivity": {
"new_connection": {
"strategy": "bsb.postprocessing.FuseConnectivity",
"cell_list": ["A_to_C", "B_to_C", "C_to_D", "C_to_F"]
}
}
}
config.after_connectivity = dict(
new_connection=dict(
strategy=bsb.postprocessing.FuseConnectivity,
connections=["A_to_C", "B_to_C", "C_to_D", "C_to_F"],
)
)
- This configuration generates four connectivity sets, named:
A_to_D
A_to_F
B_to_D
B_to_F
IntermediateBypass¶
This strategy lets the user bypass the specified intermediate cell types from the connection path and generates new direct connections. For example, given a chain:
cell_a -> cell_b -> cell_c -> cell_d
if cell_c is selected it will create a direct connection between cell_b and cell_d.
Parameters
cell_list– List of cell types to bypass.
If the merge results in a cell being connected to itself (i.e., a loop), an error is raised.
Examples¶
{
"after_connectivity": {
"new_connection": {
"strategy": "bsb.postprocessing.IntermediateBypass",
"cell_list": ["list_of_cell_to_be_excluded"]
}
}
}
config.after_connectivity = dict(
new_connection=dict(
strategy=bsb.postprocessing.IntermediateBypass,
cell_list=["list_of_cell_to_be_excluded"],
)
)
The naming convention for the newly created connectivity sets follows the same
pattern used by FuseConnectivity:
<presynaptic>_to_<postsynaptic>
The algorithm automatically traverses and resolves all branches in the connectivity tree.
For example, consider the following connectivity graph:
A -> B -> C -> D
'---------^
If cells B and C are selected as intermediate nodes, the configuration can be expressed as:
{
"after_connectivity": {
"new_connection": {
"strategy": "bsb.postprocessing.IntermediateBypass",
"cell_list": ["B", "C"]
}
}
}
config.after_connectivity = dict(
new_connection=dict(
strategy=bsb.postprocessing.IntermediateBypass,
cell_list=["B", "C"],
)
)
As a result, a new A_to_D connectivity set is generated, collapsing all
intermediate connections between the presynaptic and postsynaptic populations.
Bypassing non-contiguous intermediate cells is also supported. For example, given the connectivity tree:
B -> C -> D -> E -> F
A ---^
If C and E are selected as intermediate cells, the following connectivity sets are produced:
A_to_DB_to_DD_to_F