Skip to content

Commit 898acf4

Browse files
committed
Merge branch 'development' of github.com:MetaCell/NetPyNE-UI into feature/fix-experiment-manager
2 parents 9383a32 + 9bd92f0 commit 898acf4

14 files changed

Lines changed: 378 additions & 289 deletions

File tree

Dockerfile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ RUN npm install --global yarn
3232
RUN npm install --global yalc
3333
RUN python install.py ${BUILD_ARGS} --geppetto ${GEPPETTO_VERSION}
3434

35+
# Temp fixes for eeg plots
36+
RUN wget -P `pip show LFPykit | grep "Location:" | awk '{print $2"/lfpykit"}'` https://www.parralab.org/nyhead/sa_nyhead.mat
37+
3538
WORKDIR ${INSTALLATION_FOLDER}
3639

3740
RUN pip install -r requirements-test.txt

netpyne_ui/netpyne_geppetto.py

Lines changed: 8 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ def __init__(self):
5454
self.netParams = specs.NetParams()
5555
self.simConfig = specs.SimConfig()
5656
self.run_config = model.RunConfig()
57+
self.simConfig.recordTraces = {'V_soma': {'sec':'soma', 'loc':0.5, 'var':'v'}}
5758

5859
self.experiments = experiments
5960

@@ -68,7 +69,7 @@ def __init__(self):
6869
experiments.get_experiments()
6970
running_exps = experiments.get_by_states([
7071
model.ExperimentState.PENDING,
71-
model.ExperimentState.SIMULATING,
72+
model.ExperimentState.SIMULATING,
7273
model.ExperimentState.INSTANTIATING
7374
])
7475
if not simulations.local.is_running():
@@ -435,9 +436,10 @@ def loadModel(self, args):
435436
if self.doIhaveInstOrSimData()['haveInstance']:
436437
sim.clearAll()
437438
sim.initialize()
438-
sim.loadAll(args['jsonModelFolder'])
439+
sim.loadAll(args['jsonModelFolder'], instantiate=False)
439440
self.netParams = sim.net.params
440441
self.simConfig = sim.cfg
442+
self.simConfig.saveCellSecs = True
441443
netpyne_ui_utils.remove(self.netParams.todict())
442444
netpyne_ui_utils.remove(self.simConfig.todict())
443445
else:
@@ -822,7 +824,7 @@ def getAvailableCellTypes(self):
822824
def getAvailableRxDSections(self, selectedRegion):
823825
sections = set([])
824826
sections.add('all')
825-
if self.netParams.rxdParams.regions[selectedRegion].get('cells'):
827+
if selectedRegion in self.netParams.rxdParams.regions and self.netParams.rxdParams.regions[selectedRegion].get('cells'):
826828
if 'all' in self.netParams.rxdParams.regions[selectedRegion]['cells']:
827829
for cellRule in self.netParams.cellParams:
828830
for cellSect in self.netParams.cellParams[cellRule]['secs']:
@@ -936,56 +938,14 @@ def validateFunction(self, functionString):
936938
return validateFunction(functionString, self.netParams.__dict__)
937939

938940
def exportHLS(self, args):
939-
def convert2bool(string):
940-
return string.replace('true', 'True').replace('false', 'False').replace('null', 'False')
941-
942-
def header(title, spacer='-'):
943-
return '\n# ' + title.upper() + ' ' + spacer * (77 - len(title)) + '\n'
944941

945942
try:
946-
params = ['popParams', 'cellParams', 'synMechParams']
947-
params += ['connParams', 'stimSourceParams', 'stimTargetParams']
948-
949-
fname = args['fileName']
950-
if not fname:
951-
# default option
952-
fname = 'output.py'
953-
943+
fname = args.get('fileName', 'output.py')
954944
if not fname[-3:] == '.py':
955945
fname = f"{fname}.py"
956946

