Source code for bsb.connectivity.connectome.bcsc_purkinje

import numpy as np
from ..strategy import ConnectionStrategy


[docs]class ConnectomeBCSCPurkinje(ConnectionStrategy): """ Legacy implementation for the connections between basket cells,stellate cells and purkinje cells. """ casts = {"limit_x": float, "limit_z": float, "divergence": int, "convergence": int} required = ["limit_x", "limit_z", "divergence", "convergence", "tag_bc", "tag_sc"] defaults = {"tag_bc": "basket_to_purkinje", "tag_sc": "stellate_to_purkinje"}
[docs] def validate(self): pass
def connect(self): # Gather information for the legacy code block below. basket_cell_type = self.from_cell_types[0] stellate_cell_type = self.from_cell_types[1] purkinje_cell_type = self.to_cell_types[0] baskets = self.scaffold.cells_by_type[basket_cell_type.name] stellates = self.scaffold.cells_by_type[stellate_cell_type.name] purkinjes = self.scaffold.cells_by_type[purkinje_cell_type.name] first_basket = int(baskets[0, 0]) first_stellate = int(stellates[0, 0]) distx = self.limit_x distz = self.limit_z conv = self.convergence def connectome_bc_sc_pc( first_basket, first_stellate, basketcells, stellates, purkinjes, distx, distz, conv, ): n_purkinje = len(purkinjes) bc_pc = np.empty((n_purkinje * conv, 2)) sc_pc = np.empty((n_purkinje * conv, 2)) bc_i = 0 sc_i = 0 baskets_x = baskets[:, 2] baskets_z = baskets[:, 4] stellates_x = stellates[:, 2] stellates_z = stellates[:, 4] for ( p_id, p_type, p_x, p_y, p_z, ) in ( purkinjes ): # for all Purkinje cells: calculate which basket and stellate cells can be connected, then choose 20 of them for each typology idx_bc = 1 idx_sc = 1 # find all cells that satisfy the distance condition for both types bc_matrix = (np.absolute(baskets_z - p_z)).__lt__(distx) & ( np.absolute(baskets_x - p_x) ).__lt__(distz) sc_matrix = (np.absolute(stellates_z - p_z)).__lt__(distz) & ( np.absolute(stellates_x - p_x) ).__lt__(distx) good_bc = np.where(bc_matrix)[ 0 ] # indexes of basket cells that can potentially be connected good_sc = np.where(sc_matrix)[ 0 ] # indexes of stellate cells that can potentially be connected chosen_rand_bc = np.random.permutation(good_bc) good_bc_matrix = basketcells[chosen_rand_bc] chosen_rand_sc = np.random.permutation(good_sc) good_sc_matrix = stellates[chosen_rand_sc] # basket cells connectivity for j in good_bc_matrix: if idx_bc <= conv: ra = np.random.random() if (ra).__gt__((np.absolute(j[4] - p_z)) / distx) & (ra).__gt__( (np.absolute(j[2] - p_x)) / distz ): idx_bc += 1 bc_pc[bc_i, 0] = j[0] bc_pc[bc_i, 1] = p_id bc_i += 1 # stellate cells connectivity for k in good_sc_matrix: if idx_sc <= conv: ra = np.random.random() if (ra).__gt__((np.absolute(k[4] - p_z)) / distz) & (ra).__gt__( (np.absolute(k[2] - p_x)) / distx ): idx_sc += 1 sc_pc[sc_i, 0] = k[0] sc_pc[sc_i, 1] = p_id sc_i += 1 return bc_pc[0:bc_i], sc_pc[0:sc_i] result_bc, result_sc = connectome_bc_sc_pc( first_basket, first_stellate, baskets, stellates, purkinjes, distx, distz, conv, ) self.scaffold.connect_cells( self, result_bc, self.tag_bc, meta={"from_cell_types": [basket_cell_type.name]}, ) self.scaffold.connect_cells( self, result_sc, self.tag_sc, meta={"from_cell_types": [stellate_cell_type.name]}, )