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