2 import matplotlib.pyplot as plt
3 import matplotlib.ticker as mtick
7 exec(open("conf.py").read())
9 def wm_recurrent_function(x):
13 def inputs_function(x):
17 def noise_decision_function(t):
18 return np.random.normal(0.0, noise_decision)
21 def noise_bias_function(t):
22 return np.random.normal(0.0, noise_wm)
26 return time_scale if t > t_cue else 0
29 def decision_function(x):
30 return 1.0 if x[0] + x[1] > 0.0 else -1.0
35 Base class for alpha receptors. Not to be used directly.
39 self.x = np.logspace(0, 3, steps)
40 self.y = 1 / (1 + (999 * np.exp(-0.1233 * (self.x / self.offset))))
45 for i in range(steps):
47 self.gain.append(1 + self.gaind * y)
48 self.bias.append(1 + self.biasd * y)
53 except FileExistsError:
56 out = f"./out/{self.__class__.__name__}"
57 plt.plot(self.x, self.y)
59 plt.xlabel("Norepinephrine concentration (nM)")
60 plt.ylabel("Activity (%)")
61 plt.title("Norepinepherine Concentration vs Neuron Activity in " +
64 plt.vlines(self.ki, 0, 1, linestyles="dashed")
65 plt.text(1.1 * self.ki, 0.1, "Affinity")
67 plt.hlines(0.5, 0, 1000, linestyles="dashed")
68 plt.text(1, 0.51, "50%")
71 plt.gca().yaxis.set_major_formatter(mtick.PercentFormatter())
74 plt.savefig(f"{out}-norep-activity.png", dpi=1000)
76 #######################################################################
78 plt.plot(self.x, self.gain)
80 plt.xlabel("Norepinephrine concentration (nM)")
82 plt.title(f"Concentration vs Gain in {self.pretty}")
85 plt.savefig(f"{out}-concentration-gain.png", dpi=1000)
87 #######################################################################
89 plt.plot(self.x, self.bias)
91 plt.xlabel("Norepinephrine concentration (nM)")
93 plt.title("Concentration vs Bias in " + self.pretty)
96 plt.savefig(f"{out}-concentration-bias.png", dpi=1000)
99 with nengo.Network() as net:
101 time_node = nengo.Node(output=time_function)
102 noise_wm_node = nengo.Node(output=noise_bias_function)
103 noise_decision_node = nengo.Node(
104 output=noise_decision_function)
107 wm = nengo.Ensemble(neurons_wm, 2)
108 decision = nengo.Ensemble(neurons_decide, 2)
109 inputs = nengo.Ensemble(neurons_inputs, 2)
110 output = nengo.Ensemble(neurons_decide, 1)
113 nengo.Connection(time_node, inputs[1], synapse=None)
114 nengo.Connection(inputs, wm, synapse=tau_wm,
115 function=inputs_function)
116 wm_recurrent = nengo.Connection(wm, wm, synapse=tau_wm,
117 function=wm_recurrent_function)
118 nengo.Connection(noise_wm_node, wm.neurons, synapse=tau_wm,
119 transform=np.ones((neurons_wm, 1)) * tau_wm)
120 wm_to_decision = nengo.Connection(
121 wm[0], decision[0], synapse=tau)
122 nengo.Connection(noise_decision_node,
123 decision[1], synapse=None)
124 nengo.Connection(decision, output, function=decision_function)
127 #probes_wm = nengo.Probe(
128 # wm[0], synapse=0.01, sample_every=dt_sample)
129 #probes_spikes = nengo.Probe(wm.neurons, 'spikes',
130 # sample_every=dt_sample)
131 #probe_output = nengo.Probe(output, synapse=None,
132 # same_every=dt_sample)
135 with nengo.Simulator(net, dt=dt) as sim:
136 sim.run(t_cue + t_delay)
141 Subclass of Alpha representing an alpha1 receptor.
147 self.pretty = "α1 Receptor"
155 Subclass of Alpha representing an alpha2 receptor.
161 self.pretty = "α2 Receptor"
168 plt.style.use("ggplot") # Nice looking and familiar style
178 if __name__ == "__main__":