Source code for bsb.connectivity.connectome.gap_junctions

import numpy as np
from ..strategy import ConnectionStrategy


[docs]class ConnectomeGapJunctions(ConnectionStrategy): """ Legacy implementation for gap junctions between a cell type. """ casts = {"limit_xy": float, "limit_z": float, "divergence": int} required = ["limit_xy", "limit_z", "divergence"]
[docs] def validate(self): pass
def connect(self): # Gather information for the legacy code block below. from_cell_type = self.from_cell_types[0] from_cells = self.scaffold.cells_by_type[from_cell_type.name] first_cell = int(from_cells[0, 0]) limit_xy = self.limit_xy limit_z = self.limit_z divergence = self.divergence def gap_junctions(cells, d_xy, d_z, dc_gj): gj_sc = np.zeros((cells.shape[0] * dc_gj, 2)) gj_i = 0 cells_x = cells[:, 2] cells_y = cells[:, 3] cells_z = cells[:, 4] for ( id, type, x, y, z, ) in ( cells ): # for each stellate cell calculate the distance with every other cell of the same type in the volume, then choose 4 of them idx = 1 # find all cells that satisfy the distance condition constraint_vector = ( (np.absolute(cells_z - z)).__lt__(d_z) & (np.absolute(cells_z - z)).__ne__(0) & (np.sqrt((cells_x - x) ** 2 + (cells_y - y) ** 2)).__lt__(d_xy) ) good_sc = np.where(constraint_vector)[ 0 ] # indexes of stellate cells that can potentially be connected chosen_rand = np.random.permutation(good_sc) candidates = cells[chosen_rand] for j in candidates: if idx <= dc_gj: ra = np.random.random() if (ra).__gt__((np.absolute(j[4] - z)) / float(d_z)) & ( ra ).__gt__( (np.sqrt((j[2] - x) ** 2 + (j[3] - y) ** 2)) / float(d_xy) ): idx += 1 gj_sc[gj_i, 0] = id gj_sc[gj_i, 1] = j[0] gj_i += 1 return gj_sc[0:gj_i] result = gap_junctions(from_cells, limit_xy, limit_z, divergence) self.scaffold.connect_cells(self, result)
[docs]class ConnectomeGapJunctionsGolgi(ConnectionStrategy): """ Legacy implementation for Golgi cell gap junctions. """
[docs] def validate(self): pass
def connect(self): # Gather information for the legacy code block below. golgi_cell_type = self.from_cell_types[0] golgis = self.scaffold.cells_by_type[golgi_cell_type.name] first_golgi = int(golgis[0, 0]) r_goc_vol = golgi_cell_type.morphology.dendrite_radius GoCaxon_x = golgi_cell_type.morphology.axon_x GoCaxon_y = golgi_cell_type.morphology.axon_y GoCaxon_z = golgi_cell_type.morphology.axon_z def connectome_gj_goc( r_goc_vol, GoCaxon_x, GoCaxon_y, GoCaxon_z, golgicells, first_golgi ): gj_goc = np.zeros((golgis.shape[0] ** 2, 2)) start_index = 0 golgi_x = golgicells[:, 2] golgi_y = golgicells[:, 3] golgi_z = golgicells[:, 4] self_index = 0 for ( i ) in ( golgicells ): # for each Golgi find all cells of the same type that, through their dendritic tree, fall into its axonal tree bool_vector = (np.absolute(golgi_x - i[2])).__le__( r_goc_vol + (GoCaxon_x / 2.0) ) bool_vector[self_index] = False # Don't connect a golgi cell to itself bool_vector = bool_vector & (np.absolute(golgi_y - i[3])).__le__( r_goc_vol + (GoCaxon_y / 2.0) ) bool_vector = bool_vector & (np.absolute(golgi_z - i[4])).__le__( r_goc_vol + (GoCaxon_z / 2.0) ) good_goc = np.where(bool_vector)[ 0 ] # finds indexes of Golgi cells that satisfy all conditions end_index = start_index + len(good_goc) gj_goc[start_index:end_index, 0] = i[0] gj_goc[start_index:end_index, 1] = golgicells[good_goc][:, 0] start_index = end_index self_index += 1 return gj_goc[0:end_index] result = connectome_gj_goc( r_goc_vol, GoCaxon_x, GoCaxon_y, GoCaxon_z, golgis, first_golgi ) self.scaffold.connect_cells(self, result)