sanity_checks_recurrent_inhibition.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. from conmorph.connections import RecurrentInhibition
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4. from conmorph.util import load_spec
  5. labels=["polar", "circular"]
  6. ex_ex_connections = [RecurrentInhibition.load("../../data/{:s}_recurrent_inhibition.pickle".format(label)) for label
  7. in labels]
  8. model = load_spec("morphological_model.json")
  9. print("### Sanity checks ###")
  10. density_ex = model["excitatory_neurons"]["density"]
  11. density_in = model["inhibitory_neurons"]["density"]
  12. volume = 4.0/3*np.pi* model["inhibitory_neurons"]["long_axis"]*model["inhibitory_neurons"]["short_axis"]**2
  13. print("Expected number of containing axonal clouds: axonal_volume*density_in={:.1f}".format(density_in*volume))
  14. [print("{:s}: {:.1f}".format(label, np.mean(conn.get_numbers_of_containing_axonal_clouds()))) for label, conn in zip(
  15. labels, ex_ex_connections)]
  16. print()
  17. print("Expected number of neighbors: number_of_neighbors_in_axonal_clouds*no_axonal_clouds = (density_ex*volume)*("
  18. "volume*density_in) = {:.1f}".format(
  19. density_ex*density_in*volume**2))
  20. [print("{:s}: {:.1f}".format(label, np.mean(conn.get_number_of_neighbors()))) for label, conn in zip(
  21. labels, ex_ex_connections)]
  22. print()
  23. conn = ex_ex_connections[0]
  24. distance_step = 20
  25. max_distance = model["inhibitory_neurons"]["long_axis"]*2
  26. bins = np.arange(0, max_distance, distance_step)
  27. offsets= [-2, 2]
  28. bin_width = 1
  29. for conn, label, off in zip(ex_ex_connections, labels, offsets):
  30. assert isinstance(conn, RecurrentInhibition)
  31. distances = conn.get_distances_to_neighbors()
  32. print(label)
  33. print(len(distances))
  34. print(np.mean(distances))
  35. print(np.min(distances))
  36. print(np.max(distances))
  37. print(np.std(distances))
  38. distance_histo, _ = np.histogram(distances, bins)
  39. print(np.sum(distance_histo))
  40. print()
  41. #plt.bar(bins[:-1] + off, distance_histo, width=0.2, label=label)
  42. #plt.legend()
  43. #plt.show()
  44. exit()
  45. #print(volume/float(v_x)**3*number_of_excitatory_neurons)
  46. #print([np.sum(c)/number_of_inhibitory_neurons for c in connectivities])
  47. # What could I analyse?
  48. # distance dependence of connectivity
  49. def get_recurrent_inhibition(in_ex_connectivity):
  50. n_ex = in_ex_connectivity.shape[1]
  51. ex_ex_connectivity = np.zeros((n_ex, n_ex))
  52. for idx in range(n_ex):
  53. connected_interneuron_indices = np.where(in_ex_connectivity[:, idx] == 1)[0]
  54. connected_interneurons = in_ex_connectivity[connected_interneuron_indices, :]
  55. ex_ex_connectivity[idx,:] = np.sum(connected_interneurons, axis=0)
  56. return ex_ex_connectivity
  57. ex_ex_conns = [get_recurrent_inhibition(c) for c in connectivities]
  58. print([np.sum(c) for c in ex_ex_conns])
  59. print([np.mean(np.diag(c)) for c in ex_ex_conns])
  60. bins = np.arange(10)
  61. offsets= [-0.2, 0.2]
  62. labels=["polar", "circular"]
  63. for c, off, l in zip(ex_ex_conns, offsets, labels):
  64. hist, bins = np.histogram(c, bins=bins)
  65. print(bins.shape)
  66. print(hist.shape)
  67. plt.bar(bins[2:]+off-1, hist[1:], width=0.2, label=l )
  68. plt.legend()
  69. plt.show()
  70. exit()
  71. # in-degree and out-degree
  72. # connectivity distribution of excitatory pairs