Skip to content

Commit b33c4d7

Browse files
authored
Merge pull request #157 from lungd/pass_dt_to_c302nrnsimulation
Pass dt to C302NRNSimulation
2 parents 41ccd97 + 8c08581 commit b33c4d7

File tree

4 files changed

+31
-9
lines changed

4 files changed

+31
-9
lines changed

inc/owSignalSimulator.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353

5454
class SignalSimulator: public owINeuronSimulator{
5555
public:
56-
SignalSimulator(const std::string & simFileName = "main_sim", const std::string & simClassName = "MuscleSimulation");
56+
SignalSimulator(const std::string & simFileName = "main_sim", const std::string & simClassName = "MuscleSimulation", float timeStep=0.005);
5757
std::vector<float> run();
5858
~SignalSimulator();
5959
};

main_sim.py

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,9 @@ def __init__(self,increment=1.0):
120120
self.increment = increment
121121
self.step = 0
122122

123+
def set_timestep(self, dt):
124+
pass
125+
123126
def run(self, skip_to_time=0, do_plot = True):
124127
self.contraction_array = parallel_waves(step = self.step)
125128
self.step += self.increment
@@ -147,15 +150,25 @@ class C302NRNSimulation():
147150
def __init__(self, tstop=100, dt=0.005, activity_file=None, verbose=True):
148151

149152
#from LEMS_c302_C1_Full_nrn import NeuronSimulation
150-
from LEMS_c302_nrn import NeuronSimulation
153+
#from LEMS_c302_nrn import NeuronSimulation
151154

152-
import neuron
153-
self.h = neuron.h
155+
#import neuron
156+
#self.h = neuron.h
154157

158+
self.tstop = tstop
155159
self.verbose = verbose
156160

157-
self.ns = NeuronSimulation(tstop, dt)
158-
print_("Initialised C302NRNSimulation of length %s ms and dt = %s ms..."%(tstop,dt))
161+
#self.ns = NeuronSimulation(tstop, dt)
162+
#print_("Initialised C302NRNSimulation of length %s ms and dt = %s ms..."%(tstop,dt))
163+
164+
def set_timestep(self, dt):
165+
dt = float('{:0.1e}'.format(dt)) * 1000.0 # memory issue fix
166+
from LEMS_c302_nrn import NeuronSimulation
167+
import neuron
168+
self.h = neuron.h
169+
170+
self.ns = NeuronSimulation(self.tstop, dt)
171+
print_("Initialised C302NRNSimulation of length %s ms and dt = %s ms..."%(self.tstop,dt))
159172

160173

161174
def save_results(self):

src/owConfigProperty.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,9 +147,9 @@ owConfigProperty::owConfigProperty(int argc, char **argv)
147147
}
148148

149149
if (simName.compare("") == 0)
150-
simulation = new SignalSimulator("main_sim", pythonClass);
150+
simulation = new SignalSimulator("main_sim", pythonClass, this->timeStep);
151151
else
152-
simulation = new SignalSimulator(simName, pythonClass);
152+
simulation = new SignalSimulator(simName, pythonClass, this->timeStep);
153153
} else {
154154
simulation =
155155
new owNeuronSimulator(1, this->timeStep, nrnSimulationFileName);

src/owSignalSimulator.cpp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@
4646
#include "owSignalSimulator.h"
4747

4848
SignalSimulator::SignalSimulator(const std::string &simFileName,
49-
const std::string &simClassName) {
49+
const std::string &simClassName,
50+
float timeStep) {
5051

5152
// char pyClass[] = "SiberneticNEURONWrapper";
5253
// char pyClass[] = "C302Simulation";
@@ -81,6 +82,14 @@ SignalSimulator::SignalSimulator(const std::string &simFileName,
8182
pInstance = PyObject_CallObject(pClass, nullptr);
8283
if (PyErr_Occurred())
8384
PyErr_Print();
85+
PyObject *dt = Py_BuildValue("f", timeStep); // Create tuple of arguments for initialization
86+
PyObject *pFuncName = Py_BuildValue("s", "set_timestep");
87+
//pInstance = PyObject_CallMethod(pInstance, "set_timestep", "(f)", timeStep);
88+
PyObject_CallMethodObjArgs(pInstance, pFuncName, dt, nullptr);
89+
if (PyErr_Occurred())
90+
PyErr_Print();
91+
Py_DECREF(dt);
92+
Py_DECREF(pFuncName);
8493
std::cout << "Python muscle signal generator class: " << simClassName
8594
<< " loaded!" << std::endl;
8695
} else {

0 commit comments

Comments
 (0)