analyse_spatial_layouts.py 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import h5py
  2. import numpy
  3. import pandas
  4. import scripts
  5. from scripts.interneuron_placement import plot_neural_sheet, Pickle
  6. from scripts.spatial_network.run_entropy_maximisation_orientation_map import get_orientation_map
  7. from scripts.spatial_packing_entropy.sample_spatial_layout import data_folder, correlation_length, map_seed, \
  8. sheet_size, NE, NI, long_axis, short_axis, number_of_bins, ds
  9. if __name__ == "__main__":
  10. with h5py.File(data_folder + "spatial_layouts.hdf5", "r") as f:
  11. sampling_result_dict = {
  12. "seeds": f["sampling"]["seeds"][:],
  13. "mean_entropies": f["sampling"]["entropies"][:],
  14. "overlaps": f["sampling"]["overlaps"][:]
  15. }
  16. generation_indices = sorted([int(key) for key in f["differential_evolution"]["1"].keys()])
  17. evolution_result_dict = {
  18. "generation": generation_indices,
  19. "mean_entropies": numpy.array([f["differential_evolution"]["1"][str(generation_idx)]["entropy"][()] for \
  20. generation_idx
  21. in
  22. generation_indices]),
  23. "overlaps": numpy.array([f["differential_evolution"]["1"][str(generation_idx)]["overlap"][()] for \
  24. generation_idx in
  25. generation_indices])
  26. }
  27. max_entropy_result_dict = {
  28. "mean_entropy": f["max_entropy"]["entropy"][()] ,
  29. "overlap": f["max_entropy"]["overlap"][()],
  30. "orientations": f["max_entropy"]["orientations"][:]
  31. }
  32. best_orientation = f["differential_evolution"]["1"][str(generation_indices[-1])]["orientations"][:]
  33. orientation_map = get_orientation_map(correlation_length, map_seed, sheet_size, NE, data_folder=data_folder)
  34. spatial_layout = scripts.spatial_layout.SpatialLayout(orientation_map, NE, NI, long_axis, short_axis, sheet_size)
  35. circular_radius = numpy.sqrt(spatial_layout.long_axis * spatial_layout.short_axis)
  36. circular_layout = scripts.spatial_layout.SpatialLayout(orientation_map, NE, NI, circular_radius, circular_radius,
  37. sheet_size)
  38. df = pandas.DataFrame(sampling_result_dict)
  39. import matplotlib.pyplot as plt
  40. fig, ax = plt.subplots(1, 1, figsize=(3, 4))
  41. ax_overview = ax
  42. ax_overview.scatter(df["overlaps"].values/1000.0, df["mean_entropies"].values, marker='.', label='rand')
  43. ax_overview.plot(evolution_result_dict["overlaps"]/1000.0, evolution_result_dict["mean_entropies"], 'r-o',
  44. label="evolv")
  45. ax_overview.plot(max_entropy_result_dict["overlap"]/1000.0, max_entropy_result_dict["mean_entropy"], 'r^',
  46. label="max ent")
  47. ax_overview.plot(circular_layout.get_overlap(numpy.zeros(NI,), ds)/1000.0, circular_layout.get_mean_entropy(
  48. numpy.zeros(
  49. (NI,)), number_of_bins), 'rv', label="circ")
  50. ax_overview.set_xlabel("overlap (um2) x0.001")
  51. ax_overview.set_ylabel("<entropy>")
  52. ax_overview.legend()
  53. fig.tight_layout()
  54. fig.savefig("../../figures/evolve_spatial_layout/overlap_vs_entropy.png", dpi=300, bbox="tight")
  55. plot_neural_sheet(spatial_layout.ex_positions, spatial_layout.ex_tunings, spatial_layout.get_axonal_clouds(best_orientation))
  56. plt.savefig("../../figures/evolve_spatial_layout/layout_max_entropy.png", dpi=300)
  57. plot_neural_sheet(spatial_layout.ex_positions, spatial_layout.ex_tunings,
  58. spatial_layout.get_axonal_clouds(max_entropy_result_dict["orientations"]))
  59. plt.savefig("../../figures/evolve_spatial_layout/layout_overlap_constrained_max_entropy.png", dpi=300)
  60. plot_neural_sheet(circular_layout.ex_positions, circular_layout.ex_tunings,
  61. circular_layout.get_axonal_clouds(numpy.zeros((NI,))))
  62. plt.savefig("../../figures/evolve_spatial_layout/layout_circular.png", dpi=300)