12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- import matplotlib.pyplot as plt
- import pandas
- from pypet import Trajectory
- from pypet.brian2 import Brian2MonitorResult
- from scripts.competition_gain.run_micro_network import TRAJ_NAME, UNI_DIRECTIONAL, RECIPROCAL, NO_CONNECTIONS
- from scripts.spatial_network.run_entropy_maximisation_orientation_map import DATA_FOLDER
- if __name__ == "__main__":
- traj = Trajectory(TRAJ_NAME, add_time=False, dynamic_imports=Brian2MonitorResult)
- traj.f_load(filename=DATA_FOLDER + TRAJ_NAME + ".hdf5", load_parameters=2, load_results=2)
- firing_rates_frame = pandas.DataFrame(traj.results.summary)
- firing_rates_frame["delta_f"] = firing_rates_frame["f_1"] - firing_rates_frame["f_2"]
- fig, ax = plt.subplots(1, 1, figsize=(3, 4))
- colors = {NO_CONNECTIONS: "grey", RECIPROCAL: "blue", UNI_DIRECTIONAL: "orange"}
- labels = {
- NO_CONNECTIONS: "no inh",
- RECIPROCAL: "hub inh",
- UNI_DIRECTIONAL: "relay inh"
- }
- for architecture in [UNI_DIRECTIONAL, RECIPROCAL, NO_CONNECTIONS]:
- df = firing_rates_frame[firing_rates_frame["architecture"] == architecture]
- ax.plot(df["I_1"].values, df["delta_f"].values, label=labels[architecture], color=colors[architecture], lw=1.5,
- zorder=10)
- ax.plot(df["I_1"].values, df["f_1"].values, linestyle='--', color=colors[architecture], alpha=0.6, zorder=5)
- ax.plot(df["I_1"].values, df["f_2"].values, linestyle=':', color=colors[architecture], alpha=0.6, zorder=5)
- ax.set_xlabel("I$_1$ - I$_2$ (nA)")
- ax.set_ylabel("firing rate (Hz)")
- ax.legend()
- ax.text(0.1, 55, "f$_1$", ha="right", va="bottom")
- ax.text(0.23, 10, "f$_2$", ha="right", va="top")
- ax.text(0.55, 75, "f$_1$-f$_2$", ha="right", va="top")
- fig.tight_layout()
- fig.savefig("../../figures/competition_gain/rate_gain.png", dpi=300)
- N_E = traj.par.network.N_E
- N_I = traj.par.network.N_I
- ex_index_mappings = {
- RECIPROCAL: (lambda idx: N_E + N_I + 2 - idx if idx < int(N_E / 2.0) else N_E - idx),
- UNI_DIRECTIONAL: (lambda idx: N_E + 2 * N_I + 2 - idx if idx < int(N_E / 2.0) else N_E - idx)
- }
- in_index_mappings = {
- RECIPROCAL: (lambda idx: int(N_E / 2.0) + 2 + idx),
- UNI_DIRECTIONAL: (lambda idx: N_E + 2 * N_I + 2 - int(N_E / 2.0) - idx)
- }
- for input_to_1 in firing_rates_frame["I_1"].values:
- df = firing_rates_frame[
- (firing_rates_frame["I_1"] == input_to_1) & (firing_rates_frame["architecture"] != NO_CONNECTIONS)]
- fig, axes = plt.subplots(2, 1, sharex=True)
- for architecture, run_idx in zip(df["architecture"].values, df["run"].values):
- ax_idx = 0 if architecture == RECIPROCAL else 1
- ax = axes[ax_idx]
- traj.v_idx = run_idx
- neuron_indices = traj.results.crun.spikes.e.i
- spike_times = traj.results.crun.spikes.e.t
- ax.plot(spike_times*1000, list(map(ex_index_mappings[architecture], neuron_indices)), 'r|')
- if traj.results.crun.spikes.i.num_spikes > 0:
- neuron_indices = traj.results.crun.spikes.i.i
- spike_times = traj.results.crun.spikes.i.t
- ax.plot(spike_times*1000, list(map(in_index_mappings[architecture], neuron_indices)), 'b|')
- ax.set_xlim(0,100)
- ax.yaxis.set_ticks([])
- axes[1].set_xlabel("t (ms)")
- fig.suptitle("I$_1$-I$_2$ = {:.1f} nA".format(input_to_1))
- fig.savefig("../../figures/competition_gain/spike_raster_delta_I_{:.1f}.png".format(input_to_1), dpi=300)
|