OSBModelValidation 0.2.18__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. OSBModelValidation-0.2.18.dist-info/METADATA +184 -0
  2. OSBModelValidation-0.2.18.dist-info/RECORD +98 -0
  3. OSBModelValidation-0.2.18.dist-info/WHEEL +5 -0
  4. OSBModelValidation-0.2.18.dist-info/entry_points.txt +2 -0
  5. OSBModelValidation-0.2.18.dist-info/top_level.txt +1 -0
  6. omv/__init__.py +8 -0
  7. omv/analyzers/__init__.py +21 -0
  8. omv/analyzers/activation.py +24 -0
  9. omv/analyzers/analyzer.py +80 -0
  10. omv/analyzers/dryrun.py +13 -0
  11. omv/analyzers/input_resistance.py +47 -0
  12. omv/analyzers/morphology.py +16 -0
  13. omv/analyzers/rates.py +97 -0
  14. omv/analyzers/resting.py +37 -0
  15. omv/analyzers/spikes.py +113 -0
  16. omv/analyzers/temperature.py +12 -0
  17. omv/analyzers/timeseries.py +57 -0
  18. omv/analyzers/utils/__init__.py +0 -0
  19. omv/analyzers/utils/filenode.py +73 -0
  20. omv/analyzers/utils/timeseries.py +293 -0
  21. omv/autogen.py +106 -0
  22. omv/common/__init__.py +0 -0
  23. omv/common/inout.py +154 -0
  24. omv/engines/__init__.py +53 -0
  25. omv/engines/arbor_.py +57 -0
  26. omv/engines/brian1.py +59 -0
  27. omv/engines/brian2_.py +57 -0
  28. omv/engines/eden_.py +63 -0
  29. omv/engines/engine.py +111 -0
  30. omv/engines/genesis.py +86 -0
  31. omv/engines/getarbor.py +15 -0
  32. omv/engines/getbrian1.py +42 -0
  33. omv/engines/getbrian2.py +17 -0
  34. omv/engines/geteden.py +17 -0
  35. omv/engines/getgenesis.py +56 -0
  36. omv/engines/getjlems.py +20 -0
  37. omv/engines/getjnml.py +48 -0
  38. omv/engines/getlibsbml.py +13 -0
  39. omv/engines/getmoose.py +15 -0
  40. omv/engines/getnest.py +62 -0
  41. omv/engines/getnetpyne.py +52 -0
  42. omv/engines/getneuroconstruct.py +31 -0
  43. omv/engines/getnml2.py +26 -0
  44. omv/engines/getnrn.py +60 -0
  45. omv/engines/getoctave.py +11 -0
  46. omv/engines/getpylems.py +13 -0
  47. omv/engines/getpyneuroml.py +14 -0
  48. omv/engines/getpynn.py +40 -0
  49. omv/engines/jlems.py +48 -0
  50. omv/engines/jneuroml.py +101 -0
  51. omv/engines/jneuromlbrian.py +65 -0
  52. omv/engines/jneuromlbrian2.py +61 -0
  53. omv/engines/jneuromleden.py +61 -0
  54. omv/engines/jneuromlmoose.py +63 -0
  55. omv/engines/jneuromlnetpyne.py +73 -0
  56. omv/engines/jneuromlnetpyne_np2.py +45 -0
  57. omv/engines/jneuromlnetpyne_np4.py +45 -0
  58. omv/engines/jneuromlnrn.py +78 -0
  59. omv/engines/jneuromlpynnnrn.py +75 -0
  60. omv/engines/jneuromlvalidate.py +62 -0
  61. omv/engines/jneuromlvalidatev1.py +58 -0
  62. omv/engines/moose_.py +86 -0
  63. omv/engines/nestsli.py +84 -0
  64. omv/engines/netpyne_.py +120 -0
  65. omv/engines/netpyne__np2.py +47 -0
  66. omv/engines/netpyne__np4.py +47 -0
  67. omv/engines/neuron_.py +205 -0
  68. omv/engines/octave.py +51 -0
  69. omv/engines/pylems.py +57 -0
  70. omv/engines/pylemsnml2.py +59 -0
  71. omv/engines/pynest.py +111 -0
  72. omv/engines/pyneuroconstruct.py +67 -0
  73. omv/engines/pyneuroml_.py +55 -0
  74. omv/engines/pyneuromlvalidatesbml.py +83 -0
  75. omv/engines/pyneuron.py +94 -0
  76. omv/engines/pynn.py +63 -0
  77. omv/engines/pynnbrian1.py +59 -0
  78. omv/engines/pynnbrian2.py +60 -0
  79. omv/engines/pynnnest.py +56 -0
  80. omv/engines/pynnneuroml.py +57 -0
  81. omv/engines/pynnneuron.py +94 -0
  82. omv/engines/utils/__init__.py +21 -0
  83. omv/engines/utils/genesis_utils.g +26 -0
  84. omv/engines/utils/wdir.py +15 -0
  85. omv/experiment.py +18 -0
  86. omv/find_tests.py +126 -0
  87. omv/omt_mep_parser.py +59 -0
  88. omv/omv_util.py +439 -0
  89. omv/parse_omt.py +118 -0
  90. omv/tally.py +112 -0
  91. omv/test/__init__.py +0 -0
  92. omv/test/test_rates.py +38 -0
  93. omv/test/test_types.py +29 -0
  94. omv/validation/__init__.py +0 -0
  95. omv/validation/rx_validator.py +35 -0
  96. omv/validation/utils.py +51 -0
  97. omv/validation/validate.py +53 -0
  98. omv/validation/validate_mep.py +15 -0
