2 import matplotlib.pyplot as plt
3 import matplotlib.ticker as mtick
7 exec(open("conf.py").read())
11 Format number to string.
14 return str(num)[:18].zfill(18)
17 def wm_recurrent_function(x):
21 def inputs_function(x):
25 def noise_decision_function(t):
26 return np.random.normal(0.0, noise_decision)
29 def noise_bias_function(t):
30 return np.random.normal(0.0, noise_wm)
34 return time_scale if t > t_cue else 0
37 def decision_function(x):
38 return 1.0 if x[0] + x[1] > 0.0 else -1.0
43 Base class for alpha receptors. Not to be used directly.
47 self.x = np.logspace(0, 3, steps)
48 self.y = 1 / (1 + (999 * np.exp(-0.1233 * (self.x / self.offset))))
53 for i in range(steps):
55 self.gain.append(1 + self.gaind * y)
56 self.bias.append(1 + self.biasd * y)
61 except FileExistsError:
64 out = f"./out/{self.__class__.__name__}"
66 plt.plot(self.x, self.y)
68 plt.xlabel("Norepinephrine concentration (nM)")
69 plt.ylabel("Activity (%)")
70 plt.title("Norepinepherine Concentration vs Neuron Activity in " +
73 plt.vlines(self.ki, 0, 1, linestyles="dashed")
74 plt.text(1.1 * self.ki, 0.1, "Affinity")
76 plt.hlines(0.5, 0, 1000, linestyles="dashed")
77 plt.text(1, 0.51, "50%")
80 plt.gca().yaxis.set_major_formatter(mtick.PercentFormatter())
83 plt.savefig(f"{out}-norep-activity.png", dpi=1000)
85 #######################################################################
88 plt.plot(self.x, self.gain)
90 plt.xlabel("Norepinephrine concentration (nM)")
92 plt.title(f"Concentration vs Gain in {self.pretty}")
95 plt.savefig(f"{out}-concentration-gain.png", dpi=1000)
97 #######################################################################
100 plt.plot(self.x, self.bias)
102 plt.xlabel("Norepinephrine concentration (nM)")
104 plt.title("Concentration vs Bias in " + self.pretty)
107 plt.savefig(f"{out}-concentration-bias.png", dpi=1000)
110 for i in range(steps):
111 print(f"{self.__class__.__name__}, gain: {fmt_num(self.gain[i])}, bias: {fmt_num(self.bias[i])}")
112 with nengo.Network() as net:
114 time_node = nengo.Node(output=time_function)
115 noise_wm_node = nengo.Node(output=noise_bias_function)
116 noise_decision_node = nengo.Node(
117 output=noise_decision_function)
120 wm = nengo.Ensemble(neurons_wm, 2)
121 wm.gain = np.full(wm.n_neurons, self.gain[i])
122 wm.bias = np.full(wm.n_neurons, self.bias[i])
123 decision = nengo.Ensemble(neurons_decide, 2)
124 inputs = nengo.Ensemble(neurons_inputs, 2)
125 output = nengo.Ensemble(neurons_decide, 1)
128 nengo.Connection(time_node, inputs[1], synapse=None)
129 nengo.Connection(inputs, wm, synapse=tau_wm,
130 function=inputs_function)
131 wm_recurrent = nengo.Connection(wm, wm, synapse=tau_wm,
132 function=wm_recurrent_function)
133 nengo.Connection(noise_wm_node, wm.neurons, synapse=tau_wm,
134 transform=np.ones((neurons_wm, 1)) * tau_wm)
135 wm_to_decision = nengo.Connection(
136 wm[0], decision[0], synapse=tau)
137 nengo.Connection(noise_decision_node,
138 decision[1], synapse=None)
139 nengo.Connection(decision, output, function=decision_function)
142 # probes_wm = nengo.Probe(wm[0], synapse=0.01, sample_every=dt_sample)
143 # probes_spikes = nengo.Probe(wm.neurons, 'spikes',
144 # sample_every=dt_sample)
145 # probe_output = nengo.Probe(output, synapse=None, same_every=dt_sample)
148 with nengo.Simulator(net, dt=dt, progress_bar=False) as sim:
149 sim.run(t_cue + t_delay)
154 Subclass of Alpha representing an alpha1 receptor.
160 self.pretty = "α1 Receptor"
168 Subclass of Alpha representing an alpha2 receptor.
174 self.pretty = "α2 Receptor"
181 plt.style.use("ggplot") # Nice looking and familiar style
191 if __name__ == "__main__":