def test_timestep_constant(self): rec = Record(self.soma(0.5)) sim = Simulation(constant_timestep=True, dt=1) sim.run(100) r1 = rec.as_numpy('v') sim = Simulation(constant_timestep=False, dt=1) sim.run(100) r2 = rec.as_numpy('v') sim = Simulation(constant_timestep=False, dt=10) sim.run(100) r3 = rec.as_numpy('v') sim = Simulation(constant_timestep=False, dt=0.0001) sim.run(100) r4 = rec.as_numpy('v') sim.remove_immediate_from_neuron() rec.remove_immediate_from_neuron() self.assertEqual(101, r1.size) self.assertEqual(188, r2.size) self.assertEqual(180, r3.size) self.assertEqual(189, r4.size)
def test_add_netcon_and_make_event_separately(self): g1 = self.cell.filter_synaptic_group(mod_name="Exp2Syn", tag="aa") nc = g1.add_netcon(source=None) exp2syn_rec = Record(g1['Exp2Syn'][0], variables='i') expsyn_rec = Record(g1['ExpSyn'][0], variables='i') sim = Simulation() sim.run(1) nc['Exp2Syn'][0].make_event(10) nc['ExpSyn'][0].make_event(20) sim.run(100) exp2syn_np = exp2syn_rec.as_numpy('i') stim_time_exp2syn = exp2syn_np.time[(exp2syn_np.records != 0).argmax()] expsyn_np = expsyn_rec.as_numpy('i') stim_time_expsyn = expsyn_np.time[(expsyn_np.records != 0).argmax()] self.assertEqual(12.05, round(stim_time_exp2syn, 4)) self.assertEqual(22.025, round(stim_time_expsyn, 4)) # Remove variables and clear NEURON nc['Exp2Syn'][0].remove_immediate_from_neuron() nc['ExpSyn'][0].remove_immediate_from_neuron() nc = {} g1.remove_immediate_from_neuron() exp2syn_rec.remove_immediate_from_neuron() expsyn_rec.remove_immediate_from_neuron() sim.remove_immediate_from_neuron()
def test_iclamp_after_sim(self): """ IClamp works in a regular way after simulation run. in this case (amplitude 3 pA) we have spike at the soma. However IClamp delay is in the absolute time. """ # Record rec = Record(self.soma(0.5)) # Run sim = Simulation(init_v=-70, warmup=20) sim.run(1) # IClamp to soma iclamp = IClamp(segment=self.soma(0.5)) iclamp.stim(delay=25, dur=3, amp=3) sim.run(100) r = rec.as_numpy(variable="v") sim.remove_immediate_from_neuron() rec.remove_immediate_from_neuron() iclamp.remove_immediate_from_neuron() # Make assertions self.assertEqual(4051, r.size) self.assertEqual(34.3815, round(r.records.max(), 4)) self.assertEqual(-75.3247, round(r.records.min(), 4)) self.assertEqual(330, r.records.argmax()) # time in ms of max mV value self.assertEqual(28, round(r.time[r.records.argmax()], 4))
def test_netstim_after_sim(self): """ NetStim created after simulation run has no effect, it won't go on this simulation at all. However NetStim start is in the absolute time. """ # Record rec = Record(self.soma(0.5)) # Run sim = Simulation(init_v=-70, warmup=20) sim.run(1) # Netstim to synapse stim = NetStimCell("stim").add_netstim(start=25, number=10, interval=2) self.cell.add_synapse(source=stim, netcon_weight=0.5, mod_name="ExpSyn", delay=1, seg=self.apic1(0.5)) sim.run(100) r = rec.as_numpy(variable="v") # Make assertions self.assertEqual(4051, r.size) self.assertEqual(-67.1917, round(r.records.max(), 4)) self.assertEqual(-70.0, round(r.records.min(), 4)) self.assertEqual(3, r.records.argmax()) # time in ms of max mV value self.assertEqual(6, r.time[r.records.argmax()]) stim.remove_immediate_from_neuron() sim.remove_immediate_from_neuron() rec.remove_immediate_from_neuron()
def test_netcon_event_after_sim(self): syn = self.cell.add_synapse(source=None, netcon_weight=1.0, mod_name="ExpSyn", delay=1, seg=self.apic1(0.5)) # Record rec = Record(self.soma(0.5)) # Run sim = Simulation(init_v=-70, warmup=20) sim.run(1) syn.make_event(50) sim.run(100) r = rec.as_numpy(variable="v") syn.remove_immediate_from_neuron() sim.remove_immediate_from_neuron() rec.remove_immediate_from_neuron() # Make assertions self.assertEqual(4051, r.size) self.assertEqual(34.4582, round(r.records.max(), 4)) self.assertEqual(-75.3478, round(r.records.min(), 4)) self.assertEqual(2159, r.records.argmax()) # time in ms of max mV value self.assertEqual(73.725, round(r.time[r.records.argmax()], 4))
def test_netstim_before_sim(self): """ NetStim run in a regular way before Simulation run, in this cale (netcon weight=1.0) we have spike of the soma. However NetStim start is in the absolute time. """ # Netstim to synapse stim = NetStimCell("stim").add_netstim(start=25, number=10, interval=2) self.cell.add_synapse(source=stim, netcon_weight=1.0, mod_name="ExpSyn", delay=1, seg=self.apic1(0.5)) # Record rec = Record(self.soma(0.5)) # Run sim = Simulation(init_v=-70, warmup=20) sim.run(1) sim.run(100) r = rec.as_numpy(variable="v") stim.remove_immediate_from_neuron() sim.remove_immediate_from_neuron() rec.remove_immediate_from_neuron() # Make assertions self.assertEqual(4051, r.size) self.assertEqual(34.5205, round(r.records.max(), 4)) self.assertEqual(-75.3053, round(r.records.min(), 4)) self.assertEqual(319, r.records.argmax()) # time in ms of max mV value self.assertEqual(27.725, round(r.time[r.records.argmax()], 4))
def test_warmup(self): rec = Record(self.soma(0.5)) value_error = False try: sim = Simulation(warmup=-100) sim.run(100) r1 = rec.as_numpy('v') except ValueError: value_error = True self.assertTrue(value_error) sim = Simulation(warmup=100, dt=1) sim.run(100) r2 = rec.as_numpy('v') sim = Simulation(warmup=100, dt=1, warmup_dt=1) sim.run(100) r3 = rec.as_numpy('v') sim.remove_immediate_from_neuron() rec.remove_immediate_from_neuron() self.assertEqual(111, r2.size) self.assertEqual(201, r3.size)
def setUpClass(cls): morpho_path = os.path.join(path, "..", "commons/morphologies/asc/cell2.asc") # Create cell cell = Cell(name="cell") cell.load_morpho(filepath=morpho_path) cell.insert("pas") cell.insert("hh") soma = cell.filter_secs("soma") dend = cell.filter_secs("apic[10]") syn = cell.add_synapse(source=None, mod_name="ExpSyn", seg=dend(0.5)) # Prepare EPSP and AP (IClamp) protocols experiment = Experiment(iti=40) experiment.add_epsp(num=3, synapse=syn, init=20, interval=20, weight=0.02) experiment.add_iclamp(num=3, segment=soma(0.5), init=60, interval=20, dur=3, amp=1.6) experiment.build() # Prepare plots rec = Record([soma(0.5), dend(0.5)], variables='v') # Run sim = Simulation(init_v=-70, warmup=20, with_neuron_gui=False, constant_timestep=True) sim.run(runtime=100) cls.v_soma = rec.as_numpy('v', segment_name=soma(.5).name) cls.v_apic = rec.as_numpy('v', segment_name=dend(.5).name) syn.remove_immediate_from_neuron() soma.remove_immediate_from_neuron() dend.remove_immediate_from_neuron() rec.remove_immediate_from_neuron() experiment.remove_immediate_from_neuron() cell.remove_immediate_from_neuron() sim.remove_immediate_from_neuron() cls.sections_left = len(list(h.allsec()))
def test_init_v(self): rec = Record(self.soma(0.5)) sim = Simulation(init_v=-100) sim.run(100) r1 = rec.as_numpy('v') sim = Simulation(init_v=100) sim.run(100) r2 = rec.as_numpy('v') sim.remove_immediate_from_neuron() rec.remove_immediate_from_neuron() self.assertEqual(-100, r1.records[0]) self.assertEqual(100, r2.records[0])
def test_dt(self): rec = Record(self.soma(0.5)) sim = Simulation(dt=10) sim.run(100) r1 = rec.as_numpy('v') sim = Simulation(dt=0.01) sim.run(100) r2 = rec.as_numpy('v') sim.remove_immediate_from_neuron() rec.remove_immediate_from_neuron() self.assertEqual(11, r1.size) self.assertEqual(10001, r2.size)
def test_stim_syns(self): gs = self.cell.filter_synaptic_group() gs0_exp2syn_rec = Record(gs[0]['Exp2Syn'][0], variables='i') gs0_expsyn_rec = Record(gs[0]['ExpSyn'][0], variables='i') gs1_exp2syn_rec = Record(gs[1]['Exp2Syn'][0], variables='i') gs1_expsyn_rec = Record(gs[1]['ExpSyn'][0], variables='i') sim = Simulation() sim.run(1) gs[0].make_event(10) gs[1].make_event(20) sim.run(100) # Test stim time of synaptic group 1 gs0_exp2syn_np = gs0_exp2syn_rec.as_numpy('i') stim_time_gs0_exp2syn = gs0_exp2syn_np.time[(gs0_exp2syn_np.records != 0).argmax()] gs0_expsyn_np = gs0_expsyn_rec.as_numpy('i') stim_time_gs0_expsyn = gs0_expsyn_np.time[(gs0_expsyn_np.records != 0).argmax()] self.assertEqual(round(stim_time_gs0_exp2syn, 1), round(stim_time_gs0_expsyn, 1)) # Test stim time of synaptic group 2 gs1_exp2syn_np = gs1_exp2syn_rec.as_numpy('i') stim_time_gs1_exp2syn = gs1_exp2syn_np.time[(gs1_exp2syn_np.records != 0).argmax()] gs1_expsyn_np = gs1_expsyn_rec.as_numpy('i') stim_time_gs1_expsyn = gs1_expsyn_np.time[(gs1_expsyn_np.records != 0).argmax()] self.assertEqual(round(stim_time_gs1_exp2syn, 1), round(stim_time_gs1_expsyn, 1)) # Test values of mV in soma self.assertEqual(31.3285, round(gs0_exp2syn_np.records.max(), 4)) self.assertEqual(-61.309, round(gs0_exp2syn_np.records.min(), 4)) # Remove variables and clear NEURON gs0_exp2syn_rec.remove_immediate_from_neuron() gs0_expsyn_rec.remove_immediate_from_neuron() gs1_exp2syn_rec.remove_immediate_from_neuron() gs1_expsyn_rec.remove_immediate_from_neuron() gs[0].remove_immediate_from_neuron() gs[1].remove_immediate_from_neuron() sim.remove_immediate_from_neuron()