Skip to content

Commit 7c4ec46

Browse files
committed
#277 refactor: moved generic mod file loading to utils_test.py
1 parent 19de8fb commit 7c4ec46

2 files changed

Lines changed: 46 additions & 16 deletions

File tree

netpyne_ui/mod_utils.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import subprocess
2+
import os
3+
4+
import neuron
5+
from neuron import h
6+
7+
8+
def is_loaded_mechanisms():
9+
# copied from:
10+
# https://www.neuron.yale.edu/neuron/static/py_doc/modelspec/programmatic/mechtype.html
11+
mt = h.MechanismType(0)
12+
mname = h.ref('')
13+
mnames = list()
14+
for i in range(mt.count()):
15+
mt.select(i)
16+
mt.selected(mname)
17+
mnames.append(mname[0])
18+
19+
# note this check only works for the original hnn model
20+
# need to generalize for any model
21+
22+
if 'hh2' not in mnames:
23+
return False
24+
else:
25+
return True
26+
27+
28+
def compileModMechFiles(compileMod, modFolder):
29+
# Create Symbolic link
30+
if compileMod:
31+
modPath = os.path.join(str(modFolder), "x86_64")
32+
33+
subprocess.call(["rm", "-r", modPath])
34+
35+
os.chdir(modFolder)
36+
subprocess.call(["nrnivmodl"])
37+
os.chdir('..')
38+
39+
try:
40+
neuron.load_mechanisms(str(modFolder))
41+
except:
42+
raise

netpyne_ui/netpyne_geppetto.py

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
from jupyter_geppetto import jupyter_geppetto, synchronization, utils
2525
from contextlib import redirect_stdout
2626
from netpyne_ui.constants import NETPYNE_WORKDIR_PATH, NUM_CONN_LIMIT
27+
from netpyne_ui.mod_utils import compileModMechFiles
2728

2829
os.chdir(NETPYNE_WORKDIR_PATH)
2930

@@ -114,20 +115,7 @@ def simulateNetPyNEModelInGeppetto(self, args):
114115
except:
115116
return utils.getJSONError("Error while simulating the NetPyNE model", sys.exc_info())
116117

117-
def compileModMechFiles(self, compileMod, modFolder):
118-
# Create Symbolic link
119-
if compileMod:
120-
modPath = os.path.join(str(modFolder), "x86_64")
121118

122-
subprocess.call(["rm", "-r", modPath])
123-
124-
os.chdir(modFolder)
125-
subprocess.call(["nrnivmodl"])
126-
os.chdir('..')
127-
128-
# Load mechanism if mod path is passed
129-
if modFolder:
130-
neuron.load_mechanisms(str(modFolder))
131119

132120
def loadModel(self, args):
133121
""" Imports a model stored as file in json format.
@@ -151,7 +139,7 @@ def remove(dictionary):
151139

152140
try:
153141
owd = os.getcwd()
154-
self.compileModMechFiles(args['compileMod'], args['modFolder'])
142+
compileModMechFiles(args['compileMod'], args['modFolder'])
155143
except:
156144
return utils.getJSONError("Error while importing/compiling mods", sys.exc_info())
157145
finally:
@@ -222,7 +210,7 @@ def importModel(self, modelParameters):
222210
# Get Current dir
223211
owd = os.getcwd()
224212

225-
self.compileModMechFiles(modelParameters['compileMod'], modelParameters['modFolder'])
213+
compileModMechFiles(modelParameters['compileMod'], modelParameters['modFolder'])
226214

227215
with redirect_stdout(sys.__stdout__):
228216
# NetParams
@@ -262,7 +250,7 @@ def importCellTemplate(self, modelParameters):
262250

263251
conds = {} if rule not in self.netParams.cellParams else self.netParams.cellParams[rule]['conds']
264252

265-
self.compileModMechFiles(modelParameters["compileMod"], modelParameters["modFolder"])
253+
compileModMechFiles(modelParameters["compileMod"], modelParameters["modFolder"])
266254

267255
del modelParameters["modFolder"]
268256
del modelParameters["compileMod"]

0 commit comments

Comments
 (0)