placement_jitter_test.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. from scripts.interneuron_placement import create_grid_of_excitatory_neurons, \
  4. create_interneuron_sheet_entropy_max_orientation, get_correct_position_mesh, \
  5. get_excitatory_neurons_in_inhibitory_axonal_clouds
  6. from scripts.spatial_maps.uniform_perlin_map import get_orientation_map
  7. dim = 30
  8. size = 450
  9. n_steps = 5
  10. placement_jitters = np.linspace(0.0, 40.0, n_steps)
  11. fig, axes = plt.subplots(2, n_steps, figsize=(13.5, 4.5))
  12. orientation_map = get_orientation_map(200.0, 1, size, dim*dim)
  13. for pj, ax1, ax2 in zip(placement_jitters, *axes):
  14. ex_positions, ex_tunings = create_grid_of_excitatory_neurons(size, size, dim, orientation_map.tuning)
  15. # inhibitory_axon_long_axis = 100.
  16. # inhibitory_axon_short_axis = 25.
  17. inhibitory_axon_long_axis = np.sqrt(2500.)
  18. inhibitory_axon_short_axis = np.sqrt(2500.)
  19. entropy_maximisation_steps = 30 if inhibitory_axon_long_axis != inhibitory_axon_short_axis else 1
  20. inhibitory_axonal_clouds, ellipse_single_trial_entropy = create_interneuron_sheet_entropy_max_orientation(
  21. ex_positions, ex_tunings, 100, inhibitory_axon_long_axis,
  22. inhibitory_axon_short_axis, size, size, trial_orientations=entropy_maximisation_steps, placement_jitter=pj)
  23. X, Y = get_correct_position_mesh(ex_positions)
  24. c = ax1.pcolor(X, Y, np.array(ex_tunings).reshape((dim, dim)), vmin=-np.pi, vmax=np.pi, cmap='hsv')
  25. ax1.set_title(pj)
  26. # fig.colorbar(c, ax=ax, label="Tuning")
  27. for i, p in enumerate(inhibitory_axonal_clouds):
  28. ell = p.get_ellipse()
  29. ax1.add_artist(ell)
  30. ie_connections = get_excitatory_neurons_in_inhibitory_axonal_clouds(ex_positions, inhibitory_axonal_clouds)
  31. ie_adjacency = np.zeros((100, 900))
  32. for i_idx, ie_conn in enumerate(ie_connections):
  33. for e_idx in ie_conn:
  34. ie_adjacency[i_idx, e_idx] = 1
  35. exc_in_degree = np.sum(ie_adjacency, axis=0)
  36. ax2.hist(exc_in_degree, bins=np.arange(12)-0.5)
  37. ax2.set_ylim(0,300)
  38. plt.show()