Using networks#
Greetings traveller, it seems you’ve created a network. Network files contain:
The configuration used to create them, so also all component definitions like cell types, topology, placement and connectivity blocks, and simulation config.
The morphologies that may be assigned to cells, their labels and properties.
The placement data such as positions, rotations, assigned morphologies and user-defined additional data.
The connectivity data that specifies which cells are connected, and the properties of those connections.
Here are some examples to help you on your way.
Creating networks#
Default network#
The default configuration contains a skeleton configuration, for an HDF5 storage, without
any components in it. The file will be called something like
scaffold_network_2022_06_29_10_10_10.hdf5
, and will be created once you construct the
Scaffold
object:
from bsb.core import Scaffold
network = Scaffold()
network.compile()
Network from config#
You can also first load or create a config.Configuration
object, and create a
network from it, by passing it to the Scaffold
:
from bsb.core import Scaffold
from bsb.config import Configuration
cfg = Configuration()
# Let's set a file name for the network
cfg.storage.root = "my_network.hdf5"
# And add a cell type
cfg.cell_types.add(
"hero_cells",
spatial=dict(
radius=2,
density=1e-3,
),
)
# After customizing your configuration, create a network from it.
network = Scaffold(cfg)
network.compile()
Loading a network from file#
You can load a stored network from file using bsb.core.from_storage()
:
from bsb.core import from_storage
network = from_storage("my_network.hdf5")
Accessing network data#
Configuration#
The configuration of a network is available as network.configuration
, the root nodes
such as cell_types
, placement
and others are available on network
as well.
from bsb.core import from_storage
network = from_storage("network.hdf5")
print("My network was configured with", network.configuration)
print("My network has", len(network.configuration.cell_types), "cell types")
(
# But to avoid some needless typing and repetition,
network.cell_types is network.configuration.cell_types
and network.placement is network.configuration.placement
and "so on"
)
Placement data#
The placement data is available through the storage.interfaces.PlacementSet
interface. This example shows how to access the cell positions of each population:
from bsb.core import from_storage
import numpy as np
network = from_storage("network.hdf5")
for cell_type in network.cell_types:
ps = cell_type.get_placement_set()
pos = ps.load_positions()
print(len(pos), cell_type.name, "placed")
# The positions are an (Nx3) numpy array
print("The median cell is located at", np.median(pos, axis=0))
See also
Todo
Document best ways to interact with the morphology data