def test_simulation_theory(self): reset_brian2() t = 3000 * ms dt = 0.01 * ms n = 100 poisson = MFPoissonPopulation(n, n * 10 * Hz) pop = MFLinearPopulation( n, { PP.GM: 10 * nsiemens, PP.VL: 0 * mV, PP.CM: 5 * nfarad, PP.VTHR: 0 * mV, PP.VRES: 0 * mV, PP.TAU_RP: 15 * ms }) syn = MFLinearNMDAInput( poisson, pop, { IP.GM: 10 * nsiemens, IP.VREV: 0 * mV, IP.TAU: 20 * ms, IP.TAU_NMDA: 30 * ms, IP.BETA: 1, IP.GAMMA: 1, }) system = MFSystem(pop, poisson) solver = MFSolver.rates_voltages(system, solver='mse') solver.run() theory = syn.g_dyn() / syn.origin.n m = StateMonitor(syn.brian2, syn.post_variable_name, record=range(100)) defaultclock.dt = dt net = system.collect_brian2_network(m) net.run(t) stable_t = int(t / dt * 0.1) simulation = m.__getattr__(syn.post_variable_name)[:, stable_t:] simulation_mean = np.mean(simulation) print(simulation) assert np.isclose(theory, simulation_mean, rtol=0.5, atol=0.5)
def test_simulation_theory(self): reset_brian2() t = 3000 * ms dt = 0.01 * ms n = 100 alpha = 0.5 poisson = MFPoissonPopulation(n, n * 10 * Hz) pop = MFLinearPopulation( n, { PP.GM: 10 * nsiemens, PP.VL: 0 * mV, PP.CM: 5 * nfarad, PP.VTHR: 0 * mV, PP.VRES: 0 * mV, PP.TAU_RP: 15 * ms }) syn = MFLinear3TSInput( poisson, pop, { IP.GM: 10 * nsiemens, IP.VREV: 0 * mvolt, IP.TAU: 0 * ms, IP.TAU_RISE: 2 * ms, IP.TAU_D1: 20 * ms, IP.TAU_D2: 30 * ms, IP.ALPHA: alpha }) system = MFSystem(pop, poisson) solver = MFSolver.rates_voltages(system, solver='mse') solver.run() theory = syn.g_dyn() / syn.origin.n print(syn.brian2) m1 = StateMonitor(syn.brian2, syn.post_variable_name[0], record=range(100)) m2 = StateMonitor(syn.brian2, syn.post_variable_name[1], record=range(100)) m3 = StateMonitor(syn.brian2, syn.post_variable_name[2], record=range(100)) m4 = StateMonitor(syn.brian2, syn.post_variable_name[3], record=range(100)) defaultclock.dt = dt net = system.collect_brian2_network(m1, m2, m3, m4) net.run(t) stable_t = int(t / dt * 0.1) simulation_1 = m1.__getattr__(syn.post_variable_name[0])[:, stable_t:] simulation_mean_1 = np.mean(simulation_1) simulation_2 = m2.__getattr__(syn.post_variable_name[1])[:, stable_t:] simulation_mean_2 = np.mean(simulation_2) simulation_3 = m3.__getattr__(syn.post_variable_name[2])[:, stable_t:] simulation_mean_3 = np.mean(simulation_3) simulation_4 = m4.__getattr__(syn.post_variable_name[3])[:, stable_t:] simulation_mean_4 = np.mean(simulation_4) simulation_mean = alpha * simulation_mean_1 + ( 1 - alpha) * simulation_mean_2 + -alpha * simulation_mean_3 - ( 1 - alpha) * simulation_mean_4 assert np.isclose(theory, simulation_mean, rtol=0.5, atol=0.5)