@@ -427,6 +427,56 @@ def deleteParam(self, paramToDel):
427427 def validateFunction (self , functionString ):
428428 return utils .ValidateFunction (functionString , netParams .__dict__ )
429429
430+ def generateScript (self , metadata ):
431+ def convert2bool (string ):
432+ return string .replace ('true' , 'True' ).replace ('false' , 'False' )
433+
434+ def header (title , spacer = '-' ):
435+ return '\n # ' + title .upper () + ' ' + spacer * (77 - len (title )) + '\n '
436+
437+ try :
438+ params = ['popParams' , 'cellParams' , 'synMechParams' ]
439+ params += ['connParams' , 'stimSourceParams' , 'stimTargetParams' ]
440+
441+ fname = metadata ['scriptName' ] if metadata ['scriptName' ][- 3 :]== '.py' else metadata ['scriptName' ]+ '.py'
442+
443+ with open (fname , 'w' ) as script :
444+ script .write ('from netpyne import specs, sim\n ' )
445+ script .write (header ('documentation' ))
446+ script .write ("''' Script generated with NetPyNE-UI. Please visit:\n " )
447+ script .write (" - https://www.netpyne.org\n - https://github.com/MetaCell/NetPyNE-UI\n '''\n " )
448+ script .write (header ('script' , spacer = '=' ))
449+ script .write ('netParams = specs.NetParams()\n ' )
450+ script .write ('simConfig = specs.SimConfig()\n ' )
451+ script .write (header ('single value attributes' ))
452+ for attr , value in netParams .__dict__ .items ():
453+ if attr not in params :
454+ if value != getattr (specs .NetParams (), attr ):
455+ script .write ('netParams.' + attr + ' = ' )
456+ script .write (convert2bool (json .dumps (value , indent = 4 ))+ '\n ' )
457+
458+ script .write (header ('network attributes' ))
459+ for param in params :
460+ for key , value in getattr (netParams , param ).items ():
461+ script .write ("netParams." + param + "['" + key + "'] = " )
462+ script .write (convert2bool (json .dumps (value , indent = 4 ))+ '\n ' )
463+
464+ script .write (header ('network configuration' ))
465+ for attr , value in simConfig .__dict__ .items ():
466+ if value != getattr (specs .SimConfig (), attr ):
467+ script .write ('netParams.' + attr + ' = ' )
468+ script .write (convert2bool (json .dumps (value , indent = 4 ))+ '\n ' )
469+
470+ script .write (header ('create simulate analyze network' ))
471+ script .write ('sim.createSimulateAnalyze(netParams=netParams, simConfig=simConfig)\n ' )
472+
473+ script .write (header ('end script' , spacer = '=' ))
474+
475+ return self .getJSONReply ()
476+
477+ except :
478+ return self .getJSONError ("Error while importing the NetPyNE model" , traceback .format_exc ())
479+
430480class LoopTimer (threading .Thread ):
431481 """
432482 a Timer that calls f every interval
0 commit comments