|
@@ -1,11 +1,13 @@
|
|
|
import numpy as np
|
|
|
from brian2.units import *
|
|
|
-from pypet import Environment, cartesian_product
|
|
|
+from pypet import Environment, cartesian_product, Trajectory
|
|
|
from pypet.brian2.parameter import Brian2MonitorResult
|
|
|
|
|
|
from scripts.interneuron_placement import create_grid_of_excitatory_neurons, \
|
|
|
create_interneuron_sheet_entropy_max_orientation, get_excitatory_neurons_in_inhibitory_axonal_clouds
|
|
|
from scripts.ring_network.head_direction import ex_in_network
|
|
|
+from scripts.spatial_maps.orientation_map import OrientationMap
|
|
|
+from scripts.spatial_maps.orientation_map_generator_pypet import TRAJ_NAME_ORIENTATION_MAPS
|
|
|
from scripts.spatial_network.head_direction_index_over_noise_scale import excitatory_eqs, excitatory_params, \
|
|
|
lif_interneuron_eqs, lif_interneuron_params, lif_interneuron_options, ei_synapse_model, ei_synapse_on_pre, \
|
|
|
ei_synapse_param, ie_synapse_model, ie_synapse_on_pre, ie_synapse_param, get_synaptic_weights, \
|
|
@@ -17,10 +19,33 @@ LOG_FOLDER = "../../logs/"
|
|
|
TRAJ_NAME = "entropy_maximisation_over_different_input_correlation_lengths"
|
|
|
|
|
|
|
|
|
-def get_orientation_map(correlation_length, seed, sheet_size):
|
|
|
- return lambda x, y: 0.0
|
|
|
+def get_orientation_map(correlation_length, seed, sheet_size, N_E):
|
|
|
+ traj = Trajectory(filename=DATA_FOLDER + TRAJ_NAME_ORIENTATION_MAPS + ".hdf5")
|
|
|
|
|
|
+ traj.f_load(index=-1, load_parameters=2, load_results=2)
|
|
|
|
|
|
+ corr_len = correlation_length
|
|
|
+ seed = seed
|
|
|
+
|
|
|
+ map_by_params = lambda x, y: x == corr_len and y == seed
|
|
|
+
|
|
|
+ idx_iterator = traj.f_find_idx(['corr_len', 'seed'], map_by_params)
|
|
|
+
|
|
|
+ # TODO: Since it has only one entry, maybe iterator can be replaced
|
|
|
+ for idx in idx_iterator:
|
|
|
+ traj.v_idx = idx
|
|
|
+ map_angle_grid = traj.crun.map
|
|
|
+
|
|
|
+ number_of_excitatory_neurons_per_row = int(np.sqrt(N_E))
|
|
|
+
|
|
|
+ map = OrientationMap(number_of_excitatory_neurons_per_row + 1, number_of_excitatory_neurons_per_row + 1,
|
|
|
+ corr_len, sheet_size, sheet_size, seed)
|
|
|
+ map.angle_grid = map_angle_grid
|
|
|
+
|
|
|
+ tuning_map = lambda x, y: map.orientation_map(x, y)
|
|
|
+ return tuning_map
|
|
|
+
|
|
|
+# TODO: Rename to avoid namespace conflicts
|
|
|
def experiment(traj):
|
|
|
sheet_size = traj.orientation_map.sheet_size
|
|
|
|
|
@@ -28,7 +53,7 @@ def experiment(traj):
|
|
|
N_I = traj.network.N_I
|
|
|
|
|
|
orientation_map = get_orientation_map(traj.orientation_map.correlation_length, traj.orientation_map.seed,
|
|
|
- sheet_size)
|
|
|
+ sheet_size, N_E)
|
|
|
ex_positions, ex_tunings = create_grid_of_excitatory_neurons(sheet_size,
|
|
|
sheet_size,
|
|
|
int(np.sqrt(N_E)), orientation_map)
|
|
@@ -36,6 +61,7 @@ def experiment(traj):
|
|
|
inhibitory_axon_long_axis = traj.morphology.long_axis
|
|
|
inhibitory_axon_short_axis = traj.morphology.short_axis
|
|
|
|
|
|
+ # TODO: Remove one step for circles as it's unnecessary
|
|
|
entropy_maximisation_steps = traj.simulation.entropy_maximisation.steps if inhibitory_axon_long_axis != \
|
|
|
inhibitory_axon_short_axis else 1
|
|
|
|
|
@@ -62,8 +88,10 @@ def experiment(traj):
|
|
|
|
|
|
sharpness = 1.0 / (traj.input.width) ** 2
|
|
|
|
|
|
+ # TODO: Parameterize input direction?
|
|
|
directions = np.linspace(-np.pi, np.pi, traj.input.number_of_directions)
|
|
|
|
|
|
+ # TODO: Maybe smarter to use pypet explore instead of loop
|
|
|
for idx, dir in enumerate(directions):
|
|
|
net.restore()
|
|
|
input_to_excitatory_population = create_head_direction_input(traj.input.baseline * nA, ex_tunings,
|
|
@@ -94,7 +122,7 @@ if __name__ == "__main__":
|
|
|
|
|
|
traj.f_add_parameter_group("orientation_map")
|
|
|
|
|
|
- traj.f_add_parameter("orientation_map.correlation_length", 100, comment="Correlation length of orientations in um")
|
|
|
+ traj.f_add_parameter("orientation_map.correlation_length", 200.0, comment="Correlation length of orientations in um")
|
|
|
traj.f_add_parameter("orientation_map.seed", 1, comment="Random seed for map generation.")
|
|
|
traj.f_add_parameter("orientation_map.sheet_size", 450, comment="Sheet size in um")
|
|
|
|
|
@@ -124,10 +152,13 @@ if __name__ == "__main__":
|
|
|
traj.f_add_parameter("simulation.dt", 0.1, comment="Network simulation time step in ms")
|
|
|
traj.f_add_parameter("simulation.duration", 10, comment="Network simulation duration in ms")
|
|
|
|
|
|
+ # TODO: The Orientation Maps need to be precalculated for these values
|
|
|
+ # TODO: Random seeds need to be added to exploration
|
|
|
ellipsoid_parameter_exploration = {
|
|
|
"morphology.long_axis": [200.0],
|
|
|
"morphology.short_axis": [50.0],
|
|
|
- "orientation_map.correlation_length": np.arange(1, 40, 50).tolist()
|
|
|
+ "orientation_map.correlation_length": [200.0]
|
|
|
+ # "orientation_map.correlation_length": np.arange(0.0, 200.0, 50).tolist()
|
|
|
}
|
|
|
|
|
|
corresponding_circular_radius = float(np.sqrt(ellipsoid_parameter_exploration[
|