957-
# TODO: use methods offered by netpyne to create this script!
958-
with open(fname, 'w') as script:
959-
script.write("from netpyne import specs, sim\n")
960-
script.write(header("documentation"))
961-
script.write("Script generated with NetPyNE-UI. Please visit:\n")
962-
script.write(" - https://www.netpyne.org\n - https://github.com/MetaCell/NetPyNE-UI\n\n")
963-
script.write(header("script", spacer="="))
964-
script.write("netParams = specs.NetParams()\n")
965-
script.write("simConfig = specs.SimConfig()\n")
966-
script.write(header("single value attributes"))
967-
for attr, value in list(self.netParams.__dict__.items()):
968-
if attr not in params:
969-
if value != getattr(specs.NetParams(), attr):
970-
script.write("netParams." + attr + " = ")
971-
script.write(convert2bool(json.dumps(value, indent=4)) + "\n")
972-
973-
script.write(header("network attributes"))
974-
for param in params:
975-
for key, value in list(getattr(self.netParams, param).items()):
976-
script.write("netParams." + param + "[" + key + "] = ")
977-
script.write(convert2bool(json.dumps(value, indent=4)) + "\n")
978-
979-
script.write(header("network configuration"))
980-
for attr, value in list(self.simConfig.__dict__.items()):
981-
if value != getattr(specs.SimConfig(), attr):
982-
script.write("simConfig." + attr + " = ")
983-
script.write(convert2bool(json.dumps(value, indent=4)) + "\n")
984-
985-
script.write(header("create simulate analyze network"))
986-
script.write("# sim.createSimulateAnalyze(netParams=netParams, simConfig=simConfig)\n")
987-
988-
script.write(header("end script", spacer="="))
947+
from netpyne.conversion import createPythonScript
948+
createPythonScript(fname, self.netParams, self.simConfig)
989949

990950
with open(fname) as f:
991951
file_b64 = base64.b64encode(bytes(f.read(), 'utf-8')).decode()

requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ defusedxml==0.6.0
1515
Deprecated==1.2.10
1616
entrypoints==0.3
1717
future==0.18.2
18+
h5py==3.7.0
1819
idna==2.9
1920
ipython-genutils==0.2.0
2021
ipywidgets==7.5.1

webapp/components/experiments/ExperimentEdit.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -482,8 +482,9 @@ const ExperimentEdit = (props) => {
482482
};
483483

484484
const setExperimentNameInfo = (val) => {
485-
validateExperimentName(val);
486-
setExperimentName(val);
485+
const name = val.replace(' ', '_');
486+
validateExperimentName(name);
487+
setExperimentName(name);
487488
};
488489

489490
return (

webapp/components/general/List.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,12 +294,14 @@ class ListComponent extends Component {
294294
<IconButton
295295
id={`${this.props.id}-button`}
296296
onClick={this.addChild}
297+
disabled={this.props.disabled}
297298
>
298299
<Add />
299300
</IconButton>
300301
</Box>
301302
<TextField
302303
variant="filled"
304+
disabled={this.props.disabled}
303305
id={this.props.id}
304306
label={
305307
this.props.label ? `Add new ${this.props.label}` : 'Add new item'

webapp/components/rxd/Rxd.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ const styles = ((theme) => ({
7878
},
7979
'& .MuiTabs-scroller': {
8080
borderBottom: `0.0625rem solid ${navShadow}`,
81-
}
81+
},
8282
},
8383

8484
button: {
@@ -276,6 +276,7 @@ class Rxd extends React.Component {
276276
<RxdRegions
277277
onAddRegion={this.onAddRegion}
278278
regions={controlledState?.checked?.regions}
279+
extracellular={controlledState?.checked?.extracellular}
279280
/>
280281
);
281282
} else if (value === 1) {
@@ -324,6 +325,7 @@ class Rxd extends React.Component {
324325
tabPanelContent = (
325326
<RxdExtracellulars
326327
onAddExtracellular={this.onAddExtracellular}
328+
regions={controlledState?.checked?.regions}
327329
extracellular={controlledState?.checked?.extracellular}
328330
/>
329331
);

webapp/components/rxd/RxdConstants.js

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,6 @@ import AddIcon from '@material-ui/icons/Add';
1616
import FontIcon from '@material-ui/core/Icon';
1717
import Utils from '../../Utils';
1818
import {
19-
bgDarkest,
20-
bgLight,
21-
bgRegular,
22-
secondaryColor,
23-
fontColor,
24-
radius,
25-
primaryColor,
26-
experimentInputColor,
27-
experimentFieldColor,
28-
experimentSvgColor,
29-
experimentLabelColor,
30-
experimentAutocompleteBorder,
31-
errorFieldBorder,
3219
tabsTextColor,
3320
} from '../../theme';
3421

webapp/components/rxd/RxdExtracellular.js

Lines changed: 0 additions & 107 deletions
This file was deleted.

0 commit comments

Comments
 (0)