12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- import numpy as np
- from conmorph.connections import RecurrentInhibition
- from interneuron_polarity.model.morphology.positions import Uniform, UniformOrientation
- from interneuron_polarity.model.morphology.shapes import Ellipsoid
- from interneuron_polarity.model.morphology.volume import NeuralVolume
- ### Define the neural volume
- voxel_size = 10
- v_x = 300
- v_y = 300
- v_z = 300
- V = NeuralVolume(v_x, v_y, v_z, voxel_size)
- ### Define somata distribution for ex and in and the axon/dendrite shape of the ins
- somata_distribution = Uniform(np.array([0,0,0]), np.array([v_x, v_y, v_z]))
- polar_long_axis = 200
- polar_short_axis = 40
- circular_radius = (polar_long_axis*polar_short_axis**2)**(1.0/3)
- volume = 4.0/3*np.pi*circular_radius**3
- circular_inhibitory_shape = Ellipsoid(circular_radius, circular_radius)
- polar_inhibitory_shape = Ellipsoid(polar_long_axis, polar_short_axis) #approximately same volume
- inhibitory_orientation = UniformOrientation(0, np.pi / 2.0, 0, 2 * np.pi)
- ### Determine the excitatory neurons in one inhibitory cloud
- density_ex = 500.0 / (300 ** 3)
- density_in = 250.0 / (300 ** 3)
- number_of_excitatory_neurons = int(density_ex * v_x * v_y * v_z)
- number_of_inhibitory_neurons = int(density_in * v_x * v_y * v_z)
- excitatory_somata = somata_distribution.generate(number_of_excitatory_neurons)
- inhibitory_somata = somata_distribution.generate(number_of_inhibitory_neurons)
- inhibitory_orientations = inhibitory_orientation.generate(number_of_inhibitory_neurons)
- connectivity_p = np.zeros((number_of_inhibitory_neurons, number_of_excitatory_neurons))
- connectivity_c = np.zeros((number_of_inhibitory_neurons, number_of_excitatory_neurons))
- for inhibitory_index, inhibitory_specification in enumerate(zip(inhibitory_somata.T, inhibitory_orientations.T)):
- in_pos, in_orientation = inhibitory_specification
- contained_indices_p = polar_inhibitory_shape.contains(excitatory_somata, in_pos, in_orientation)
- contained_indices_c = circular_inhibitory_shape.contains(excitatory_somata, in_pos, in_orientation)
- connectivity_p[inhibitory_index, contained_indices_p] = 1
- connectivity_c[inhibitory_index, contained_indices_c] = 1
- connectivities = [connectivity_p, connectivity_c]
- labels=["polar", "circular"]
- for conn, label in zip(connectivities, labels):
- ex_ex_conn = RecurrentInhibition(conn, excitatory_somata)
- ex_ex_conn.save("../../data/{:s}_recurrent_inhibition.pickle".format(label))
|