Skip to content

Commit e27c90e

Browse files
committed
Add engine PyNeuroMLXppEngine
1 parent 69e8e97 commit e27c90e

File tree

5 files changed

+77
-0
lines changed

5 files changed

+77
-0
lines changed

.github/workflows/ci.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ jobs:
5050
- Py_neuroConstruct
5151
- pyNeuroML
5252
- pyNeuroML_validate_sbml
53+
- pyNEURON_XPP_LEMS
5354
- jNeuroML_Moose
5455
- MOOSE:3.1.5
5556
- XPP

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,3 +124,5 @@ report*.txt
124124
arm64
125125
/*ken.sh
126126
/utilities/tests/LEMS_NML2_Ex9_FN.ode
127+
/utilities/tests/LEMS_nca.xml
128+
/utilities/tests/nca.model.xml

omv/engines/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
from omv.engines.pyneuroconstruct import PyneuroConstructEngine
4545
from omv.engines.pyneuroml_ import PyNeuroMLEngine
4646
from omv.engines.pyneuromlvalidatesbml import PyNeuroMLValidateSBMLEngine
47+
from omv.engines.pyneuromlxpp import PyNeuroMLXppEngine
4748

4849

4950
OMVEngines = {

omv/engines/pyneuromlxpp.py

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import os
2+
import subprocess as sp
3+
4+
from omv.common.inout import inform, trim_path, check_output
5+
from omv.engines.engine import EngineExecutionError
6+
from omv.engines.pyneuroml_ import PyNeuroMLEngine
7+
from omv.engines.engine import PATH_DELIMITER
8+
from omv.engines.utils import resolve_paths
9+
10+
class PyNeuroMLXppEngine(PyNeuroMLEngine):
11+
name = "pyNEURON_XPP_LEMS"
12+
13+
@staticmethod
14+
def is_installed():
15+
pynml_ver = PyNeuroMLEngine.is_installed()
16+
if not pynml_ver:
17+
return False
18+
else:
19+
return pynml_ver
20+
21+
22+
@staticmethod
23+
def install(version):
24+
if not PyNeuroMLEngine.is_installed(): PyNeuroMLEngine.install(version)
25+
26+
27+
def run(self):
28+
try:
29+
30+
#pynml = PyNeuroMLEngine.get_executable() #could implement more flexible way to find the executeable
31+
cmds = ["pynml-xpp"]
32+
cmds.append(self.modelpath)
33+
cmds.append('-lems')
34+
cmds.append('-run')
35+
36+
inform(
37+
"Running with %s, using: %s..." % (PyNeuroMLXppEngine.name, cmds),
38+
indent=1,
39+
)
40+
self.stdout = check_output(
41+
cmds,
42+
cwd=os.path.dirname(self.modelpath)
43+
)
44+
inform(
45+
"Success with running ",
46+
PyNeuroMLXppEngine.name,
47+
indent=1,
48+
verbosity=1,
49+
)
50+
self.returncode = 0
51+
except sp.CalledProcessError as err:
52+
inform("Error with ", PyNeuroMLXppEngine.name, indent=1, verbosity=1)
53+
self.returncode = err.returncode
54+
self.stdout = err.output
55+
raise EngineExecutionError
56+
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
target: nca.ode
2+
engine: pyNEURON_XPP_LEMS
3+
4+
mep: .test.xpp.mep
5+
experiments:
6+
spikes:
7+
observables:
8+
spike times:
9+
file:
10+
path: output.dat
11+
columns: [0,1]
12+
scaling: [1, 1]
13+
spike detection:
14+
method: threshold
15+
threshold: 0
16+
tolerance: 0.00
17+

0 commit comments

Comments
 (0)