@@ -0,0 +1,94 @@
1
+ import subprocess as sp
2
+ from textwrap import dedent
3
+ from omv.engines.utils.wdir import working_dir
4
+ from os.path import dirname
5
+ import sys
6
+
7
+ from omv.engines.neuron_ import NeuronEngine
8
+
9
+ from omv.common.inout import inform, is_verbose, check_output
10
+ from omv.engines.engine import EngineExecutionError
11
+
12
+
13
+ class PyNRNEngine(NeuronEngine):
14
+ name = "PyNEURON"
15
+
16
+ @staticmethod
17
+ def is_installed():
18
+ ret = True
19
+ try:
20
+ inform(
21
+ "Checking whether %s is installed..." % PyNRNEngine.name,
22
+ indent=1,
23
+ verbosity=2,
24
+ )
25
+
26
+ ### Prints to stderr!!
27
+ # ret_str = check_output(['python -c "import neuron; print(neuron.h.nrnversion())"'], shell=True, verbosity=2)
28
+ import neuron
29
+
30
+ ret_str = neuron.h.nrnversion()
31
+
32
+ ret = "v%s" % ret_str.split()[3]
33
+ if is_verbose():
34
+ inform("PyNEURON version %s is correctly installed..." % ret, indent=2)
35
+
36
+ except Exception as err:
37
+ if is_verbose():
38
+ inform("Couldn't import NEURON into Python: ", err, indent=1)
39
+ ret = False
40
+ return ret
41
+
42
+ @staticmethod
43
+ def install(version):
44
+ if not NeuronEngine.is_installed():
45
+ NeuronEngine.install(version) # interpret version as version of NEURON!
46
+ inform("%s installed NEURON..." % PyNRNEngine.name, indent=2, verbosity=1)
47
+
48
+ environment_vars_nrn, path_nrn = NeuronEngine.get_nrn_environment()
49
+
50
+ PyNRNEngine.path = path_nrn
51
+ PyNRNEngine.environment_vars = {}
52
+ PyNRNEngine.environment_vars.update(environment_vars_nrn)
53
+
54
+ inform("PATH: " + PyNRNEngine.path, indent=2, verbosity=1)
55
+ inform("Env vars: %s" % PyNRNEngine.environment_vars, indent=2, verbosity=1)
56
+
57
+ def run(self):
58
+ try:
59
+ self.stdout = NeuronEngine.compile_modfiles(self.modelpath)
60
+ except sp.CalledProcessError as err:
61
+ self.stderr = err.output
62
+ self.returncode = err.returncode
63
+ inform("Error compiling modfiles:", self.stderr, indent=2)
64
+
65
+ with working_dir(dirname(self.modelpath)):
66
+ inform("Running %s on %s..." % (self.name, self.modelpath), indent=1)
67
+ p = sp.Popen(
68
+ ["nrniv", "-python", self.modelpath, "-nogui"],
69
+ stdin=sp.PIPE,
70
+ stdout=sp.PIPE,
71
+ stderr=sp.PIPE,
72
+ )
73
+ cmd = """\
74
+ %s
75
+ """ % (
76
+ "\n".join(self.extra_pars)
77
+ )
78
+ if sys.version_info[0] == 3:
79
+ c = dedent(cmd).encode()
80
+ else:
81
+ c = dedent(cmd)
82
+ stdout, stderr = p.communicate(c)
83
+ # with open('/tmp/omv_test.nrn.stdout', 'w') as f:
84
+ # f.write(stdout)
85
+ self.stdout = str(stdout.decode())
86
+ self.stderr = str(stderr.decode())
87
+
88
+ inform("OUT: %s" % self.stdout, verbosity=1, indent=2)
89
+ inform("ERR: %s" % self.stderr, verbosity=1, indent=2)
90
+ inform("returncode: [%s]" % p.returncode, verbosity=1, indent=2)
91
+
92
+ self.returncode = p.returncode
93
+ if self.returncode != 0:
94
+ raise EngineExecutionError
omv/engines/pynn.py ADDED
@@ -0,0 +1,63 @@
1
+ import os
2
+ import subprocess as sp
3
+
4
+ from omv.common.inout import inform, trim_path, check_output, is_verbose
5
+ from omv.engines.engine import OMVEngine, EngineExecutionError
6
+
7
+
8
+ class PyNNEngine(OMVEngine):
9
+ name = "PyNN"
10
+
11
+ @staticmethod
12
+ def is_installed():
13
+ ret = True
14
+
15
+ inform(
16
+ "Checking whether %s is already installed..." % (PyNNEngine.name),
17
+ indent=1,
18
+ verbosity=1,
19
+ )
20
+ try:
21
+ # ret_str = sp.check_output(['python -c "import pyNN; print(pyNN.__version__)"'], shell=True,stderr=sp.STDOUT)
22
+ import pyNN
23
+
24
+ inform(
25
+ "pyNN version %s is correctly installed..." % pyNN.__version__,
26
+ indent=2,
27
+ verbosity=2,
28
+ )
29
+
30
+ ret = "v%s" % pyNN.__version__
31
+
32
+ except Exception as err:
33
+ inform("Couldn't import pyNN into Python: ", err, indent=1, verbosity=1)
34
+ ret = False
35
+ return ret
36
+
37
+ @staticmethod
38
+ def install(version=None):
39
+ from omv.engines.getpynn import install_pynn
40
+
41
+ home = os.environ["HOME"]
42
+ inform("Will fetch and install pyNN (version info: %s)" % version, indent=2)
43
+ install_pynn(version)
44
+ inform("Done, PyNN is correctly installed...", indent=2)
45
+
46
+ def run(self):
47
+ try:
48
+ inform(
49
+ "Running file %s with %s" % (trim_path(self.modelpath), self.name),
50
+ indent=1,
51
+ )
52
+ self.stdout = check_output(
53
+ ["python", self.modelpath], cwd=os.path.dirname(self.modelpath)
54
+ )
55
+ self.returncode = 0
56
+ except sp.CalledProcessError as err:
57
+ self.returncode = err.returncode
58
+ self.stdout = err.output
59
+ raise EngineExecutionError
60
+ except Exception as err:
61
+ inform("Another error with running %s: " % self.name, err, indent=1)
62
+ self.returncode = -1
63
+ self.stdout = "???"
@@ -0,0 +1,59 @@
1
+ import os
2
+ import subprocess as sp
3
+
4
+ from omv.engines.brian1 import Brian1Engine
5
+ from omv.engines.pynn import PyNNEngine
6
+
7
+ from omv.common.inout import inform, trim_path, check_output, is_verbose
8
+ from omv.engines.engine import EngineExecutionError
9
+
10
+
11
+ class PyNNBrian1Engine(PyNNEngine):
12
+ name = "PyNN_Brian1"
13
+ python3_compatible = Brian1Engine.python3_compatible
14
+
15
+ @staticmethod
16
+ def is_installed():
17
+ if is_verbose():
18
+ inform(
19
+ "Checking whether %s is installed..." % PyNNBrian1Engine.name, indent=1
20
+ )
21
+ return PyNNEngine.is_installed() and Brian1Engine.is_installed()
22
+
23
+ @staticmethod
24
+ def install(version):
25
+ if not Brian1Engine.is_installed():
26
+ Brian1Engine.install(version) # interpret version as version of Brian!
27
+ inform(
28
+ "%s installed Brian..." % PyNNBrian1Engine.name, indent=2, verbosity=1
29
+ )
30
+ if not PyNNEngine.is_installed():
31
+ PyNNEngine.install(None)
32
+ inform(
33
+ "%s installed PyNN..." % PyNNBrian1Engine.name, indent=2, verbosity=1
34
+ )
35
+
36
+ PyNNBrian1Engine.path = PyNNEngine.path + ":" + Brian1Engine.path
37
+ PyNNBrian1Engine.environment_vars = {}
38
+ PyNNBrian1Engine.environment_vars.update(PyNNEngine.environment_vars)
39
+ PyNNBrian1Engine.environment_vars.update(Brian1Engine.environment_vars)
40
+ inform("PATH: " + PyNNBrian1Engine.path)
41
+
42
+ def run(self):
43
+ try:
44
+ inform(
45
+ "Running file %s with %s" % (trim_path(self.modelpath), self.name),
46
+ indent=1,
47
+ )
48
+ self.stdout = check_output(
49
+ ["python", self.modelpath, "brian"], cwd=os.path.dirname(self.modelpath)
50
+ )
51
+ self.returncode = 0
52
+ except sp.CalledProcessError as err:
53
+ self.returncode = err.returncode
54
+ self.stdout = err.output
55
+ raise EngineExecutionError
56
+ except Exception as err:
57
+ inform("Another error with running %s: " % self.name, err, indent=1)
58
+ self.returncode = -1
59
+ self.stdout = "???"
@@ -0,0 +1,60 @@
1
+ import os
2
+ import subprocess as sp
3
+
4
+ from omv.engines.brian2_ import Brian2Engine
5
+ from omv.engines.pynn import PyNNEngine
6
+
7
+ from omv.common.inout import inform, trim_path, check_output, is_verbose
8
+ from omv.engines.engine import EngineExecutionError
9
+
10
+
11
+ class PyNNBrian2Engine(PyNNEngine):
12
+ name = "PyNN_Brian2"
13
+ python3_compatible = Brian2Engine.python3_compatible
14
+
15
+ @staticmethod
16
+ def is_installed():
17
+ if is_verbose():
18
+ inform(
19
+ "Checking whether %s is installed..." % PyNNBrian2Engine.name, indent=1
20
+ )
21
+ return PyNNEngine.is_installed() and Brian2Engine.is_installed()
22
+
23
+ @staticmethod
24
+ def install(version):
25
+ if not Brian2Engine.is_installed():
26
+ Brian2Engine.install(version) # interpret version as version of Brian!
27
+ inform(
28
+ "%s installed Brian..." % PyNNBrian2Engine.name, indent=2, verbosity=1
29
+ )
30
+ if not PyNNEngine.is_installed():
31
+ PyNNEngine.install(None)
32
+ inform(
33
+ "%s installed PyNN..." % PyNNBrian2Engine.name, indent=2, verbosity=1
34
+ )
35
+
36
+ PyNNBrian2Engine.path = PyNNEngine.path + ":" + Brian2Engine.path
37
+ PyNNBrian2Engine.environment_vars = {}
38
+ PyNNBrian2Engine.environment_vars.update(PyNNEngine.environment_vars)
39
+ PyNNBrian2Engine.environment_vars.update(Brian2Engine.environment_vars)
40
+ inform("PATH: " + PyNNBrian2Engine.path)
41
+
42
+ def run(self):
43
+ try:
44
+ inform(
45
+ "Running file %s with %s" % (trim_path(self.modelpath), self.name),
46
+ indent=1,
47
+ )
48
+ self.stdout = check_output(
49
+ ["python", self.modelpath, "brian2"],
50
+ cwd=os.path.dirname(self.modelpath),
51
+ )
52
+ self.returncode = 0
53
+ except sp.CalledProcessError as err:
54
+ self.returncode = err.returncode
55
+ self.stdout = err.output
56
+ raise EngineExecutionError
57
+ except Exception as err:
58
+ inform("Another error with running %s: " % self.name, err, indent=1)
59
+ self.returncode = -1
60
+ self.stdout = "???"
@@ -0,0 +1,56 @@
1
+ import os
2
+ import subprocess as sp
3
+
4
+ from omv.engines.nestsli import NestEngine
5
+ from omv.engines.pynest import PyNestEngine
6
+ from omv.engines.pynn import PyNNEngine
7
+
8
+ from omv.common.inout import inform, trim_path, check_output, is_verbose
9
+ from omv.engines.engine import EngineExecutionError
10
+
11
+
12
+ class PyNNNestEngine(PyNNEngine):
13
+ name = "PyNN_Nest"
14
+
15
+ @staticmethod
16
+ def is_installed():
17
+ if is_verbose():
18
+ inform(
19
+ "Checking whether %s is installed..." % PyNNNestEngine.name, indent=1
20
+ )
21
+ return PyNNEngine.is_installed() and PyNestEngine.is_installed()
22
+
23
+ @staticmethod
24
+ def install(version):
25
+ if not PyNestEngine.is_installed():
26
+ PyNestEngine.install(version) # interpret version as version of NEST!
27
+ inform(
28
+ "%s installed PyNest..." % PyNNNestEngine.name, indent=2, verbosity=1
29
+ )
30
+ if not PyNNEngine.is_installed():
31
+ PyNNEngine.install(None)
32
+ inform("%s installed PyNN..." % PyNNNestEngine.name, indent=2, verbosity=1)
33
+
34
+ def run(self):
35
+ try:
36
+ self.environment_vars = NestEngine.get_nest_environment()
37
+ self.set_environment()
38
+
39
+ inform("Env vars: %s" % self.environment_vars, indent=2)
40
+
41
+ inform(
42
+ "Running a file %s with %s" % (trim_path(self.modelpath), self.name),
43
+ indent=1,
44
+ )
45
+ self.stdout = check_output(
46
+ ["python", self.modelpath, "nest"], cwd=os.path.dirname(self.modelpath)
47
+ )
48
+ self.returncode = 0
49
+ except sp.CalledProcessError as err:
50
+ self.returncode = err.returncode
51
+ self.stdout = err.output
52
+ raise EngineExecutionError
53
+ except Exception as err:
54
+ inform("Another error with running %s: " % self.name, err, indent=1)
55
+ self.returncode = -1
56
+ self.stdout = "???"
@@ -0,0 +1,57 @@
1
+ import os
2
+ import subprocess as sp
3
+
4
+ from omv.engines.pyneuroml_ import PyNeuroMLEngine
5
+ from omv.engines.pynn import PyNNEngine
6
+
7
+ from omv.common.inout import inform, trim_path, check_output, is_verbose
8
+ from omv.engines.engine import EngineExecutionError
9
+
10
+
11
+ class PyNNNeuroMLEngine(PyNNEngine):
12
+ name = "PyNN_NeuroML"
13
+
14
+ @staticmethod
15
+ def is_installed():
16
+ if is_verbose():
17
+ inform(
18
+ "Checking whether %s is installed..." % PyNNNeuroMLEngine.name, indent=1
19
+ )
20
+ return PyNNEngine.is_installed() and PyNeuroMLEngine.is_installed()
21
+
22
+ @staticmethod
23
+ def install(version):
24
+ if not PyNeuroMLEngine.is_installed():
25
+ PyNeuroMLEngine.install(None)
26
+ inform(
27
+ "%s installed PyNeuroML..." % PyNNNeuroMLEngine.name,
28
+ indent=2,
29
+ verbosity=1,
30
+ )
31
+ if not PyNNEngine.is_installed():
32
+ PyNNEngine.install(None)
33
+ inform(
34
+ "%s installed PyNN..." % PyNNNeuroMLEngine.name, indent=2, verbosity=1
35
+ )
36
+
37
+ def run(self):
38
+ try:
39
+ inform("Env vars: %s" % self.environment_vars, indent=2)
40
+
41
+ inform(
42
+ "Running file %s with %s" % (trim_path(self.modelpath), self.name),
43
+ indent=1,
44
+ )
45
+ self.stdout = check_output(
46
+ ["python", self.modelpath, "neuroml"],
47
+ cwd=os.path.dirname(self.modelpath),
48
+ )
49
+ self.returncode = 0
50
+ except sp.CalledProcessError as err:
51
+ self.returncode = err.returncode
52
+ self.stdout = err.output
53
+ raise EngineExecutionError
54
+ except Exception as err:
55
+ inform("Another error with running %s: " % self.name, err, indent=1)
56
+ self.returncode = -1
57
+ self.stdout = "???"
@@ -0,0 +1,94 @@
1
+ import os
2
+ import subprocess as sp
3
+
4
+ from omv.engines.neuron_ import NeuronEngine
5
+ from omv.engines.pynn import PyNNEngine
6
+
7
+ from omv.common.inout import inform, trim_path, check_output, is_verbose
8
+ from omv.engines.engine import EngineExecutionError
9
+
10
+
11
+ class PyNNNRNEngine(PyNNEngine):
12
+ name = "PyNN_NEURON"
13
+
14
+ @staticmethod
15
+ def is_installed():
16
+ if is_verbose():
17
+ inform(
18
+ "Checking whether %s is installed correctly..." % PyNNNRNEngine.name,
19
+ indent=1,
20
+ )
21
+ installed = PyNNEngine.is_installed() and NeuronEngine.is_installed()
22
+
23
+ return installed
24
+
25
+ @staticmethod
26
+ def install(version=None):
27
+ if not NeuronEngine.is_installed():
28
+ NeuronEngine.install(None)
29
+ inform("%s installed NEURON..." % PyNNNRNEngine.name, indent=2, verbosity=1)
30
+ if not PyNNEngine.is_installed():
31
+ PyNNEngine.install(None)
32
+ inform("%s installed PyNN..." % PyNNNRNEngine.name, indent=2, verbosity=1)
33
+
34
+ import pyNN
35
+
36
+ PyNNNRNEngine.path = PyNNEngine.path + ":" + NeuronEngine.path
37
+ PyNNNRNEngine.environment_vars = {}
38
+ PyNNNRNEngine.environment_vars.update(PyNNEngine.environment_vars)
39
+ PyNNNRNEngine.environment_vars.update(NeuronEngine.environment_vars)
40
+ inform("PATH: " + PyNNNRNEngine.path, indent=2, verbosity=1)
41
+ inform("Env vars: %s" % PyNNNRNEngine.environment_vars, indent=2, verbosity=1)
42
+
43
+ # pynn_loc = sp.check_output(['python -c "import pyNN,os; print(os.path.dirname(pyNN.__file__))"'], shell=True,stderr=sp.STDOUT).strip()
44
+ pynn_loc = pyNN.__file__[:-12] # remove /__init__.py
45
+ pynn_mod_dir = "%s/neuron/nmodl/" % pynn_loc
46
+
47
+ inform(
48
+ "Attempting to compile PyNN mod files for standard models in %s..."
49
+ % pynn_mod_dir,
50
+ indent=2,
51
+ verbosity=1,
52
+ )
53
+
54
+ print(check_output(["ls", pynn_mod_dir], cwd=pynn_mod_dir))
55
+
56
+ environment_vars, path = NeuronEngine.get_nrn_environment()
57
+ inform(
58
+ "Using NEURON with env %s at %s..." % (environment_vars, path),
59
+ indent=2,
60
+ verbosity=1,
61
+ )
62
+
63
+ print(
64
+ check_output(
65
+ [environment_vars["NEURON_HOME"] + "/bin/nrnivmodl"], cwd=pynn_mod_dir
66
+ )
67
+ )
68
+
69
+ def run(self):
70
+ try:
71
+ self.stdout = NeuronEngine.compile_modfiles(self.modelpath)
72
+ except sp.CalledProcessError as err:
73
+ self.stderr = err.output
74
+ self.returncode = err.returncode
75
+ inform("Error compiling modfiles:", self.stderr, indent=2)
76
+
77
+ try:
78
+ inform(
79
+ "Running file %s with %s" % (trim_path(self.modelpath), self.name),
80
+ indent=1,
81
+ )
82
+ self.stdout = check_output(
83
+ ["python", self.modelpath, "neuron"],
84
+ cwd=os.path.dirname(self.modelpath),
85
+ )
86
+ self.returncode = 0
87
+ except sp.CalledProcessError as err:
88
+ self.returncode = err.returncode
89
+ self.stdout = err.output
90
+ raise EngineExecutionError
91
+ except Exception as err:
92
+ inform("Another error with running %s: " % self.name, err, indent=1)
93
+ self.returncode = -1
94
+ self.stdout = "???"
@@ -0,0 +1,21 @@
1
+ from omv.engines.engine import PATH_DELIMITER
2
+
3
+ def resolve_paths(path_s):
4
+ '''
5
+ Make explicit list from: '*.nml myfile.xml' etc.
6
+ '''
7
+
8
+ if "*" in path_s:
9
+ import glob
10
+
11
+ if PATH_DELIMITER in path_s:
12
+ all = []
13
+ for p in path_s.split(PATH_DELIMITER):
14
+ for g in glob.glob(p):
15
+ all.append(g)
16
+ path_s = all
17
+ else:
18
+ path_s = glob.glob(path_s)
19
+
20
+ return path_s
21
+
@@ -0,0 +1,26 @@
1
+ function total_membrane_area(cell)
2
+
3
+ float totalarea = 0
4
+ float totallength = 0
5
+
6
+ str name
7
+ float area
8
+ float PI = 3.14159265359
9
+
10
+ foreach name ({el {cell}/##[][TYPE=compartment],{cell}/##[][TYPE=symcompartment]})
11
+
12
+ float length = {getfield {name} len}
13
+
14
+ if (length == 0)
15
+ area = {PI}*{getfield {name} dia}*{getfield {name} dia}
16
+ else
17
+ area = {PI}*{getfield {name} dia}*{getfield {name} len}
18
+ totallength = totallength + length
19
+ end
20
+
21
+ totalarea = totalarea + area
22
+ //echo "Compartment: " {name} ", area: " {area} ", length: " {length}", diam: " {getfield {name} dia}
23
+
24
+ end
25
+ return {totalarea}
26
+ end
@@ -0,0 +1,15 @@
1
+ import os
2
+
3
+
4
+ class working_dir(object):
5
+ """Context manager for changing the current working directory"""
6
+
7
+ def __init__(self, newPath):
8
+ self.newPath = newPath
9
+
10
+ def __enter__(self):
11
+ self.savedPath = os.getcwd()
12
+ os.chdir(self.newPath)
13
+
14
+ def __exit__(self, etype, value, traceback):
15
+ os.chdir(self.savedPath)
omv/experiment.py ADDED
@@ -0,0 +1,18 @@
1
+ from omv.analyzers import OMVAnalyzers
2
+
3
+
4
+ class OMVExperiment(object):
5
+ def __init__(self, name, experiment, observables, engine, omt_root, mep_root):
6
+ self.name = name
7
+ self.checks = {}
8
+ self.results = None
9
+
10
+ for obsname, observable in observables.items():
11
+ # an experiment can have multiple observables
12
+ expected = experiment["expected"].get(obsname)
13
+ self.checks[obsname] = OMVAnalyzers[obsname](
14
+ observable, expected, engine, omt_root, mep_root
15
+ )
16
+
17
+ def check_all(self):
18
+ return {n: c() for n, c in self.checks.items()}