From 73772a28ab83ed6e546db697b790a45f176db0fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elodie=20Legou=C3=A9e?= Date: Fri, 8 Dec 2017 10:39:02 +0100 Subject: [PATCH] Adding get_native_parameters() method for Brian and modification of "times" by "_times" --- pyNN/brian/standardmodels/electrodes.py | 27 +++++++++++++++---------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/pyNN/brian/standardmodels/electrodes.py b/pyNN/brian/standardmodels/electrodes.py index 2579781ac..4754ccccb 100644 --- a/pyNN/brian/standardmodels/electrodes.py +++ b/pyNN/brian/standardmodels/electrodes.py @@ -56,6 +56,9 @@ def set_native_parameters(self, parameters): object.__setattr__(self, name, value) self._reset() + def get_native_parameters(self): + return ParameterSpace(dict((k, self.__getattr__(k)) for k in self.get_native_names())) + def _reset(self): # self.i reset to 0 only at the start of a new run; not for continuation of existing runs if not hasattr(self, 'running') or self.running == False: @@ -75,14 +78,14 @@ def inject_into(self, cell_list): def _update_current(self): # check if current timestamp is within dt/2 of target time; Brian uses seconds as unit of time - if self.running and abs(simulator.state.t - self.times[self.i] * 1e3) < (simulator.state.dt/2.0): + if self.running and abs(simulator.state.t - self._times[self.i] * 1e3) < (simulator.state.dt/2.0): for cell, idx in zip(self.cell_list, self.indices): if not self._is_playable: cell.parent.brian_group.i_inj[idx] = self.amplitudes[self.i] * ampere else: - cell.parent.brian_group.i_inj[idx] = self._compute(self.times[self.i]) * ampere + cell.parent.brian_group.i_inj[idx] = self._compute(self._times[self.i]) * ampere self.i += 1 - if self.i >= len(self.times): + if self.i >= len(self._times): self.running = False if self._is_playable: # ensure that currents are set to 0 after t_stop @@ -94,7 +97,8 @@ def _record(self): simulator.state.network.add(self.i_state_monitor) def _get_data(self): - return numpy.array((self.i_state_monitor.times / ms, self.i_state_monitor[0] / nA)) + return numpy.array((self.i_state_monitor._times / ms, self.i_state_monitor[0] / nA)) + class StepCurrentSource(BrianCurrentSource, electrodes.StepCurrentSource): __doc__ = electrodes.StepCurrentSource.__doc__ @@ -103,6 +107,7 @@ class StepCurrentSource(BrianCurrentSource, electrodes.StepCurrentSource): ('amplitudes', 'amplitudes', nA), ('times', 'times', ms) ) + _is_computed = False _is_playable = False @@ -128,7 +133,7 @@ def __init__(self, **parameters): def _generate(self): # Note: Brian uses seconds as unit of time temp_num_t = len(numpy.arange(self.start, self.stop + simulator.state.dt * 1e-3, simulator.state.dt * 1e-3)) - self.times = numpy.array([self.start+(i*simulator.state.dt*1e-3) for i in range(temp_num_t)]) + self._times = numpy.array([self.start+(i*simulator.state.dt*1e-3) for i in range(temp_num_t)]) def _compute(self, time): # Note: Brian uses seconds as unit of time; frequency is specified in Hz; thus no conversion required @@ -152,14 +157,14 @@ def __init__(self, **parameters): def _generate(self): if self.start == 0: - self.times = [self.start, self.stop] + self._times = [self.start, self.stop] self.amplitudes = [self.amplitude, 0.0] else: - self.times = [0.0, self.start, self.stop] + self._times = [0.0, self.start, self.stop] self.amplitudes = [0.0, self.amplitude, 0.0] # ensures proper handling of changes in parameters on the fly if self.start < simulator.state.t*1e-3 < self.stop: - self.times.insert(-1, simulator.state.t*1e-3) + self._times.insert(-1, simulator.state.t*1e-3) self.amplitudes.insert(-1, self.amplitude) if (self.start==0 and self.i==2) or (self.start!=0 and self.i==3): self.i -= 1 @@ -184,8 +189,8 @@ def __init__(self, **parameters): def _generate(self): temp_num_t = len(numpy.arange(self.start, self.stop, max(self.dt, simulator.state.dt * 1e-3))) - self.times = numpy.array([self.start+(i*max(self.dt, simulator.state.dt * 1e-3)) for i in range(temp_num_t)]) - self.times = numpy.append(self.times, self.stop) + self._times = numpy.array([self.start+(i*max(self.dt, simulator.state.dt * 1e-3)) for i in range(temp_num_t)]) + self._times = numpy.append(self._times, self.stop) def _compute(self, time): - return self.mean + self.stdev * numpy.random.randn() + return self.mean + self.stdev * numpy.random.randn() \ No newline at end of file