diff --git a/moose-examples/.travis.yml b/moose-examples/.travis.yml index f0ea25523a5b5b54333bba16da4395c656912e56..8799d5a775fd4da7347f8d539d697b64f00a0b2a 100644 --- a/moose-examples/.travis.yml +++ b/moose-examples/.travis.yml @@ -12,11 +12,12 @@ install: - sudo apt-key add - < Release.key - sudo sh -c "echo 'deb http://download.opensuse.org/repositories/home:/moose/xUbuntu_12.04/ /' >> /etc/apt/sources.list.d/moose.list" - sudo apt-get -y update - - sudo apt-get install python-h5py + - sudo apt-get -y install python-qt4 - sudo apt-get -y install moose - - sudo apt-get -y install moogli script: + - # Making sure no python3 incompatible file. + - python3 -m compileall -q . + - python2 -m compileall -q . - python -c 'import moose' - - python -c 'import moogli' - cd _travis && ./find_scripts_to_run.sh && ./run_scripts.sh diff --git a/moose-examples/_travis/run_scripts.sh b/moose-examples/_travis/run_scripts.sh index c0140b9a0a56ff55f78c4327e9e6e837e4e09e17..4b4ea1062e689db9732dfa01aafa7443aa5c812e 100755 --- a/moose-examples/_travis/run_scripts.sh +++ b/moose-examples/_travis/run_scripts.sh @@ -10,7 +10,7 @@ TEMP=$PWD/__temp__ rm -f $BLACKLISTED $SUCCEEDED $FAILED $TEMP TORUN $PWD/find_scripts_to_run.sh -PYC=`which python` +PYC=`which python2` MATPLOTRC=$PWD/matplotlibrc if [ ! -f $MATPLOTRC ]; then echo "$MATPLOTRC not found" diff --git a/moose-examples/hopfield/guiHopfield.py b/moose-examples/hopfield/guiHopfield.py index 1df12e51348fab07bd4d68aee27905f8f6ba5113..37dc6b1d2c4f70fd0a2b28f7f7bf867cd0d8c835 100644 --- a/moose-examples/hopfield/guiHopfield.py +++ b/moose-examples/hopfield/guiHopfield.py @@ -53,7 +53,7 @@ class DesignerMainWindow(QtGui.QMainWindow, Ui_MainWindow): self.connect(self.computeSynWeightsPushButton,QtCore.SIGNAL('clicked()'),self.computeAllWeights) def saveInput(self): - print 'saving current pattern as input' + print('saving current pattern as input') inpList = [] for i in range(100): exec(('inpList.append(int(self.pushButton_%s.isChecked()))' %i)) diff --git a/moose-examples/hopfield/hopfield.py b/moose-examples/hopfield/hopfield.py index 870c9b317de6bf0d5edc48a00eeaef112e09d12a..534c19216db2eb24c44b2f01a58ca26b9828dfa5 100644 --- a/moose-examples/hopfield/hopfield.py +++ b/moose-examples/hopfield/hopfield.py @@ -58,9 +58,9 @@ class HopfieldNetwork(): memory[j] = -1 self.synWeights[i*len(memory)+j] += memory[i]*memory[j] - print self.synWeights[0:100] + print((self.synWeights[0:100])) self.numMemories += 1 - print self.numMemories, '#number Of saved memories' + print((self.numMemories, '#number Of saved memories')) def createNetwork(self): '''setting up of the cells and their connections''' diff --git a/moose-examples/hopfield/test.py b/moose-examples/hopfield/test.py index 8ff674c5fbdc8a37e12b59bdc940dab63b1c953c..4d296cda3e17a68e41d680620a4f65a4ebbaf0cc 100644 --- a/moose-examples/hopfield/test.py +++ b/moose-examples/hopfield/test.py @@ -37,20 +37,20 @@ cell.synapse[0].delay = 10e-3 #else, goes back to 0 in tau time VmVal = moose.Table(cellPath+'/Vm_cell') -print 'table>cellVm:', moose.connect(VmVal, 'requestOut', cell, 'getVm') +print(('table>cellVm:', moose.connect(VmVal, 'requestOut', cell, 'getVm'))) spikeTime = moose.Table(cellPath+'/spikeTimes') -print 'table>cellSpike:', moose.connect(cell, 'spike', spikeTime, 'input') +print(('table>cellSpike:', moose.connect(cell, 'spike', spikeTime, 'input'))) inSpkGen = moose.SpikeGen(cellPath+'/inSpkGen') inSpkGen.setField('threshold', 2.0) inSpkGen.setField('edgeTriggered', True) if inputGiven == 1: - print 'pulse>spike:', moose.connect(pg, 'output', moose.element(cellPath+'/inSpkGen'), 'Vm') + print(('pulse>spike:', moose.connect(pg, 'output', moose.element(cellPath+'/inSpkGen'), 'Vm'))) inTable = moose.Table(cellPath+'/inSpkGen/inTable') - print 'table>spike:',moose.connect(inTable, 'requestOut', inSpkGen, 'getHasFired') + print(('table>spike:',moose.connect(inTable, 'requestOut', inSpkGen, 'getHasFired'))) -print 'spike>cell:', moose.connect(inSpkGen, 'spikeOut', cell.synapse[0] ,'addSpike') +print(('spike>cell:', moose.connect(inSpkGen, 'spikeOut', cell.synapse[0] ,'addSpike'))) #print 'spike>cell:', moose.connect(pg, 'output', cell ,'injectDest') moose.setClock(0, 1e-4) diff --git a/moose-examples/izhikevich/Izhikevich.py b/moose-examples/izhikevich/Izhikevich.py index f6cf12ed94397ce9ae8a3bf247bffd22c324c636..00194c9909b808e0486e88f7cf775d7b02c06616 100644 --- a/moose-examples/izhikevich/Izhikevich.py +++ b/moose-examples/izhikevich/Izhikevich.py @@ -197,7 +197,7 @@ These neurons show bursting in response to inhibitory input.""" neuron = self._get_neuron(key) pulsegen = self._make_pulse_input(key) if pulsegen is None: - print key, 'Not implemented.' + print((key, 'Not implemented.')) def simulate(self, key): self.setup(key) @@ -207,7 +207,7 @@ These neurons show bursting in response to inhibitory input.""" try: Vm = self.Vm_tables[key] u = self.u_tables[key] - except KeyError, e: + except KeyError as e: Vm = moose.Table(self.data_container.path + '/' + key + '_Vm') nrn = self.neurons[key] moose.connect(Vm, 'requestOut', nrn, 'getVm') @@ -217,7 +217,7 @@ These neurons show bursting in response to inhibitory input.""" self.u_tables[key] = utable try: Im = self.inject_tables[key] - except KeyError, e: + except KeyError as e: Im = moose.Table(self.data_container.path + '/' + key + '_inject') # May be different for non-pulsegen sources. Im.connect('requestOut', self._get_neuron(key), 'getIm') self.inject_tables[key] = Im @@ -237,7 +237,7 @@ These neurons show bursting in response to inhibitory input.""" time = linspace(0, IzhikevichDemo.parameters[key][7], len(Vm.vector)) # DEBUG nrn = self._get_neuron(key) - print 'a = %g, b = %g, c = %g, d = %g, initVm = %g, initU = %g' % (nrn.a,nrn.b, nrn.c, nrn.d, nrn.initVm, nrn.initU) + print(('a = %g, b = %g, c = %g, d = %g, initVm = %g, initU = %g' % (nrn.a,nrn.b, nrn.c, nrn.d, nrn.initVm, nrn.initU))) #! DEBUG return (time, Vm, Im) @@ -246,14 +246,14 @@ These neurons show bursting in response to inhibitory input.""" try: params = IzhikevichDemo.parameters[key] except KeyError as e: - print ' %s : Invalid neuron type. The valid types are:' % (key) + print((' %s : Invalid neuron type. The valid types are:' % (key))) for key in IzhikevichDemo.parameters: - print key + print(key) raise e try: neuron = self.neurons[key] return neuron - except KeyError, e: + except KeyError as e: neuron = moose.IzhikevichNrn(self.model_container.path + '/' + key) if key == 'integrator' or key == 'Class_1': # Integrator has different constants @@ -354,7 +354,7 @@ These neurons show bursting in response to inhibitory input.""" self.inputs[key] = input_table return input_table else: - print key, ': Stimulus is not based on pulse generator.' + print((key, ': Stimulus is not based on pulse generator.')) raise pulsegen = self._make_pulsegen(key, firstLevel, @@ -529,9 +529,9 @@ try: plot(time, Im.vector) subplot(3,1,3) show() - print 'Finished simulation.' + print('Finished simulation.') except ImportError: - print 'Matplotlib not installed.' + print('Matplotlib not installed.') # # Izhikevich.py ends here diff --git a/moose-examples/izhikevich/demogui_qt.py b/moose-examples/izhikevich/demogui_qt.py index 753e98ff3f92afc0f6cc827b1cc82f4982829091..62410ed4d47fbbcfd716faf059bd9c433efceeb0 100644 --- a/moose-examples/izhikevich/demogui_qt.py +++ b/moose-examples/izhikevich/demogui_qt.py @@ -62,11 +62,11 @@ class IzhikevichGui(QtGui.QMainWindow): self.controlPanel = QtGui.QFrame(self.demoFrame) self.figureNo = {} self.buttons = {} - for key, value in IzhikevichDemo.parameters.items(): + for key, value in list(IzhikevichDemo.parameters.items()): button = QtGui.QPushButton(key, self.controlPanel) self.figureNo[value[0]] = key self.buttons[key] = button - keys = self.figureNo.keys() + keys = list(self.figureNo.keys()) keys.sort() length = len(keys) rows = int(numpy.rint(numpy.sqrt(length))) diff --git a/moose-examples/kinetics/test_ksolve.py b/moose-examples/kinetics/test_ksolve.py index 84ab0802e572b498d3a45e5b9c104e8d2070108d..373d7e26f9282dc86da1364b1c59028639af856d 100644 --- a/moose-examples/kinetics/test_ksolve.py +++ b/moose-examples/kinetics/test_ksolve.py @@ -306,7 +306,7 @@ def createChemModel( neuroCompt, spineCompt, psdCompt ): # Just for printf debugging def printMolVecs( title ): - print title + print(title) """ nCa = moose.vec( '/model/chem/neuroMesh/Ca' ) sCa = moose.vec( '/model/chem/spineMesh/Ca' ) @@ -477,7 +477,7 @@ def testCubeMultiscale( useSolver ): moose.reinit() t = time.time() moose.start( 1.0 ) - print("Total time taken: %s sec for 1.0 sec of simulation" % (time.time() - t)) + print(("Total time taken: %s sec for 1.0 sec of simulation" % (time.time() - t))) dumpPlots( plotName ) def main(): diff --git a/moose-examples/moogli/purkinje_simulation.py b/moose-examples/moogli/purkinje_simulation.py index 02df05d29bb028425326f82fc1ffc1b7376aff40..07c10609dbdd1ddf289d649d95a390f72600dde4 100644 --- a/moose-examples/moogli/purkinje_simulation.py +++ b/moose-examples/moogli/purkinje_simulation.py @@ -26,8 +26,8 @@ filename = os.path.join( os.path.split(os.path.realpath(__file__))[0] popdict, projdict = moose.neuroml.loadNeuroML_L123(filename) # setting up hsolve object for each neuron -for popinfo in popdict.values(): - for cell in popinfo[1].values(): +for popinfo in list(popdict.values()): + for cell in list(popinfo[1].values()): solver = moose.HSolve(cell.path + "/hsolve") solver.target = cell.path @@ -37,9 +37,7 @@ moose.reinit() SIMULATION_DELTA = 0.001 SIMULATION_TIME = 0.03 -ALL_COMPARTMENTS = map( lambda x : x.path - , moose.wildcardFind("/cells[0]/##[ISA=CompartmentBase]") - ) +ALL_COMPARTMENTS = [x.path for x in moose.wildcardFind("/cells[0]/##[ISA=CompartmentBase]")] BASE_VM_VALUE = -0.065 PEAK_VM_VALUE = -0.060 BASE_VM_COLOR = [1.0, 0.0, 0.0, 0.1] @@ -69,9 +67,7 @@ morphology.create_group( "group-all" # group name # set initial color of all compartments in accordance with their vm morphology.set_color( "group-all" - , map( lambda x : moose.element(x).Vm - , ALL_COMPARTMENTS - ) + , [moose.element(x).Vm for x in ALL_COMPARTMENTS] ) # instantiate the visualizer with the morphology object created earlier @@ -90,9 +86,7 @@ def callback(morphology, viewer): # a value higher than peak value will be clamped to peak value # a value lower than base value will be clamped to base value. morphology.set_color( "group-all" - , map( lambda x : x.Vm - , moose.wildcardFind("/cells[0]/##[ISA=CompartmentBase]") - ) + , [x.Vm for x in moose.wildcardFind("/cells[0]/##[ISA=CompartmentBase]")] ) # if the callback returns true, it will be called again. # if it returns false it will not be called ever again. diff --git a/moose-examples/moogli/purkinje_simulation_with_rm.py b/moose-examples/moogli/purkinje_simulation_with_rm.py index 4957c69968c463ac5905816873fdd366c024f81d..fcf8c5856b89349a6fbcf1e0071518cdffbb0e98 100644 --- a/moose-examples/moogli/purkinje_simulation_with_rm.py +++ b/moose-examples/moogli/purkinje_simulation_with_rm.py @@ -28,8 +28,8 @@ filename = os.path.join( os.path.split(os.path.realpath(__file__))[0] popdict, projdict = moose.neuroml.loadNeuroML_L123(filename) # setting up hsolve object for each neuron -for popinfo in popdict.values(): - for cell in popinfo[1].values(): +for popinfo in list(popdict.values()): + for cell in list(popinfo[1].values()): solver = moose.HSolve(cell.path + "/hsolve") solver.target = cell.path @@ -39,17 +39,11 @@ moose.reinit() SIMULATION_DELTA = 0.001 SIMULATION_TIME = 0.03 -ALL_COMPARTMENTS = map( lambda x : x.path - , moose.wildcardFind("/cells[0]/##[ISA=CompartmentBase]") - ) +ALL_COMPARTMENTS = [x.path for x in moose.wildcardFind("/cells[0]/##[ISA=CompartmentBase]")] -BASE_RM_VALUE = min( map( lambda x : moose.element(x).Rm - , ALL_COMPARTMENTS - ) +BASE_RM_VALUE = min( [moose.element(x).Rm for x in ALL_COMPARTMENTS] ) -PEAK_RM_VALUE = max( map( lambda x : moose.element(x).Rm - , ALL_COMPARTMENTS - ) +PEAK_RM_VALUE = max( [moose.element(x).Rm for x in ALL_COMPARTMENTS] ) BASE_RM_COLOR = [0.0, 1.0, 0.0, 0.1] PEAK_RM_COLOR = [1.0, 0.0, 0.0, 1.0] @@ -86,9 +80,7 @@ def create_vm_visualizer(): # set initial color of all compartments in accordance with their vm vm_morphology.set_color( "group-all" - , map( lambda x : moose.element(x).Vm - , ALL_COMPARTMENTS - ) + , [moose.element(x).Vm for x in ALL_COMPARTMENTS] ) # instantiate the visualizer with the morphology object created earlier @@ -105,9 +97,7 @@ def create_vm_visualizer(): # a value higher than peak value will be clamped to peak value # a value lower than base value will be clamped to base value. morphology.set_color( "group-all" - , map( lambda x : moose.element(x).Vm - , ALL_COMPARTMENTS - ) + , [moose.element(x).Vm for x in ALL_COMPARTMENTS] ) # if the callback returns true, it will be called again. # if it returns false it will not be called again. @@ -148,9 +138,7 @@ def create_rm_visualizer(): # set initial color of all compartments in accordance with their rm morphology.set_color( "group-all" - , map( lambda x : moose.element(x).Rm - , ALL_COMPARTMENTS - ) + , [moose.element(x).Rm for x in ALL_COMPARTMENTS] ) # instantiate the visualizer with the morphology object created earlier diff --git a/moose-examples/moogli/purkinje_simulation_with_rm_and_graph.py b/moose-examples/moogli/purkinje_simulation_with_rm_and_graph.py index ec886b27541c7eb8e24692861d96f8c17ac91560..647e349144552500b53ac6b6512f51925a3b61a9 100644 --- a/moose-examples/moogli/purkinje_simulation_with_rm_and_graph.py +++ b/moose-examples/moogli/purkinje_simulation_with_rm_and_graph.py @@ -30,8 +30,8 @@ filename = os.path.join( os.path.split(os.path.realpath(__file__))[0] popdict, projdict = moose.neuroml.loadNeuroML_L123(filename) # setting up hsolve object for each neuron -for popinfo in popdict.values(): - for cell in popinfo[1].values(): +for popinfo in list(popdict.values()): + for cell in list(popinfo[1].values()): solver = moose.HSolve(cell.path + "/hsolve") solver.target = cell.path @@ -49,17 +49,11 @@ moose.reinit() SIMULATION_DELTA = 0.001 SIMULATION_TIME = 0.03 -ALL_COMPARTMENTS = map( lambda x : x.path - , moose.wildcardFind("/cells[0]/##[ISA=CompartmentBase]") - ) +ALL_COMPARTMENTS = [x.path for x in moose.wildcardFind("/cells[0]/##[ISA=CompartmentBase]")] -BASE_RM_VALUE = min( map( lambda x : moose.element(x).Rm - , ALL_COMPARTMENTS - ) +BASE_RM_VALUE = min( [moose.element(x).Rm for x in ALL_COMPARTMENTS] ) -PEAK_RM_VALUE = max( map( lambda x : moose.element(x).Rm - , ALL_COMPARTMENTS - ) +PEAK_RM_VALUE = max( [moose.element(x).Rm for x in ALL_COMPARTMENTS] ) BASE_RM_COLOR = [0.0, 1.0, 0.0, 0.1] PEAK_RM_COLOR = [1.0, 0.0, 0.0, 1.0] @@ -111,9 +105,7 @@ def create_vm_visualizer(): # set initial color of all compartments in accordance with their vm vm_morphology.set_color( "group-all" - , map( lambda x : moose.element(x).Vm - , ALL_COMPARTMENTS - ) + , [moose.element(x).Vm for x in ALL_COMPARTMENTS] ) # instantiate the visualizer with the morphology object created earlier @@ -130,9 +122,7 @@ def create_vm_visualizer(): # a value higher than peak value will be clamped to peak value # a value lower than base value will be clamped to base value. morphology.set_color( "group-all" - , map( lambda x : moose.element(x).Vm - , ALL_COMPARTMENTS - ) + , [moose.element(x).Vm for x in ALL_COMPARTMENTS] ) # if the callback returns true, it will be called again. # if it returns false it will not be called again. @@ -181,9 +171,7 @@ def create_rm_visualizer(): # set initial color of all compartments in accordance with their rm morphology.set_color( "group-all" - , map( lambda x : moose.element(x).Rm - , ALL_COMPARTMENTS - ) + , [moose.element(x).Rm for x in ALL_COMPARTMENTS] ) # instantiate the visualizer with the morphology object created earlier diff --git a/moose-examples/neuroml/CA1PyramidalCell/CA1.py b/moose-examples/neuroml/CA1PyramidalCell/CA1.py index c8b8e74d65a6b3860fb05d2ca3f2ed8a04c2ca31..bbe90edb72de8fd79b63442880319079386925ea 100644 --- a/moose-examples/neuroml/CA1PyramidalCell/CA1.py +++ b/moose-examples/neuroml/CA1PyramidalCell/CA1.py @@ -31,16 +31,16 @@ def loadGran98NeuroML_L123(filename): #somaIKCa = setupTable('somaIKCa',moose.HHChannel(soma_path+'/Gran_KCa_98'),'Gk') #KDrX = setupTable('ChanX',moose.HHChannel(soma_path+'/Gran_KDr_98'),'X') soma = moose.Compartment(soma_path) - print "Reinit MOOSE ... " + print("Reinit MOOSE ... ") resetSim(['/elec','/cells'],simdt,plotdt,simmethod='ee') # from moose.utils - print "Running ... " + print("Running ... ") moose.start(runtime) tvec = arange(0.0,runtime,simdt) plot(tvec,somaVm.vector[1:]) title('Soma Vm') xlabel('time (s)') ylabel('Voltage (V)') - print "Showing plots ..." + print("Showing plots ...") show() if __name__ == "__main__": diff --git a/moose-examples/neuroml/CA1PyramidalCell/CA1_hsolve.py b/moose-examples/neuroml/CA1PyramidalCell/CA1_hsolve.py index 06f437ec27534244d4291f65767de66dc9b98d2d..5823db724ee9150805379dc010bc403db128731b 100644 --- a/moose-examples/neuroml/CA1PyramidalCell/CA1_hsolve.py +++ b/moose-examples/neuroml/CA1PyramidalCell/CA1_hsolve.py @@ -23,8 +23,8 @@ def loadGran98NeuroML_L123(filename,params): neuromlR = NeuroML() populationDict, projectionDict = \ neuromlR.readNeuroMLFromFile(filename,params=params) - print "Number of compartments =",\ - len(moose.Neuron(populationDict['CA1group'][1][0].path).children) + print(("Number of compartments =",\ + len(moose.Neuron(populationDict['CA1group'][1][0].path).children))) soma_path = populationDict['CA1group'][1][0].path+'/Seg0_soma_0_0' somaVm = setupTable('somaVm',moose.Compartment(soma_path),'Vm') #somaCa = setupTable('somaCa',moose.CaConc(soma_path+'/Gran_CaPool_98'),'Ca') @@ -32,16 +32,16 @@ def loadGran98NeuroML_L123(filename,params): #KDrX = setupTable('ChanX',moose.HHChannel(soma_path+'/Gran_KDr_98'),'X') soma = moose.Compartment(soma_path) - print "Reinit MOOSE ... " + print("Reinit MOOSE ... ") resetSim(['/elec','/cells'],simdt,plotdt,simmethod='hsolve') # from moose.utils - print "Running ... " + print("Running ... ") moose.start(runtime) tvec = arange(0.0,runtime,simdt) plot(tvec,somaVm.vector[1:]) title('Soma Vm') xlabel('time (s)') ylabel('Voltage (V)') - print "Showing plots ..." + print("Showing plots ...") show() if __name__ == "__main__": diff --git a/moose-examples/neuroml/CA1PyramidalCell/FvsI_CA1.py b/moose-examples/neuroml/CA1PyramidalCell/FvsI_CA1.py index 28d13b09ba7ec3a69c2a3e4e4e7ccedddb23ec3e..3de7794d068d8eb67dc0bb4bbeecea427c7a88a4 100644 --- a/moose-examples/neuroml/CA1PyramidalCell/FvsI_CA1.py +++ b/moose-examples/neuroml/CA1PyramidalCell/FvsI_CA1.py @@ -1,4 +1,4 @@ -#!/usr/bin/python + # -*- coding: utf-8 -*- ## all SI units ######################################################################################## @@ -63,8 +63,8 @@ for currenti in currentvec: spikesList = spikesList[where(spikesList>0.0)[0]] spikesNow = len(spikesList) else: spikesNow = 0.0 - print "For injected current =",currenti,\ - "number of spikes in",RUNTIME,"seconds =",spikesNow + print(("For injected current =",currenti,\ + "number of spikes in",RUNTIME,"seconds =",spikesNow)) freqList.append( spikesNow/float(RUNTIME) ) ## plot the F vs I curve of the neuron diff --git a/moose-examples/neuroml/GranuleCell/FvsI_Granule98.py b/moose-examples/neuroml/GranuleCell/FvsI_Granule98.py index 40f3fef612c17836f691a3427d4d8ca5400f1d1a..80c9ad6b0e7678ecbab004d895c9d86b11905c12 100644 --- a/moose-examples/neuroml/GranuleCell/FvsI_Granule98.py +++ b/moose-examples/neuroml/GranuleCell/FvsI_Granule98.py @@ -1,4 +1,4 @@ -#!/usr/bin/python + # -*- coding: utf-8 -*- ## all SI units ######################################################################################## @@ -56,8 +56,8 @@ for currenti in currentvec: spikesList = spikesList[where(spikesList>0.0)[0]] spikesNow = len(spikesList) else: spikesNow = 0.0 - print "For injected current =",currenti,\ - "number of spikes in",RUNTIME,"seconds =",spikesNow + print(("For injected current =",currenti,\ + "number of spikes in",RUNTIME,"seconds =",spikesNow)) freqList.append( spikesNow/float(RUNTIME) ) ## plot the F vs I curve of the neuron diff --git a/moose-examples/neuroml/GranuleCell/Granule98.py b/moose-examples/neuroml/GranuleCell/Granule98.py index cde13f6b38dda87a742aac6dbc53b699a905537a..9a29370a8194f9f7b1a8d7a44272fe8c380e6577 100644 --- a/moose-examples/neuroml/GranuleCell/Granule98.py +++ b/moose-examples/neuroml/GranuleCell/Granule98.py @@ -31,9 +31,9 @@ def loadGran98NeuroML_L123(filename): somaIKCa = setupTable('somaIKCa',moose.HHChannel(soma_path+'/Gran_KCa_98'),'Gk') #KDrX = setupTable('ChanX',moose.HHChannel(soma_path+'/Gran_KDr_98'),'X') soma = moose.Compartment(soma_path) - print "Reinit MOOSE ... " + print("Reinit MOOSE ... ") resetSim(['/elec','/cells'],simdt,plotdt,simmethod='ee') # from moose.utils - print "Running ... " + print("Running ... ") moose.start(runtime) tvec = arange(0.0,runtime,plotdt) plot(tvec,somaVm.vector[1:]) @@ -50,7 +50,7 @@ def loadGran98NeuroML_L123(filename): title('KCa current (A)') xlabel('time (s)') ylabel('') - print "Showing plots ..." + print("Showing plots ...") show() filename = "GranuleCell.net.xml" diff --git a/moose-examples/neuroml/GranuleCell/Granule98_hsolve.py b/moose-examples/neuroml/GranuleCell/Granule98_hsolve.py index 52a3f817bc73bc6a9992d94514e8f30c63409efe..7f62f0eb6e4d70da672f9dc3ec37a450c1aaac8c 100644 --- a/moose-examples/neuroml/GranuleCell/Granule98_hsolve.py +++ b/moose-examples/neuroml/GranuleCell/Granule98_hsolve.py @@ -34,10 +34,10 @@ def loadGran98NeuroML_L123(filename): ## Am not able to plot KDr gating variable X when running under hsolve #KDrX = setupTable('ChanX',moose.HHChannel(soma_path+'/Gran_KDr_98'),'X') - print "Reinit MOOSE ... " + print("Reinit MOOSE ... ") resetSim(['/elec',cells_path], simdt, plotdt, simmethod='hsolve') - print "Running ... " + print("Running ... ") moose.start(runtime) tvec = arange(0.0,runtime*2.0,plotdt) tvec = tvec[ : somaVm.vector.size ] @@ -55,7 +55,7 @@ def loadGran98NeuroML_L123(filename): title('soma KCa current') xlabel('time (s)') ylabel('KCa current (A)') - print "Showing plots ..." + print("Showing plots ...") show() filename = "GranuleCell.net.xml" diff --git a/moose-examples/neuroml/LIF/FvsI_LIF.py b/moose-examples/neuroml/LIF/FvsI_LIF.py index 91309e765e9e3cecbed53e23e355af0f6664dcf9..5dce5b7bf505b6c435133d91dacd2dbc60caba4d 100644 --- a/moose-examples/neuroml/LIF/FvsI_LIF.py +++ b/moose-examples/neuroml/LIF/FvsI_LIF.py @@ -1,4 +1,4 @@ -#!/usr/bin/python + # -*- coding: utf-8 -*- ## all SI units ######################################################################################## @@ -46,8 +46,8 @@ for currenti in currentvec: spikesList = spikesList[where(spikesList>0.0)[0]] spikesNow = len(spikesList) else: spikesNow = 0.0 - print "For injected current =",currenti,\ - "number of spikes in",RUNTIME,"seconds =",spikesNow + print(("For injected current =",currenti,\ + "number of spikes in",RUNTIME,"seconds =",spikesNow)) freqList.append( spikesNow/float(RUNTIME) ) ## plot the F vs I curve of the neuron diff --git a/moose-examples/neuroml/LIF/LIFxml_firing_hsolve.py b/moose-examples/neuroml/LIF/LIFxml_firing_hsolve.py index 0e0e35fd76f3da993d7f2ac69029a544faae944e..79316641b60ea4f9ffedc55b7e2a1eb6d6453d07 100644 --- a/moose-examples/neuroml/LIF/LIFxml_firing_hsolve.py +++ b/moose-examples/neuroml/LIF/LIFxml_firing_hsolve.py @@ -16,7 +16,7 @@ injectI = 2.5e-12 # Amperes ## moose imports import moose -print( '[DBEUG] Using moose from %s' % moose.__file__ ) +print(( '[DBEUG] Using moose from %s' % moose.__file__ )) from moose.neuroml import * from moose.utils import * # has setupTable(), resetSim() etc @@ -59,7 +59,7 @@ if __name__ == '__main__': moose.connect(spikeGen,'event',IF1spikesTable,'input') run_LIF() - print("Spiketimes :",IF1spikesTable.vector) + print(("Spiketimes :",IF1spikesTable.vector)) ## plot the membrane potential of the neuron timevec = arange(0.0,RUNTIME+PLOTDT/2.0,PLOTDT) figure(facecolor='w') diff --git a/moose-examples/neuroml/LIF/twoLIFxml_firing.py b/moose-examples/neuroml/LIF/twoLIFxml_firing.py index aed0ef29b58286a4c03737530955c3dcd0917be1..58aaef1301a7631a19f7eef31777cebafb7aadea 100644 --- a/moose-examples/neuroml/LIF/twoLIFxml_firing.py +++ b/moose-examples/neuroml/LIF/twoLIFxml_firing.py @@ -37,10 +37,10 @@ def create_twoLIFs(): def run_twoLIFs(): ## reset and run the simulation - print "Reinit MOOSE." + print("Reinit MOOSE.") ## from moose_utils.py sets clocks and resets resetSim(['/cells[0]'], SIMDT, PLOTDT, simmethod='ee') - print "Running now..." + print("Running now...") moose.start(RUNTIME) if __name__ == '__main__': @@ -64,7 +64,7 @@ if __name__ == '__main__': moose.connect(IF2SynChanTable,'requestOut',IF2Soma.path+'/exc_syn','getIk') run_twoLIFs() - print "Spiketimes :",IF1spikesTable.vector + print(("Spiketimes :",IF1spikesTable.vector)) ## plot the membrane potential of the neuron timevec = arange(0.0,RUNTIME+PLOTDT/2.0,PLOTDT) figure(facecolor='w') diff --git a/moose-examples/neuroml/allChannelsCell/allChannelsCell.py b/moose-examples/neuroml/allChannelsCell/allChannelsCell.py index 99ae428436e8a2632b371d645f6b863cd65c2df8..7df463c13e68726d02a8cd3fbb655a2d5faef14f 100644 --- a/moose-examples/neuroml/allChannelsCell/allChannelsCell.py +++ b/moose-examples/neuroml/allChannelsCell/allChannelsCell.py @@ -32,9 +32,9 @@ def loadGran98NeuroML_L123(filename): somaIKCa = setupTable('somaIKCa',moose.HHChannel(soma_path+'/Gran_KCa_98'),'Gk') #KDrX = setupTable('ChanX',moose.HHChannel(soma_path+'/Gran_KDr_98'),'X') soma = moose.Compartment(soma_path) - print "Reinit MOOSE ... " + print("Reinit MOOSE ... ") resetSim(['/elec','/cells'],simdt,plotdt) # from moose.utils - print "Running ... " + print("Running ... ") moose.start(runtime) tvec = arange(0.0,runtime,simdt) plot(tvec,somaVm.vector[1:]) @@ -56,7 +56,7 @@ def loadGran98NeuroML_L123(filename): title('KC current (A)') xlabel('time (s)') ylabel('') - print "Showing plots ..." + print("Showing plots ...") show() filename = "allChannelsCell.net.xml" diff --git a/moose-examples/neuroml/lobster_pyloric/STG_net.py b/moose-examples/neuroml/lobster_pyloric/STG_net.py index 91226362413d15b2943804a8a31f1c8641465036..ca4b5a9ef27edcd6253aaf5fb4d19d96b804ed3c 100644 --- a/moose-examples/neuroml/lobster_pyloric/STG_net.py +++ b/moose-examples/neuroml/lobster_pyloric/STG_net.py @@ -74,9 +74,9 @@ def loadRunSTGNeuroML_L123(filename): # monitor synaptic current soma2 = moose.element(soma2_path) - print "Children of",soma2_path,"are:" + print(("Children of",soma2_path,"are:")) for child in soma2.children: - print child.className, child.path + print((child.className, child.path)) if graded_syn: syn_path = soma2_path+'/DoubExpSyn_Ach__cells-0-_AB_PD_0-0-_Soma_0' syn = moose.element(syn_path) @@ -85,11 +85,11 @@ def loadRunSTGNeuroML_L123(filename): syn = moose.element(syn_path) syn_Ik = setupTable('DoubExpSyn_Ach_Ik',syn,'Ik') - print "Reinit MOOSE ... " + print("Reinit MOOSE ... ") resetSim(['/elec',cells_path], simdt, plotdt, simmethod='hsolve') - print "Using graded synapses? = ", graded_syn - print "Running model filename = ",filename," ... " + print(("Using graded synapses? = ", graded_syn)) + print(("Running model filename = ",filename," ... ")) moose.start(runtime) tvec = np.arange(0.0,runtime+2*plotdt,plotdt) tvec = tvec[ : soma1Vm.vector.size ] @@ -139,7 +139,7 @@ def loadRunSTGNeuroML_L123(filename): plt.title('Ach syn current in '+soma2_path) plt.xlabel('time (s)') plt.ylabel('Isyn (S)') - print "Showing plots ..." + print("Showing plots ...") plt.show() diff --git a/moose-examples/neuroml/lobster_pyloric/channels/ChannelTest.py b/moose-examples/neuroml/lobster_pyloric/channels/ChannelTest.py index 1928c505c1518170dcbcc745e3a34711f954819d..8b1f3e1892d3f2e1c4a37db5e114d8a4b8a52a38 100644 --- a/moose-examples/neuroml/lobster_pyloric/channels/ChannelTest.py +++ b/moose-examples/neuroml/lobster_pyloric/channels/ChannelTest.py @@ -18,16 +18,16 @@ mechanisms = { import sys if len(sys.argv)<2: - print("Selecting a channel randomly form %s" % list(mechanisms.keys())) - channel_name = random.choice( mechanisms.keys() ) - print("Selected %s" % channel_name ) + print(("Selecting a channel randomly form %s" % list(mechanisms.keys()))) + channel_name = random.choice( list(mechanisms.keys()) ) + print(("Selected %s" % channel_name )) else: channel_name = sys.argv[1] if channel_name in mechanisms: mechanism_vars = mechanisms[channel_name] else: - print("Undefined channel, please use one of", list(mechanisms.keys())) + print(("Undefined channel, please use one of", list(mechanisms.keys()))) sys.exit(1) CELSIUS = 35 # degrees Centigrade @@ -39,7 +39,7 @@ from pylab import * if __name__ == "__main__": for varidx in range(len(mechanism_vars)/2): # loop over each inf and tau - print( "Running for %s" % varidx ) + print(( "Running for %s" % varidx )) var = ['X','Y','Z'][varidx] gate = moose.element('/library/'+channel_name+'/gate'+var) VMIN = gate.min diff --git a/moose-examples/neuroml/lobster_pyloric/synapses/AchSyn_STG.py b/moose-examples/neuroml/lobster_pyloric/synapses/AchSyn_STG.py index 65c6a88080089342602ed10cbe6704c6c5ceee6e..8a56bbcf1a6c42ff3bc372e7b231f42845f2472f 100644 --- a/moose-examples/neuroml/lobster_pyloric/synapses/AchSyn_STG.py +++ b/moose-examples/neuroml/lobster_pyloric/synapses/AchSyn_STG.py @@ -8,7 +8,7 @@ from pylab import * try: import moose except ImportError: - print "ERROR: Could not import moose. Please add the directory containing moose.py in your PYTHONPATH" + print("ERROR: Could not import moose. Please add the directory containing moose.py in your PYTHONPATH") import sys sys.exit(1) diff --git a/moose-examples/neuroml/lobster_pyloric/synapses/GluSyn_STG.py b/moose-examples/neuroml/lobster_pyloric/synapses/GluSyn_STG.py index c8cdbecdb6bb4f964ff19c7a4a49d40243ca2149..b03142f21b25ab5926ab3ddb913e85bebe61a9cf 100644 --- a/moose-examples/neuroml/lobster_pyloric/synapses/GluSyn_STG.py +++ b/moose-examples/neuroml/lobster_pyloric/synapses/GluSyn_STG.py @@ -8,7 +8,7 @@ from pylab import * try: import moose except ImportError: - print "ERROR: Could not import moose. Please add the directory containing moose.py in your PYTHONPATH" + print("ERROR: Could not import moose. Please add the directory containing moose.py in your PYTHONPATH") import sys sys.exit(1) diff --git a/moose-examples/paper-2015/Fig2_elecModels/Fig2A.py b/moose-examples/paper-2015/Fig2_elecModels/Fig2A.py index 560167da637eaa587de30ab4e7aaedc1ff0da6d5..0a50accfbbad718010e1ca1db8a93fa7548e149b 100644 --- a/moose-examples/paper-2015/Fig2_elecModels/Fig2A.py +++ b/moose-examples/paper-2015/Fig2_elecModels/Fig2A.py @@ -224,15 +224,15 @@ class ExcInhNetBase: t1 = time.time() print('reinit MOOSE -- takes a while ~20s.') moose.reinit() - print('reinit time t = ', time.time() - t1) + print(('reinit time t = ', time.time() - t1)) t1 = time.time() print('starting') simadvance = self.simtime / 50.0 for i in range( 50 ): moose.start( simadvance ) - print('at t = ', i * simadvance, 'realtime = ', time.time() - t1) + print(('at t = ', i * simadvance, 'realtime = ', time.time() - t1)) #moose.start(self.simtime) - print('runtime for ', self.simtime, 'sec, is t = ', time.time() - t1) + print(('runtime for ', self.simtime, 'sec, is t = ', time.time() - t1)) if plotif: self._plot() diff --git a/moose-examples/paper-2015/Fig2_elecModels/Fig2A_analysis.py b/moose-examples/paper-2015/Fig2_elecModels/Fig2A_analysis.py index 8caeccb58d2c43e0508a7c10c30f5b56dcd478cf..0514bca5e55e8ee42d0e74768df554be54685d53 100644 --- a/moose-examples/paper-2015/Fig2_elecModels/Fig2A_analysis.py +++ b/moose-examples/paper-2015/Fig2_elecModels/Fig2A_analysis.py @@ -13,7 +13,7 @@ fulltime = 1200 #s plotdt = 1 #s numpts = int(fulltime/plotdt)+1 -print 'reading' +print('reading') wts = [] while True: next_line = '' @@ -23,7 +23,7 @@ while True: if next_line == '': break next_wt = [float(fh.readline()) for i in range(numpts)] wts.append(next_wt) - print 'weight',len(wts) + print(('weight',len(wts))) hiAve = np.zeros( len( wts[0] ) ) @@ -54,7 +54,7 @@ dumpVec( f, 'lowExample', wts[5] ) f.close() -print 'numHi = ', numHi, ' plotting...' +print(('numHi = ', numHi, ' plotting...')) figure() plot(transpose(wts)) plot( hiAve, linewidth=4 ) diff --git a/moose-examples/paper-2015/Fig2_elecModels/Fig2C.py b/moose-examples/paper-2015/Fig2_elecModels/Fig2C.py index 5314c3ac7a3e801320e14ac7a4f0d17498b62478..396040263086c111f38aa07d2b00d2c0be382c14 100644 --- a/moose-examples/paper-2015/Fig2_elecModels/Fig2C.py +++ b/moose-examples/paper-2015/Fig2_elecModels/Fig2C.py @@ -182,10 +182,10 @@ def displayPlots(): pylab.figure(2, figsize= (8,10)) ax = pylab.subplot( 1,1,1 ) neuron = moose.element( '/model/elec' ) - comptDistance = dict( zip( neuron.compartments, neuron.pathDistanceFromSoma ) ) + comptDistance = dict( list(zip( neuron.compartments, neuron.pathDistanceFromSoma )) ) for i in moose.wildcardFind( '/library/#[ISA=ChanBase]' ): chans = moose.wildcardFind( '/model/elec/#/' + i.name ) - print i.name, len( chans ) + print((i.name, len( chans ))) p = [ 1e6*comptDistance.get( j.parent, 0) for j in chans ] Gbar = [ j.Gbar/(j.parent.length * j.parent.diameter * PI) for j in chans ] if len( p ) > 2: @@ -213,7 +213,7 @@ def create_vm_viewer(rdes): 0.0, 0.1)]) mapper = moogli.utilities.mapper(colormap, normalizer) - vms = [moose.element(x).Vm for x in network.shapes.keys()] + vms = [moose.element(x).Vm for x in list(network.shapes.keys())] network.set("color", vms, mapper) def prelude(view): @@ -222,7 +222,7 @@ def create_vm_viewer(rdes): def interlude(view): moose.start(frameRunTime) - vms = [moose.element(x).Vm for x in network.shapes.keys()] + vms = [moose.element(x).Vm for x in list(network.shapes.keys())] network.set("color", vms, mapper) view.yaw(0.01) currTime = moose.element('/clock').currentTime @@ -235,7 +235,7 @@ def create_vm_viewer(rdes): displayPlots() viewer = moogli.Viewer("vm-viewer") - viewer.attach_shapes(network.shapes.values()) + viewer.attach_shapes(list(network.shapes.values())) view = moogli.View("vm-view", prelude=prelude, interlude=interlude, @@ -247,7 +247,7 @@ def create_vm_viewer(rdes): def create_ca_viewer(rdes): network = moogli.extensions.moose.read(rdes.elecid.path) ca_elements = [] - for compartment_path in network.shapes.keys(): + for compartment_path in list(network.shapes.keys()): if moose.exists(compartment_path + '/Ca_conc'): ca_elements.append(moose.element(compartment_path + '/Ca_conc')) else: @@ -286,7 +286,7 @@ def create_ca_viewer(rdes): view.stop() viewer = moogli.Viewer("ca-viewer") - viewer.attach_shapes(network.shapes.values()) + viewer.attach_shapes(list(network.shapes.values())) view = moogli.View("ca-view", prelude=prelude, interlude=interlude) @@ -294,7 +294,7 @@ def create_ca_viewer(rdes): return viewer def build3dDisplay(rdes): - print "building 3d Display" + print("building 3d Display") app = QtGui.QApplication(sys.argv) vm_viewer = create_vm_viewer(rdes) @@ -325,7 +325,7 @@ def deliverStim( currTime ): step = int (currTime / frameRunTime ) probeStep = int( probeInterval / frameRunTime ) if step % probeStep == 0: - print "Doing probe Stim at ", currTime + print(("Doing probe Stim at ", currTime)) for i in synSpineList: i.activation( probeAmplitude ) @@ -341,7 +341,7 @@ def main(): temp = set( moose.wildcardFind( "/model/elec/#/glu,/model/elec/#/NMDA" ) ) synDendList = list( temp - set( synSpineList ) ) - print "num spine, dend syns = ", len( synSpineList ), len( synDendList ) + print(("num spine, dend syns = ", len( synSpineList ), len( synDendList ))) moose.reinit() #for i in moose.wildcardFind( '/model/elec/#apical#/#[ISA=CaConcBase]' ): #print i.path, i.length, i.diameter, i.parent.length, i.parent.diameter @@ -350,7 +350,7 @@ def main(): # Run for baseline, tetanus, and post-tetanic settling time t1 = time.time() build3dDisplay(rdes) - print 'real time = ', time.time() - t1 + print(('real time = ', time.time() - t1)) if __name__ == '__main__': main() diff --git a/moose-examples/paper-2015/Fig2_elecModels/Fig2D.py b/moose-examples/paper-2015/Fig2_elecModels/Fig2D.py index ef8a05eb360abf0d054d9e1733b54b8e9abc919e..94ffcd83e8fd5bf6d0922e8d33da418b25ae047b 100644 --- a/moose-examples/paper-2015/Fig2_elecModels/Fig2D.py +++ b/moose-examples/paper-2015/Fig2_elecModels/Fig2D.py @@ -49,7 +49,7 @@ def create_vm_viewer(rdes): 0.0, 0.9)]) mapper = moogli.utilities.mapper(colormap, normalizer) - vms = [moose.element(x).Vm for x in network.shapes.keys()] + vms = [moose.element(x).Vm for x in list(network.shapes.keys())] network.set("color", vms, mapper) def interlude(view): @@ -62,7 +62,7 @@ def create_vm_viewer(rdes): view.stop() viewer = moogli.Viewer("vm-viewer") - viewer.attach_shapes(network.shapes.values()) + viewer.attach_shapes(list(network.shapes.values())) view = moogli.View("vm-view", interlude=interlude) viewer.attach_view(view) @@ -93,7 +93,7 @@ def main(): compts[0].inject = inject ################## Now we set up the display ######################## - print "Setting Up 3D Display" + print("Setting Up 3D Display") app = QtGui.QApplication(sys.argv) vm_viewer = create_vm_viewer(rdes) vm_viewer.showMaximized() diff --git a/moose-examples/paper-2015/Fig2_elecModels/Fig2E.py b/moose-examples/paper-2015/Fig2_elecModels/Fig2E.py index 1a02727ad02c284a9be0e8b25cd6a4052835f5e2..08d64060a50e9e9db9f0fd75be805b5bfed14308 100644 --- a/moose-examples/paper-2015/Fig2_elecModels/Fig2E.py +++ b/moose-examples/paper-2015/Fig2_elecModels/Fig2E.py @@ -59,7 +59,7 @@ def create_vm_viewer(rdes, somaVm): 0.9)]) mapper = moogli.utilities.mapper(colormap, normalizer) - vms = [moose.element(x).Vm for x in network.shapes.keys()] + vms = [moose.element(x).Vm for x in list(network.shapes.keys())] network.set("color", vms, mapper) def prelude(view): @@ -67,7 +67,7 @@ def create_vm_viewer(rdes, somaVm): def interlude(view): moose.start(frameRunTime) - vms = [moose.element(x).Vm for x in network.shapes.keys()] + vms = [moose.element(x).Vm for x in list(network.shapes.keys())] network.set("color", vms, mapper) view.yaw(0.01) currTime = moose.element('/clock').currentTime @@ -84,7 +84,7 @@ def create_vm_viewer(rdes, somaVm): pylab.show() viewer = moogli.Viewer("vm-viewer") - viewer.attach_shapes(network.shapes.values()) + viewer.attach_shapes(list(network.shapes.values())) view = moogli.View("vm-view", prelude=prelude, interlude=interlude, @@ -114,7 +114,7 @@ def main(): compts = moose.wildcardFind( "/model/elec/#[ISA=CompartmentBase]" ) compts[0].inject = inject - print "Setting Up 3D Display" + print("Setting Up 3D Display") app = QtGui.QApplication(sys.argv) vm_viewer = create_vm_viewer(rdes, somaVm) vm_viewer.show() diff --git a/moose-examples/paper-2015/Fig3_chemModels/Fig3D.py b/moose-examples/paper-2015/Fig3_chemModels/Fig3D.py index b2117f22bcb0661fa88a369670b177f0be9f395d..8cd2be9a5be09a84886e120995f474d53934dacd 100644 --- a/moose-examples/paper-2015/Fig3_chemModels/Fig3D.py +++ b/moose-examples/paper-2015/Fig3_chemModels/Fig3D.py @@ -59,7 +59,7 @@ t1 = time.time() for t in range( 0, runtime-1, updateDt ): moose.start( updateDt ) plt = pylab.plot( x, c.vec.n, label='t = '+str(t + updateDt) ) -print "Time = ", time.time() - t1 +print(("Time = ", time.time() - t1)) pylab.ylim( 0, 1.05 ) pylab.legend() diff --git a/moose-examples/paper-2015/Fig3_chemModels/Fig3_NEURON.py b/moose-examples/paper-2015/Fig3_chemModels/Fig3_NEURON.py index ea4330c41b72538109803273637dc740f8673c53..66d03f7a655b824a1b77273d5c2646d986a34e15 100644 --- a/moose-examples/paper-2015/Fig3_chemModels/Fig3_NEURON.py +++ b/moose-examples/paper-2015/Fig3_chemModels/Fig3_NEURON.py @@ -36,9 +36,9 @@ plot_it('r') interval = 50 t1 = time.time() -for i in xrange(1, 5): +for i in range(1, 5): h.continuerun(i * interval) plot_it() -print "Time = ", time.time() - t1 +print(("Time = ", time.time() - t1)) pyplot.show() diff --git a/moose-examples/paper-2015/Fig4_ReacDiff/Fig4B.py b/moose-examples/paper-2015/Fig4_ReacDiff/Fig4B.py index fd3029f1af86fe8976d87650d10fe3537a3767f4..cc19cba3777cb0bc3577bb0460b01dd5e9a363cd 100644 --- a/moose-examples/paper-2015/Fig4_ReacDiff/Fig4B.py +++ b/moose-examples/paper-2015/Fig4_ReacDiff/Fig4B.py @@ -130,7 +130,7 @@ def createVmViewer(rdes): mapper = moogli.utilities.mapper(colormap, normalizer) def prelude(view): - vms = [moose.element(x).Vm for x in network.shapes.keys()] + vms = [moose.element(x).Vm for x in list(network.shapes.keys())] network.set("color", vms, mapper) view.pitch(PI/2.0) view.down(450) @@ -145,7 +145,7 @@ def createVmViewer(rdes): view.yaw(0.01) viewer = moogli.Viewer("vm-viewer") - viewer.attach_shapes(network.shapes.values()) + viewer.attach_shapes(list(network.shapes.values())) view = moogli.View("vm-view", prelude=prelude, interlude=interlude) @@ -167,7 +167,7 @@ def main(): if do3D: app = QtGui.QApplication(sys.argv) compts = moose.wildcardFind( "/model/elec/#[ISA=CompartmentBase]" ) - print "LEN = ", len( compts ) + print(("LEN = ", len( compts ))) for i in compts: n = i.name[:4] if ( n == 'head' or n == 'shaf' ): diff --git a/moose-examples/paper-2015/Fig4_ReacDiff/Fig4CDEF.py b/moose-examples/paper-2015/Fig4_ReacDiff/Fig4CDEF.py index 5d769096ecd263e67ea27394fb7713ecbeb4e79e..5b9a1ddf493908d65556574bc95fb36c8b4cb8ed 100644 --- a/moose-examples/paper-2015/Fig4_ReacDiff/Fig4CDEF.py +++ b/moose-examples/paper-2015/Fig4_ReacDiff/Fig4CDEF.py @@ -175,7 +175,7 @@ def displayPlots(): for k in i[0].vec: plt.plot( timePts, k.vector * i[4] ) #plt.title( i.name ) - print i[0].name + print((i[0].name)) plt.xlabel( 'Time (s)', fontsize = 16 ) plt.show() @@ -194,7 +194,7 @@ def main(): moose.reinit() buildPlots() # Run for baseline, tetanus, and post-tetanic settling time - print 'starting...' + print('starting...') t1 = time.time() moose.start( baselineTime ) caPsd = moose.vec( '/model/chem/psd/Ca_input' ) @@ -218,12 +218,12 @@ def main(): caPsd.concInit = basalCa caDend.concInit = basalCa moose.start( postLtdTime ) - print 'real time = ', time.time() - t1 + print(('real time = ', time.time() - t1)) if do3D: app = QtGui.QApplication(sys.argv) compts = moose.wildcardFind( "/model/elec/#[ISA=compartmentBase]" ) - ecomptPath = map( lambda x : x.path, compts ) + ecomptPath = [x.path for x in compts] morphology = moogli.read_morphology_from_moose(name = "", path = "/model/elec") morphology.create_group( "group_all", ecomptPath, -0.08, 0.02, \ [0.0, 0.5, 1.0, 1.0], [1.0, 0.0, 0.0, 0.9] ) diff --git a/moose-examples/paper-2015/Fig4_ReacDiff/Fig4GHIJ.py b/moose-examples/paper-2015/Fig4_ReacDiff/Fig4GHIJ.py index 997dfd916d583d487ed22f4efc2dd8ed4ee10a97..aec72b1f453867edd681478645a8e0e1ec654de0 100644 --- a/moose-examples/paper-2015/Fig4_ReacDiff/Fig4GHIJ.py +++ b/moose-examples/paper-2015/Fig4_ReacDiff/Fig4GHIJ.py @@ -175,7 +175,7 @@ def displayPlots(): for k in i[0].vec: plt.plot( timePts, k.vector * i[4] ) #plt.title( i.name ) - print i[0].name + print((i[0].name)) plt.xlabel( 'Time (s)', fontsize = 16 ) plt.show() @@ -194,7 +194,7 @@ def main(): moose.reinit() buildPlots() # Run for baseline, tetanus, and post-tetanic settling time - print 'starting...' + print('starting...') t1 = time.time() moose.start( baselineTime ) caPsd = moose.vec( '/model/chem/psd/Ca_input' ) @@ -218,12 +218,12 @@ def main(): caPsd.concInit = basalCa caDend.concInit = basalCa moose.start( postLtdTime ) - print 'real time = ', time.time() - t1 + print(('real time = ', time.time() - t1)) if do3D: app = QtGui.QApplication(sys.argv) compts = moose.wildcardFind( "/model/elec/#[ISA=compartmentBase]" ) - ecomptPath = map( lambda x : x.path, compts ) + ecomptPath = [x.path for x in compts] morphology = moogli.read_morphology_from_moose(name = "", path = "/model/elec") morphology.create_group( "group_all", ecomptPath, -0.08, 0.02, \ [0.0, 0.5, 1.0, 1.0], [1.0, 0.0, 0.0, 0.9] ) diff --git a/moose-examples/paper-2015/Fig4_ReacDiff/rxdSpineSize.py b/moose-examples/paper-2015/Fig4_ReacDiff/rxdSpineSize.py index 1d071aba3aceba2f52303e4404d90aea61aaf852..544adc56cca8b4a302b2457358323c1e384fac28 100644 --- a/moose-examples/paper-2015/Fig4_ReacDiff/rxdSpineSize.py +++ b/moose-examples/paper-2015/Fig4_ReacDiff/rxdSpineSize.py @@ -54,7 +54,7 @@ def makeChemProto( name ): chem = moose.Neutral( '/library/' + name ) comptVol = diffLen * dendDia * dendDia * PI / 4.0 for i in ( ['dend', comptVol], ['spine', 1e-19], ['psd', 1e-20] ): - print 'making ', i + print(('making ', i)) compt = moose.CubeMesh( chem.path + '/' + i[0] ) compt.volume = i[1] #x = moose.Pool( compt.path + '/x' ) @@ -72,7 +72,7 @@ def makeChemProto( name ): x.diffConst = diffConst func = moose.Function( x.path + '/func' ) func.expr = "-x0 * (0.3 - " + nstr + " * x0) * ( 1 - " + nstr + " * x0)" - print func.expr + print((func.expr)) func.x.num = 1 moose.connect( x, 'nOut', func.x[0], 'input' ) moose.connect( func, 'valueOut', x, 'increment' ) @@ -264,9 +264,9 @@ def create_viewer(path, moose_dendrite, dendZ, diaTab, psdZ): view.stop() viewer = moogli.Viewer("Viewer") - viewer.attach_shapes(network.shapes.values()) + viewer.attach_shapes(list(network.shapes.values())) viewer.detach_shape(dendrite) - viewer.attach_shapes(chem_compt_group.shapes.values()) + viewer.attach_shapes(list(chem_compt_group.shapes.values())) view = moogli.View("main-view", prelude=prelude, diff --git a/moose-examples/paper-2015/Fig5_CellMultiscale/Fig5A.py b/moose-examples/paper-2015/Fig5_CellMultiscale/Fig5A.py index 330516ea1a36b29b354d416343f32f966f73f5a0..0aa1e00b24fc41a4a5104104245d2eb56544e639 100644 --- a/moose-examples/paper-2015/Fig5_CellMultiscale/Fig5A.py +++ b/moose-examples/paper-2015/Fig5_CellMultiscale/Fig5A.py @@ -109,7 +109,7 @@ def interlude( view ): view.yaw( 0.01 ) def create_viewer(rdes): - print ' doing viewer for ', rdes.soma.path + print((' doing viewer for ', rdes.soma.path)) network = moogli.extensions.moose.read(rdes.elecid.path) normalizer = moogli.utilities.normalizer(-0.08, 0.02, @@ -125,10 +125,10 @@ def create_viewer(rdes): 0.9)]) mapper = moogli.utilities.mapper(colormap, normalizer) - vms = [moose.element(x).Vm for x in network.shapes.keys()] + vms = [moose.element(x).Vm for x in list(network.shapes.keys())] network.set("color", vms, mapper) viewer = moogli.Viewer("vm-viewer") - viewer.attach_shapes(network.shapes.values()) + viewer.attach_shapes(list(network.shapes.values())) view = moogli.View("vm-view", interlude=interlude ) viewer.attach_view(view) viewer.show() @@ -143,7 +143,7 @@ def main(): viewers = [] j = 0 for i in elecFileNames: - print i + print(i) ename = '/model' + str(j) rdes.cellProtoList = [ ['./cells/' + i, 'elec' ] ] rdes.buildModel( ename ) diff --git a/moose-examples/paper-2015/Fig5_CellMultiscale/Fig5BCD.py b/moose-examples/paper-2015/Fig5_CellMultiscale/Fig5BCD.py index 78595b4d1e0186cc5c0721a721ccf25bd9b5a976..7e3889cd860876bb58c7e0ad0840e225013dc1cb 100644 --- a/moose-examples/paper-2015/Fig5_CellMultiscale/Fig5BCD.py +++ b/moose-examples/paper-2015/Fig5_CellMultiscale/Fig5BCD.py @@ -197,7 +197,7 @@ def buildPlots( rdes ): moose.connect( eSpineGkTab, 'requestOut', path, 'getGk' ) def saveAndClearPlots( name ): - print 'saveAndClearPlots( ', name, ' )' + print(('saveAndClearPlots( ', name, ' )')) for i in moose.wildcardFind( "/graphs/#" ): #plot stuff i.xplot( name + '.xplot', i.name ) @@ -208,8 +208,8 @@ def printPsd( name ): psdR = moose.vec( '/model/chem/psd/tot_PSD_R' ) neuronVoxel = moose.element( '/model/chem/spine' ).neuronVoxel elecComptMap = moose.element( '/model/chem/dend' ).elecComptMap - print "len( neuronVoxel = ", len( neuronVoxel), min( neuronVoxel), max( neuronVoxel) - print len( elecComptMap), elecComptMap[0], elecComptMap[12] + print(("len( neuronVoxel = ", len( neuronVoxel), min( neuronVoxel), max( neuronVoxel))) + print((len( elecComptMap), elecComptMap[0], elecComptMap[12])) neuron = moose.element( '/model/elec' ) ncompts = neuron.compartments d = {} @@ -255,7 +255,7 @@ def main(): numpy.random.seed( 1234 ) rdes = buildRdesigneur() for i in elecFileNames: - print i + print(i) rdes.cellProtoList = [ ['./cells/' + i, 'elec'] ] rdes.buildModel( '/model' ) assert( moose.exists( '/model' ) ) @@ -270,7 +270,7 @@ def main(): probeStimulus( baselineTime ) tetanicStimulus( tetTime ) probeStimulus( postTetTime ) - print 'real time = ', time.time() - t1 + print(('real time = ', time.time() - t1)) printPsd( i + ".fig5" ) saveAndClearPlots( i + ".fig5" ) diff --git a/moose-examples/paper-2015/Fig6_NetMultiscale/Fig6A.py b/moose-examples/paper-2015/Fig6_NetMultiscale/Fig6A.py index 88193dbc4a88bf2cdc85d91aa8225e030d0eed09..489b1b7655abd2833e1f28984e98975f29168f3b 100644 --- a/moose-examples/paper-2015/Fig6_NetMultiscale/Fig6A.py +++ b/moose-examples/paper-2015/Fig6_NetMultiscale/Fig6A.py @@ -319,7 +319,7 @@ class ExcInhNetBase: numVms = 10 self.plots = moose.Table( '/plotVms', numVms ) ## draw numVms out of N neurons - nrnIdxs = random.sample(range(self.N),numVms) + nrnIdxs = random.sample(list(range(self.N)),numVms) for i in range( numVms ): moose.connect( self.network.vec[nrnIdxs[i]], 'VmOut', \ self.plots.vec[i], 'input') @@ -444,7 +444,7 @@ def create_viewer(rdes): # dendrite.set_colors(moogli.core.Vec4f(173 / 255.0, 216 / 255.0, 230 / 255.0, 1.0)) [shape.set_radius(shape.get_apex_radius() * 4.0) for shape in - network.groups["spine"].groups["head"].shapes.values()] + list(network.groups["spine"].groups["head"].shapes.values())] # print "Creating LIFS" soma = network.shapes[rdes.soma.path] @@ -474,8 +474,8 @@ def create_viewer(rdes): # print "Creating Viewer" viewer = moogli.Viewer("viewer") # prelude = prelude, interlude = interlude) # print "Created Viewer" - viewer.attach_shapes(network.shapes.values()) - viewer.attach_shapes(lifs.shapes.values()) + viewer.attach_shapes(list(network.shapes.values())) + viewer.attach_shapes(list(lifs.shapes.values())) # print "Attached Shapes" view = moogli.View("view", interlude=interlude) viewer.attach_view(view) @@ -492,7 +492,7 @@ if __name__=='__main__': ## Instantiate either ExcInhNetBase or ExcInhNet below #net = ExcInhNetBase(N=N) net = ExcInhNet(N=N) - print net + print(net) moose.le( '/' ) moose.le( '/network' ) rdes = buildRdesigneur() diff --git a/moose-examples/paper-2015/Fig6_NetMultiscale/Fig6BCDE.py b/moose-examples/paper-2015/Fig6_NetMultiscale/Fig6BCDE.py index 82a9ece3a68a9665c0615a17480a06df9ce8a35b..9a5fb80661ca0b395fd985f6cf31381ef1f1d7f2 100644 --- a/moose-examples/paper-2015/Fig6_NetMultiscale/Fig6BCDE.py +++ b/moose-examples/paper-2015/Fig6_NetMultiscale/Fig6BCDE.py @@ -1,5 +1,3 @@ -from __future__ import print_function - #/********************************************************************** #** This program is part of 'MOOSE', the #** Messaging Object Oriented Simulation Environment. @@ -12,6 +10,7 @@ from __future__ import print_function ''' This LIF network with Ca plasticity is based on: David Higgins, Michael Graupner, Nicolas Brunel + Memory Maintenance in Synapses with Calcium-Based Plasticity in the Presence of Background Activity PLOS Computational Biology, 2014. @@ -22,8 +21,11 @@ This variant has 2500 LIF neurons Upi Bhalla, Nov 2014: Appended single neuron model. This script generates the panels in Figure 6. It takes a long time, about 65 minutes to run 30 seconds of simulation time. + ''' +from __future__ import print_function + ## import modules and functions to be used import numpy as np import matplotlib.pyplot as plt @@ -936,4 +938,4 @@ if __name__=='__main__': plt.show() plt.savefig( fname + '.svg', bbox_inches='tight') print( "Hit 'enter' to exit" ) - input() + eval(input()) diff --git a/moose-examples/paper-2015/Fig6_NetMultiscale/ReducedModel.py b/moose-examples/paper-2015/Fig6_NetMultiscale/ReducedModel.py index 75c51617477a0ec208570ec5ff5251bc7b4d4bba..3f151cb3f6c5e8fad454c98c956cb1b6ed003a9e 100644 --- a/moose-examples/paper-2015/Fig6_NetMultiscale/ReducedModel.py +++ b/moose-examples/paper-2015/Fig6_NetMultiscale/ReducedModel.py @@ -1,4 +1,3 @@ - #/********************************************************************** #** This program is part of 'MOOSE', the #** Messaging Object Oriented Simulation Environment. @@ -8,6 +7,8 @@ #** See the file COPYING.LIB for the full notice. #**********************************************************************/ +from __future__ import print_function + ''' This LIF network with Ca plasticity is based on: David Higgins, Michael Graupner, Nicolas Brunel @@ -314,7 +315,7 @@ def connectDetailedNeuron(): x.vec.weight = nprand.rand( exc.numEntries ) * excWeightMax #x.parent.tick = 4 x.parent.parent.tick = 4 - print '+', + print('+', end=' ') totGluWt += sum(x.vec.weight) * x.parent.parent.Gbar seed = excSeed @@ -330,7 +331,7 @@ def connectDetailedNeuron(): x.vec.weight = nprand.rand( exc.numEntries ) * nmdaWeightMax #x.parent.tick = 4 x.parent.parent.tick = 4 - print '*', + print('*', end=' ') totNMDAWt += sum(x.vec.weight) * x.parent.parent.Gbar seed = inhSeed @@ -345,11 +346,11 @@ def connectDetailedNeuron(): x.vec.weight = nprand.rand( inh.numEntries ) * inhWeightMax #x.parent.tick = 4 x.parent.parent.tick = 4 - print '-', + print('-', end=' ') totGABAWt += sum(x.vec.weight) * x.parent.parent.Gbar - print 'connectDetailedNeuron: numExc = ', numExc, ', numNMDA=', numNMDA, ', numInh = ', numInh - print 'connectDetailedNeuron: totWts Glu = ', totGluWt, ', NMDA = ', totNMDAWt, ', GABA = ', totGABAWt + print('connectDetailedNeuron: numExc = ', numExc, ', numNMDA=', numNMDA, ', numInh = ', numInh) + print('connectDetailedNeuron: totWts Glu = ', totGluWt, ', NMDA = ', totNMDAWt, ', GABA = ', totGABAWt) ############################################# # Exc-Inh network base class without connections @@ -452,7 +453,7 @@ class ExcInhNetBase: numVms = 10 self.plots = moose.Table( '/plotVms', numVms ) ## draw numVms out of N neurons - nrnIdxs = random.sample(range(self.N),numVms) + nrnIdxs = random.sample(list(range(self.N)),numVms) for i in range( numVms ): moose.connect( self.network.vec[nrnIdxs[i]], 'VmOut', \ self.plots.vec[i], 'input') @@ -577,7 +578,7 @@ class ExcInhNet(ExcInhNetBase): ## Connections from some Exc neurons to each Exc neuron ## draw excC number of neuron indices out of NmaxExc neurons - preIdxs = random.sample(range(self.NmaxExc),self.excC) + preIdxs = random.sample(list(range(self.NmaxExc)),self.excC) ## connect these presynaptically to i-th post-synaptic neuron for synnum,preIdx in enumerate(preIdxs): synidx = i*self.excC+synnum @@ -630,7 +631,7 @@ class ExcInhNet(ExcInhNetBase): ## Connections from some Inh neurons to each Exc neuron ## draw inhC=incC-excC number of neuron indices out of inhibitory neurons - preIdxs = random.sample(range(self.NmaxExc,self.N),self.incC-self.excC) + preIdxs = random.sample(list(range(self.NmaxExc,self.N)),self.incC-self.excC) ## connect these presynaptically to i-th post-synaptic neuron for synnum,preIdx in enumerate(preIdxs): synij = self.synsIE.vec[i].synapse[synnum] @@ -645,7 +646,7 @@ class ExcInhNet(ExcInhNetBase): self.synsI.vec[i].numSynapses = self.incC ## draw excC number of neuron indices out of NmaxExc neurons - preIdxs = random.sample(range(self.NmaxExc),self.excC) + preIdxs = random.sample(list(range(self.NmaxExc)),self.excC) ## connect these presynaptically to i-th post-synaptic neuron for synnum,preIdx in enumerate(preIdxs): synij = self.synsI.vec[i].synapse[synnum] @@ -655,7 +656,7 @@ class ExcInhNet(ExcInhNetBase): synij.weight = self.J # activation = weight ## draw inhC=incC-excC number of neuron indices out of inhibitory neurons - preIdxs = random.sample(range(self.NmaxExc,self.N),self.incC-self.excC) + preIdxs = random.sample(list(range(self.NmaxExc,self.N)),self.incC-self.excC) ## connect these presynaptically to i-th post-synaptic neuron for synnum,preIdx in enumerate(preIdxs): synij = self.synsI.vec[i].synapse[ self.excC + synnum ] @@ -829,7 +830,7 @@ if __name__=='__main__': ## Instantiate either ExcInhNetBase or ExcInhNet below #net = ExcInhNetBase(N=N) net = ExcInhNet(N=N) - print net + print(net) moose.le( '/' ) moose.le( '/network' ) rdes = buildRdesigneur() @@ -865,7 +866,7 @@ if __name__=='__main__': moose.reinit() t1 = time.time() - print 'starting' + print('starting') for currTime in np.arange( 0, simtime, updateDt ): moose.start(updateDt) lastt = net.network.vec.lastEventTime @@ -874,7 +875,7 @@ if __name__=='__main__': ret.set_array( lastt ) fig2.canvas.draw() - print 'runtime, t = ', time.time() - t1 + print('runtime, t = ', time.time() - t1) if plotif: net._plot( fig ) @@ -884,4 +885,4 @@ if __name__=='__main__': plt.show() plt.savefig( fname + '.svg', bbox_inches='tight') print( "Hit 'enter' to exit" ) - raw_input() + input() diff --git a/moose-examples/paper-2015/rxdSpineSize.py b/moose-examples/paper-2015/rxdSpineSize.py index c6fb82808c8bdf9fb3390f0b4a77ebe49d5cded7..77a9fec80c87a5998d69d09a9682055f3957d75f 100644 --- a/moose-examples/paper-2015/rxdSpineSize.py +++ b/moose-examples/paper-2015/rxdSpineSize.py @@ -54,7 +54,7 @@ def makeChemProto( name ): chem = moose.Neutral( '/library/' + name ) comptVol = diffLen * dendDia * dendDia * PI / 4.0 for i in ( ['dend', comptVol], ['spine', 1e-19], ['psd', 1e-20] ): - print 'making ', i + print(('making ', i)) compt = moose.CubeMesh( chem.path + '/' + i[0] ) compt.volume = i[1] #x = moose.Pool( compt.path + '/x' ) @@ -72,7 +72,7 @@ def makeChemProto( name ): x.diffConst = diffConst func = moose.Function( x.path + '/func' ) func.expr = "-x0 * (0.3 - " + nstr + " * x0) * ( 1 - " + nstr + " * x0)" - print func.expr + print((func.expr)) func.x.num = 1 moose.connect( x, 'nOut', func.x[0], 'input' ) moose.connect( func, 'valueOut', x, 'increment' ) @@ -264,9 +264,9 @@ def create_viewer(path, moose_dendrite, dendZ, diaTab, psdZ): view.stop() viewer = moogli.Viewer("Viewer") - viewer.attach_shapes(network.shapes.values()) + viewer.attach_shapes(list(network.shapes.values())) viewer.detach_shape(dendrite) - viewer.attach_shapes(chem_compt_group.shapes.values()) + viewer.attach_shapes(list(chem_compt_group.shapes.values())) view = moogli.View("main-view", prelude=prelude, diff --git a/moose-examples/parallelSolver/Fig2_v4.py b/moose-examples/parallelSolver/Fig2_v4.py index 87888ade01d5bd32d0bf8e46279ac3501486e6b8..52535a3bcb8334c50190c63f8c2bbede77886ee8 100644 --- a/moose-examples/parallelSolver/Fig2_v4.py +++ b/moose-examples/parallelSolver/Fig2_v4.py @@ -1,229 +1,229 @@ -# Generates time-series response to a Ca pulse for each of the models. No -# diffusion involved. - -import sys -import numpy as np -import pylab -import matplotlib.pyplot as plt -import moose -import abstrModelEqns2 -import rdesigneur as rd -import time - - -def singleCompt( name, params ): - mod = moose.copy( '/library/' + name + '/' + name, '/model' ) - A = moose.element( mod.path + '/A' ) - Z = moose.element( mod.path + '/Z' ) - Z.nInit = 1 - Ca = moose.element( mod.path + '/Ca' ) - CaStim = moose.element( Ca.path + '/CaStim' ) - runtime = params['preStimTime'] + params['stimWidth'] + params['postStimTime'] - steptime = 100 - - CaStim.expr += ' + x2 * (t > ' + str( runtime ) + ' ) * ( t < ' + str( runtime + steptime ) + ' )' - print CaStim.expr - tab = moose.Table2( '/model/' + name + '/Atab' ) - #for i in range( 10, 19 ): - #moose.setClock( i, 0.01 ) - ampl = moose.element( mod.path + '/ampl' ) - phase = moose.element( mod.path + '/phase' ) - moose.connect( tab, 'requestOut', A, 'getN' ) - ampl.nInit = params['stimAmplitude'] * 1 - phase.nInit = params['preStimTime'] - - ksolve = moose.Ksolve( mod.path + '/ksolve' ) - stoich = moose.Stoich( mod.path + '/stoich' ) - stoich.compartment = mod - stoich.ksolve = ksolve - stoich.path = mod.path + '/##' - runtime += 2 * steptime - - moose.reinit() - moose.start( runtime ) - t = np.arange( 0, runtime + 1e-9, tab.dt ) - return name, t, tab.vector - #pylab.plot( t, tab.vector, label='[A] (mM)' ) - - #pylab.show() - -def plotBoilerplate( panelTitle, plotPos, xlabel = ''): - ax = plt.subplot( 8,4,plotPos ) - #ax.xaxis.set_ticks( i[1] ) - #ax.locator_params( - ax.spines['top'].set_visible( False ) - ax.spines['right'].set_visible( False ) - ax.tick_params( direction = 'out' ) - if (((plotPos -1)/4) % 2) == 0: - ax.set_xticklabels([]) - else: - ax.set_xlabel( xlabel ) - for tick in ax.xaxis.get_major_ticks(): - tick.tick2On = False - for tick in ax.yaxis.get_major_ticks(): - tick.tick2On = False - - if (plotPos % 4) == 1: - plt.ylabel( 'conc', fontsize = 16 ) - # alternate way of doing this separately. - #plt.yaxis.label.size_size(16) - #plt.title( 'B' ) - ax.text( -0.3, 1, panelTitle, fontsize = 18, weight = 'bold', - transform=ax.transAxes ) - return ax - -def plotPanelB(): - panelB = [] - panelBticks = [] - panelB.append( singleCompt( 'fhn', abstrModelEqns2.makeFHN() ) ) - panelB.append( singleCompt( 'bis', abstrModelEqns2.makeBis() ) ) - panelB.append( singleCompt( 'negFB', abstrModelEqns2.makeNegFB() ) ) - panelB.append( singleCompt( 'negFF', abstrModelEqns2.makeNegFF() ) ) - - panelBticks.append( np.arange( 0, 4.00001, 1 ) ) - panelBticks.append( np.arange( 0, 4.00001, 1 ) ) - panelBticks.append( np.arange( 0, 15.00001, 5 ) ) - panelBticks.append( np.arange( 0, 6.00001, 2 ) ) - moose.delete( '/model' ) - - for i in zip( panelB, panelBticks, range( len( panelB ) ) ): - plotPos = i[2] + 5 - ax = plotBoilerplate( 'B', plotPos ) - plt.plot( i[0][1], i[0][2] ) - xmax = ax.get_xlim()[1] - #ax.xaxis.set_ticks( np.arange( 0, xmax, 50 ) ) - ax.xaxis.set_ticks( np.arange( 0, 200.001, 50 ) ) - ax.yaxis.set_ticks( i[1] ) - -def runPanelCDEF( name, dist, seqDt, numSpine, seq, stimAmpl ): - preStim = 10.0 - blanks = 20 - rdes = rd.rdesigneur( - useGssa = False, - turnOffElec = True, - chemPlotDt = 0.1, - #diffusionLength = params['diffusionLength'], - diffusionLength = 1e-6, - cellProto = [['cell', 'soma']], - chemProto = [['dend', name]], - chemDistrib = [['dend', 'soma', 'install', '1' ]], - plotList = [['soma', '1', 'dend' + '/A', 'n', '# of A']], - ) - rdes.buildModel() - #for i in range( 20 ): - #moose.setClock( i, 0.02 ) - A = moose.vec( '/model/chem/dend/A' ) - Z = moose.vec( '/model/chem/dend/Z' ) - print moose.element( '/model/chem/dend/A/Adot' ).expr - print moose.element( '/model/chem/dend/B/Bdot' ).expr - print moose.element( '/model/chem/dend/Ca/CaStim' ).expr - phase = moose.vec( '/model/chem/dend/phase' ) - ampl = moose.vec( '/model/chem/dend/ampl' ) - vel = moose.vec( '/model/chem/dend/vel' ) - vel.nInit = 1e-6 * seqDt - ampl.nInit = stimAmpl - stride = int( dist ) / numSpine - phase.nInit = 10000 - Z.nInit = 0 - for j in range( numSpine ): - k = blanks + j * stride - Z[k].nInit = 1 - phase[k].nInit = preStim + seq[j] * seqDt - moose.reinit() - runtime = 50 - snapshot = preStim + seqDt * (numSpine - 0.8) - print snapshot - #snapshot = 26 - moose.start( snapshot ) - avec = moose.vec( '/model/chem/dend/A' ).n - moose.start( runtime - snapshot ) - tvec = [] - for i in range( 5 ): - tab = moose.element( '/model/graphs/plot0[' + str( blanks + i * stride ) + ']' ) - dt = tab.dt - tvec.append( tab.vector ) - moose.delete( '/model' ) - return dt, tvec, avec - -def makePassiveSoma( name, length, diameter ): - elecid = moose.Neuron( '/library/' + name ) - dend = moose.Compartment( elecid.path + '/soma' ) - dend.diameter = diameter - dend.length = length - dend.x = length - return elecid - -def plotOnePanel( tLabel, dt, tplot, numSyn, plotRange, tick ): - t = np.arange( 0, len( tplot[0] ), 1.0 ) * dt - ax = plotBoilerplate( tLabel, 1 + start ) - for i in range( 5 ): - plt.plot( t, tplot[i] ) - ax.yaxis.set_ticks( np.arange( 0, plotRange, tick ) ) - - -def plotPanelCDEF( seq, row ): - makePassiveSoma( 'cell', 100e-6, 10e-6 ) - start = (row -1) * 4 - tLabel = chr( ord( 'A' ) + row - 1 ) - xLabel = chr( ord( 'C' ) + row - 1 ) - xplot = [] - #dt, tplot, avec = runPanelCDEF( 'fhn', 15.0, 3.0, 5, seq, 0.4 ) - dt, tplot, avec = runPanelCDEF( 'fhn', 5.0, 0.5, 5, seq, 0.4 ) - xplot.append( avec ) - #plotOnePanel( dt, 'B', tplot, 5, 1.5, 0.5 ) - t = np.arange( 0, len( tplot[0] ), 1.0 ) * dt - #ax = plotBoilerplate( tLabel, 1 + start ) - ax = plotBoilerplate( tLabel, 1 + start, 'Time (s)') - for i in range( 5 ): - plt.plot( t, tplot[i] ) - yl = ax.get_ylim()[1] - ax.yaxis.set_ticks( np.arange( 0, 4.0001, 1.0 ) ) - - #dt, tplot, avec = runPanelCDEF( 'bis', 5.0, 4.0, 5, seq, 1.0 ) - dt, tplot, avec = runPanelCDEF( 'bis', 15.0, 2.0, 5, seq, 1.0 ) - xplot.append( avec ) - t = np.arange( 0, len( tplot[0] ), 1.0 ) * dt - ax = plotBoilerplate( tLabel, 2 + start, 'Time (s)' ) - for i in range( 5 ): - plt.plot( t, tplot[i] ) - yl = ax.get_ylim()[1] - ax.yaxis.set_ticks( np.arange( 0, 3.0001, 1.0 ) ) - - dt, tplot, avec = runPanelCDEF( 'negFB', 5.0, 2.0, 5, seq, 1.0 ) - xplot.append( avec ) - t = np.arange( 0, len( tplot[0] ), 1.0 ) * dt - ax = plotBoilerplate( tLabel, 3 + start, 'Time (s)') - for i in range( 5 ): - plt.plot( t, tplot[i] ) - ax.yaxis.set_ticks( np.arange( 0, 10.00001, 5.0 ) ) - - dt, tplot, avec = runPanelCDEF( 'negFF', 5.0, 4.0, 5, seq, 1.0 ) - xplot.append( avec ) - t = np.arange( 0, len( tplot[0] ), 1.0 ) * dt - ax = plotBoilerplate( tLabel, 4 + start, 'Time (s)') - for i in range( 5 ): - plt.plot( t, tplot[i] ) - ax.yaxis.set_ticks( np.arange( 0, 5.00001, 2.0 ) ) - - for i in zip( range(4), (4.0, 3.0, 10, 4 ), (1, 1, 5, 2) ): - ax = plotBoilerplate( xLabel, 9 + start + i[0], 'Position( um)' ) - plt.plot( xplot[i[0]][:50] ) - ax.yaxis.set_ticks( np.arange( 0, i[1] * 1.0000001, i[2] ) ) - -################################################################## -if __name__ == '__main__': - moose.Neutral( '/library' ) - moose.Neutral( '/model' ) - - t1 = time.time() - fig = plt.figure( figsize = (10,10), facecolor='white' ) - fig.subplots_adjust( left = 0.18 ) - plotPanelB() - plotPanelCDEF( [0,1,2,3,4], 3 ) - plotPanelCDEF( [4,1,0,3,2], 4 ) - print ("Time taken = ", time.time() - t1) - plt.tight_layout() - - plt.show() - - +# Generates time-series response to a Ca pulse for each of the models. No +# diffusion involved. + +import sys +import numpy as np +import pylab +import matplotlib.pyplot as plt +import moose +import abstrModelEqns2 +import rdesigneur as rd +import time + + +def singleCompt( name, params ): + mod = moose.copy( '/library/' + name + '/' + name, '/model' ) + A = moose.element( mod.path + '/A' ) + Z = moose.element( mod.path + '/Z' ) + Z.nInit = 1 + Ca = moose.element( mod.path + '/Ca' ) + CaStim = moose.element( Ca.path + '/CaStim' ) + runtime = params['preStimTime'] + params['stimWidth'] + params['postStimTime'] + steptime = 100 + + CaStim.expr += ' + x2 * (t > ' + str( runtime ) + ' ) * ( t < ' + str( runtime + steptime ) + ' )' + print(CaStim.expr) + tab = moose.Table2( '/model/' + name + '/Atab' ) + #for i in range( 10, 19 ): + #moose.setClock( i, 0.01 ) + ampl = moose.element( mod.path + '/ampl' ) + phase = moose.element( mod.path + '/phase' ) + moose.connect( tab, 'requestOut', A, 'getN' ) + ampl.nInit = params['stimAmplitude'] * 1 + phase.nInit = params['preStimTime'] + + ksolve = moose.Ksolve( mod.path + '/ksolve' ) + stoich = moose.Stoich( mod.path + '/stoich' ) + stoich.compartment = mod + stoich.ksolve = ksolve + stoich.path = mod.path + '/##' + runtime += 2 * steptime + + moose.reinit() + moose.start( runtime ) + t = np.arange( 0, runtime + 1e-9, tab.dt ) + return name, t, tab.vector + #pylab.plot( t, tab.vector, label='[A] (mM)' ) + + #pylab.show() + +def plotBoilerplate( panelTitle, plotPos, xlabel = ''): + ax = plt.subplot( 8,4,plotPos ) + #ax.xaxis.set_ticks( i[1] ) + #ax.locator_params( + ax.spines['top'].set_visible( False ) + ax.spines['right'].set_visible( False ) + ax.tick_params( direction = 'out' ) + if (((plotPos -1)/4) % 2) == 0: + ax.set_xticklabels([]) + else: + ax.set_xlabel( xlabel ) + for tick in ax.xaxis.get_major_ticks(): + tick.tick2On = False + for tick in ax.yaxis.get_major_ticks(): + tick.tick2On = False + + if (plotPos % 4) == 1: + plt.ylabel( 'conc', fontsize = 16 ) + # alternate way of doing this separately. + #plt.yaxis.label.size_size(16) + #plt.title( 'B' ) + ax.text( -0.3, 1, panelTitle, fontsize = 18, weight = 'bold', + transform=ax.transAxes ) + return ax + +def plotPanelB(): + panelB = [] + panelBticks = [] + panelB.append( singleCompt( 'fhn', abstrModelEqns2.makeFHN() ) ) + panelB.append( singleCompt( 'bis', abstrModelEqns2.makeBis() ) ) + panelB.append( singleCompt( 'negFB', abstrModelEqns2.makeNegFB() ) ) + panelB.append( singleCompt( 'negFF', abstrModelEqns2.makeNegFF() ) ) + + panelBticks.append( np.arange( 0, 4.00001, 1 ) ) + panelBticks.append( np.arange( 0, 4.00001, 1 ) ) + panelBticks.append( np.arange( 0, 15.00001, 5 ) ) + panelBticks.append( np.arange( 0, 6.00001, 2 ) ) + moose.delete( '/model' ) + + for i in zip( panelB, panelBticks, list(range( len( panelB ))) ): + plotPos = i[2] + 5 + ax = plotBoilerplate( 'B', plotPos ) + plt.plot( i[0][1], i[0][2] ) + xmax = ax.get_xlim()[1] + #ax.xaxis.set_ticks( np.arange( 0, xmax, 50 ) ) + ax.xaxis.set_ticks( np.arange( 0, 200.001, 50 ) ) + ax.yaxis.set_ticks( i[1] ) + +def runPanelCDEF( name, dist, seqDt, numSpine, seq, stimAmpl ): + preStim = 10.0 + blanks = 20 + rdes = rd.rdesigneur( + useGssa = False, + turnOffElec = True, + chemPlotDt = 0.1, + #diffusionLength = params['diffusionLength'], + diffusionLength = 1e-6, + cellProto = [['cell', 'soma']], + chemProto = [['dend', name]], + chemDistrib = [['dend', 'soma', 'install', '1' ]], + plotList = [['soma', '1', 'dend' + '/A', 'n', '# of A']], + ) + rdes.buildModel() + #for i in range( 20 ): + #moose.setClock( i, 0.02 ) + A = moose.vec( '/model/chem/dend/A' ) + Z = moose.vec( '/model/chem/dend/Z' ) + print(moose.element( '/model/chem/dend/A/Adot' ).expr) + print(moose.element( '/model/chem/dend/B/Bdot' ).expr) + print(moose.element( '/model/chem/dend/Ca/CaStim' ).expr) + phase = moose.vec( '/model/chem/dend/phase' ) + ampl = moose.vec( '/model/chem/dend/ampl' ) + vel = moose.vec( '/model/chem/dend/vel' ) + vel.nInit = 1e-6 * seqDt + ampl.nInit = stimAmpl + stride = int( dist ) / numSpine + phase.nInit = 10000 + Z.nInit = 0 + for j in range( numSpine ): + k = blanks + j * stride + Z[k].nInit = 1 + phase[k].nInit = preStim + seq[j] * seqDt + moose.reinit() + runtime = 50 + snapshot = preStim + seqDt * (numSpine - 0.8) + print(snapshot) + #snapshot = 26 + moose.start( snapshot ) + avec = moose.vec( '/model/chem/dend/A' ).n + moose.start( runtime - snapshot ) + tvec = [] + for i in range( 5 ): + tab = moose.element( '/model/graphs/plot0[' + str( blanks + i * stride ) + ']' ) + dt = tab.dt + tvec.append( tab.vector ) + moose.delete( '/model' ) + return dt, tvec, avec + +def makePassiveSoma( name, length, diameter ): + elecid = moose.Neuron( '/library/' + name ) + dend = moose.Compartment( elecid.path + '/soma' ) + dend.diameter = diameter + dend.length = length + dend.x = length + return elecid + +def plotOnePanel( tLabel, dt, tplot, numSyn, plotRange, tick ): + t = np.arange( 0, len( tplot[0] ), 1.0 ) * dt + ax = plotBoilerplate( tLabel, 1 + start ) + for i in range( 5 ): + plt.plot( t, tplot[i] ) + ax.yaxis.set_ticks( np.arange( 0, plotRange, tick ) ) + + +def plotPanelCDEF( seq, row ): + makePassiveSoma( 'cell', 100e-6, 10e-6 ) + start = (row -1) * 4 + tLabel = chr( ord( 'A' ) + row - 1 ) + xLabel = chr( ord( 'C' ) + row - 1 ) + xplot = [] + #dt, tplot, avec = runPanelCDEF( 'fhn', 15.0, 3.0, 5, seq, 0.4 ) + dt, tplot, avec = runPanelCDEF( 'fhn', 5.0, 0.5, 5, seq, 0.4 ) + xplot.append( avec ) + #plotOnePanel( dt, 'B', tplot, 5, 1.5, 0.5 ) + t = np.arange( 0, len( tplot[0] ), 1.0 ) * dt + #ax = plotBoilerplate( tLabel, 1 + start ) + ax = plotBoilerplate( tLabel, 1 + start, 'Time (s)') + for i in range( 5 ): + plt.plot( t, tplot[i] ) + yl = ax.get_ylim()[1] + ax.yaxis.set_ticks( np.arange( 0, 4.0001, 1.0 ) ) + + #dt, tplot, avec = runPanelCDEF( 'bis', 5.0, 4.0, 5, seq, 1.0 ) + dt, tplot, avec = runPanelCDEF( 'bis', 15.0, 2.0, 5, seq, 1.0 ) + xplot.append( avec ) + t = np.arange( 0, len( tplot[0] ), 1.0 ) * dt + ax = plotBoilerplate( tLabel, 2 + start, 'Time (s)' ) + for i in range( 5 ): + plt.plot( t, tplot[i] ) + yl = ax.get_ylim()[1] + ax.yaxis.set_ticks( np.arange( 0, 3.0001, 1.0 ) ) + + dt, tplot, avec = runPanelCDEF( 'negFB', 5.0, 2.0, 5, seq, 1.0 ) + xplot.append( avec ) + t = np.arange( 0, len( tplot[0] ), 1.0 ) * dt + ax = plotBoilerplate( tLabel, 3 + start, 'Time (s)') + for i in range( 5 ): + plt.plot( t, tplot[i] ) + ax.yaxis.set_ticks( np.arange( 0, 10.00001, 5.0 ) ) + + dt, tplot, avec = runPanelCDEF( 'negFF', 5.0, 4.0, 5, seq, 1.0 ) + xplot.append( avec ) + t = np.arange( 0, len( tplot[0] ), 1.0 ) * dt + ax = plotBoilerplate( tLabel, 4 + start, 'Time (s)') + for i in range( 5 ): + plt.plot( t, tplot[i] ) + ax.yaxis.set_ticks( np.arange( 0, 5.00001, 2.0 ) ) + + for i in zip( list(range(4)), (4.0, 3.0, 10, 4 ), (1, 1, 5, 2) ): + ax = plotBoilerplate( xLabel, 9 + start + i[0], 'Position( um)' ) + plt.plot( xplot[i[0]][:50] ) + ax.yaxis.set_ticks( np.arange( 0, i[1] * 1.0000001, i[2] ) ) + +################################################################## +if __name__ == '__main__': + moose.Neutral( '/library' ) + moose.Neutral( '/model' ) + + t1 = time.time() + fig = plt.figure( figsize = (10,10), facecolor='white' ) + fig.subplots_adjust( left = 0.18 ) + plotPanelB() + plotPanelCDEF( [0,1,2,3,4], 3 ) + plotPanelCDEF( [4,1,0,3,2], 4 ) + print(("Time taken = ", time.time() - t1)) + plt.tight_layout() + + plt.show() + + diff --git a/moose-examples/parallelSolver/abstrModelEqns2.py b/moose-examples/parallelSolver/abstrModelEqns2.py index 42ce9e51e789a3f70b2045dd957cae09b0a6e8d0..16fb3e91ca87c08ea1535c2e51226a2354a9815d 100644 --- a/moose-examples/parallelSolver/abstrModelEqns2.py +++ b/moose-examples/parallelSolver/abstrModelEqns2.py @@ -1,219 +1,219 @@ -import re -import moose -# Equations here are: -# Adot = 1 -6A + 5A^2 - A^3, or spread out as: -# Adot = k0a + k1a.A + k2a.A.A + k3a.A.A.A + k4a.Ca.A/(1+A+10*B) - k5a.A.B -# Bdot = k1b.A - k2b.B -# - - -def parseExpr( expr, params, hasCa ): - if hasCa: - expr = expr.replace( 'Ca', 'x0' ) - expr = expr.replace( 'A', 'x1' ) - expr = expr.replace( 'B', 'x2' ) - else: - expr = expr.replace( 'Ca', 'x0' ) # happens in the negFF model - expr = expr.replace( 'A', 'x0' ) # This is the usual case. - expr = expr.replace( 'B', 'x1' ) - - parts = re.split( 'k', expr ) - ret = parts[0] - for i in parts[1:]: - ret += str( params[ 'k' + i[:2] ] ) - ret += i[2:] - - if hasCa: - return 'x3*( ' + ret + ')' - else: - return 'x2*( ' + ret + ')' - -def makeChemProto( name, Aexpr, Bexpr, params ): - sw = params['stimWidth'] - diffLength = params['diffusionLength'] - dca = params['diffConstA'] * diffLength * diffLength - dcb = params['diffConstB'] * diffLength * diffLength - - # Objects - chem = moose.Neutral( '/library/' + name ) - compt = moose.CubeMesh( '/library/' + name + '/' + name ) - A = moose.Pool( compt.path + '/A' ) - B = moose.Pool( compt.path + '/B' ) - Z = moose.BufPool( compt.path + '/Z' ) - Ca = moose.BufPool( compt.path + '/Ca' ) - phase = moose.BufPool( compt.path + '/phase' ) - vel = moose.BufPool( compt.path + '/vel' ) - ampl = moose.BufPool( compt.path + '/ampl' ) - Adot = moose.Function( A.path + '/Adot' ) - Bdot = moose.Function( B.path + '/Bdot' ) - CaStim = moose.Function( Ca.path + '/CaStim' ) - A.diffConst = dca - B.diffConst = dcb - - # Equations - - Adot.expr = parseExpr( Aexpr, params, True ) - Bdot.expr = parseExpr( Bexpr, params, False ) - CaStim.expr = 'x2 * exp( -((x0 - t)^2)/(2* ' + str(sw*sw) + ') )' - - print Adot.expr - print Bdot.expr - print CaStim.expr - - # Connections - Adot.x.num = 4 - moose.connect( Ca, 'nOut', Adot.x[0], 'input' ) - moose.connect( A, 'nOut', Adot.x[1], 'input' ) - moose.connect( B, 'nOut', Adot.x[2], 'input' ) - moose.connect( Z, 'nOut', Adot.x[3], 'input' ) - moose.connect( Adot, 'valueOut', A, 'increment' ) - - Bdot.x.num = 3 - if name == 'negFF': - moose.connect( Ca, 'nOut', Bdot.x[0], 'input' ) - else: - moose.connect( A, 'nOut', Bdot.x[0], 'input' ) - moose.connect( B, 'nOut', Bdot.x[1], 'input' ) - moose.connect( Z, 'nOut', Bdot.x[2], 'input' ) - moose.connect( Bdot, 'valueOut', B, 'increment' ) - - CaStim.x.num = 3 - moose.connect( phase, 'nOut', CaStim.x[0], 'input' ) - moose.connect( vel, 'nOut', CaStim.x[1], 'input' ) - moose.connect( ampl, 'nOut', CaStim.x[2], 'input' ) - moose.connect( CaStim, 'valueOut', Ca, 'setN' ) - - return compt - - -def makeBis(): - params = { - 'k0a':0.1, # Constant - 'k1a':-5.0, # Coeff for A - 'k2a':5.0, # Coeff for A^2 - 'k3a':-1.0, # Coeff for A^3 - 'k4a':10.0, # turnon of A by A and Ca - 'k5a':-5.0, # Turnoff of A by B - 'k1b':0.1, # turnon of B by A - 'k2b':-0.01, # Decay rate of B - 'diffusionLength':1.0e-6, # Diffusion characteristic length, used as voxel length too. - 'dendDiameter': 10e-6, # Diameter of section of dendrite in model - 'dendLength': 100e-6, # Length of section of dendrite in model - 'diffConstA':1.0, # Diffusion constant of A - 'diffConstB':1.0, # Diffusion constant of B - 'stimWidth' :5.0, # Stimulus width in seconds - 'stimAmplitude':1.0, # Stimulus amplitude, arb units. From FHN review - 'blankVoxelsAtEnd':10, # of voxels to leave blank at end of cylinder - 'preStimTime':40.0, # Time to run before turning on stimulus. - 'postStimTime':80.0, # Time to run after stimulus. ~3x decay time - 'settleTime':20.0, # Settling time of response, after stimulus. - # To include in analysis of total response over - # entire dendrite. - 'fnumber':1, # Number to append to fname - } - - makeChemProto( 'bis', - 'k0a + k1a*A + k2a*A*A + k3a*A*A*A + k4a*Ca*A/(1+A+10*B) + k5a*A*B', - 'k1b*A*A + k2b*B', - params ) - return params - -def makeFHN(): - params = { - 'k_t':2.5, # Time-const. - 'k_a':0.7, # Coeff1 - 'k_b':0.8, # Coeff2 - 'kxa': 2.0, # Offset for V for FHN eqns. - 'kxb': 0.8, # Offset for W for FHN eqns. - 'diffusionLength':1.0e-6, # Diffusion characteristic length, used as voxel length too. - 'dendDiameter': 10e-6, # Diameter of section of dendrite in model - 'dendLength': 100e-6, # Length of section of dendrite in model - 'diffConstA':7.5, # Diffusion constant of A - 'diffConstB':5.0, # Diffusion constant of B - 'stimWidth' :1.0, # Stimulus width in seconds - 'stimAmplitude':0.4, # Stimulus amplitude, arb units. From FHN review - 'blankVoxelsAtEnd':10, # of voxels to leave blank at end of cylinder - 'preStimTime':30.0, # Time to run before turning on stimulus. - 'postStimTime':40.0, # Time to run after stimulus. ~3x decay time - 'settleTime':20.0, # Settling time of response, after stimulus. - # To include in analysis of total response over - # entire dendrite. - 'fnumber': 1, # Number to append to fname - } - makeChemProto( 'fhn', - '5.0*(A - kxa - (A-kxa)^3/3 - (B-kxb) + Ca)', - '(A-kxa + k_a - k_b*(B-kxb))/k_t', - params ) - return params - - -def makeNegFB(): - params = { - 'k1a':-0.1, # Coeff for decay of A, slow. - 'k2a':-0.2, # Coeff for turnoff of A by B, medium. - 'k3a':10.0, # turnon of A by Ca, fast. - 'k1b':0.2, # turnon of B by A, medium - 'k2b':-0.1, # Decay rate of B, slow - 'diffusionLength':1.0e-6, # Diffusion characteristic length, used as voxel length too. - 'dendDiameter': 10e-6, # Diameter of section of dendrite in model - 'dendLength': 100e-6, # Length of section of dendrite in model - 'diffConstA':0.5, # Diffusion constant of A - 'diffConstB':1.0, # Diffusion constant of B - 'stimWidth' :1.0, # Stimulus width in seconds - 'stimAmplitude':1.0, # Stimulus amplitude, arb units. From FHN review - 'blankVoxelsAtEnd':10, #of voxels to leave blank at end of cylinder - 'preStimTime':10.0, # Time to run before turning on stimulus. - 'postStimTime':60.0, # Time to run after stimulus. ~3x decay time - 'settleTime':20.0, # Settling time of response, after stimulus. - # To include in analysis of total response over - # entire dendrite. - 'fnumber':1, # Number to append to fname - } - makeChemProto( 'negFB', - 'k1a*A + k2a*A*B + k3a*Ca', - 'k1b*A + k2b*B', - params ) - return params - - -def makeNegFF(): - params = { - 'k1a':-0.1, # Coeff for decay of A, slow. - 'k2a':-1.0, # Coeff for turnoff of A by B, medium. - 'k3a':10.0, # turnon of A by Ca, fast. - 'k1b':2.0, # turnon of B by Ca, medium - 'k2b':-0.1, # Decay rate of B, slow - 'diffusionLength':1.0e-6, # Diffusion characteristic length, used as voxel length too. - 'dendDiameter': 10e-6, # Diameter of section of dendrite in model - 'dendLength': 100e-6, # Length of section of dendrite in model - 'diffConstA':1.0, # Diffusion constant of A - 'diffConstB':2.0, # Diffusion constant of B - 'stimWidth' :1.0, # Stimulus width in seconds - 'stimAmplitude':1.0, # Stimulus amplitude, arb units. From FHN review - 'blankVoxelsAtEnd':10, # of voxels to leave blank at end of cylinder - 'preStimTime':10.0, # Time to run before turning on stimulus. - 'postStimTime':60.0, # Time to run after stimulus. ~3x decay time - 'settleTime':20.0, # Settling time of response, after stimulus. - # To include in analysis of total response over - # entire dendrite. - 'fnumber':1, # Number to append to fname - } - makeChemProto( 'negFF', - 'k1a*A + k2a*A*B + k3a*Ca', - 'k1b*Ca + k2b*B', - params ) - - return params - -if __name__ == '__main__': - moose.Neutral( '/library' ) - print "Making Bistable model" - makeBis() - print "Making FHN model" - makeFHN() - print "Making Negative Feedback model" - makeNegFB() - print "Making Negative Feedforward model" - makeNegFF() - - +import re +import moose +# Equations here are: +# Adot = 1 -6A + 5A^2 - A^3, or spread out as: +# Adot = k0a + k1a.A + k2a.A.A + k3a.A.A.A + k4a.Ca.A/(1+A+10*B) - k5a.A.B +# Bdot = k1b.A - k2b.B +# + + +def parseExpr( expr, params, hasCa ): + if hasCa: + expr = expr.replace( 'Ca', 'x0' ) + expr = expr.replace( 'A', 'x1' ) + expr = expr.replace( 'B', 'x2' ) + else: + expr = expr.replace( 'Ca', 'x0' ) # happens in the negFF model + expr = expr.replace( 'A', 'x0' ) # This is the usual case. + expr = expr.replace( 'B', 'x1' ) + + parts = re.split( 'k', expr ) + ret = parts[0] + for i in parts[1:]: + ret += str( params[ 'k' + i[:2] ] ) + ret += i[2:] + + if hasCa: + return 'x3*( ' + ret + ')' + else: + return 'x2*( ' + ret + ')' + +def makeChemProto( name, Aexpr, Bexpr, params ): + sw = params['stimWidth'] + diffLength = params['diffusionLength'] + dca = params['diffConstA'] * diffLength * diffLength + dcb = params['diffConstB'] * diffLength * diffLength + + # Objects + chem = moose.Neutral( '/library/' + name ) + compt = moose.CubeMesh( '/library/' + name + '/' + name ) + A = moose.Pool( compt.path + '/A' ) + B = moose.Pool( compt.path + '/B' ) + Z = moose.BufPool( compt.path + '/Z' ) + Ca = moose.BufPool( compt.path + '/Ca' ) + phase = moose.BufPool( compt.path + '/phase' ) + vel = moose.BufPool( compt.path + '/vel' ) + ampl = moose.BufPool( compt.path + '/ampl' ) + Adot = moose.Function( A.path + '/Adot' ) + Bdot = moose.Function( B.path + '/Bdot' ) + CaStim = moose.Function( Ca.path + '/CaStim' ) + A.diffConst = dca + B.diffConst = dcb + + # Equations + + Adot.expr = parseExpr( Aexpr, params, True ) + Bdot.expr = parseExpr( Bexpr, params, False ) + CaStim.expr = 'x2 * exp( -((x0 - t)^2)/(2* ' + str(sw*sw) + ') )' + + print(Adot.expr) + print(Bdot.expr) + print(CaStim.expr) + + # Connections + Adot.x.num = 4 + moose.connect( Ca, 'nOut', Adot.x[0], 'input' ) + moose.connect( A, 'nOut', Adot.x[1], 'input' ) + moose.connect( B, 'nOut', Adot.x[2], 'input' ) + moose.connect( Z, 'nOut', Adot.x[3], 'input' ) + moose.connect( Adot, 'valueOut', A, 'increment' ) + + Bdot.x.num = 3 + if name == 'negFF': + moose.connect( Ca, 'nOut', Bdot.x[0], 'input' ) + else: + moose.connect( A, 'nOut', Bdot.x[0], 'input' ) + moose.connect( B, 'nOut', Bdot.x[1], 'input' ) + moose.connect( Z, 'nOut', Bdot.x[2], 'input' ) + moose.connect( Bdot, 'valueOut', B, 'increment' ) + + CaStim.x.num = 3 + moose.connect( phase, 'nOut', CaStim.x[0], 'input' ) + moose.connect( vel, 'nOut', CaStim.x[1], 'input' ) + moose.connect( ampl, 'nOut', CaStim.x[2], 'input' ) + moose.connect( CaStim, 'valueOut', Ca, 'setN' ) + + return compt + + +def makeBis(): + params = { + 'k0a':0.1, # Constant + 'k1a':-5.0, # Coeff for A + 'k2a':5.0, # Coeff for A^2 + 'k3a':-1.0, # Coeff for A^3 + 'k4a':10.0, # turnon of A by A and Ca + 'k5a':-5.0, # Turnoff of A by B + 'k1b':0.1, # turnon of B by A + 'k2b':-0.01, # Decay rate of B + 'diffusionLength':1.0e-6, # Diffusion characteristic length, used as voxel length too. + 'dendDiameter': 10e-6, # Diameter of section of dendrite in model + 'dendLength': 100e-6, # Length of section of dendrite in model + 'diffConstA':1.0, # Diffusion constant of A + 'diffConstB':1.0, # Diffusion constant of B + 'stimWidth' :5.0, # Stimulus width in seconds + 'stimAmplitude':1.0, # Stimulus amplitude, arb units. From FHN review + 'blankVoxelsAtEnd':10, # of voxels to leave blank at end of cylinder + 'preStimTime':40.0, # Time to run before turning on stimulus. + 'postStimTime':80.0, # Time to run after stimulus. ~3x decay time + 'settleTime':20.0, # Settling time of response, after stimulus. + # To include in analysis of total response over + # entire dendrite. + 'fnumber':1, # Number to append to fname + } + + makeChemProto( 'bis', + 'k0a + k1a*A + k2a*A*A + k3a*A*A*A + k4a*Ca*A/(1+A+10*B) + k5a*A*B', + 'k1b*A*A + k2b*B', + params ) + return params + +def makeFHN(): + params = { + 'k_t':2.5, # Time-const. + 'k_a':0.7, # Coeff1 + 'k_b':0.8, # Coeff2 + 'kxa': 2.0, # Offset for V for FHN eqns. + 'kxb': 0.8, # Offset for W for FHN eqns. + 'diffusionLength':1.0e-6, # Diffusion characteristic length, used as voxel length too. + 'dendDiameter': 10e-6, # Diameter of section of dendrite in model + 'dendLength': 100e-6, # Length of section of dendrite in model + 'diffConstA':7.5, # Diffusion constant of A + 'diffConstB':5.0, # Diffusion constant of B + 'stimWidth' :1.0, # Stimulus width in seconds + 'stimAmplitude':0.4, # Stimulus amplitude, arb units. From FHN review + 'blankVoxelsAtEnd':10, # of voxels to leave blank at end of cylinder + 'preStimTime':30.0, # Time to run before turning on stimulus. + 'postStimTime':40.0, # Time to run after stimulus. ~3x decay time + 'settleTime':20.0, # Settling time of response, after stimulus. + # To include in analysis of total response over + # entire dendrite. + 'fnumber': 1, # Number to append to fname + } + makeChemProto( 'fhn', + '5.0*(A - kxa - (A-kxa)^3/3 - (B-kxb) + Ca)', + '(A-kxa + k_a - k_b*(B-kxb))/k_t', + params ) + return params + + +def makeNegFB(): + params = { + 'k1a':-0.1, # Coeff for decay of A, slow. + 'k2a':-0.2, # Coeff for turnoff of A by B, medium. + 'k3a':10.0, # turnon of A by Ca, fast. + 'k1b':0.2, # turnon of B by A, medium + 'k2b':-0.1, # Decay rate of B, slow + 'diffusionLength':1.0e-6, # Diffusion characteristic length, used as voxel length too. + 'dendDiameter': 10e-6, # Diameter of section of dendrite in model + 'dendLength': 100e-6, # Length of section of dendrite in model + 'diffConstA':0.5, # Diffusion constant of A + 'diffConstB':1.0, # Diffusion constant of B + 'stimWidth' :1.0, # Stimulus width in seconds + 'stimAmplitude':1.0, # Stimulus amplitude, arb units. From FHN review + 'blankVoxelsAtEnd':10, #of voxels to leave blank at end of cylinder + 'preStimTime':10.0, # Time to run before turning on stimulus. + 'postStimTime':60.0, # Time to run after stimulus. ~3x decay time + 'settleTime':20.0, # Settling time of response, after stimulus. + # To include in analysis of total response over + # entire dendrite. + 'fnumber':1, # Number to append to fname + } + makeChemProto( 'negFB', + 'k1a*A + k2a*A*B + k3a*Ca', + 'k1b*A + k2b*B', + params ) + return params + + +def makeNegFF(): + params = { + 'k1a':-0.1, # Coeff for decay of A, slow. + 'k2a':-1.0, # Coeff for turnoff of A by B, medium. + 'k3a':10.0, # turnon of A by Ca, fast. + 'k1b':2.0, # turnon of B by Ca, medium + 'k2b':-0.1, # Decay rate of B, slow + 'diffusionLength':1.0e-6, # Diffusion characteristic length, used as voxel length too. + 'dendDiameter': 10e-6, # Diameter of section of dendrite in model + 'dendLength': 100e-6, # Length of section of dendrite in model + 'diffConstA':1.0, # Diffusion constant of A + 'diffConstB':2.0, # Diffusion constant of B + 'stimWidth' :1.0, # Stimulus width in seconds + 'stimAmplitude':1.0, # Stimulus amplitude, arb units. From FHN review + 'blankVoxelsAtEnd':10, # of voxels to leave blank at end of cylinder + 'preStimTime':10.0, # Time to run before turning on stimulus. + 'postStimTime':60.0, # Time to run after stimulus. ~3x decay time + 'settleTime':20.0, # Settling time of response, after stimulus. + # To include in analysis of total response over + # entire dendrite. + 'fnumber':1, # Number to append to fname + } + makeChemProto( 'negFF', + 'k1a*A + k2a*A*B + k3a*Ca', + 'k1b*Ca + k2b*B', + params ) + + return params + +if __name__ == '__main__': + moose.Neutral( '/library' ) + print("Making Bistable model") + makeBis() + print("Making FHN model") + makeFHN() + print("Making Negative Feedback model") + makeNegFB() + print("Making Negative Feedforward model") + makeNegFF() + + diff --git a/moose-examples/rall_1964/rall64.py b/moose-examples/rall_1964/rall64.py index 7b016ad86b5fe107790cfd1aa089ecc5260b16e7..5dff8a17000935b22fc7d2205f061412e22d60af 100755 --- a/moose-examples/rall_1964/rall64.py +++ b/moose-examples/rall_1964/rall64.py @@ -44,11 +44,17 @@ # # Code: -"""Implementation of Rall 1964 model of dendritic branching. All units -SI.""" -import sys + +""" +Implementation of Rall 1964 model of dendritic branching. All units +SI. + +""" +from __future__ import print_function + +import sys import math import pylab import moose @@ -73,7 +79,7 @@ Ra = RA * length / (math.pi * diameter * diameter / 4.0) Ek = Em + 1e-3 -print 'tau =', tau, 'lambda =', lambda_ +print('tau =', tau, 'lambda =', lambda_) # Rall used `0.05 * tau`, but that does not reproduce in our # case. Why? Sym vs Asym comp?? @@ -176,7 +182,7 @@ def run_model_fig6(): """Do a simulation for fig6 and plot data.""" for ch in moose.wildcardFind('/model/##[ISA=ChanBase]'): ch.Gk = 1.0/Rm - print 'Starting for', inject_time + print('Starting for', inject_time) moose.start(inject_time) for ch in moose.wildcardFind('/model/##[ISA=ChanBase]'): ch.Gk = 0.0 @@ -235,8 +241,8 @@ def run_model_fig7(chans_1, chans_2, chans_3): to_run = simtime delta_t = 0.25 * tau for ii in range(0, len(chans_1), 2): - print ii - print '-----------------' + print(ii) + print('-----------------') chans_1[ii].Gk = 1 / Rm chans_1[ii+1].Gk = 1 / Rm chans_2[-ii-1].Gk = 1 / Rm @@ -245,11 +251,11 @@ def run_model_fig7(chans_1, chans_2, chans_3): chan.Gk = 0.25 / Rm for chan in chans_1: - print chan.Gk, - print + print(chan.Gk, end=' ') + print() for chan in chans_2: - print chan.Gk, - print + print(chan.Gk, end=' ') + print() moose.start(delta_t) for chan in chans_1: chan.Gk = 0.0 diff --git a/moose-examples/rall_1964/rall64_graphic.py b/moose-examples/rall_1964/rall64_graphic.py index a8b9d178dad2b06b745bbc3986de96d7bbbe6a90..f5dc7dcdb1fe8fb4b45e25ff6a777898ea6ce692 100755 --- a/moose-examples/rall_1964/rall64_graphic.py +++ b/moose-examples/rall_1964/rall64_graphic.py @@ -133,7 +133,7 @@ ax_data.set_xlim(0, simtime/tau) ax_data.set_ylim(0, 0.15) ax_data.set_xlabel('Time (t/tau)') ax_data.set_ylabel('Membrane voltage (Vm - Em)/(Ek - Vm)') -print lines +print(lines) plt.legend() schedule() fanim = anim.FuncAnimation(fig, update, fargs=None, interval=25, repeat=False) diff --git a/moose-examples/snippets/GraupnerBrunel2012_STDPfromCaPlasticity.py b/moose-examples/snippets/GraupnerBrunel2012_STDPfromCaPlasticity.py index ee0ab8a9470d574535b2f81bd2376f3dc2ea399a..257add4833b5c355792e22dc261df84fde6f7819 100644 --- a/moose-examples/snippets/GraupnerBrunel2012_STDPfromCaPlasticity.py +++ b/moose-examples/snippets/GraupnerBrunel2012_STDPfromCaPlasticity.py @@ -208,7 +208,7 @@ t_extent = 100e-3 # s # STDP kernel extent, # t_extent > t_between_pairs/2 inverts pre-post pairing! # dt = tpost - tpre # negative dt corresponds to post before pre -print '-----------------------------------------------' +print('-----------------------------------------------') for deltat in arange(t_extent,0.0,-ddt): reset_settle() for i in range(numpairs): @@ -220,9 +220,9 @@ for deltat in arange(t_extent,0.0,-ddt): moose.start(t_between_pairs) # weight changes after pre-spike+delayD # must run for at least delayD after pre-spike dw = ( syn.synapse[0].weight - weight ) / weight - print 'post before pre, dt = %1.3f s, dw/w = %1.3f'%(-deltat,dw) + print(('post before pre, dt = %1.3f s, dw/w = %1.3f'%(-deltat,dw))) dwlist_neg.append(dw) -print '-----------------------------------------------' +print('-----------------------------------------------') # positive dt corresponds to pre before post dwlist_pos = [] for deltat in arange(ddt,t_extent+ddt,ddt): @@ -235,24 +235,24 @@ for deltat in arange(ddt,t_extent+ddt,ddt): make_neuron_spike(1) moose.start(t_between_pairs) dw = ( syn.synapse[0].weight - weight ) / weight - print 'pre before post, dt = %1.3f s, dw/w = %1.3f'%(deltat,dw) + print(('pre before post, dt = %1.3f s, dw/w = %1.3f'%(deltat,dw))) dwlist_pos.append(dw) -print '-----------------------------------------------' -print 'Each of the above pre-post pairs was repeated',\ - numpairs,'times, with',t_between_pairs,'s between pairs.' -print -print 'Due to event based updates, Ca decays suddenly at events:' -print 'pre-spike, pre-spike + delayD, and post-spike;' -print 'apart from the usual CaPre and CaPost jumps at' -print 'pre-spike + delayD and post-spike respectively.' -print 'Because of the event based update, multiple pre-post pairs are used.' -print -print 'If you reduce the t_between_pairs,' -print ' you\'ll see potentiation for the LTD part without using any triplet rule!' -print -print "If you turn on noise, the weights fluctuate too much," -print " not sure if there's a bug in my noise implementation." -print '-----------------------------------------------' +print('-----------------------------------------------') +print(('Each of the above pre-post pairs was repeated',\ + numpairs,'times, with',t_between_pairs,'s between pairs.')) +print() +print('Due to event based updates, Ca decays suddenly at events:') +print('pre-spike, pre-spike + delayD, and post-spike;') +print('apart from the usual CaPre and CaPost jumps at') +print('pre-spike + delayD and post-spike respectively.') +print('Because of the event based update, multiple pre-post pairs are used.') +print() +print('If you reduce the t_between_pairs,') +print(' you\'ll see potentiation for the LTD part without using any triplet rule!') +print() +print("If you turn on noise, the weights fluctuate too much,") +print(" not sure if there's a bug in my noise implementation.") +print('-----------------------------------------------') # ########################################### # Plot the simulated Vm-s and STDP curve diff --git a/moose-examples/snippets/HigginsGraupnerBrunel2014_LifetimeCaPlasticity.py b/moose-examples/snippets/HigginsGraupnerBrunel2014_LifetimeCaPlasticity.py index f4647cc0f088c58a72a4dde92cb4519d3b91088a..1d3ddff2b9b8a5931eb66e5cab764c41461b02fb 100644 --- a/moose-examples/snippets/HigginsGraupnerBrunel2014_LifetimeCaPlasticity.py +++ b/moose-examples/snippets/HigginsGraupnerBrunel2014_LifetimeCaPlasticity.py @@ -126,18 +126,18 @@ moose.seed(100) moose.reinit() # function to make the aPlus and aMinus settle to equilibrium values -print "Rates of pre- and post-syanptic neurons =",frate +print(("Rates of pre- and post-syanptic neurons =",frate)) WtSeries = [] numsteps = int(runtime/dt) for i in range(numrepeats): syn.synapse[0].weight = 1.0 # starting weight to decay from syn.Ca = 0.0 - print "Repeat number",i,"running..." + print(("Repeat number",i,"running...")) moose.start(runtime) WtSeries.append(WtTable.vector[i*numsteps:(i+1)*numsteps]) WtSeries = array(WtSeries) WtMean = mean(WtSeries,axis=0) -print "plotting..." +print("plotting...") # ########################################### # Plot the simulated weights and Ca vs time diff --git a/moose-examples/snippets/HsolveInstability.py b/moose-examples/snippets/HsolveInstability.py index 61ac1df23973c4de12dd75ded861a221424e2441..467bd7ee17e460a84a76db82d9ed5c84c9e2207d 100644 --- a/moose-examples/snippets/HsolveInstability.py +++ b/moose-examples/snippets/HsolveInstability.py @@ -187,7 +187,7 @@ def create_spine( parentCompt, parentObj, index, frac, length, dia, theta ): return head def create_spine_with_receptor( compt, cell, index, frac ): - FaradayConst = 96485.3415 # s A / mol + FaradayConst = 96485.3415 # s A / mol spineLength = 5.0e-6 spineDia = 4.0e-6 head = create_spine( compt, cell, index, frac, spineLength, spineDia, 0.0 ) @@ -199,10 +199,10 @@ def create_spine_with_receptor( compt, cell, index, frac ): moose.connect( head, 'channel', gluR, 'channel', 'single' ) caPool = moose.CaConc( head.path + '/ca' ) - caPool.CaBasal = 1e-4 # 0.1 micromolar + caPool.CaBasal = 1e-4 # 0.1 micromolar caPool.tau = 0.01 B = 1.0 / ( FaradayConst * spineLength * spineDia * spineDia *math.pi/4) - B = B / 20.0 # scaling factor for Ca buffering + B = B / 20.0 # scaling factor for Ca buffering caPool.B = B moose.connect( gluR, 'IkOut', caPool, 'current', 'single' ) @@ -227,7 +227,7 @@ def display_plots( name ): pylab.figure() for x in moose.wildcardFind( '/graphs/#' ): pos = numpy.arange( 0, x.vector.size ) * x.dt - print len( pos ), len( x.vector ) + print((len( pos ), len( x.vector ))) pylab.plot( pos, x.vector, label=x.name ) pylab.legend() pylab.title( name ) diff --git a/moose-examples/snippets/IntegrateFireZoo.py b/moose-examples/snippets/IntegrateFireZoo.py index b715519b1c9b734288ef8381ae9b61afd416a469..be88545651458c8523fe93788b31422709c0f5c5 100644 --- a/moose-examples/snippets/IntegrateFireZoo.py +++ b/moose-examples/snippets/IntegrateFireZoo.py @@ -119,9 +119,9 @@ def main(): #### CHOOSE ONE OF THE NEURON KEYS AS choiceKey FROM BELOW DICTIONARY #### #choiceKey = 'LIF' #### No need, am inputting it from the user on the terminal - choiceKeys = neuronChoices.keys() # keys() does not retain the order in dict defn above! - choiceIndex = input('Choose a number corresponding to your desired neuron: '+ \ - str([(i,key) for (i,key) in enumerate(choiceKeys)])+' -- ') + choiceKeys = list(neuronChoices.keys()) # keys() does not retain the order in dict defn above! + choiceIndex = eval(input('Choose a number corresponding to your desired neuron: '+ \ + str([(i,key) for (i,key) in enumerate(choiceKeys)])+' -- ')) choiceKey = choiceKeys[choiceIndex] neuronChoice = neuronChoices[choiceKey] @@ -171,7 +171,7 @@ def main(): network.vec.vPeak = vPeak # reset at vPeak, not at thresh network.vec.inject = 5e-9 # Amp # injected current I - print "Injecting current =",network.vec[0].inject,"in",choiceKey,"neuron." + print(("Injecting current =",network.vec[0].inject,"in",choiceKey,"neuron.")) # ########################################### # Setting up table diff --git a/moose-examples/snippets/MULTI/TuringInNeuron.py b/moose-examples/snippets/MULTI/TuringInNeuron.py index 1f38df813a889cb7cb56a7abff81fbe3d9371d46..7f1c7a1e4d4bd15d887747a33d16430f894f2f8a 100644 --- a/moose-examples/snippets/MULTI/TuringInNeuron.py +++ b/moose-examples/snippets/MULTI/TuringInNeuron.py @@ -19,185 +19,183 @@ import moose import proto18 def loadElec(): - library = moose.Neutral( '/library' ) - moose.setCwe( '/library' ) - proto18.make_Ca() - proto18.make_Ca_conc() - proto18.make_K_AHP() - proto18.make_K_C() - proto18.make_Na() - proto18.make_K_DR() - proto18.make_K_A() - proto18.make_glu() - proto18.make_NMDA() - proto18.make_Ca_NMDA() - proto18.make_NMDA_Ca_conc() - proto18.make_axon() - model = moose.element( '/model' ) - cellId = moose.loadModel( 'ca1_asym.p', '/model/elec', "Neutral" ) - return cellId + library = moose.Neutral( '/library' ) + moose.setCwe( '/library' ) + proto18.make_Ca() + proto18.make_Ca_conc() + proto18.make_K_AHP() + proto18.make_K_C() + proto18.make_Na() + proto18.make_K_DR() + proto18.make_K_A() + proto18.make_glu() + proto18.make_NMDA() + proto18.make_Ca_NMDA() + proto18.make_NMDA_Ca_conc() + proto18.make_axon() + model = moose.element( '/model' ) + cellId = moose.loadModel( 'ca1_asym.p', '/model/elec', "Neutral" ) + return cellId def makeChemModel( cellId ): - # create container for model - r0 = 1e-6 # m - r1 = 1e-6 # m - num = 2800 - diffLength = 1e-6 # m - diffConst = 5e-12 # m^2/sec - motorRate = 1e-6 # m/sec - concA = 1 # millimolar - - model = moose.element( '/model' ) - compartment = moose.NeuroMesh( '/model/compartment' ) - # FIXME: No attribute cell - compartment.cell = cellId - compartment.diffLength = diffLength - print "cell NeuroMesh parameters: numSeg and numDiffCompt: ", compartment.numSegments, compartment.numDiffCompts - - print "compartment.numDiffCompts == num: ", compartment.numDiffCompts, num - assert( compartment.numDiffCompts == num ) - - # create molecules and reactions - a = moose.Pool( '/model/compartment/a' ) - b = moose.Pool( '/model/compartment/b' ) - s = moose.Pool( '/model/compartment/s' ) - e1 = moose.MMenz( '/model/compartment/e1' ) - e2 = moose.MMenz( '/model/compartment/e2' ) - e3 = moose.MMenz( '/model/compartment/e3' ) - r1 = moose.Reac( '/model/compartment/r1' ) - moose.connect( e1, 'sub', s, 'reac' ) - moose.connect( e1, 'prd', a, 'reac' ) - moose.connect( a, 'nOut', e1, 'enzDest' ) - e1.Km = 1 - e1.kcat = 1 - - moose.connect( e2, 'sub', s, 'reac' ) - moose.connect( e2, 'prd', b, 'reac' ) - moose.connect( a, 'nOut', e2, 'enzDest' ) - e2.Km = 1 - e2.kcat = 0.5 - - moose.connect( e3, 'sub', a, 'reac' ) - moose.connect( e3, 'prd', s, 'reac' ) - moose.connect( b, 'nOut', e3, 'enzDest' ) - e3.Km = 0.1 - e3.kcat = 1 - - moose.connect( r1, 'sub', b, 'reac' ) - moose.connect( r1, 'prd', s, 'reac' ) - r1.Kf = 0.3 # 1/sec - r1.Kb = 0 # 1/sec - - # Assign parameters - a.diffConst = diffConst/10 - b.diffConst = diffConst - s.diffConst = 0 + # create container for model + r0 = 1e-6 # m + r1 = 1e-6 # m + num = 2800 + diffLength = 1e-6 # m + diffConst = 5e-12 # m^2/sec + motorRate = 1e-6 # m/sec + concA = 1 # millimolar + + model = moose.element( '/model' ) + compartment = moose.NeuroMesh( '/model/compartment' ) + # FIXME: No attribute cell + compartment.cell = cellId + compartment.diffLength = diffLength + print(("cell NeuroMesh parameters: numSeg and numDiffCompt: ", compartment.numSegments, compartment.numDiffCompts)) + + print(("compartment.numDiffCompts == num: ", compartment.numDiffCompts, num)) + assert( compartment.numDiffCompts == num ) + + # create molecules and reactions + a = moose.Pool( '/model/compartment/a' ) + b = moose.Pool( '/model/compartment/b' ) + s = moose.Pool( '/model/compartment/s' ) + e1 = moose.MMenz( '/model/compartment/e1' ) + e2 = moose.MMenz( '/model/compartment/e2' ) + e3 = moose.MMenz( '/model/compartment/e3' ) + r1 = moose.Reac( '/model/compartment/r1' ) + moose.connect( e1, 'sub', s, 'reac' ) + moose.connect( e1, 'prd', a, 'reac' ) + moose.connect( a, 'nOut', e1, 'enzDest' ) + e1.Km = 1 + e1.kcat = 1 + + moose.connect( e2, 'sub', s, 'reac' ) + moose.connect( e2, 'prd', b, 'reac' ) + moose.connect( a, 'nOut', e2, 'enzDest' ) + e2.Km = 1 + e2.kcat = 0.5 + + moose.connect( e3, 'sub', a, 'reac' ) + moose.connect( e3, 'prd', s, 'reac' ) + moose.connect( b, 'nOut', e3, 'enzDest' ) + e3.Km = 0.1 + e3.kcat = 1 + + moose.connect( r1, 'sub', b, 'reac' ) + moose.connect( r1, 'prd', s, 'reac' ) + r1.Kf = 0.3 # 1/sec + r1.Kb = 0 # 1/sec + + # Assign parameters + a.diffConst = diffConst/10 + b.diffConst = diffConst + s.diffConst = 0 #b.motorConst = motorRate - # Make solvers - ksolve = moose.Ksolve( '/model/compartment/ksolve' ) - dsolve = moose.Dsolve( '/model/compartment/dsolve' ) - stoich = moose.Stoich( '/model/compartment/stoich' ) - stoich.compartment = compartment - #ksolve.numAllVoxels = compartment.numDiffCompts - stoich.ksolve = ksolve - stoich.dsolve = dsolve - stoich.path = "/model/compartment/##" - assert( dsolve.numPools == 3 ) - a.vec.concInit = [0.1]*num - a.vec[0].concInit += 0.5 - a.vec[400].concInit += 0.5 - a.vec[800].concInit += 0.5 - a.vec[1200].concInit += 0.5 - a.vec[1600].concInit += 0.5 - a.vec[2000].concInit += 0.5 - a.vec[2400].concInit += 0.5 - #a.vec[num/2].concInit -= 0.1 - b.vec.concInit = [0.1]*num - s.vec.concInit = [1]*num + # Make solvers + ksolve = moose.Ksolve( '/model/compartment/ksolve' ) + dsolve = moose.Dsolve( '/model/compartment/dsolve' ) + stoich = moose.Stoich( '/model/compartment/stoich' ) + stoich.compartment = compartment + #ksolve.numAllVoxels = compartment.numDiffCompts + stoich.ksolve = ksolve + stoich.dsolve = dsolve + stoich.path = "/model/compartment/##" + assert( dsolve.numPools == 3 ) + a.vec.concInit = [0.1]*num + a.vec[0].concInit += 0.5 + a.vec[400].concInit += 0.5 + a.vec[800].concInit += 0.5 + a.vec[1200].concInit += 0.5 + a.vec[1600].concInit += 0.5 + a.vec[2000].concInit += 0.5 + a.vec[2400].concInit += 0.5 + #a.vec[num/2].concInit -= 0.1 + b.vec.concInit = [0.1]*num + s.vec.concInit = [1]*num def displayPlots( num ): - a = moose.element( '/model/compartment/a' ) - b = moose.element( '/model/compartment/b' ) - print '/newplot\n/plotname a' + str(num) - for x in a.vec.conc: - print x - print '/newplot\n/plotname b' + str(num) - for y in b.vec.conc: - print y - """ - print '/newplot\n/plotname bvol' - for z in a.vec.volume: - print z * 1e18 - print '/newplot\n/plotname aInit' - for x in a.vec.concInit: - print x - pos = numpy.arange( 0, a.vec.conc.size, 1.0 ) - aconc = numpy.array( a.vec.conc ) - bconc = numpy.array( b.vec.conc ) - print "pos a, b = ", pos, b.vec.conc.size - pylab.plot( pos[:100], aconc[:100], label='a' ) - pylab.plot( pos[:100], bconc[:100], label='b' ) - #pylab.plot( pos, a.vec.conc, label='a' ) - #pylab.plot( pos, b.vec.conc, label='b' ) - print "plotting done" - pylab.legend() - print "legend done" - pylab.show() - print "show done" - """ + a = moose.element( '/model/compartment/a' ) + b = moose.element( '/model/compartment/b' ) + print(('/newplot\n/plotname a' + str(num))) + for x in a.vec.conc: + print(x) + print(('/newplot\n/plotname b' + str(num))) + for y in b.vec.conc: + print(y) + """ + print '/newplot\n/plotname bvol' + for z in a.vec.volume: + print z * 1e18 + print '/newplot\n/plotname aInit' + for x in a.vec.concInit: + print x + pos = numpy.arange( 0, a.vec.conc.size, 1.0 ) + aconc = numpy.array( a.vec.conc ) + bconc = numpy.array( b.vec.conc ) + print "pos a, b = ", pos, b.vec.conc.size + pylab.plot( pos[:100], aconc[:100], label='a' ) + pylab.plot( pos[:100], bconc[:100], label='b' ) + #pylab.plot( pos, a.vec.conc, label='a' ) + #pylab.plot( pos, b.vec.conc, label='b' ) + print "plotting done" + pylab.legend() + print "legend done" + pylab.show() + print "show done" + """ def main(): - runtime = 400 - dt4 = 0.02 # for the diffusion - dt5 = 0.2 # for the reaction - # Set up clocks. The dsolver to know before assigning stoich - moose.setClock( 4, dt4 ) - moose.setClock( 5, dt5 ) - model = moose.Neutral( '/model' ) - cellId = loadElec() - makeChemModel( cellId ) - moose.useClock( 4, '/model/compartment/dsolve', 'process' ) - # Ksolve must be scheduled after dsolve. - moose.useClock( 5, '/model/compartment/ksolve', 'process' ) - print "finished loading" - moose.reinit() - for i in range( 10 ): - moose.start( runtime / 10 ) # Run the model for 10 seconds. - # print 'done', i - displayPlots( i ) - print "finished running" - - """ - a = moose.element( '/model/compartment/a' ) - b = moose.element( '/model/compartment/b' ) - s = moose.element( '/model/compartment/s' ) - - atot = sum( a.vec.conc ) - btot = sum( b.vec.conc ) - stot = sum( s.vec.conc ) - print "a = ", a.vec.conc - print "b = ", b.vec.conc - print "s = ", s.vec.conc - - print 'tot = ', atot, btot, atot + btot + stot - displayPlots() - """ - - """ - dsolve = moose.element( '/model/compartment/dsolve' ) - - print '**************** dsolve.nvecs' - x = dsolve.nVec[0] - print dsolve.numPools, x, sum(x) - print dsolve.nVec[1], sum( dsolve.nVec[1] ) - print dsolve.nVec[2], sum( dsolve.nVec[2] ) - print dsolve.nVec[3], sum( dsolve.nVec[3] ) - """ - - quit() + runtime = 400 + dt4 = 0.02 # for the diffusion + dt5 = 0.2 # for the reaction + # Set up clocks. The dsolver to know before assigning stoich + moose.setClock( 4, dt4 ) + moose.setClock( 5, dt5 ) + model = moose.Neutral( '/model' ) + cellId = loadElec() + makeChemModel( cellId ) + moose.useClock( 4, '/model/compartment/dsolve', 'process' ) + # Ksolve must be scheduled after dsolve. + moose.useClock( 5, '/model/compartment/ksolve', 'process' ) + print("finished loading") + moose.reinit() + for i in range( 10 ): + moose.start( runtime / 10 ) # Run the model for 10 seconds. + # print 'done', i + displayPlots( i ) + print("finished running") + + """ + a = moose.element( '/model/compartment/a' ) + b = moose.element( '/model/compartment/b' ) + s = moose.element( '/model/compartment/s' ) + + atot = sum( a.vec.conc ) + btot = sum( b.vec.conc ) + stot = sum( s.vec.conc ) + print "a = ", a.vec.conc + print "b = ", b.vec.conc + print "s = ", s.vec.conc + + print 'tot = ', atot, btot, atot + btot + stot + displayPlots() + """ + + """ + dsolve = moose.element( '/model/compartment/dsolve' ) + x = dsolve.nVec[0] + print dsolve.numPools, x, sum(x) + print dsolve.nVec[1], sum( dsolve.nVec[1] ) + print dsolve.nVec[2], sum( dsolve.nVec[2] ) + print dsolve.nVec[3], sum( dsolve.nVec[3] ) + """ + + quit() # Run the 'main' if this script is executed standalone. if __name__ == '__main__': - main() + main() diff --git a/moose-examples/snippets/MULTI/diffusionOnly.py b/moose-examples/snippets/MULTI/diffusionOnly.py index 68faddb92e42772f68dd73f5535ec287bf54f784..9797c50dc9b9e38fbc53cccecf0b39ed1d990586 100644 --- a/moose-examples/snippets/MULTI/diffusionOnly.py +++ b/moose-examples/snippets/MULTI/diffusionOnly.py @@ -43,30 +43,30 @@ import proto18 EREST_ACT = -70e-3 def loadElec(): - library = moose.Neutral( '/library' ) - moose.setCwe( '/library' ) - proto18.make_Ca() - proto18.make_Ca_conc() - proto18.make_K_AHP() - proto18.make_K_C() - proto18.make_Na() - proto18.make_K_DR() - proto18.make_K_A() - proto18.make_glu() - proto18.make_NMDA() - proto18.make_Ca_NMDA() - proto18.make_NMDA_Ca_conc() - proto18.make_axon() - model = moose.Neutral( '/model' ) - cellId = moose.loadModel( 'ca1_asym.p', '/model/elec', "hsolve" ) - return cellId + library = moose.Neutral( '/library' ) + moose.setCwe( '/library' ) + proto18.make_Ca() + proto18.make_Ca_conc() + proto18.make_K_AHP() + proto18.make_K_C() + proto18.make_Na() + proto18.make_K_DR() + proto18.make_K_A() + proto18.make_glu() + proto18.make_NMDA() + proto18.make_Ca_NMDA() + proto18.make_NMDA_Ca_conc() + proto18.make_axon() + model = moose.Neutral( '/model' ) + cellId = moose.loadModel( 'ca1_asym.p', '/model/elec', "hsolve" ) + return cellId def addPlot( objpath, field, plot ): - #assert moose.exists( objpath ) - if ( moose.exists( objpath ) ): - tab = moose.Table( '/graphs/' + plot ) - obj = moose.element( objpath ) - moose.connect( tab, 'requestOut', obj, field ) + #assert moose.exists( objpath ) + if ( moose.exists( objpath ) ): + tab = moose.Table( '/graphs/' + plot ) + obj = moose.element( objpath ) + moose.connect( tab, 'requestOut', obj, field ) def dumpPlots( fname ): @@ -78,231 +78,231 @@ def dumpPlots( fname ): moose.element( x[0] ).xplot( fname, x[0].name + '_e' ) def moveCompt( path, oldParent, newParent ): - meshEntries = moose.element( newParent.path + '/mesh' ) - # Set up vol messaging from new compts to all their child objects. - for x in moose.wildcardFind( path + '/##[ISA=PoolBase]' ): - moose.connect( meshEntries, 'mesh', x, 'mesh', 'OneToOne' ) - #print 'path = ', path, ', oldparent = ', oldParent.path - orig = moose.element( path ) - moose.move( orig, newParent ) - moose.delete( moose.vec( oldParent.path ) ) - chem = moose.element( '/model/chem' ) - moose.move( newParent, chem ) + meshEntries = moose.element( newParent.path + '/mesh' ) + # Set up vol messaging from new compts to all their child objects. + for x in moose.wildcardFind( path + '/##[ISA=PoolBase]' ): + moose.connect( meshEntries, 'mesh', x, 'mesh', 'OneToOne' ) + #print 'path = ', path, ', oldparent = ', oldParent.path + orig = moose.element( path ) + moose.move( orig, newParent ) + moose.delete( moose.vec( oldParent.path ) ) + chem = moose.element( '/model/chem' ) + moose.move( newParent, chem ) def loadChem( neuroCompt, spineCompt, psdCompt ): - # We need the compartments to come in with a volume of 1 to match the - # original CubeMesh. - assert( neuroCompt.volume == 1.0 ) - assert( spineCompt.volume == 1.0 ) - assert( psdCompt.volume == 1.0 ) - assert( neuroCompt.mesh.num == 1 ) - print('volume = ', neuroCompt.mesh[0].volume) - #assert( neuroCompt.mesh[0].volume == 1.0 ) - #an unfortunate mismatch - # So we'll have to resize the volumes of the current compartments to the - # new ones. - - modelId = moose.loadModel( 'diffonly.g', '/model', 'ee' ) - #moose.le( '/model/model' ) - #moose.le( '/model/model/kinetics' ) - #moose.le( '/model/model/kinetics/PSD' ) - #moose.le( '/model/model/kinetics/SPINE' ) - moose.delete( moose.vec( '/model/model/kinetics/PSD/kreac' ) ) - moose.delete( moose.vec( '/model/model/kinetics/SPINE/kreac' ) ) - #moose.le( '/model/model/kinetics/PSD' ) - #moose.le( '/model/model/kinetics/SPINE' ) - pCaCaM = moose.element( '/model/model/kinetics/PSD/Ca_CaM' ) - pCaCaM.concInit = 0.001 - dCaCaM = moose.element( '/model/model/kinetics/PSD/Ca_CaM' ) - sCaCaM = moose.element( '/model/model/kinetics/SPINE/Ca_CaM' ) - print("CaCaM.concInit[p,s,d] = ", pCaCaM.concInit, sCaCaM.concInit, dCaCaM.concInit) - #moose.delete( moose.vec( '/model/model/kinetics/SPINE/Ca_CaM' ) ) - #CaCaM2 = moose.element( '/model/model/kinetics/SPINE/Ca_CaM' ) - #CaCaM2.concInit = 0.001 - chem = moose.element( '/model/model' ) - chem.name = 'chem' - oldS = moose.element( '/model/chem/compartment_1' ) - oldP = moose.element( '/model/chem/compartment_2' ) - oldN = moose.element( '/model/chem/kinetics' ) - print('oldvols[p,s,d] = ', oldP.volume, oldS.volume, oldN.volume) - print('newvols[p,s,d] = ', psdCompt.mesh[0].volume, spineCompt.mesh[0].volume, neuroCompt.mesh[0].volume) - oldN.volume = neuroCompt.mesh[0].volume - oldS.volume = spineCompt.mesh[0].volume - oldP.volume = psdCompt.mesh[0].volume - print('after redoing vols') - print("CaCaM.concInit[p,s,d] = ", pCaCaM.concInit, sCaCaM.concInit, dCaCaM.concInit) - moveCompt( '/model/chem/kinetics/SPINE', oldS, spineCompt ) - moveCompt( '/model/chem/kinetics/PSD', oldP, psdCompt ) - # Need to do the DEND last because the oldN is /kinetics, - # and it will be deleted. - moveCompt( '/model/chem/kinetics/DEND', oldN, neuroCompt ) - print('after moving to new compts') - print("CaCaM.concInit[p,s,d] = ", pCaCaM.concInit, sCaCaM.concInit, dCaCaM.concInit) + # We need the compartments to come in with a volume of 1 to match the + # original CubeMesh. + assert( neuroCompt.volume == 1.0 ) + assert( spineCompt.volume == 1.0 ) + assert( psdCompt.volume == 1.0 ) + assert( neuroCompt.mesh.num == 1 ) + print(('volume = ', neuroCompt.mesh[0].volume)) + #assert( neuroCompt.mesh[0].volume == 1.0 ) + #an unfortunate mismatch + # So we'll have to resize the volumes of the current compartments to the + # new ones. + + modelId = moose.loadModel( 'diffonly.g', '/model', 'ee' ) + #moose.le( '/model/model' ) + #moose.le( '/model/model/kinetics' ) + #moose.le( '/model/model/kinetics/PSD' ) + #moose.le( '/model/model/kinetics/SPINE' ) + moose.delete( moose.vec( '/model/model/kinetics/PSD/kreac' ) ) + moose.delete( moose.vec( '/model/model/kinetics/SPINE/kreac' ) ) + #moose.le( '/model/model/kinetics/PSD' ) + #moose.le( '/model/model/kinetics/SPINE' ) + pCaCaM = moose.element( '/model/model/kinetics/PSD/Ca_CaM' ) + pCaCaM.concInit = 0.001 + dCaCaM = moose.element( '/model/model/kinetics/PSD/Ca_CaM' ) + sCaCaM = moose.element( '/model/model/kinetics/SPINE/Ca_CaM' ) + print(("CaCaM.concInit[p,s,d] = ", pCaCaM.concInit, sCaCaM.concInit, dCaCaM.concInit)) + #moose.delete( moose.vec( '/model/model/kinetics/SPINE/Ca_CaM' ) ) + #CaCaM2 = moose.element( '/model/model/kinetics/SPINE/Ca_CaM' ) + #CaCaM2.concInit = 0.001 + chem = moose.element( '/model/model' ) + chem.name = 'chem' + oldS = moose.element( '/model/chem/compartment_1' ) + oldP = moose.element( '/model/chem/compartment_2' ) + oldN = moose.element( '/model/chem/kinetics' ) + print(('oldvols[p,s,d] = ', oldP.volume, oldS.volume, oldN.volume)) + print(('newvols[p,s,d] = ', psdCompt.mesh[0].volume, spineCompt.mesh[0].volume, neuroCompt.mesh[0].volume)) + oldN.volume = neuroCompt.mesh[0].volume + oldS.volume = spineCompt.mesh[0].volume + oldP.volume = psdCompt.mesh[0].volume + print('after redoing vols') + print(("CaCaM.concInit[p,s,d] = ", pCaCaM.concInit, sCaCaM.concInit, dCaCaM.concInit)) + moveCompt( '/model/chem/kinetics/SPINE', oldS, spineCompt ) + moveCompt( '/model/chem/kinetics/PSD', oldP, psdCompt ) + # Need to do the DEND last because the oldN is /kinetics, + # and it will be deleted. + moveCompt( '/model/chem/kinetics/DEND', oldN, neuroCompt ) + print('after moving to new compts') + print(("CaCaM.concInit[p,s,d] = ", pCaCaM.concInit, sCaCaM.concInit, dCaCaM.concInit)) def makeNeuroMeshModel(): - diffLength = 20e-6 # But we only want diffusion over part of the model. - numSyn = 13 - elec = loadElec() - synInput = moose.SpikeGen( '/model/elec/synInput' ) - synInput.refractT = 47e-3 - synInput.threshold = -1.0 - synInput.edgeTriggered = 0 - synInput.Vm( 0 ) - - synInput.refractT = 47e-3 - for i in range( numSyn ): - name = '/model/elec/spine_head_14_' + str( i + 1 ) - r = moose.element( name + '/glu' ) - r.synapse.num = 1 - syn = moose.element( r.path + '/synapse' ) - moose.connect( synInput, 'spikeOut', syn, 'addSpike', 'Single' ) - syn.weight = 0.2 * i * ( numSyn - 1 - i ) - syn.delay = i * 1.0e-3 - - neuroCompt = moose.NeuroMesh( '/model/neuroMesh' ) - #print 'neuroMeshvolume = ', neuroCompt.mesh[0].volume - neuroCompt.separateSpines = 1 - neuroCompt.diffLength = diffLength - neuroCompt.geometryPolicy = 'cylinder' - spineCompt = moose.SpineMesh( '/model/spineMesh' ) - #print 'spineMeshvolume = ', spineCompt.mesh[0].volume - moose.connect( neuroCompt, 'spineListOut', spineCompt, 'spineList', 'OneToOne' ) - psdCompt = moose.PsdMesh( '/model/psdMesh' ) - #print 'psdMeshvolume = ', psdCompt.mesh[0].volume - moose.connect( neuroCompt, 'psdListOut', psdCompt, 'psdList', 'OneToOne' ) - loadChem( neuroCompt, spineCompt, psdCompt ) - - # Put in the solvers, see how they fare. - nmksolve = moose.GslStoich( '/model/chem/neuroMesh/ksolve' ) - nmksolve.path = '/model/chem/neuroMesh/##' - nmksolve.compartment = moose.element( '/model/chem/neuroMesh' ) - nmksolve.method = 'rk5' - nm = moose.element( '/model/chem/neuroMesh/mesh' ) - moose.connect( nm, 'remesh', nmksolve, 'remesh' ) + diffLength = 20e-6 # But we only want diffusion over part of the model. + numSyn = 13 + elec = loadElec() + synInput = moose.SpikeGen( '/model/elec/synInput' ) + synInput.refractT = 47e-3 + synInput.threshold = -1.0 + synInput.edgeTriggered = 0 + synInput.Vm( 0 ) + + synInput.refractT = 47e-3 + for i in range( numSyn ): + name = '/model/elec/spine_head_14_' + str( i + 1 ) + r = moose.element( name + '/glu' ) + r.synapse.num = 1 + syn = moose.element( r.path + '/synapse' ) + moose.connect( synInput, 'spikeOut', syn, 'addSpike', 'Single' ) + syn.weight = 0.2 * i * ( numSyn - 1 - i ) + syn.delay = i * 1.0e-3 + + neuroCompt = moose.NeuroMesh( '/model/neuroMesh' ) + #print 'neuroMeshvolume = ', neuroCompt.mesh[0].volume + neuroCompt.separateSpines = 1 + neuroCompt.diffLength = diffLength + neuroCompt.geometryPolicy = 'cylinder' + spineCompt = moose.SpineMesh( '/model/spineMesh' ) + #print 'spineMeshvolume = ', spineCompt.mesh[0].volume + moose.connect( neuroCompt, 'spineListOut', spineCompt, 'spineList', 'OneToOne' ) + psdCompt = moose.PsdMesh( '/model/psdMesh' ) + #print 'psdMeshvolume = ', psdCompt.mesh[0].volume + moose.connect( neuroCompt, 'psdListOut', psdCompt, 'psdList', 'OneToOne' ) + loadChem( neuroCompt, spineCompt, psdCompt ) + + # Put in the solvers, see how they fare. + nmksolve = moose.GslStoich( '/model/chem/neuroMesh/ksolve' ) + nmksolve.path = '/model/chem/neuroMesh/##' + nmksolve.compartment = moose.element( '/model/chem/neuroMesh' ) + nmksolve.method = 'rk5' + nm = moose.element( '/model/chem/neuroMesh/mesh' ) + moose.connect( nm, 'remesh', nmksolve, 'remesh' ) #print "neuron: nv=", nmksolve.numLocalVoxels, ", nav=", nmksolve.numAllVoxels, nmksolve.numVarPools, nmksolve.numAllPools #print 'setting up smksolve' - smksolve = moose.GslStoich( '/model/chem/spineMesh/ksolve' ) - smksolve.path = '/model/chem/spineMesh/##' - smksolve.compartment = moose.element( '/model/chem/spineMesh' ) - smksolve.method = 'rk5' - sm = moose.element( '/model/chem/spineMesh/mesh' ) - moose.connect( sm, 'remesh', smksolve, 'remesh' ) - #print "spine: nv=", smksolve.numLocalVoxels, ", nav=", smksolve.numAllVoxels, smksolve.numVarPools, smksolve.numAllPools - # - #print 'setting up pmksolve' - pmksolve = moose.GslStoich( '/model/chem/psdMesh/ksolve' ) - pmksolve.path = '/model/chem/psdMesh/##' - pmksolve.compartment = moose.element( '/model/chem/psdMesh' ) - pmksolve.method = 'rk5' - pm = moose.element( '/model/chem/psdMesh/mesh' ) - moose.connect( pm, 'remesh', pmksolve, 'remesh' ) - #print "psd: nv=", pmksolve.numLocalVoxels, ", nav=", pmksolve.numAllVoxels, pmksolve.numVarPools, pmksolve.numAllPools - # - print('neuroMeshvolume = ', neuroCompt.mesh[0].volume) - - #print 'Assigning the cell model' - # Now to set up the model. - #neuroCompt.cell = elec - neuroCompt.cellPortion( elec, '/model/elec/lat_14_#,/model/elec/spine_neck#,/model/elec/spine_head#' ) - """ - ns = neuroCompt.numSegments - #assert( ns == 11 ) # dend, 5x (shaft+head) - ndc = neuroCompt.numDiffCompts - #print 'numDiffCompts = ', ndc - assert( ndc == 145 ) - ndc = neuroCompt.mesh.num - #print 'NeuroMeshNum = ', ndc - assert( ndc == 145 ) - - sdc = spineCompt.mesh.num - #print 'SpineMeshNum = ', sdc - assert( sdc == 13 ) - pdc = psdCompt.mesh.num - #print 'PsdMeshNum = ', pdc - assert( pdc == 13 ) - """ - - mesh = moose.vec( '/model/chem/neuroMesh/mesh' ) - #for i in range( ndc ): - # print 's[', i, '] = ', mesh[i].volume - mesh2 = moose.vec( '/model/chem/spineMesh/mesh' ) -# for i in range( sdc ): -# print 's[', i, '] = ', mesh2[i].volume - #print 'numPSD = ', moose.element( '/model/chem/psdMesh/mesh' ).localNumField - mesh = moose.vec( '/model/chem/psdMesh/mesh' ) - #print 'psd mesh.volume = ', mesh.volume - #for i in range( pdc ): - # print 's[', i, '] = ', mesh[i].volume - # - # We need to use the spine solver as the master for the purposes of - # these calculations. This will handle the diffusion calculations - # between head and dendrite, and between head and PSD. - smksolve.addJunction( nmksolve ) - #print "spine: nv=", smksolve.numLocalVoxels, ", nav=", smksolve.numAllVoxels, smksolve.numVarPools, smksolve.numAllPools - smksolve.addJunction( pmksolve ) - #print "psd: nv=", pmksolve.numLocalVoxels, ", nav=", pmksolve.numAllVoxels, pmksolve.numVarPools, pmksolve.numAllPools - ndc = neuroCompt.numDiffCompts - #print 'numDiffCompts = ', ndc - assert( ndc == 13 ) - ndc = neuroCompt.mesh.num - #print 'NeuroMeshNum = ', ndc - assert( ndc == 13 ) - sdc = spineCompt.mesh.num - #print 'SpineMeshNum = ', sdc - assert( sdc == 13 ) - pdc = psdCompt.mesh.num - #print 'PsdMeshNum = ', pdc - assert( pdc == 13 ) - - """ - print 'neuroCompt' - for i in range( ndc ): - print i, neuroCompt.stencilIndex[i] - print i, neuroCompt.stencilRate[i] - - print 'spineCompt' - for i in range( sdc * 3 ): - print i, spineCompt.stencilIndex[i] - print i, spineCompt.stencilRate[i] - - print 'psdCompt' - for i in range( pdc ): - print i, psdCompt.stencilIndex[i] - print i, psdCompt.stencilRate[i] - print 'Spine parents:' - pavoxel = spineCompt.parentVoxel - for i in range( sdc ): - print i, pavoxel[i] - """ - - # oddly, numLocalFields does not work. - #moose.le( '/model/chem/neuroMesh' ) - ca = moose.element( '/model/chem/neuroMesh/DEND/Ca' ) - assert( ca.lastDimension == ndc ) - """ - CaNpsd = moose.vec( '/model/chem/psdMesh/PSD/PP1_PSD/CaN' ) - print 'numCaN in PSD = ', CaNpsd.nInit, ', vol = ', CaNpsd.volume - CaNspine = moose.vec( '/model/chem/spineMesh/SPINE/CaN_BULK/CaN' ) - print 'numCaN in spine = ', CaNspine.nInit, ', vol = ', CaNspine.volume - """ - - # set up adaptors - aCa = moose.Adaptor( '/model/chem/psdMesh/adaptCa', pdc ) - adaptCa = moose.vec( '/model/chem/psdMesh/adaptCa' ) - chemCa = moose.vec( '/model/chem/psdMesh/PSD/Ca' ) - assert( len( adaptCa ) == pdc ) - assert( len( chemCa ) == pdc ) - for i in range( pdc ): - path = '/model/elec/spine_head_14_' + str( i + 1 ) + '/NMDA_Ca_conc' - elecCa = moose.element( path ) - moose.connect( elecCa, 'concOut', adaptCa[i], 'input', 'Single' ) - moose.connect( adaptCa, 'outputSrc', chemCa, 'setConc', 'OneToOne' ) - adaptCa.inputOffset = 0.0 # - adaptCa.outputOffset = 80e-6 # 80 nM offset in chem. - adaptCa.scale = 1e-5 # 520 to 0.0052 mM - #print adaptCa.outputOffset - #print adaptCa.scale + smksolve = moose.GslStoich( '/model/chem/spineMesh/ksolve' ) + smksolve.path = '/model/chem/spineMesh/##' + smksolve.compartment = moose.element( '/model/chem/spineMesh' ) + smksolve.method = 'rk5' + sm = moose.element( '/model/chem/spineMesh/mesh' ) + moose.connect( sm, 'remesh', smksolve, 'remesh' ) + #print "spine: nv=", smksolve.numLocalVoxels, ", nav=", smksolve.numAllVoxels, smksolve.numVarPools, smksolve.numAllPools + # + #print 'setting up pmksolve' + pmksolve = moose.GslStoich( '/model/chem/psdMesh/ksolve' ) + pmksolve.path = '/model/chem/psdMesh/##' + pmksolve.compartment = moose.element( '/model/chem/psdMesh' ) + pmksolve.method = 'rk5' + pm = moose.element( '/model/chem/psdMesh/mesh' ) + moose.connect( pm, 'remesh', pmksolve, 'remesh' ) + #print "psd: nv=", pmksolve.numLocalVoxels, ", nav=", pmksolve.numAllVoxels, pmksolve.numVarPools, pmksolve.numAllPools + # + print(('neuroMeshvolume = ', neuroCompt.mesh[0].volume)) + + #print 'Assigning the cell model' + # Now to set up the model. + #neuroCompt.cell = elec + neuroCompt.cellPortion( elec, '/model/elec/lat_14_#,/model/elec/spine_neck#,/model/elec/spine_head#' ) + """ + ns = neuroCompt.numSegments + #assert( ns == 11 ) # dend, 5x (shaft+head) + ndc = neuroCompt.numDiffCompts + #print 'numDiffCompts = ', ndc + assert( ndc == 145 ) + ndc = neuroCompt.mesh.num + #print 'NeuroMeshNum = ', ndc + assert( ndc == 145 ) + + sdc = spineCompt.mesh.num + #print 'SpineMeshNum = ', sdc + assert( sdc == 13 ) + pdc = psdCompt.mesh.num + #print 'PsdMeshNum = ', pdc + assert( pdc == 13 ) + """ + + mesh = moose.vec( '/model/chem/neuroMesh/mesh' ) + #for i in range( ndc ): + # print 's[', i, '] = ', mesh[i].volume + mesh2 = moose.vec( '/model/chem/spineMesh/mesh' ) +# for i in range( sdc ): +# print 's[', i, '] = ', mesh2[i].volume + #print 'numPSD = ', moose.element( '/model/chem/psdMesh/mesh' ).localNumField + mesh = moose.vec( '/model/chem/psdMesh/mesh' ) + #print 'psd mesh.volume = ', mesh.volume + #for i in range( pdc ): + # print 's[', i, '] = ', mesh[i].volume + # + # We need to use the spine solver as the master for the purposes of + # these calculations. This will handle the diffusion calculations + # between head and dendrite, and between head and PSD. + smksolve.addJunction( nmksolve ) + #print "spine: nv=", smksolve.numLocalVoxels, ", nav=", smksolve.numAllVoxels, smksolve.numVarPools, smksolve.numAllPools + smksolve.addJunction( pmksolve ) + #print "psd: nv=", pmksolve.numLocalVoxels, ", nav=", pmksolve.numAllVoxels, pmksolve.numVarPools, pmksolve.numAllPools + ndc = neuroCompt.numDiffCompts + #print 'numDiffCompts = ', ndc + assert( ndc == 13 ) + ndc = neuroCompt.mesh.num + #print 'NeuroMeshNum = ', ndc + assert( ndc == 13 ) + sdc = spineCompt.mesh.num + #print 'SpineMeshNum = ', sdc + assert( sdc == 13 ) + pdc = psdCompt.mesh.num + #print 'PsdMeshNum = ', pdc + assert( pdc == 13 ) + + """ + print 'neuroCompt' + for i in range( ndc ): + print i, neuroCompt.stencilIndex[i] + print i, neuroCompt.stencilRate[i] + + print 'spineCompt' + for i in range( sdc * 3 ): + print i, spineCompt.stencilIndex[i] + print i, spineCompt.stencilRate[i] + + print 'psdCompt' + for i in range( pdc ): + print i, psdCompt.stencilIndex[i] + print i, psdCompt.stencilRate[i] + print 'Spine parents:' + pavoxel = spineCompt.parentVoxel + for i in range( sdc ): + print i, pavoxel[i] + """ + + # oddly, numLocalFields does not work. + #moose.le( '/model/chem/neuroMesh' ) + ca = moose.element( '/model/chem/neuroMesh/DEND/Ca' ) + assert( ca.lastDimension == ndc ) + """ + CaNpsd = moose.vec( '/model/chem/psdMesh/PSD/PP1_PSD/CaN' ) + print 'numCaN in PSD = ', CaNpsd.nInit, ', vol = ', CaNpsd.volume + CaNspine = moose.vec( '/model/chem/spineMesh/SPINE/CaN_BULK/CaN' ) + print 'numCaN in spine = ', CaNspine.nInit, ', vol = ', CaNspine.volume + """ + + # set up adaptors + aCa = moose.Adaptor( '/model/chem/psdMesh/adaptCa', pdc ) + adaptCa = moose.vec( '/model/chem/psdMesh/adaptCa' ) + chemCa = moose.vec( '/model/chem/psdMesh/PSD/Ca' ) + assert( len( adaptCa ) == pdc ) + assert( len( chemCa ) == pdc ) + for i in range( pdc ): + path = '/model/elec/spine_head_14_' + str( i + 1 ) + '/NMDA_Ca_conc' + elecCa = moose.element( path ) + moose.connect( elecCa, 'concOut', adaptCa[i], 'input', 'Single' ) + moose.connect( adaptCa, 'outputSrc', chemCa, 'setConc', 'OneToOne' ) + adaptCa.inputOffset = 0.0 # + adaptCa.outputOffset = 80e-6 # 80 nM offset in chem. + adaptCa.scale = 1e-5 # 520 to 0.0052 mM + #print adaptCa.outputOffset + #print adaptCa.scale def makeElecPlots(): graphs = moose.Neutral( '/graphs' ) @@ -317,121 +317,121 @@ def makeElecPlots(): addPlot( '/model/elec/spine_head_14_13/NMDA_Ca_conc', 'getCa', 'elec/spine_13Ca' ) def makeChemPlots(): - spineMesh = moose.element( '/model/chem/spineMesh' ) - middleSpine = 6 - midSpineVoxel = spineMesh.parentVoxel[middleSpine] - graphs = moose.Neutral( '/graphs' ) - addPlot( '/model/chem/psdMesh/PSD/Ca[0]', 'getConc', 'pCa0' ) - addPlot( '/model/chem/psdMesh/PSD/Ca[6]', 'getConc', 'pCa6' ) - addPlot( '/model/chem/psdMesh/PSD/Ca[12]', 'getConc', 'pCa12' ) - - addPlot( '/model/chem/spineMesh/SPINE/Ca[0]', 'getConc', 'sCa0' ) - addPlot( '/model/chem/spineMesh/SPINE/Ca[6]', 'getConc', 'sCa6' ) - addPlot( '/model/chem/spineMesh/SPINE/Ca[12]', 'getConc', 'sCa12' ) - - addPlot( '/model/chem/neuroMesh/DEND/Ca[0]', 'getConc', 'dend0Ca' ) - addPlot( '/model/chem/neuroMesh/DEND/Ca[' + str( midSpineVoxel ) + ']', 'getConc', 'dendMidCa' ) - addPlot( '/model/chem/neuroMesh/DEND/Ca[' + str( midSpineVoxel+2 ) + ']', 'getConc', 'dendMid2' ) - addPlot( '/model/chem/neuroMesh/DEND/Ca[' + str( midSpineVoxel+4 ) + ']', 'getConc', 'dendMid4' ) - addPlot( '/model/chem/neuroMesh/DEND/Ca[' + str( midSpineVoxel+6 ) + ']', 'getConc', 'dendMid6' ) - addPlot( '/model/chem/neuroMesh/DEND/Ca[144]', 'getConc', 'dend144Ca' ) - - addPlot( '/model/chem/psdMesh/PSD/CaM[0]', 'getConc', 'pCaM0' ) - addPlot( '/model/chem/psdMesh/PSD/CaM[6]', 'getConc', 'pCaM6' ) - addPlot( '/model/chem/psdMesh/PSD/CaM[12]', 'getConc', 'pCaM12' ) - - addPlot( '/model/chem/spineMesh/SPINE/CaM[0]', 'getConc', 'sCaM0' ) - addPlot( '/model/chem/spineMesh/SPINE/CaM[6]', 'getConc', 'sCaM6' ) - addPlot( '/model/chem/spineMesh/SPINE/CaM[12]', 'getConc', 'sCaM12' ) - - addPlot( '/model/chem/psdMesh/PSD/Ca_CaM[0]', 'getConc', 'pCaCaM0' ) - addPlot( '/model/chem/psdMesh/PSD/Ca_CaM[6]', 'getConc', 'pCaCaM6' ) - addPlot( '/model/chem/psdMesh/PSD/Ca_CaM[12]', 'getConc', 'pCaCaM12' ) - - addPlot( '/model/chem/spineMesh/SPINE/Ca_CaM[0]', 'getConc', 'sCaCaM0' ) - addPlot( '/model/chem/spineMesh/SPINE/Ca_CaM[6]', 'getConc', 'sCaCaM6' ) - addPlot( '/model/chem/spineMesh/SPINE/Ca_CaM[12]', 'getConc', 'sCaCaM12' ) - - addPlot( '/model/chem/neuroMesh/DEND/Ca_CaM[0]', 'getConc', 'dCaCaM0' ) - addPlot( '/model/chem/neuroMesh/DEND/Ca_CaM[' + str( midSpineVoxel ) + ']', 'getConc', 'dendMidCaCaM' ) - addPlot( '/model/chem/neuroMesh/DEND/Ca_CaM[144]', 'getConc', 'dCaCaM144' ) + spineMesh = moose.element( '/model/chem/spineMesh' ) + middleSpine = 6 + midSpineVoxel = spineMesh.parentVoxel[middleSpine] + graphs = moose.Neutral( '/graphs' ) + addPlot( '/model/chem/psdMesh/PSD/Ca[0]', 'getConc', 'pCa0' ) + addPlot( '/model/chem/psdMesh/PSD/Ca[6]', 'getConc', 'pCa6' ) + addPlot( '/model/chem/psdMesh/PSD/Ca[12]', 'getConc', 'pCa12' ) + + addPlot( '/model/chem/spineMesh/SPINE/Ca[0]', 'getConc', 'sCa0' ) + addPlot( '/model/chem/spineMesh/SPINE/Ca[6]', 'getConc', 'sCa6' ) + addPlot( '/model/chem/spineMesh/SPINE/Ca[12]', 'getConc', 'sCa12' ) + + addPlot( '/model/chem/neuroMesh/DEND/Ca[0]', 'getConc', 'dend0Ca' ) + addPlot( '/model/chem/neuroMesh/DEND/Ca[' + str( midSpineVoxel ) + ']', 'getConc', 'dendMidCa' ) + addPlot( '/model/chem/neuroMesh/DEND/Ca[' + str( midSpineVoxel+2 ) + ']', 'getConc', 'dendMid2' ) + addPlot( '/model/chem/neuroMesh/DEND/Ca[' + str( midSpineVoxel+4 ) + ']', 'getConc', 'dendMid4' ) + addPlot( '/model/chem/neuroMesh/DEND/Ca[' + str( midSpineVoxel+6 ) + ']', 'getConc', 'dendMid6' ) + addPlot( '/model/chem/neuroMesh/DEND/Ca[144]', 'getConc', 'dend144Ca' ) + + addPlot( '/model/chem/psdMesh/PSD/CaM[0]', 'getConc', 'pCaM0' ) + addPlot( '/model/chem/psdMesh/PSD/CaM[6]', 'getConc', 'pCaM6' ) + addPlot( '/model/chem/psdMesh/PSD/CaM[12]', 'getConc', 'pCaM12' ) + + addPlot( '/model/chem/spineMesh/SPINE/CaM[0]', 'getConc', 'sCaM0' ) + addPlot( '/model/chem/spineMesh/SPINE/CaM[6]', 'getConc', 'sCaM6' ) + addPlot( '/model/chem/spineMesh/SPINE/CaM[12]', 'getConc', 'sCaM12' ) + + addPlot( '/model/chem/psdMesh/PSD/Ca_CaM[0]', 'getConc', 'pCaCaM0' ) + addPlot( '/model/chem/psdMesh/PSD/Ca_CaM[6]', 'getConc', 'pCaCaM6' ) + addPlot( '/model/chem/psdMesh/PSD/Ca_CaM[12]', 'getConc', 'pCaCaM12' ) + + addPlot( '/model/chem/spineMesh/SPINE/Ca_CaM[0]', 'getConc', 'sCaCaM0' ) + addPlot( '/model/chem/spineMesh/SPINE/Ca_CaM[6]', 'getConc', 'sCaCaM6' ) + addPlot( '/model/chem/spineMesh/SPINE/Ca_CaM[12]', 'getConc', 'sCaCaM12' ) + + addPlot( '/model/chem/neuroMesh/DEND/Ca_CaM[0]', 'getConc', 'dCaCaM0' ) + addPlot( '/model/chem/neuroMesh/DEND/Ca_CaM[' + str( midSpineVoxel ) + ']', 'getConc', 'dendMidCaCaM' ) + addPlot( '/model/chem/neuroMesh/DEND/Ca_CaM[144]', 'getConc', 'dCaCaM144' ) def testNeuroMeshMultiscale(): - elecDt = 50e-6 - chemDt = 1e-4 - plotDt = 5e-4 - plotName = 'diffonly.plot' - - makeNeuroMeshModel() - """ - for i in moose.wildcardFind( '/model/chem/##[ISA=PoolBase]' ): - if ( i[0].diffConst > 0 ): - grandpaname = i.parent[0].parent.name + '/' - paname = i.parent[0].name + '/' - print grandpaname + paname + i[0].name, i[0].diffConst - moose.le( '/model/chem/spineMesh/ksolve' ) - print 'Neighbors:' - for t in moose.element( '/model/chem/spineMesh/ksolve/junction' ).neighbors['masterJunction']: - print 'masterJunction <-', t.path - for t in moose.wildcardFind( '/model/chem/#Mesh/ksolve' ): - k = moose.element( t[0] ) - print k.path + ' localVoxels=', k.numLocalVoxels, ', allVoxels= ', k.numAllVoxels - """ - - makeChemPlots() - makeElecPlots() - moose.setClock( 0, elecDt ) - moose.setClock( 1, elecDt ) - moose.setClock( 2, elecDt ) - moose.setClock( 5, chemDt ) - moose.setClock( 6, chemDt ) - moose.setClock( 7, plotDt ) - moose.setClock( 8, plotDt ) - moose.useClock( 0, '/model/elec/##[ISA=Compartment]', 'init' ) - moose.useClock( 1, '/model/elec/##[ISA=SpikeGen]', 'process' ) - moose.useClock( 2, '/model/elec/##[ISA=ChanBase],/model/##[ISA=SynBase],/model/##[ISA=CaConc]','process') - moose.useClock( 5, '/model/chem/##[ISA=PoolBase],/model/##[ISA=ReacBase],/model/##[ISA=EnzBase]', 'process' ) - moose.useClock( 6, '/model/chem/##[ISA=Adaptor]', 'process' ) - moose.useClock( 7, '/graphs/#', 'process' ) - moose.useClock( 8, '/graphs/elec/#', 'process' ) - moose.useClock( 5, '/model/chem/#Mesh/ksolve', 'init' ) - moose.useClock( 6, '/model/chem/#Mesh/ksolve', 'process' ) - hsolve = moose.HSolve( '/model/elec/hsolve' ) - moose.useClock( 1, '/model/elec/hsolve', 'process' ) - hsolve.dt = elecDt - hsolve.target = '/model/elec/compt' - moose.reinit() - moose.reinit() - """ - print 'pre' - eca = moose.vec( '/model/chem/psdMesh/PSD/CaM/Ca' ) - for i in range( 3 ): - print eca[i].concInit, eca[i].conc, eca[i].nInit, eca[i].n, eca[i].volume - print 'dend' - eca = moose.vec( '/model/chem/neuroMesh/DEND/Ca' ) - for i in ( 0, 1, 2, 30, 60, 90, 120, 144 ): - print i, eca[i].concInit, eca[i].conc, eca[i].nInit, eca[i].n, eca[i].volume - - print 'PSD' - eca = moose.vec( '/model/chem/psdMesh/PSD/CaM/Ca' ) - for i in range( 3 ): - print eca[i].concInit, eca[i].conc, eca[i].nInit, eca[i].n, eca[i].volume - print 'spine' - eca = moose.vec( '/model/chem/spineMesh/SPINE/CaM/Ca' ) - for i in range( 3 ): - print eca[i].concInit, eca[i].conc, eca[i].nInit, eca[i].n, eca[i].volume - """ - - moose.start( 0.5 ) - dumpPlots( plotName ) - print('All done') + elecDt = 50e-6 + chemDt = 1e-4 + plotDt = 5e-4 + plotName = 'diffonly.plot' + + makeNeuroMeshModel() + """ + for i in moose.wildcardFind( '/model/chem/##[ISA=PoolBase]' ): + if ( i[0].diffConst > 0 ): + grandpaname = i.parent[0].parent.name + '/' + paname = i.parent[0].name + '/' + print grandpaname + paname + i[0].name, i[0].diffConst + moose.le( '/model/chem/spineMesh/ksolve' ) + print 'Neighbors:' + for t in moose.element( '/model/chem/spineMesh/ksolve/junction' ).neighbors['masterJunction']: + print 'masterJunction <-', t.path + for t in moose.wildcardFind( '/model/chem/#Mesh/ksolve' ): + k = moose.element( t[0] ) + print k.path + ' localVoxels=', k.numLocalVoxels, ', allVoxels= ', k.numAllVoxels + """ + + makeChemPlots() + makeElecPlots() + moose.setClock( 0, elecDt ) + moose.setClock( 1, elecDt ) + moose.setClock( 2, elecDt ) + moose.setClock( 5, chemDt ) + moose.setClock( 6, chemDt ) + moose.setClock( 7, plotDt ) + moose.setClock( 8, plotDt ) + moose.useClock( 0, '/model/elec/##[ISA=Compartment]', 'init' ) + moose.useClock( 1, '/model/elec/##[ISA=SpikeGen]', 'process' ) + moose.useClock( 2, '/model/elec/##[ISA=ChanBase],/model/##[ISA=SynBase],/model/##[ISA=CaConc]','process') + moose.useClock( 5, '/model/chem/##[ISA=PoolBase],/model/##[ISA=ReacBase],/model/##[ISA=EnzBase]', 'process' ) + moose.useClock( 6, '/model/chem/##[ISA=Adaptor]', 'process' ) + moose.useClock( 7, '/graphs/#', 'process' ) + moose.useClock( 8, '/graphs/elec/#', 'process' ) + moose.useClock( 5, '/model/chem/#Mesh/ksolve', 'init' ) + moose.useClock( 6, '/model/chem/#Mesh/ksolve', 'process' ) + hsolve = moose.HSolve( '/model/elec/hsolve' ) + moose.useClock( 1, '/model/elec/hsolve', 'process' ) + hsolve.dt = elecDt + hsolve.target = '/model/elec/compt' + moose.reinit() + moose.reinit() + """ + print 'pre' + eca = moose.vec( '/model/chem/psdMesh/PSD/CaM/Ca' ) + for i in range( 3 ): + print eca[i].concInit, eca[i].conc, eca[i].nInit, eca[i].n, eca[i].volume + print 'dend' + eca = moose.vec( '/model/chem/neuroMesh/DEND/Ca' ) + for i in ( 0, 1, 2, 30, 60, 90, 120, 144 ): + print i, eca[i].concInit, eca[i].conc, eca[i].nInit, eca[i].n, eca[i].volume + + print 'PSD' + eca = moose.vec( '/model/chem/psdMesh/PSD/CaM/Ca' ) + for i in range( 3 ): + print eca[i].concInit, eca[i].conc, eca[i].nInit, eca[i].n, eca[i].volume + print 'spine' + eca = moose.vec( '/model/chem/spineMesh/SPINE/CaM/Ca' ) + for i in range( 3 ): + print eca[i].concInit, eca[i].conc, eca[i].nInit, eca[i].n, eca[i].volume + """ + + moose.start( 0.5 ) + dumpPlots( plotName ) + print('All done') def main(): - testNeuroMeshMultiscale() + testNeuroMeshMultiscale() if __name__ == '__main__': - main() + main() # # loadMulti.py ends here. diff --git a/moose-examples/snippets/MULTI/loadMulti.py b/moose-examples/snippets/MULTI/loadMulti.py index d4e92aa3787752581d7ca9a90a21f4e3a92c665d..128acd3b4aa8aff8ca88cae654e9663848ebc3cc 100644 --- a/moose-examples/snippets/MULTI/loadMulti.py +++ b/moose-examples/snippets/MULTI/loadMulti.py @@ -35,39 +35,39 @@ import proto18 EREST_ACT = -70e-3 def loadElec(): - library = moose.Neutral( '/library' ) - moose.setCwe( '/library' ) - proto18.make_Ca() - proto18.make_Ca_conc() - proto18.make_K_AHP() - proto18.make_K_C() - proto18.make_Na() - proto18.make_K_DR() - proto18.make_K_A() - proto18.make_glu() - proto18.make_NMDA() - proto18.make_Ca_NMDA() - proto18.make_NMDA_Ca_conc() - proto18.make_axon() - model = moose.Neutral( '/model' ) - cellId = moose.loadModel( 'ca1_asym.p', '/model/elec', "Neutral" ) - return cellId + library = moose.Neutral( '/library' ) + moose.setCwe( '/library' ) + proto18.make_Ca() + proto18.make_Ca_conc() + proto18.make_K_AHP() + proto18.make_K_C() + proto18.make_Na() + proto18.make_K_DR() + proto18.make_K_A() + proto18.make_glu() + proto18.make_NMDA() + proto18.make_Ca_NMDA() + proto18.make_NMDA_Ca_conc() + proto18.make_axon() + model = moose.Neutral( '/model' ) + cellId = moose.loadModel( 'ca1_asym.p', '/model/elec', "Neutral" ) + return cellId def addPlot( objpath, field, plot ): - #assert moose.exists( objpath ) - if moose.exists( objpath ): - tab = moose.Table( '/graphs/' + plot ) - obj = moose.element( objpath ) - if obj.className == 'Neutral': - print("addPlot failed: object is a Neutral: ", objpath) - return moose.element( '/' ) - else: - #print "object was found: ", objpath, obj.className - moose.connect( tab, 'requestOut', obj, field ) - return tab - else: - print("addPlot failed: object not found: ", objpath) - return moose.element( '/' ) + #assert moose.exists( objpath ) + if moose.exists( objpath ): + tab = moose.Table( '/graphs/' + plot ) + obj = moose.element( objpath ) + if obj.className == 'Neutral': + print(("addPlot failed: object is a Neutral: ", objpath)) + return moose.element( '/' ) + else: + #print "object was found: ", objpath, obj.className + moose.connect( tab, 'requestOut', obj, field ) + return tab + else: + print(("addPlot failed: object not found: ", objpath)) + return moose.element( '/' ) def dumpPlots( fname ): if ( os.path.exists( fname ) ): @@ -78,143 +78,141 @@ def dumpPlots( fname ): moose.element( x[0] ).xplot( fname, x[0].name + '_e' ) def loadChem( diffLength ): - chem = moose.Neutral( '/model/chem' ) - neuroCompt = moose.NeuroMesh( '/model/chem/kinetics' ) - neuroCompt.separateSpines = 1 - neuroCompt.geometryPolicy = 'cylinder' - spineCompt = moose.SpineMesh( '/model/chem/compartment_1' ) - moose.connect( neuroCompt, 'spineListOut', spineCompt, 'spineList', 'OneToOne' ) - psdCompt = moose.PsdMesh( '/model/chem/compartment_2' ) - #print 'Meshvolume[neuro, spine, psd] = ', neuroCompt.mesh[0].volume, spineCompt.mesh[0].volume, psdCompt.mesh[0].volume - moose.connect( neuroCompt, 'psdListOut', psdCompt, 'psdList', 'OneToOne' ) - modelId = moose.loadModel( 'psd_merged31d.g', '/model/chem', 'ee' ) - neuroCompt.name = 'dend' - spineCompt.name = 'spine' - psdCompt.name = 'psd' + chem = moose.Neutral( '/model/chem' ) + neuroCompt = moose.NeuroMesh( '/model/chem/kinetics' ) + neuroCompt.separateSpines = 1 + neuroCompt.geometryPolicy = 'cylinder' + spineCompt = moose.SpineMesh( '/model/chem/compartment_1' ) + moose.connect( neuroCompt, 'spineListOut', spineCompt, 'spineList', 'OneToOne' ) + psdCompt = moose.PsdMesh( '/model/chem/compartment_2' ) + #print 'Meshvolume[neuro, spine, psd] = ', neuroCompt.mesh[0].volume, spineCompt.mesh[0].volume, psdCompt.mesh[0].volume + moose.connect( neuroCompt, 'psdListOut', psdCompt, 'psdList', 'OneToOne' ) + modelId = moose.loadModel( 'psd_merged31d.g', '/model/chem', 'ee' ) + neuroCompt.name = 'dend' + spineCompt.name = 'spine' + psdCompt.name = 'psd' def makeNeuroMeshModel(): - diffLength = 10e-6 # But we only want diffusion over part of the model. - numSyn = 13 - elec = loadElec() - synInput = moose.SpikeGen( '/model/elec/synInput' ) - synInput.threshold = -1.0 - synInput.edgeTriggered = 0 - synInput.Vm( 0 ) - synInput.refractT = 47e-3 - - for i in range( numSyn ): - name = '/model/elec/spine_head_14_' + str( i + 1 ) - r = moose.element( name + '/glu' ) - r.synapse.num = 1 - syn = moose.element( r.path + '/synapse' ) - moose.connect( synInput, 'spikeOut', syn, 'addSpike', 'Single' ) - syn.weight = 0.2 * i * ( numSyn - 1 - i ) - syn.delay = i * 1.0e-3 - - loadChem( diffLength ) - neuroCompt = moose.element( '/model/chem/dend' ) - neuroCompt.diffLength = diffLength - neuroCompt.cellPortion( elec, '/model/elec/#' ) - for x in moose.wildcardFind( '/model/chem/##[ISA=PoolBase]' ): - if (x.diffConst > 0): - x.diffConst = 1e-11 - for x in moose.wildcardFind( '/model/chem/##/Ca' ): - x.diffConst = 1e-10 - - # Put in dend solvers - ns = neuroCompt.numSegments - ndc = neuroCompt.numDiffCompts - print('ns = ', ns, ', ndc = ', ndc) - assert( neuroCompt.numDiffCompts == neuroCompt.mesh.num ) - assert( ns == 36 ) # dend, 5x (shaft+head) - assert( ndc == 278 ) - nmksolve = moose.Ksolve( '/model/chem/dend/ksolve' ) - nmdsolve = moose.Dsolve( '/model/chem/dend/dsolve' ) - nmstoich = moose.Stoich( '/model/chem/dend/stoich' ) - nmstoich.compartment = neuroCompt - nmstoich.ksolve = nmksolve - nmstoich.dsolve = nmdsolve - nmstoich.path = "/model/chem/dend/##" - print('done setting path, numPools = ', nmdsolve.numPools) - assert( nmdsolve.numPools == 1 ) - # oddly, numLocalFields does not work. - ca = moose.element( '/model/chem/dend/DEND/Ca' ) - assert( ca.numData == ndc ) + diffLength = 10e-6 # But we only want diffusion over part of the model. + numSyn = 13 + elec = loadElec() + synInput = moose.SpikeGen( '/model/elec/synInput' ) + synInput.threshold = -1.0 + synInput.edgeTriggered = 0 + synInput.Vm( 0 ) + synInput.refractT = 47e-3 + + for i in range( numSyn ): + name = '/model/elec/spine_head_14_' + str( i + 1 ) + r = moose.element( name + '/glu' ) + r.synapse.num = 1 + syn = moose.element( r.path + '/synapse' ) + moose.connect( synInput, 'spikeOut', syn, 'addSpike', 'Single' ) + syn.weight = 0.2 * i * ( numSyn - 1 - i ) + syn.delay = i * 1.0e-3 + + loadChem( diffLength ) + neuroCompt = moose.element( '/model/chem/dend' ) + neuroCompt.diffLength = diffLength + neuroCompt.cellPortion( elec, '/model/elec/#' ) + for x in moose.wildcardFind( '/model/chem/##[ISA=PoolBase]' ): + if (x.diffConst > 0): + x.diffConst = 1e-11 + for x in moose.wildcardFind( '/model/chem/##/Ca' ): + x.diffConst = 1e-10 + + # Put in dend solvers + ns = neuroCompt.numSegments + ndc = neuroCompt.numDiffCompts + print(('ns = ', ns, ', ndc = ', ndc)) + assert( neuroCompt.numDiffCompts == neuroCompt.mesh.num ) + assert( ns == 36 ) # dend, 5x (shaft+head) + assert( ndc == 278 ) + nmksolve = moose.Ksolve( '/model/chem/dend/ksolve' ) + nmdsolve = moose.Dsolve( '/model/chem/dend/dsolve' ) + nmstoich = moose.Stoich( '/model/chem/dend/stoich' ) + nmstoich.compartment = neuroCompt + nmstoich.ksolve = nmksolve + nmstoich.dsolve = nmdsolve + nmstoich.path = "/model/chem/dend/##" + print(('done setting path, numPools = ', nmdsolve.numPools)) + assert( nmdsolve.numPools == 1 ) + # oddly, numLocalFields does not work. + ca = moose.element( '/model/chem/dend/DEND/Ca' ) + assert( ca.numData == ndc ) - # Put in spine solvers. Note that these get info from the neuroCompt - spineCompt = moose.element( '/model/chem/spine' ) - sdc = spineCompt.mesh.num - print('sdc = ', sdc) - assert( sdc == 13 ) - smksolve = moose.Ksolve( '/model/chem/spine/ksolve' ) - smdsolve = moose.Dsolve( '/model/chem/spine/dsolve' ) - smstoich = moose.Stoich( '/model/chem/spine/stoich' ) - smstoich.compartment = spineCompt - smstoich.ksolve = smksolve - smstoich.dsolve = smdsolve - smstoich.path = "/model/chem/spine/##" - assert( smstoich.numAllPools == 36 ) - - # Put in PSD solvers. Note that these get info from the neuroCompt - psdCompt = moose.element( '/model/chem/psd' ) - pdc = psdCompt.mesh.num - assert( pdc == 13 ) - pmksolve = moose.Ksolve( '/model/chem/psd/ksolve' ) - pmdsolve = moose.Dsolve( '/model/chem/psd/dsolve' ) - pmstoich = moose.Stoich( '/model/chem/psd/stoich' ) - pmstoich.compartment = psdCompt - pmstoich.ksolve = pmksolve - pmstoich.dsolve = pmdsolve - pmstoich.path = "/model/chem/psd/##" - print('numAllPools = ', pmstoich.numAllPools) - assert( pmstoich.numAllPools == 56 ) - foo = moose.element( '/model/chem/psd/Ca' ) - bar = moose.element( '/model/chem/psd/I1_p' ) - print('PSD: numfoo = ', foo.numData, 'numbar = ', bar.numData) - print('PSD: numAllVoxels = ', pmksolve.numAllVoxels) - - # Put in junctions between diffusion solvers - nmdsolve.buildNeuroMeshJunctions( smdsolve, pmdsolve ) - - """ - CaNpsd = moose.vec( '/model/chem/psdMesh/PSD/PP1_PSD/CaN' ) - print 'numCaN in PSD = ', CaNpsd.nInit, ', vol = ', CaNpsd.volume - CaNspine = moose.vec( '/model/chem/spine/SPINE/CaN_BULK/CaN' ) - print 'numCaN in spine = ', CaNspine.nInit, ', vol = ', CaNspine.volume - """ - - # set up adaptors - aCa = moose.Adaptor( '/model/chem/psd/adaptCa', pdc ) - adaptCa = moose.vec( '/model/chem/psd/adaptCa' ) - chemCa = moose.vec( '/model/chem/psd/Ca' ) - print('aCa = ', aCa, ' foo = ', foo, "len( ChemCa ) = ", len( chemCa ), ", numData = ", chemCa.numData) - assert( len( adaptCa ) == pdc ) - assert( len( chemCa ) == pdc ) - for i in range( pdc ): - path = '/model/elec/spine_head_14_' + str( i + 1 ) + '/NMDA_Ca_conc' - elecCa = moose.element( path ) - moose.connect( elecCa, 'concOut', adaptCa[i], 'input', 'Single' ) - moose.connect( adaptCa, 'output', chemCa, 'setConc', 'OneToOne' ) - adaptCa[i].inputOffset = 0.0 # - adaptCa[i].outputOffset = 0.00008 # 80 nM offset in chem. - adaptCa[i].scale = 1e-5 # 520 to 0.0052 mM - #print adaptCa.outputOffset - #print adaptCa.scale - """ - """ - - """ - aGluR = moose.Adaptor( '/model/chem/psd/adaptGluR', 5 ) + # Put in spine solvers. Note that these get info from the neuroCompt + spineCompt = moose.element( '/model/chem/spine' ) + sdc = spineCompt.mesh.num + print(('sdc = ', sdc)) + assert( sdc == 13 ) + smksolve = moose.Ksolve( '/model/chem/spine/ksolve' ) + smdsolve = moose.Dsolve( '/model/chem/spine/dsolve' ) + smstoich = moose.Stoich( '/model/chem/spine/stoich' ) + smstoich.compartment = spineCompt + smstoich.ksolve = smksolve + smstoich.dsolve = smdsolve + smstoich.path = "/model/chem/spine/##" + assert( smstoich.numAllPools == 36 ) + + # Put in PSD solvers. Note that these get info from the neuroCompt + psdCompt = moose.element( '/model/chem/psd' ) + pdc = psdCompt.mesh.num + assert( pdc == 13 ) + pmksolve = moose.Ksolve( '/model/chem/psd/ksolve' ) + pmdsolve = moose.Dsolve( '/model/chem/psd/dsolve' ) + pmstoich = moose.Stoich( '/model/chem/psd/stoich' ) + pmstoich.compartment = psdCompt + pmstoich.ksolve = pmksolve + pmstoich.dsolve = pmdsolve + pmstoich.path = "/model/chem/psd/##" + print(('numAllPools = ', pmstoich.numAllPools)) + assert( pmstoich.numAllPools == 56 ) + foo = moose.element( '/model/chem/psd/Ca' ) + bar = moose.element( '/model/chem/psd/I1_p' ) + print(('PSD: numfoo = ', foo.numData, 'numbar = ', bar.numData)) + print(('PSD: numAllVoxels = ', pmksolve.numAllVoxels)) + + # Put in junctions between diffusion solvers + nmdsolve.buildNeuroMeshJunctions( smdsolve, pmdsolve ) + + """ + CaNpsd = moose.vec( '/model/chem/psdMesh/PSD/PP1_PSD/CaN' ) + print 'numCaN in PSD = ', CaNpsd.nInit, ', vol = ', CaNpsd.volume + CaNspine = moose.vec( '/model/chem/spine/SPINE/CaN_BULK/CaN' ) + print 'numCaN in spine = ', CaNspine.nInit, ', vol = ', CaNspine.volume + """ + + # set up adaptors + aCa = moose.Adaptor( '/model/chem/psd/adaptCa', pdc ) + adaptCa = moose.vec( '/model/chem/psd/adaptCa' ) + chemCa = moose.vec( '/model/chem/psd/Ca' ) + print( 'aCa = ', aCa, ' foo = ', foo, "len( ChemCa ) = " + , len( chemCa ), ", numData = ", chemCa.numData + ) + assert( len( adaptCa ) == pdc ) + assert( len( chemCa ) == pdc ) + for i in range( pdc ): + path = '/model/elec/spine_head_14_' + str( i + 1 ) + '/NMDA_Ca_conc' + elecCa = moose.element( path ) + moose.connect( elecCa, 'concOut', adaptCa[i], 'input', 'Single' ) + moose.connect( adaptCa, 'output', chemCa, 'setConc', 'OneToOne' ) + adaptCa[i].inputOffset = 0.0 # + adaptCa[i].outputOffset = 0.00008 # 80 nM offset in chem. + adaptCa[i].scale = 1e-5 # 520 to 0.0052 mM + + """ + aGluR = moose.Adaptor( '/model/chem/psd/adaptGluR', 5 ) adaptGluR = moose.vec( '/model/chem/psd/adaptGluR' ) - chemR = moose.vec( '/model/chem/psd/psdGluR' ) - assert( len( adaptGluR ) == 5 ) - for i in range( 5 ): - path = '/model/elec/head' + str( i ) + '/gluR' - elecR = moose.element( path ) - moose.connect( adaptGluR[i], 'outputSrc', elecR, 'setGbar', 'Single' ) + chemR = moose.vec( '/model/chem/psd/psdGluR' ) + assert( len( adaptGluR ) == 5 ) + for i in range( 5 ): + path = '/model/elec/head' + str( i ) + '/gluR' + elecR = moose.element( path ) + moose.connect( adaptGluR[i], 'outputSrc', elecR, 'setGbar', 'Single' ) #moose.connect( chemR, 'nOut', adaptGluR, 'input', 'OneToOne' ) - # Ksolve isn't sending nOut. Not good. So have to use requestOut. + # Ksolve isn't sending nOut. Not good. So have to use requestOut. moose.connect( adaptGluR, 'requestOut', chemR, 'getN', 'OneToOne' ) adaptGluR.outputOffset = 1e-7 # pS adaptGluR.scale = 1e-6 / 100 # from n to pS @@ -222,10 +220,10 @@ def makeNeuroMeshModel(): adaptK = moose.Adaptor( '/model/chem/dend/adaptK' ) chemK = moose.element( '/model/chem/dend/kChan' ) elecK = moose.element( '/model/elec/compt/K' ) - moose.connect( adaptK, 'requestOut', chemK, 'getConc', 'OneToAll' ) - moose.connect( adaptK, 'outputSrc', elecK, 'setGbar', 'Single' ) - adaptK.scale = 0.3 # from mM to Siemens - """ + moose.connect( adaptK, 'requestOut', chemK, 'getConc', 'OneToAll' ) + moose.connect( adaptK, 'outputSrc', elecK, 'setGbar', 'Single' ) + adaptK.scale = 0.3 # from mM to Siemens + """ def makeElecPlots(): graphs = moose.Neutral( '/graphs' ) @@ -240,134 +238,134 @@ def makeElecPlots(): addPlot( '/model/elec/spine_head_14_13/NMDA_Ca_conc', 'getCa', 'elec/spine_13Ca' ) def makeChemPlots(): - spineMesh = moose.element( '/model/chem/spine' ) - middleSpine = 6 - # handy lookup function to find which voxel # the spine is on. - midSpineVoxel = spineMesh.parentVoxel[middleSpine] - print(spineMesh.parentVoxel) - graphs = moose.Neutral( '/graphs' ) - addPlot( '/model/chem/psd/tot_PSD_R[0]', 'getN', 'psd0R' ) - addPlot( '/model/chem/psd/tot_PSD_R[1]', 'getN', 'psd1R' ) - addPlot( '/model/chem/psd/tot_PSD_R[2]', 'getN', 'psd2R' ) - addPlot( '/model/chem/psd/CaM_dash_Ca4[0]', 'getConc', 'psdCaM0' ) - addPlot( '/model/chem/psd/CaM_dash_Ca4[6]', 'getConc', 'psdCaM6' ) - addPlot( '/model/chem/psd/CaM_CaN[0]', 'getConc', 'CaM_CaN' ) - addPlot( '/model/chem/psd/PP1_dash_active[0]', 'getConc', 'PP1_active0' ) - addPlot( '/model/chem/psd/PP1_dash_active[6]', 'getConc', 'psdPP1_active6' ) - addPlot( '/model/chem/psd/actCaMKII[6]', 'getConc', 'psdCaMKII6' ) - addPlot( '/model/chem/spine/actCaMKII[6]', 'getConc', 'spineCaMKII6' ) - addPlot( '/model/chem/psd/Ca[0]', 'getConc', 'psd0Ca' ) - addPlot( '/model/chem/psd/Ca[6]', 'getConc', 'psd6Ca' ) - addPlot( '/model/chem/psd/Ca[12]', 'getConc', 'psd12Ca' ) - - addPlot( '/model/chem/spine/Ca[0]', 'getConc', 'spine0Ca' ) - addPlot( '/model/chem/spine/Ca[6]', 'getConc', 'spine6Ca' ) - addPlot( '/model/chem/spine/Ca[12]', 'getConc', 'spine12Ca' ) - - addPlot( '/model/chem/dend/DEND/Ca[0]', 'getConc', 'dend0Ca' ) - path = '/model/chem/dend/DEND/Ca[' - addPlot( path + str( midSpineVoxel ) + ']', 'getConc', 'dendMidCa' ) - addPlot( path + str( midSpineVoxel+2 ) + ']', 'getConc', 'dendMid2Ca' ) - addPlot( path + str( midSpineVoxel+4 ) + ']', 'getConc', 'dendMid4Ca' ) - addPlot( path + str( midSpineVoxel+6 ) + ']', 'getConc', 'dendMid6Ca' ) - addPlot( '/model/chem/dend/DEND/Ca[144]', 'getConc', 'dend144Ca' ) - - #addPlot( '/n/dend/Ca', 'getConc', 'dendCa' ) - #addPlot( '/n/dend/inact_kinase', 'getConc', 'inactDendKinase' ) - #addPlot( '/n/psd/psdGluR', 'getN', 'psdGluR' ) - addPlot( '/model/chem/psd/CaMKII_dash_CaM[6]', 'getConc', 'psdCaM_CaMKII6' ) - addPlot( '/model/chem/spine/CaMKII_dash_CaM[6]', 'getConc', 'spineCaM_CaMKII6' ) - addPlot( '/model/chem/spine/NMDAR[6]', 'getConc', 'psd_NMDAR6' ) + spineMesh = moose.element( '/model/chem/spine' ) + middleSpine = 6 + # handy lookup function to find which voxel # the spine is on. + midSpineVoxel = spineMesh.parentVoxel[middleSpine] + print((spineMesh.parentVoxel)) + graphs = moose.Neutral( '/graphs' ) + addPlot( '/model/chem/psd/tot_PSD_R[0]', 'getN', 'psd0R' ) + addPlot( '/model/chem/psd/tot_PSD_R[1]', 'getN', 'psd1R' ) + addPlot( '/model/chem/psd/tot_PSD_R[2]', 'getN', 'psd2R' ) + addPlot( '/model/chem/psd/CaM_dash_Ca4[0]', 'getConc', 'psdCaM0' ) + addPlot( '/model/chem/psd/CaM_dash_Ca4[6]', 'getConc', 'psdCaM6' ) + addPlot( '/model/chem/psd/CaM_CaN[0]', 'getConc', 'CaM_CaN' ) + addPlot( '/model/chem/psd/PP1_dash_active[0]', 'getConc', 'PP1_active0' ) + addPlot( '/model/chem/psd/PP1_dash_active[6]', 'getConc', 'psdPP1_active6' ) + addPlot( '/model/chem/psd/actCaMKII[6]', 'getConc', 'psdCaMKII6' ) + addPlot( '/model/chem/spine/actCaMKII[6]', 'getConc', 'spineCaMKII6' ) + addPlot( '/model/chem/psd/Ca[0]', 'getConc', 'psd0Ca' ) + addPlot( '/model/chem/psd/Ca[6]', 'getConc', 'psd6Ca' ) + addPlot( '/model/chem/psd/Ca[12]', 'getConc', 'psd12Ca' ) + + addPlot( '/model/chem/spine/Ca[0]', 'getConc', 'spine0Ca' ) + addPlot( '/model/chem/spine/Ca[6]', 'getConc', 'spine6Ca' ) + addPlot( '/model/chem/spine/Ca[12]', 'getConc', 'spine12Ca' ) + + addPlot( '/model/chem/dend/DEND/Ca[0]', 'getConc', 'dend0Ca' ) + path = '/model/chem/dend/DEND/Ca[' + addPlot( path + str( midSpineVoxel ) + ']', 'getConc', 'dendMidCa' ) + addPlot( path + str( midSpineVoxel+2 ) + ']', 'getConc', 'dendMid2Ca' ) + addPlot( path + str( midSpineVoxel+4 ) + ']', 'getConc', 'dendMid4Ca' ) + addPlot( path + str( midSpineVoxel+6 ) + ']', 'getConc', 'dendMid6Ca' ) + addPlot( '/model/chem/dend/DEND/Ca[144]', 'getConc', 'dend144Ca' ) + + #addPlot( '/n/dend/Ca', 'getConc', 'dendCa' ) + #addPlot( '/n/dend/inact_kinase', 'getConc', 'inactDendKinase' ) + #addPlot( '/n/psd/psdGluR', 'getN', 'psdGluR' ) + addPlot( '/model/chem/psd/CaMKII_dash_CaM[6]', 'getConc', 'psdCaM_CaMKII6' ) + addPlot( '/model/chem/spine/CaMKII_dash_CaM[6]', 'getConc', 'spineCaM_CaMKII6' ) + addPlot( '/model/chem/spine/NMDAR[6]', 'getConc', 'psd_NMDAR6' ) def testNeuroMeshMultiscale(): - elecDt = 50e-6 - chemDt = 1e-2 - cplotDt = 1e-2 - eplotDt = 1e-3 - plotName = 'nm.plot' - - makeNeuroMeshModel() - print("after model is completely done") - for i in moose.wildcardFind( '/model/chem/#/#/#/transloc#' ): - print(i[0].name, i[0].Kf, i[0].Kb, i[0].kf, i[0].kb) - - """ - for i in moose.wildcardFind( '/model/chem/##[ISA=PoolBase]' ): - if ( i[0].diffConst > 0 ): - grandpaname = i.parent[0].parent.name + '/' - paname = i.parent[0].name + '/' - print grandpaname + paname + i[0].name, i[0].diffConst - print 'Neighbors:' - for t in moose.element( '/model/chem/spine/ksolve/junction' ).neighbors['masterJunction']: - print 'masterJunction <-', t.path - for t in moose.wildcardFind( '/model/chem/#/ksolve' ): - k = moose.element( t[0] ) - print k.path + ' localVoxels=', k.numLocalVoxels, ', allVoxels= ', k.numAllVoxels - """ - """ + elecDt = 50e-6 + chemDt = 1e-2 + cplotDt = 1e-2 + eplotDt = 1e-3 + plotName = 'nm.plot' + + makeNeuroMeshModel() + print("after model is completely done") + for i in moose.wildcardFind( '/model/chem/#/#/#/transloc#' ): + print((i[0].name, i[0].Kf, i[0].Kb, i[0].kf, i[0].kb)) + + """ + for i in moose.wildcardFind( '/model/chem/##[ISA=PoolBase]' ): + if ( i[0].diffConst > 0 ): + grandpaname = i.parent[0].parent.name + '/' + paname = i.parent[0].name + '/' + print grandpaname + paname + i[0].name, i[0].diffConst + print 'Neighbors:' + for t in moose.element( '/model/chem/spine/ksolve/junction' ).neighbors['masterJunction']: + print 'masterJunction <-', t.path + for t in moose.wildcardFind( '/model/chem/#/ksolve' ): + k = moose.element( t[0] ) + print k.path + ' localVoxels=', k.numLocalVoxels, ', allVoxels= ', k.numAllVoxels + """ + """ moose.useClock( 4, '/model/chem/dend/dsolve', 'process' ) moose.useClock( 5, '/model/chem/dend/ksolve', 'process' ) moose.useClock( 5, '/model/chem/spine/ksolve', 'process' ) moose.useClock( 5, '/model/chem/psd/ksolve', 'process' ) - """ - - makeChemPlots() - makeElecPlots() - moose.setClock( 0, elecDt ) - moose.setClock( 1, elecDt ) - moose.setClock( 2, elecDt ) - moose.setClock( 4, chemDt ) - moose.setClock( 5, chemDt ) - moose.setClock( 6, chemDt ) - moose.setClock( 7, cplotDt ) - moose.setClock( 8, eplotDt ) - moose.useClock( 0, '/model/elec/##[ISA=Compartment]', 'init' ) - moose.useClock( 1, '/model/elec/##[ISA=Compartment]', 'process' ) - moose.useClock( 1, '/model/elec/##[ISA=SpikeGen]', 'process' ) - moose.useClock( 2, '/model/elec/##[ISA=ChanBase],/model/##[ISA=SynBase],/model/##[ISA=CaConc]','process') - moose.useClock( 4, '/model/chem/#/dsolve', 'process' ) - moose.useClock( 5, '/model/chem/#/ksolve', 'process' ) - moose.useClock( 6, '/model/chem/psd/adaptCa', 'process' ) - moose.useClock( 7, '/graphs/#', 'process' ) - moose.useClock( 8, '/graphs/elec/#', 'process' ) - #hsolve = moose.HSolve( '/model/elec/hsolve' ) - #moose.useClock( 1, '/model/elec/hsolve', 'process' ) - #hsolve.dt = elecDt - #hsolve.target = '/model/elec/compt' - #moose.reinit() - moose.reinit() - """ - print 'pre' - eca = moose.vec( '/model/chem/psd/PSD/CaM/Ca' ) - for i in range( 3 ): - print eca[i].concInit, eca[i].conc, eca[i].nInit, eca[i].n, eca[i].volume - print 'dend' - eca = moose.vec( '/model/chem/dend/DEND/Ca' ) - #for i in ( 0, 1, 2, 30, 60, 90, 120, 144 ): - for i in range( 13 ): - print i, eca[i].concInit, eca[i].conc, eca[i].nInit, eca[i].n, eca[i].volume - - print 'PSD' - eca = moose.vec( '/model/chem/psd/PSD/CaM/Ca' ) - for i in range( 3 ): - print eca[i].concInit, eca[i].conc, eca[i].nInit, eca[i].n, eca[i].volume - print 'spine' - eca = moose.vec( '/model/chem/spine/SPINE/CaM/Ca' ) - for i in range( 3 ): - print eca[i].concInit, eca[i].conc, eca[i].nInit, eca[i].n, eca[i].volume - """ - - moose.start( 0.5 ) - dumpPlots( plotName ) - print('All done') + """ + + makeChemPlots() + makeElecPlots() + moose.setClock( 0, elecDt ) + moose.setClock( 1, elecDt ) + moose.setClock( 2, elecDt ) + moose.setClock( 4, chemDt ) + moose.setClock( 5, chemDt ) + moose.setClock( 6, chemDt ) + moose.setClock( 7, cplotDt ) + moose.setClock( 8, eplotDt ) + moose.useClock( 0, '/model/elec/##[ISA=Compartment]', 'init' ) + moose.useClock( 1, '/model/elec/##[ISA=Compartment]', 'process' ) + moose.useClock( 1, '/model/elec/##[ISA=SpikeGen]', 'process' ) + moose.useClock( 2, '/model/elec/##[ISA=ChanBase],/model/##[ISA=SynBase],/model/##[ISA=CaConc]','process') + moose.useClock( 4, '/model/chem/#/dsolve', 'process' ) + moose.useClock( 5, '/model/chem/#/ksolve', 'process' ) + moose.useClock( 6, '/model/chem/psd/adaptCa', 'process' ) + moose.useClock( 7, '/graphs/#', 'process' ) + moose.useClock( 8, '/graphs/elec/#', 'process' ) + #hsolve = moose.HSolve( '/model/elec/hsolve' ) + #moose.useClock( 1, '/model/elec/hsolve', 'process' ) + #hsolve.dt = elecDt + #hsolve.target = '/model/elec/compt' + #moose.reinit() + moose.reinit() + """ + print 'pre' + eca = moose.vec( '/model/chem/psd/PSD/CaM/Ca' ) + for i in range( 3 ): + print eca[i].concInit, eca[i].conc, eca[i].nInit, eca[i].n, eca[i].volume + print 'dend' + eca = moose.vec( '/model/chem/dend/DEND/Ca' ) + #for i in ( 0, 1, 2, 30, 60, 90, 120, 144 ): + for i in range( 13 ): + print i, eca[i].concInit, eca[i].conc, eca[i].nInit, eca[i].n, eca[i].volume + + print 'PSD' + eca = moose.vec( '/model/chem/psd/PSD/CaM/Ca' ) + for i in range( 3 ): + print eca[i].concInit, eca[i].conc, eca[i].nInit, eca[i].n, eca[i].volume + print 'spine' + eca = moose.vec( '/model/chem/spine/SPINE/CaM/Ca' ) + for i in range( 3 ): + print eca[i].concInit, eca[i].conc, eca[i].nInit, eca[i].n, eca[i].volume + """ + + moose.start( 0.5 ) + dumpPlots( plotName ) + print('All done') def main(): - testNeuroMeshMultiscale() + testNeuroMeshMultiscale() if __name__ == '__main__': - main() + main() # # loadMulti.py ends here. diff --git a/moose-examples/snippets/MULTI/midchan.py b/moose-examples/snippets/MULTI/midchan.py index 46890fae7207e5fda9a9e493c0c310039f92e4b1..af26757d85ccb6d0b229a191deef18363726c4a7 100644 --- a/moose-examples/snippets/MULTI/midchan.py +++ b/moose-examples/snippets/MULTI/midchan.py @@ -40,179 +40,168 @@ import proto18 EREST_ACT = -70e-3 def loadElec(): - library = moose.Neutral( '/library' ) - moose.setCwe( '/library' ) - proto18.make_Ca() - proto18.make_Ca_conc() - proto18.make_K_AHP() - proto18.make_K_C() - proto18.make_Na() - proto18.make_K_DR() - proto18.make_K_A() - proto18.make_glu() - proto18.make_NMDA() - proto18.make_Ca_NMDA() - proto18.make_NMDA_Ca_conc() - proto18.make_axon() - moose.setCwe( '/library' ) - model = moose.Neutral( '/model' ) - cellId = moose.loadModel( 'ca1_asym.p', '/model/elec', "Neutral" ) - return cellId + library = moose.Neutral( '/library' ) + moose.setCwe( '/library' ) + proto18.make_Ca() + proto18.make_Ca_conc() + proto18.make_K_AHP() + proto18.make_K_C() + proto18.make_Na() + proto18.make_K_DR() + proto18.make_K_A() + proto18.make_glu() + proto18.make_NMDA() + proto18.make_Ca_NMDA() + proto18.make_NMDA_Ca_conc() + proto18.make_axon() + moose.setCwe( '/library' ) + model = moose.Neutral( '/model' ) + cellId = moose.loadModel( 'ca1_asym.p', '/model/elec', "Neutral" ) + return cellId def loadChem( diffLength ): - chem = moose.Neutral( '/model/chem' ) - neuroCompt = moose.NeuroMesh( '/model/chem/kinetics' ) - neuroCompt.separateSpines = 1 - neuroCompt.geometryPolicy = 'cylinder' - spineCompt = moose.SpineMesh( '/model/chem/compartment_1' ) - moose.connect( neuroCompt, 'spineListOut', spineCompt, 'spineList', 'OneToOne' ) - psdCompt = moose.PsdMesh( '/model/chem/compartment_2' ) - #print 'Meshvolume[neuro, spine, psd] = ', neuroCompt.mesh[0].volume, spineCompt.mesh[0].volume, psdCompt.mesh[0].volume - moose.connect( neuroCompt, 'psdListOut', psdCompt, 'psdList', 'OneToOne' ) - modelId = moose.loadModel( 'minimal.g', '/model/chem', 'ee' ) - #modelId = moose.loadModel( 'psd_merged31d.g', '/model/chem', 'ee' ) - neuroCompt.name = 'dend' - spineCompt.name = 'spine' - psdCompt.name = 'psd' + chem = moose.Neutral( '/model/chem' ) + neuroCompt = moose.NeuroMesh( '/model/chem/kinetics' ) + neuroCompt.separateSpines = 1 + neuroCompt.geometryPolicy = 'cylinder' + spineCompt = moose.SpineMesh( '/model/chem/compartment_1' ) + moose.connect( neuroCompt, 'spineListOut', spineCompt, 'spineList', 'OneToOne' ) + psdCompt = moose.PsdMesh( '/model/chem/compartment_2' ) + #print 'Meshvolume[neuro, spine, psd] = ', neuroCompt.mesh[0].volume, spineCompt.mesh[0].volume, psdCompt.mesh[0].volume + moose.connect( neuroCompt, 'psdListOut', psdCompt, 'psdList', 'OneToOne' ) + modelId = moose.loadModel( 'minimal.g', '/model/chem', 'ee' ) + #modelId = moose.loadModel( 'psd_merged31d.g', '/model/chem', 'ee' ) + neuroCompt.name = 'dend' + spineCompt.name = 'spine' + psdCompt.name = 'psd' def makeNeuroMeshModel(): - diffLength = 10e-6 # Aim for 2 soma compartments. - elec = loadElec() - loadChem( diffLength ) - neuroCompt = moose.element( '/model/chem/dend' ) - neuroCompt.diffLength = diffLength - neuroCompt.cellPortion( elec, '/model/elec/#' ) - for x in moose.wildcardFind( '/model/chem/##[ISA=PoolBase]' ): - if (x.diffConst > 0): - x.diffConst = 1e-11 - for x in moose.wildcardFind( '/model/chem/##/Ca' ): - x.diffConst = 1e-10 - - # Put in dend solvers - ns = neuroCompt.numSegments - ndc = neuroCompt.numDiffCompts - print 'ns = ', ns, ', ndc = ', ndc - assert( neuroCompt.numDiffCompts == neuroCompt.mesh.num ) - assert( ns == 36 ) # - assert( ndc == 278 ) # - nmksolve = moose.Ksolve( '/model/chem/dend/ksolve' ) - nmdsolve = moose.Dsolve( '/model/chem/dend/dsolve' ) - nmstoich = moose.Stoich( '/model/chem/dend/stoich' ) - nmstoich.compartment = neuroCompt - nmstoich.ksolve = nmksolve - nmstoich.dsolve = nmdsolve - nmstoich.path = "/model/chem/dend/##" - print 'done setting path, numPools = ', nmdsolve.numPools - assert( nmdsolve.numPools == 1 ) - assert( nmdsolve.numAllVoxels == ndc ) - assert( nmstoich.numAllPools == 1 ) - # oddly, numLocalFields does not work. - ca = moose.element( '/model/chem/dend/DEND/Ca' ) - assert( ca.numData == ndc ) - - # Put in spine solvers. Note that these get info from the neuroCompt - spineCompt = moose.element( '/model/chem/spine' ) - sdc = spineCompt.mesh.num - print 'sdc = ', sdc - assert( sdc == 13 ) - smksolve = moose.Ksolve( '/model/chem/spine/ksolve' ) - smdsolve = moose.Dsolve( '/model/chem/spine/dsolve' ) - smstoich = moose.Stoich( '/model/chem/spine/stoich' ) - smstoich.compartment = spineCompt - smstoich.ksolve = smksolve - smstoich.dsolve = smdsolve - smstoich.path = "/model/chem/spine/##" - print 'spine num Pools = ', smstoich.numAllPools - assert( smstoich.numAllPools == 3 ) - assert( smdsolve.numPools == 3 ) - assert( smdsolve.numAllVoxels == sdc ) + diffLength = 10e-6 # Aim for 2 soma compartments. + elec = loadElec() + loadChem( diffLength ) + neuroCompt = moose.element( '/model/chem/dend' ) + neuroCompt.diffLength = diffLength + neuroCompt.cellPortion( elec, '/model/elec/#' ) + for x in moose.wildcardFind( '/model/chem/##[ISA=PoolBase]' ): + if (x.diffConst > 0): + x.diffConst = 1e-11 + for x in moose.wildcardFind( '/model/chem/##/Ca' ): + x.diffConst = 1e-10 + + # Put in dend solvers + ns = neuroCompt.numSegments + ndc = neuroCompt.numDiffCompts + print(('ns = ', ns, ', ndc = ', ndc)) + assert( neuroCompt.numDiffCompts == neuroCompt.mesh.num ) + assert( ns == 36 ) # + assert( ndc == 278 ) # + nmksolve = moose.Ksolve( '/model/chem/dend/ksolve' ) + nmdsolve = moose.Dsolve( '/model/chem/dend/dsolve' ) + nmstoich = moose.Stoich( '/model/chem/dend/stoich' ) + nmstoich.compartment = neuroCompt + nmstoich.ksolve = nmksolve + nmstoich.dsolve = nmdsolve + nmstoich.path = "/model/chem/dend/##" + print(('done setting path, numPools = ', nmdsolve.numPools)) + assert( nmdsolve.numPools == 1 ) + assert( nmdsolve.numAllVoxels == ndc ) + assert( nmstoich.numAllPools == 1 ) + # oddly, numLocalFields does not work. + ca = moose.element( '/model/chem/dend/DEND/Ca' ) + assert( ca.numData == ndc ) - # Put in PSD solvers. Note that these get info from the neuroCompt - psdCompt = moose.element( '/model/chem/psd' ) - pdc = psdCompt.mesh.num - assert( pdc == 13 ) - pmksolve = moose.Ksolve( '/model/chem/psd/ksolve' ) - pmdsolve = moose.Dsolve( '/model/chem/psd/dsolve' ) - pmstoich = moose.Stoich( '/model/chem/psd/stoich' ) - pmstoich.compartment = psdCompt - pmstoich.ksolve = pmksolve - pmstoich.dsolve = pmdsolve - pmstoich.path = "/model/chem/psd/##" - assert( pmstoich.numAllPools == 3 ) - assert( pmdsolve.numPools == 3 ) - assert( pmdsolve.numAllVoxels == pdc ) - foo = moose.element( '/model/chem/psd/Ca' ) - print 'PSD: numfoo = ', foo.numData - print 'PSD: numAllVoxels = ', pmksolve.numAllVoxels - - # Put in junctions between the diffusion solvers - nmdsolve.buildNeuroMeshJunctions( smdsolve, pmdsolve ) - - """ - CaNpsd = moose.vec( '/model/chem/psdMesh/PSD/PP1_PSD/CaN' ) - print 'numCaN in PSD = ', CaNpsd.nInit, ', vol = ', CaNpsd.volume - CaNspine = moose.vec( '/model/chem/spine/SPINE/CaN_BULK/CaN' ) - print 'numCaN in spine = ', CaNspine.nInit, ', vol = ', CaNspine.volume - """ - - ################################################################## - # set up adaptors - aCa = moose.Adaptor( '/model/chem/spine/adaptCa', sdc ) - adaptCa = moose.vec( '/model/chem/spine/adaptCa' ) - chemCa = moose.vec( '/model/chem/spine/Ca' ) - #print 'aCa = ', aCa, ' foo = ', foo, "len( ChemCa ) = ", len( chemCa ), ", numData = ", chemCa.numData, "len( adaptCa ) = ", len( adaptCa ) - assert( len( adaptCa ) == sdc ) - assert( len( chemCa ) == sdc ) - for i in range( sdc ): - elecCa = moose.element( '/model/elec/spine_head_14_' + str(i+1) + '/NMDA_Ca_conc' ) - #print elecCa - moose.connect( elecCa, 'concOut', adaptCa[i], 'input', 'Single' ) - moose.connect( adaptCa, 'output', chemCa, 'setConc', 'OneToOne' ) - adaptCa.inputOffset = 0.0 # - adaptCa.outputOffset = 0.00008 # 80 nM offset in chem. - adaptCa.scale = 1e-4 # 520 to 0.0052 mM - #print adaptCa.outputOffset - - - moose.le( '/model/chem/dend/DEND' ) - - - compts = neuroCompt.elecComptList - begin = neuroCompt.startVoxelInCompt - end = neuroCompt.endVoxelInCompt - aCa = moose.Adaptor( '/model/chem/dend/DEND/adaptCa', len( compts)) - adaptCa = moose.vec( '/model/chem/dend/DEND/adaptCa' ) - chemCa = moose.vec( '/model/chem/dend/DEND/Ca' ) - #print 'aCa = ', aCa, ' foo = ', foo, "len( ChemCa ) = ", len( chemCa ), ", numData = ", chemCa.numData, "len( adaptCa ) = ", len( adaptCa ) - assert( len( chemCa ) == ndc ) - for i in zip( compts, adaptCa, begin, end ): - name = i[0].path + '/Ca_conc' - if ( moose.exists( name ) ): - elecCa = moose.element( name ) - #print i[2], i[3], ' ', elecCa - #print i[1] - moose.connect( elecCa, 'concOut', i[1], 'input', 'Single' ) - for j in range( i[2], i[3] ): - moose.connect( i[1], 'output', chemCa[j], 'setConc', 'Single' ) - adaptCa.inputOffset = 0.0 # - adaptCa.outputOffset = 0.00008 # 80 nM offset in chem. - adaptCa.scale = 20e-6 # 10 arb units to 2 uM. + # Put in spine solvers. Note that these get info from the neuroCompt + spineCompt = moose.element( '/model/chem/spine' ) + sdc = spineCompt.mesh.num + print('sdc = ', sdc) + assert( sdc == 13 ) + smksolve = moose.Ksolve( '/model/chem/spine/ksolve' ) + smdsolve = moose.Dsolve( '/model/chem/spine/dsolve' ) + smstoich = moose.Stoich( '/model/chem/spine/stoich' ) + smstoich.compartment = spineCompt + smstoich.ksolve = smksolve + smstoich.dsolve = smdsolve + smstoich.path = "/model/chem/spine/##" + print('spine num Pools = ', smstoich.numAllPools) + assert( smstoich.numAllPools == 3 ) + assert( smdsolve.numPools == 3 ) + assert( smdsolve.numAllVoxels == sdc ) + + # Put in PSD solvers. Note that these get info from the neuroCompt + psdCompt = moose.element( '/model/chem/psd' ) + pdc = psdCompt.mesh.num + assert( pdc == 13 ) + pmksolve = moose.Ksolve( '/model/chem/psd/ksolve' ) + pmdsolve = moose.Dsolve( '/model/chem/psd/dsolve' ) + pmstoich = moose.Stoich( '/model/chem/psd/stoich' ) + pmstoich.compartment = psdCompt + pmstoich.ksolve = pmksolve + pmstoich.dsolve = pmdsolve + pmstoich.path = "/model/chem/psd/##" + assert( pmstoich.numAllPools == 3 ) + assert( pmdsolve.numPools == 3 ) + assert( pmdsolve.numAllVoxels == pdc ) + foo = moose.element( '/model/chem/psd/Ca' ) + print('PSD: numfoo = ', foo.numData) + print('PSD: numAllVoxels = ', pmksolve.numAllVoxels) + + # Put in junctions between the diffusion solvers + nmdsolve.buildNeuroMeshJunctions( smdsolve, pmdsolve ) + + + ################################################################## + # set up adaptors + aCa = moose.Adaptor( '/model/chem/spine/adaptCa', sdc ) + adaptCa = moose.vec( '/model/chem/spine/adaptCa' ) + chemCa = moose.vec( '/model/chem/spine/Ca' ) + assert( len( adaptCa ) == sdc ) + assert( len( chemCa ) == sdc ) + for i in range( sdc ): + elecCa = moose.element( '/model/elec/spine_head_14_' + str(i+1) + '/NMDA_Ca_conc' ) + #print elecCa + moose.connect( elecCa, 'concOut', adaptCa[i], 'input', 'Single' ) + moose.connect( adaptCa, 'output', chemCa, 'setConc', 'OneToOne' ) + adaptCa.inputOffset = 0.0 # + adaptCa.outputOffset = 0.00008 # 80 nM offset in chem. + adaptCa.scale = 1e-4 # 520 to 0.0052 mM + + + moose.le( '/model/chem/dend/DEND' ) + compts = neuroCompt.elecComptList + begin = neuroCompt.startVoxelInCompt + end = neuroCompt.endVoxelInCompt + aCa = moose.Adaptor( '/model/chem/dend/DEND/adaptCa', len( compts)) + adaptCa = moose.vec( '/model/chem/dend/DEND/adaptCa' ) + chemCa = moose.vec( '/model/chem/dend/DEND/Ca' ) + assert( len( chemCa ) == ndc ) + for i in zip( compts, adaptCa, begin, end ): + name = i[0].path + '/Ca_conc' + if ( moose.exists( name ) ): + elecCa = moose.element( name ) + #print i[2], i[3], ' ', elecCa + #print i[1] + moose.connect( elecCa, 'concOut', i[1], 'input', 'Single' ) + for j in range( i[2], i[3] ): + moose.connect( i[1], 'output', chemCa[j], 'setConc', 'Single' ) + adaptCa.inputOffset = 0.0 # + adaptCa.outputOffset = 0.00008 # 80 nM offset in chem. + adaptCa.scale = 20e-6 # 10 arb units to 2 uM. def addPlot( objpath, field, plot ): - #assert moose.exists( objpath ) - if moose.exists( objpath ): - tab = moose.Table( '/graphs/' + plot ) - obj = moose.element( objpath ) - if obj.className == 'Neutral': - print "addPlot failed: object is a Neutral: ", objpath - return moose.element( '/' ) - else: - #print "object was found: ", objpath, obj.className - moose.connect( tab, 'requestOut', obj, field ) - return tab - else: - print "addPlot failed: object not found: ", objpath - return moose.element( '/' ) + #assert moose.exists( objpath ) + if moose.exists( objpath ): + tab = moose.Table( '/graphs/' + plot ) + obj = moose.element( objpath ) + if obj.className == 'Neutral': + print(("addPlot failed: object is a Neutral: ", objpath)) + return moose.element( '/' ) + else: + #print "object was found: ", objpath, obj.className + moose.connect( tab, 'requestOut', obj, field ) + return tab + else: + print(("addPlot failed: object not found: ", objpath)) + return moose.element( '/' ) def makeElecPlots(): graphs = moose.Neutral( '/graphs' ) @@ -225,121 +214,105 @@ def makeElecPlots(): addPlot( '/model/elec/spine_head_14_12/NMDA_Ca_conc', 'getCa', 'elec/spine12Ca' ) def makeChemPlots(): - graphs = moose.Neutral( '/graphs' ) - chem = moose.Neutral( '/graphs/chem' ) - addPlot( '/model/chem/psd/Ca_CaM', 'getConc', 'chem/psdCaCam' ) - addPlot( '/model/chem/psd/Ca', 'getConc', 'chem/psdCa' ) - addPlot( '/model/chem/spine/Ca_CaM', 'getConc', 'chem/spineCaCam' ) - addPlot( '/model/chem/spine/Ca[3]', 'getConc', 'chem/spine4Ca' ) - addPlot( '/model/chem/spine/Ca[11]', 'getConc', 'chem/spine12Ca' ) - addPlot( '/model/chem/dend/DEND/Ca', 'getConc', 'chem/dendCa' ) - addPlot( '/model/chem/dend/DEND/Ca[20]', 'getConc', 'chem/dendCa20' ) + graphs = moose.Neutral( '/graphs' ) + chem = moose.Neutral( '/graphs/chem' ) + addPlot( '/model/chem/psd/Ca_CaM', 'getConc', 'chem/psdCaCam' ) + addPlot( '/model/chem/psd/Ca', 'getConc', 'chem/psdCa' ) + addPlot( '/model/chem/spine/Ca_CaM', 'getConc', 'chem/spineCaCam' ) + addPlot( '/model/chem/spine/Ca[3]', 'getConc', 'chem/spine4Ca' ) + addPlot( '/model/chem/spine/Ca[11]', 'getConc', 'chem/spine12Ca' ) + addPlot( '/model/chem/dend/DEND/Ca', 'getConc', 'chem/dendCa' ) + addPlot( '/model/chem/dend/DEND/Ca[20]', 'getConc', 'chem/dendCa20' ) def testNeuroMeshMultiscale(): - elecDt = 50e-6 - chemDt = 0.005 - ePlotDt = 0.5e-3 - cPlotDt = 0.005 - plotName = 'nm.plot' - - makeNeuroMeshModel() - print "after model is completely done" - for i in moose.wildcardFind( '/model/chem/#/#/#/transloc#' ): - print i[0].name, i[0].Kf, i[0].Kb, i[0].kf, i[0].kb - - makeChemPlots() - makeElecPlots() - moose.setClock( 0, elecDt ) - moose.setClock( 1, elecDt ) - moose.setClock( 2, elecDt ) - moose.setClock( 4, chemDt ) - moose.setClock( 5, chemDt ) - moose.setClock( 6, chemDt ) - moose.setClock( 7, cPlotDt ) - moose.setClock( 8, ePlotDt ) - moose.useClock( 0, '/model/elec/##[ISA=Compartment]', 'init' ) - moose.useClock( 1, '/model/elec/##[ISA=Compartment]', 'process' ) - moose.useClock( 1, '/model/elec/##[ISA=SpikeGen]', 'process' ) - moose.useClock( 2, '/model/elec/##[ISA=ChanBase],/model/##[ISA=SynBase],/model/##[ISA=CaConc]','process') - #moose.useClock( 5, '/model/chem/##[ISA=PoolBase],/model/##[ISA=ReacBase],/model/##[ISA=EnzBase]', 'process' ) - #moose.useClock( 4, '/model/chem/##[ISA=Adaptor]', 'process' ) - moose.useClock( 4, '/model/chem/#/dsolve', 'process' ) - moose.useClock( 5, '/model/chem/#/ksolve', 'process' ) - moose.useClock( 6, '/model/chem/spine/adaptCa', 'process' ) - moose.useClock( 6, '/model/chem/dend/DEND/adaptCa', 'process' ) - moose.useClock( 7, '/graphs/chem/#', 'process' ) - moose.useClock( 8, '/graphs/elec/#', 'process' ) - #hsolve = moose.HSolve( '/model/elec/hsolve' ) - #moose.useClock( 1, '/model/elec/hsolve', 'process' ) - #hsolve.dt = elecDt - #hsolve.target = '/model/elec/compt' - #moose.reinit() - moose.element( '/model/elec/soma' ).inject = 2e-10 - moose.element( '/model/chem/psd/Ca' ).concInit = 0.001 - moose.element( '/model/chem/spine/Ca' ).concInit = 0.002 - moose.element( '/model/chem/dend/DEND/Ca' ).concInit = 0.003 - moose.reinit() - - moose.start( 0.25 ) -# moose.element( '/model/elec/soma' ).inject = 0 -# moose.start( 0.25 ) - plt.ion() - fig = plt.figure( figsize=(8,8) ) - chem = fig.add_subplot( 311 ) - chem.set_ylim( 0, 0.002 ) - plt.ylabel( 'Conc (mM)' ) - plt.xlabel( 'time (seconds)' ) - for x in moose.wildcardFind( '/graphs/chem/#[ISA=Table]' ): - pos = numpy.arange( 0, x.vector.size, 1 ) * cPlotDt - line1, = chem.plot( pos, x.vector, label=x.name ) - plt.legend() - - elec = fig.add_subplot( 312 ) - plt.ylabel( 'Vm (V)' ) - plt.xlabel( 'time (seconds)' ) - for x in moose.wildcardFind( '/graphs/elec/#[ISA=Table]' ): - pos = numpy.arange( 0, x.vector.size, 1 ) * ePlotDt - line1, = elec.plot( pos, x.vector, label=x.name ) - plt.legend() - - lenplot = fig.add_subplot( 313 ) - plt.ylabel( 'Ca (mM )' ) - plt.xlabel( 'Voxel#)' ) - - spineCa = moose.vec( '/model/chem/spine/Ca' ) - dendCa = moose.vec( '/model/chem/dend/DEND/Ca' ) - line1, = lenplot.plot( range( len( spineCa ) ), spineCa.conc, label='spine' ) - line2, = lenplot.plot( range( len( dendCa ) ), dendCa.conc, label='dend' ) - - ca = [ x.Ca * 0.0001 for x in moose.wildcardFind( '/model/elec/##[ISA=CaConc]') ] - line3, = lenplot.plot( range( len( ca ) ), ca, label='elec' ) - - spineCaM = moose.vec( '/model/chem/spine/Ca_CaM' ) - line4, = lenplot.plot( range( len( spineCaM ) ), spineCaM.conc, label='spineCaM' ) - psdCaM = moose.vec( '/model/chem/psd/Ca_CaM' ) - line5, = lenplot.plot( range( len( psdCaM ) ), psdCaM.conc, label='psdCaM' ) - plt.legend() - - - fig.canvas.draw() - raw_input() - - ''' - for x in moose.wildcardFind( '/graphs/##[ISA=Table]' ): - t = numpy.arange( 0, x.vector.size, 1 ) - pylab.plot( t, x.vector, label=x.name ) - pylab.legend() - pylab.show() - ''' - - print 'All done' + elecDt = 50e-6 + chemDt = 0.005 + ePlotDt = 0.5e-3 + cPlotDt = 0.005 + plotName = 'nm.plot' + + makeNeuroMeshModel() + print("after model is completely done") + for i in moose.wildcardFind( '/model/chem/#/#/#/transloc#' ): + print((i[0].name, i[0].Kf, i[0].Kb, i[0].kf, i[0].kb)) + + makeChemPlots() + makeElecPlots() + moose.setClock( 0, elecDt ) + moose.setClock( 1, elecDt ) + moose.setClock( 2, elecDt ) + moose.setClock( 4, chemDt ) + moose.setClock( 5, chemDt ) + moose.setClock( 6, chemDt ) + moose.setClock( 7, cPlotDt ) + moose.setClock( 8, ePlotDt ) + moose.useClock( 0, '/model/elec/##[ISA=Compartment]', 'init' ) + moose.useClock( 1, '/model/elec/##[ISA=Compartment]', 'process' ) + moose.useClock( 1, '/model/elec/##[ISA=SpikeGen]', 'process' ) + moose.useClock( 2, '/model/elec/##[ISA=ChanBase],/model/##[ISA=SynBase],/model/##[ISA=CaConc]','process') + #moose.useClock( 5, '/model/chem/##[ISA=PoolBase],/model/##[ISA=ReacBase],/model/##[ISA=EnzBase]', 'process' ) + #moose.useClock( 4, '/model/chem/##[ISA=Adaptor]', 'process' ) + moose.useClock( 4, '/model/chem/#/dsolve', 'process' ) + moose.useClock( 5, '/model/chem/#/ksolve', 'process' ) + moose.useClock( 6, '/model/chem/spine/adaptCa', 'process' ) + moose.useClock( 6, '/model/chem/dend/DEND/adaptCa', 'process' ) + moose.useClock( 7, '/graphs/chem/#', 'process' ) + moose.useClock( 8, '/graphs/elec/#', 'process' ) + moose.element( '/model/elec/soma' ).inject = 2e-10 + moose.element( '/model/chem/psd/Ca' ).concInit = 0.001 + moose.element( '/model/chem/spine/Ca' ).concInit = 0.002 + moose.element( '/model/chem/dend/DEND/Ca' ).concInit = 0.003 + moose.reinit() + + moose.start( 0.25 ) + plt.ion() + fig = plt.figure( figsize=(8,8) ) + chem = fig.add_subplot( 311 ) + chem.set_ylim( 0, 0.002 ) + plt.ylabel( 'Conc (mM)' ) + plt.xlabel( 'time (seconds)' ) + for x in moose.wildcardFind( '/graphs/chem/#[ISA=Table]' ): + pos = numpy.arange( 0, x.vector.size, 1 ) * cPlotDt + line1, = chem.plot( pos, x.vector, label=x.name ) + plt.legend() + + elec = fig.add_subplot( 312 ) + plt.ylabel( 'Vm (V)' ) + plt.xlabel( 'time (seconds)' ) + for x in moose.wildcardFind( '/graphs/elec/#[ISA=Table]' ): + pos = numpy.arange( 0, x.vector.size, 1 ) * ePlotDt + line1, = elec.plot( pos, x.vector, label=x.name ) + plt.legend() + + lenplot = fig.add_subplot( 313 ) + plt.ylabel( 'Ca (mM )' ) + plt.xlabel( 'Voxel#)' ) + + spineCa = moose.vec( '/model/chem/spine/Ca' ) + dendCa = moose.vec( '/model/chem/dend/DEND/Ca' ) + line1, = lenplot.plot( list(range( len( spineCa ))), spineCa.conc, label='spine' ) + line2, = lenplot.plot( list(range( len( dendCa ))), dendCa.conc, label='dend' ) + + ca = [ x.Ca * 0.0001 for x in moose.wildcardFind( '/model/elec/##[ISA=CaConc]') ] + line3, = lenplot.plot( list(range( len( ca ))), ca, label='elec' ) + + spineCaM = moose.vec( '/model/chem/spine/Ca_CaM' ) + line4, = lenplot.plot( list(range( len( spineCaM ))), spineCaM.conc, label='spineCaM' ) + psdCaM = moose.vec( '/model/chem/psd/Ca_CaM' ) + line5, = lenplot.plot( list(range( len( psdCaM ))), psdCaM.conc, label='psdCaM' ) + plt.legend() + + + fig.canvas.draw() + eval(input()) + print('All done') def main(): - testNeuroMeshMultiscale() + testNeuroMeshMultiscale() if __name__ == '__main__': - main() + main() # # minimal.py ends here. diff --git a/moose-examples/snippets/MULTI/minchan.py b/moose-examples/snippets/MULTI/minchan.py index 0f654f957290f6b1a1c3881cfb6457a18baaebb5..e2c30afffcbfeb4b7e359a912824b66a7df7be18 100644 --- a/moose-examples/snippets/MULTI/minchan.py +++ b/moose-examples/snippets/MULTI/minchan.py @@ -36,157 +36,150 @@ import proto18 EREST_ACT = -70e-3 def loadElec(): - library = moose.Neutral( '/library' ) - moose.setCwe( '/library' ) - proto18.make_Ca() - proto18.make_Ca_conc() - proto18.make_K_AHP() - proto18.make_K_C() - proto18.make_Na() - proto18.make_K_DR() - proto18.make_K_A() - proto18.make_glu() - proto18.make_NMDA() - proto18.make_Ca_NMDA() - proto18.make_NMDA_Ca_conc() - proto18.make_axon() - moose.setCwe( '/library' ) - model = moose.Neutral( '/model' ) - cellId = moose.loadModel( 'mincell2.p', '/model/elec', "Neutral" ) - return cellId + library = moose.Neutral( '/library' ) + moose.setCwe( '/library' ) + proto18.make_Ca() + proto18.make_Ca_conc() + proto18.make_K_AHP() + proto18.make_K_C() + proto18.make_Na() + proto18.make_K_DR() + proto18.make_K_A() + proto18.make_glu() + proto18.make_NMDA() + proto18.make_Ca_NMDA() + proto18.make_NMDA_Ca_conc() + proto18.make_axon() + moose.setCwe( '/library' ) + model = moose.Neutral( '/model' ) + cellId = moose.loadModel( 'mincell2.p', '/model/elec', "Neutral" ) + return cellId def loadChem( diffLength ): - chem = moose.Neutral( '/model/chem' ) - neuroCompt = moose.NeuroMesh( '/model/chem/kinetics' ) - neuroCompt.separateSpines = 1 - neuroCompt.geometryPolicy = 'cylinder' - spineCompt = moose.SpineMesh( '/model/chem/compartment_1' ) - moose.connect( neuroCompt, 'spineListOut', spineCompt, 'spineList', 'OneToOne' ) - psdCompt = moose.PsdMesh( '/model/chem/compartment_2' ) - #print 'Meshvolume[neuro, spine, psd] = ', neuroCompt.mesh[0].volume, spineCompt.mesh[0].volume, psdCompt.mesh[0].volume - moose.connect( neuroCompt, 'psdListOut', psdCompt, 'psdList', 'OneToOne' ) - modelId = moose.loadModel( 'minimal.g', '/model/chem', 'ee' ) - neuroCompt.name = 'dend' - spineCompt.name = 'spine' - psdCompt.name = 'psd' + chem = moose.Neutral( '/model/chem' ) + neuroCompt = moose.NeuroMesh( '/model/chem/kinetics' ) + neuroCompt.separateSpines = 1 + neuroCompt.geometryPolicy = 'cylinder' + spineCompt = moose.SpineMesh( '/model/chem/compartment_1' ) + moose.connect( neuroCompt, 'spineListOut', spineCompt, 'spineList', 'OneToOne' ) + psdCompt = moose.PsdMesh( '/model/chem/compartment_2' ) + #print 'Meshvolume[neuro, spine, psd] = ', neuroCompt.mesh[0].volume, spineCompt.mesh[0].volume, psdCompt.mesh[0].volume + moose.connect( neuroCompt, 'psdListOut', psdCompt, 'psdList', 'OneToOne' ) + modelId = moose.loadModel( 'minimal.g', '/model/chem', 'ee' ) + neuroCompt.name = 'dend' + spineCompt.name = 'spine' + psdCompt.name = 'psd' def makeNeuroMeshModel(): - diffLength = 6e-6 # Aim for 2 soma compartments. - elec = loadElec() - loadChem( diffLength ) - neuroCompt = moose.element( '/model/chem/dend' ) - neuroCompt.diffLength = diffLength - neuroCompt.cellPortion( elec, '/model/elec/#' ) - for x in moose.wildcardFind( '/model/chem/##[ISA=PoolBase]' ): - if (x.diffConst > 0): - x.diffConst = 1e-11 - for x in moose.wildcardFind( '/model/chem/##/Ca' ): - x.diffConst = 1e-10 + diffLength = 6e-6 # Aim for 2 soma compartments. + elec = loadElec() + loadChem( diffLength ) + neuroCompt = moose.element( '/model/chem/dend' ) + neuroCompt.diffLength = diffLength + neuroCompt.cellPortion( elec, '/model/elec/#' ) + for x in moose.wildcardFind( '/model/chem/##[ISA=PoolBase]' ): + if (x.diffConst > 0): + x.diffConst = 1e-11 + for x in moose.wildcardFind( '/model/chem/##/Ca' ): + x.diffConst = 1e-10 - # Put in dend solvers - ns = neuroCompt.numSegments - ndc = neuroCompt.numDiffCompts - print 'ns = ', ns, ', ndc = ', ndc - assert( neuroCompt.numDiffCompts == neuroCompt.mesh.num ) - assert( ns == 1 ) # soma/dend only - assert( ndc == 2 ) # split into 2. - nmksolve = moose.Ksolve( '/model/chem/dend/ksolve' ) - nmdsolve = moose.Dsolve( '/model/chem/dend/dsolve' ) - nmstoich = moose.Stoich( '/model/chem/dend/stoich' ) - nmstoich.compartment = neuroCompt - nmstoich.ksolve = nmksolve - nmstoich.dsolve = nmdsolve - nmstoich.path = "/model/chem/dend/##" - print 'done setting path, numPools = ', nmdsolve.numPools - assert( nmdsolve.numPools == 1 ) - assert( nmdsolve.numAllVoxels == 2 ) - assert( nmstoich.numAllPools == 1 ) - # oddly, numLocalFields does not work. - ca = moose.element( '/model/chem/dend/DEND/Ca' ) - assert( ca.numData == ndc ) + # Put in dend solvers + ns = neuroCompt.numSegments + ndc = neuroCompt.numDiffCompts + print(('ns = ', ns, ', ndc = ', ndc)) + assert( neuroCompt.numDiffCompts == neuroCompt.mesh.num ) + assert( ns == 1 ) # soma/dend only + assert( ndc == 2 ) # split into 2. + nmksolve = moose.Ksolve( '/model/chem/dend/ksolve' ) + nmdsolve = moose.Dsolve( '/model/chem/dend/dsolve' ) + nmstoich = moose.Stoich( '/model/chem/dend/stoich' ) + nmstoich.compartment = neuroCompt + nmstoich.ksolve = nmksolve + nmstoich.dsolve = nmdsolve + nmstoich.path = "/model/chem/dend/##" + print(('done setting path, numPools = ', nmdsolve.numPools)) + assert( nmdsolve.numPools == 1 ) + assert( nmdsolve.numAllVoxels == 2 ) + assert( nmstoich.numAllPools == 1 ) + # oddly, numLocalFields does not work. + ca = moose.element( '/model/chem/dend/DEND/Ca' ) + assert( ca.numData == ndc ) - # Put in spine solvers. Note that these get info from the neuroCompt - spineCompt = moose.element( '/model/chem/spine' ) - sdc = spineCompt.mesh.num - print 'sdc = ', sdc - assert( sdc == 1 ) - smksolve = moose.Ksolve( '/model/chem/spine/ksolve' ) - smdsolve = moose.Dsolve( '/model/chem/spine/dsolve' ) - smstoich = moose.Stoich( '/model/chem/spine/stoich' ) - smstoich.compartment = spineCompt - smstoich.ksolve = smksolve - smstoich.dsolve = smdsolve - smstoich.path = "/model/chem/spine/##" - assert( smstoich.numAllPools == 3 ) - assert( smdsolve.numPools == 3 ) - assert( smdsolve.numAllVoxels == 1 ) - - # Put in PSD solvers. Note that these get info from the neuroCompt - psdCompt = moose.element( '/model/chem/psd' ) - pdc = psdCompt.mesh.num - assert( pdc == 1 ) - pmksolve = moose.Ksolve( '/model/chem/psd/ksolve' ) - pmdsolve = moose.Dsolve( '/model/chem/psd/dsolve' ) - pmstoich = moose.Stoich( '/model/chem/psd/stoich' ) - pmstoich.compartment = psdCompt - pmstoich.ksolve = pmksolve - pmstoich.dsolve = pmdsolve - pmstoich.path = "/model/chem/psd/##" - assert( pmstoich.numAllPools == 3 ) - assert( pmdsolve.numPools == 3 ) - assert( pmdsolve.numAllVoxels == 1 ) - foo = moose.element( '/model/chem/psd/Ca' ) - print 'PSD: numfoo = ', foo.numData - print 'PSD: numAllVoxels = ', pmksolve.numAllVoxels - - # Put in junctions between the diffusion solvers - nmdsolve.buildNeuroMeshJunctions( smdsolve, pmdsolve ) + # Put in spine solvers. Note that these get info from the neuroCompt + spineCompt = moose.element( '/model/chem/spine' ) + sdc = spineCompt.mesh.num + print(('sdc = ', sdc)) + assert( sdc == 1 ) + smksolve = moose.Ksolve( '/model/chem/spine/ksolve' ) + smdsolve = moose.Dsolve( '/model/chem/spine/dsolve' ) + smstoich = moose.Stoich( '/model/chem/spine/stoich' ) + smstoich.compartment = spineCompt + smstoich.ksolve = smksolve + smstoich.dsolve = smdsolve + smstoich.path = "/model/chem/spine/##" + assert( smstoich.numAllPools == 3 ) + assert( smdsolve.numPools == 3 ) + assert( smdsolve.numAllVoxels == 1 ) + + # Put in PSD solvers. Note that these get info from the neuroCompt + psdCompt = moose.element( '/model/chem/psd' ) + pdc = psdCompt.mesh.num + assert( pdc == 1 ) + pmksolve = moose.Ksolve( '/model/chem/psd/ksolve' ) + pmdsolve = moose.Dsolve( '/model/chem/psd/dsolve' ) + pmstoich = moose.Stoich( '/model/chem/psd/stoich' ) + pmstoich.compartment = psdCompt + pmstoich.ksolve = pmksolve + pmstoich.dsolve = pmdsolve + pmstoich.path = "/model/chem/psd/##" + assert( pmstoich.numAllPools == 3 ) + assert( pmdsolve.numPools == 3 ) + assert( pmdsolve.numAllVoxels == 1 ) + foo = moose.element( '/model/chem/psd/Ca' ) + print(('PSD: numfoo = ', foo.numData)) + print(('PSD: numAllVoxels = ', pmksolve.numAllVoxels)) - """ - CaNpsd = moose.vec( '/model/chem/psdMesh/PSD/PP1_PSD/CaN' ) - print 'numCaN in PSD = ', CaNpsd.nInit, ', vol = ', CaNpsd.volume - CaNspine = moose.vec( '/model/chem/spine/SPINE/CaN_BULK/CaN' ) - print 'numCaN in spine = ', CaNspine.nInit, ', vol = ', CaNspine.volume - """ + # Put in junctions between the diffusion solvers + nmdsolve.buildNeuroMeshJunctions( smdsolve, pmdsolve ) - # set up adaptors - aCa = moose.Adaptor( '/model/chem/dend/DEND/adaptCa', ndc ) - adaptCa = moose.vec( '/model/chem/dend/DEND/adaptCa' ) - chemCa = moose.vec( '/model/chem/dend/DEND/Ca' ) - print 'aCa = ', aCa, ' foo = ', foo, "len( ChemCa ) = ", len( chemCa ), ", numData = ", chemCa.numData, "len( adaptCa ) = ", len( adaptCa ) - assert( len( adaptCa ) == ndc ) - assert( len( chemCa ) == ndc ) - path = '/model/elec/soma/Ca_conc' - elecCa = moose.element( path ) - print "==========" - print elecCa - print adaptCa - print chemCa - moose.connect( elecCa, 'concOut', adaptCa[0], 'input', 'Single' ) - moose.connect( adaptCa, 'output', chemCa, 'setConc', 'OneToOne' ) - adaptCa.inputOffset = 0.0 # - adaptCa.outputOffset = 0.00008 # 80 nM offset in chem. - adaptCa.scale = 1e-3 # 520 to 0.0052 mM - #print adaptCa.outputOffset - #print adaptCa.scale + # set up adaptors + aCa = moose.Adaptor( '/model/chem/dend/DEND/adaptCa', ndc ) + adaptCa = moose.vec( '/model/chem/dend/DEND/adaptCa' ) + chemCa = moose.vec( '/model/chem/dend/DEND/Ca' ) + print(('aCa = ', aCa, ' foo = ', foo, "len( ChemCa ) = ", len( chemCa ), ", numData = ", chemCa.numData, "len( adaptCa ) = ", len( adaptCa ))) + assert( len( adaptCa ) == ndc ) + assert( len( chemCa ) == ndc ) + path = '/model/elec/soma/Ca_conc' + elecCa = moose.element( path ) + print("==========") + print(elecCa) + print(adaptCa) + print(chemCa) + moose.connect( elecCa, 'concOut', adaptCa[0], 'input', 'Single' ) + moose.connect( adaptCa, 'output', chemCa, 'setConc', 'OneToOne' ) + adaptCa.inputOffset = 0.0 # + adaptCa.outputOffset = 0.00008 # 80 nM offset in chem. + adaptCa.scale = 1e-3 # 520 to 0.0052 mM + #print adaptCa.outputOffset + #print adaptCa.scale def addPlot( objpath, field, plot ): - #assert moose.exists( objpath ) - if moose.exists( objpath ): - tab = moose.Table( '/graphs/' + plot ) - obj = moose.element( objpath ) - if obj.className == 'Neutral': - print "addPlot failed: object is a Neutral: ", objpath - return moose.element( '/' ) - else: - #print "object was found: ", objpath, obj.className - moose.connect( tab, 'requestOut', obj, field ) - return tab - else: - print "addPlot failed: object not found: ", objpath - return moose.element( '/' ) + #assert moose.exists( objpath ) + if moose.exists( objpath ): + tab = moose.Table( '/graphs/' + plot ) + obj = moose.element( objpath ) + if obj.className == 'Neutral': + print(("addPlot failed: object is a Neutral: ", objpath)) + return moose.element( '/' ) + else: + #print "object was found: ", objpath, obj.className + moose.connect( tab, 'requestOut', obj, field ) + return tab + else: + print(("addPlot failed: object not found: ", objpath)) + return moose.element( '/' ) def makeElecPlots(): graphs = moose.Neutral( '/graphs' ) @@ -196,138 +189,128 @@ def makeElecPlots(): addPlot( '/model/elec/soma/Ca_conc', 'getCa', 'elec/somaCa' ) def makeChemPlots(): - graphs = moose.Neutral( '/graphs' ) - chem = moose.Neutral( '/graphs/chem' ) - addPlot( '/model/chem/psd/Ca_CaM', 'getConc', 'chem/psdCaCam' ) - addPlot( '/model/chem/psd/Ca', 'getConc', 'chem/psdCa' ) - addPlot( '/model/chem/spine/Ca_CaM', 'getConc', 'chem/spineCaCam' ) - addPlot( '/model/chem/spine/Ca', 'getConc', 'chem/spineCa' ) - addPlot( '/model/chem/dend/DEND/Ca', 'getConc', 'chem/dendCa' ) + graphs = moose.Neutral( '/graphs' ) + chem = moose.Neutral( '/graphs/chem' ) + addPlot( '/model/chem/psd/Ca_CaM', 'getConc', 'chem/psdCaCam' ) + addPlot( '/model/chem/psd/Ca', 'getConc', 'chem/psdCa' ) + addPlot( '/model/chem/spine/Ca_CaM', 'getConc', 'chem/spineCaCam' ) + addPlot( '/model/chem/spine/Ca', 'getConc', 'chem/spineCa' ) + addPlot( '/model/chem/dend/DEND/Ca', 'getConc', 'chem/dendCa' ) def testNeuroMeshMultiscale(): - elecDt = 50e-6 - chemDt = 0.01 - ePlotDt = 0.5e-3 - cPlotDt = 0.01 - plotName = 'nm.plot' - - makeNeuroMeshModel() - print "after model is completely done" - for i in moose.wildcardFind( '/model/chem/#/#/#/transloc#' ): - print i[0].name, i[0].Kf, i[0].Kb, i[0].kf, i[0].kb - - """ - for i in moose.wildcardFind( '/model/chem/##[ISA=PoolBase]' ): - if ( i[0].diffConst > 0 ): - grandpaname = i.parent[0].parent.name + '/' - paname = i.parent[0].name + '/' - print grandpaname + paname + i[0].name, i[0].diffConst - print 'Neighbors:' - for t in moose.element( '/model/chem/spine/ksolve/junction' ).neighbors['masterJunction']: - print 'masterJunction <-', t.path - for t in moose.wildcardFind( '/model/chem/#/ksolve' ): - k = moose.element( t[0] ) - print k.path + ' localVoxels=', k.numLocalVoxels, ', allVoxels= ', k.numAllVoxels - """ - ''' - moose.useClock( 4, '/model/chem/dend/dsolve', 'process' ) - moose.useClock( 5, '/model/chem/dend/ksolve', 'process' ) - moose.useClock( 5, '/model/chem/spine/ksolve', 'process' ) - moose.useClock( 5, '/model/chem/psd/ksolve', 'process' ) - ''' + elecDt = 50e-6 + chemDt = 0.01 + ePlotDt = 0.5e-3 + cPlotDt = 0.01 + plotName = 'nm.plot' - makeChemPlots() - makeElecPlots() - moose.setClock( 0, elecDt ) - moose.setClock( 1, elecDt ) - moose.setClock( 2, elecDt ) - moose.setClock( 4, chemDt ) - moose.setClock( 5, chemDt ) - moose.setClock( 6, chemDt ) - moose.setClock( 7, cPlotDt ) - moose.setClock( 8, ePlotDt ) - moose.useClock( 0, '/model/elec/##[ISA=Compartment]', 'init' ) - moose.useClock( 1, '/model/elec/##[ISA=Compartment]', 'process' ) - moose.useClock( 1, '/model/elec/##[ISA=SpikeGen]', 'process' ) - moose.useClock( 2, '/model/elec/##[ISA=ChanBase],/model/##[ISA=SynBase],/model/##[ISA=CaConc]','process') - #moose.useClock( 5, '/model/chem/##[ISA=PoolBase],/model/##[ISA=ReacBase],/model/##[ISA=EnzBase]', 'process' ) - #moose.useClock( 4, '/model/chem/##[ISA=Adaptor]', 'process' ) - moose.useClock( 4, '/model/chem/#/dsolve', 'process' ) - moose.useClock( 5, '/model/chem/#/ksolve', 'process' ) - moose.useClock( 6, '/model/chem/dend/DEND/adaptCa', 'process' ) - moose.useClock( 7, '/graphs/chem/#', 'process' ) - moose.useClock( 8, '/graphs/elec/#', 'process' ) - #hsolve = moose.HSolve( '/model/elec/hsolve' ) - #moose.useClock( 1, '/model/elec/hsolve', 'process' ) - #hsolve.dt = elecDt - #hsolve.target = '/model/elec/compt' - #moose.reinit() - moose.element( '/model/elec/spine_head' ).inject = 5e-12 - moose.element( '/model/chem/psd/Ca' ).concInit = 0.001 - moose.element( '/model/chem/spine/Ca' ).concInit = 0.002 - moose.element( '/model/chem/dend/DEND/Ca' ).concInit = 0.003 - moose.reinit() - """ - print 'pre' - eca = moose.vec( '/model/chem/psd/PSD/CaM/Ca' ) - for i in range( 3 ): - print eca[i].concInit, eca[i].conc, eca[i].nInit, eca[i].n, eca[i].volume - print 'dend' - eca = moose.vec( '/model/chem/dend/DEND/Ca' ) - #for i in ( 0, 1, 2, 30, 60, 90, 120, 144 ): - for i in range( 13 ): - print i, eca[i].concInit, eca[i].conc, eca[i].nInit, eca[i].n, eca[i].volume + makeNeuroMeshModel() + print("after model is completely done") + for i in moose.wildcardFind( '/model/chem/#/#/#/transloc#' ): + print((i[0].name, i[0].Kf, i[0].Kb, i[0].kf, i[0].kb)) - print 'PSD' - eca = moose.vec( '/model/chem/psd/PSD/CaM/Ca' ) - for i in range( 3 ): - print eca[i].concInit, eca[i].conc, eca[i].nInit, eca[i].n, eca[i].volume - print 'spine' - eca = moose.vec( '/model/chem/spine/SPINE/CaM/Ca' ) - for i in range( 3 ): - print eca[i].concInit, eca[i].conc, eca[i].nInit, eca[i].n, eca[i].volume - """ + """ + for i in moose.wildcardFind( '/model/chem/##[ISA=PoolBase]' ): + if ( i[0].diffConst > 0 ): + grandpaname = i.parent[0].parent.name + '/' + paname = i.parent[0].name + '/' + print grandpaname + paname + i[0].name, i[0].diffConst + print 'Neighbors:' + for t in moose.element( '/model/chem/spine/ksolve/junction' ).neighbors['masterJunction']: + print 'masterJunction <-', t.path + for t in moose.wildcardFind( '/model/chem/#/ksolve' ): + k = moose.element( t[0] ) + print k.path + ' localVoxels=', k.numLocalVoxels, ', allVoxels= ', k.numAllVoxels + """ + ''' + moose.useClock( 4, '/model/chem/dend/dsolve', 'process' ) + moose.useClock( 5, '/model/chem/dend/ksolve', 'process' ) + moose.useClock( 5, '/model/chem/spine/ksolve', 'process' ) + moose.useClock( 5, '/model/chem/psd/ksolve', 'process' ) + ''' - moose.start( 0.5 ) - plt.ion() - fig = plt.figure( figsize=(8,8) ) - chem = fig.add_subplot( 211 ) - chem.set_ylim( 0, 0.004 ) - plt.ylabel( 'Conc (mM)' ) - plt.xlabel( 'time (seconds)' ) - for x in moose.wildcardFind( '/graphs/chem/#[ISA=Table]' ): - pos = numpy.arange( 0, x.vector.size, 1 ) * cPlotDt - line1, = chem.plot( pos, x.vector, label=x.name ) - plt.legend() + makeChemPlots() + makeElecPlots() + moose.setClock( 0, elecDt ) + moose.setClock( 1, elecDt ) + moose.setClock( 2, elecDt ) + moose.setClock( 4, chemDt ) + moose.setClock( 5, chemDt ) + moose.setClock( 6, chemDt ) + moose.setClock( 7, cPlotDt ) + moose.setClock( 8, ePlotDt ) + moose.useClock( 0, '/model/elec/##[ISA=Compartment]', 'init' ) + moose.useClock( 1, '/model/elec/##[ISA=Compartment]', 'process' ) + moose.useClock( 1, '/model/elec/##[ISA=SpikeGen]', 'process' ) + moose.useClock( 2, '/model/elec/##[ISA=ChanBase],/model/##[ISA=SynBase],/model/##[ISA=CaConc]','process') + #moose.useClock( 5, '/model/chem/##[ISA=PoolBase],/model/##[ISA=ReacBase],/model/##[ISA=EnzBase]', 'process' ) + #moose.useClock( 4, '/model/chem/##[ISA=Adaptor]', 'process' ) + moose.useClock( 4, '/model/chem/#/dsolve', 'process' ) + moose.useClock( 5, '/model/chem/#/ksolve', 'process' ) + moose.useClock( 6, '/model/chem/dend/DEND/adaptCa', 'process' ) + moose.useClock( 7, '/graphs/chem/#', 'process' ) + moose.useClock( 8, '/graphs/elec/#', 'process' ) + #hsolve = moose.HSolve( '/model/elec/hsolve' ) + #moose.useClock( 1, '/model/elec/hsolve', 'process' ) + #hsolve.dt = elecDt + #hsolve.target = '/model/elec/compt' + #moose.reinit() + moose.element( '/model/elec/spine_head' ).inject = 5e-12 + moose.element( '/model/chem/psd/Ca' ).concInit = 0.001 + moose.element( '/model/chem/spine/Ca' ).concInit = 0.002 + moose.element( '/model/chem/dend/DEND/Ca' ).concInit = 0.003 + moose.reinit() + """ + print 'pre' + eca = moose.vec( '/model/chem/psd/PSD/CaM/Ca' ) + for i in range( 3 ): + print eca[i].concInit, eca[i].conc, eca[i].nInit, eca[i].n, eca[i].volume + print 'dend' + eca = moose.vec( '/model/chem/dend/DEND/Ca' ) + #for i in ( 0, 1, 2, 30, 60, 90, 120, 144 ): + for i in range( 13 ): + print i, eca[i].concInit, eca[i].conc, eca[i].nInit, eca[i].n, eca[i].volume - elec = fig.add_subplot( 212 ) - plt.ylabel( 'Vm (V)' ) - plt.xlabel( 'time (seconds)' ) - for x in moose.wildcardFind( '/graphs/elec/#[ISA=Table]' ): - pos = numpy.arange( 0, x.vector.size, 1 ) * ePlotDt - line1, = elec.plot( pos, x.vector, label=x.name ) - plt.legend() + print 'PSD' + eca = moose.vec( '/model/chem/psd/PSD/CaM/Ca' ) + for i in range( 3 ): + print eca[i].concInit, eca[i].conc, eca[i].nInit, eca[i].n, eca[i].volume + print 'spine' + eca = moose.vec( '/model/chem/spine/SPINE/CaM/Ca' ) + for i in range( 3 ): + print eca[i].concInit, eca[i].conc, eca[i].nInit, eca[i].n, eca[i].volume + """ - fig.canvas.draw() - raw_input() - - ''' - for x in moose.wildcardFind( '/graphs/##[ISA=Table]' ): - t = numpy.arange( 0, x.vector.size, 1 ) - pylab.plot( t, x.vector, label=x.name ) - pylab.legend() - pylab.show() - ''' + moose.start( 0.5 ) + plt.ion() + fig = plt.figure( figsize=(8,8) ) + chem = fig.add_subplot( 211 ) + chem.set_ylim( 0, 0.004 ) + plt.ylabel( 'Conc (mM)' ) + plt.xlabel( 'time (seconds)' ) + for x in moose.wildcardFind( '/graphs/chem/#[ISA=Table]' ): + pos = numpy.arange( 0, x.vector.size, 1 ) * cPlotDt + line1, = chem.plot( pos, x.vector, label=x.name ) + plt.legend() - pylab.show() - print 'All done' + elec = fig.add_subplot( 212 ) + plt.ylabel( 'Vm (V)' ) + plt.xlabel( 'time (seconds)' ) + for x in moose.wildcardFind( '/graphs/elec/#[ISA=Table]' ): + pos = numpy.arange( 0, x.vector.size, 1 ) * ePlotDt + line1, = elec.plot( pos, x.vector, label=x.name ) + plt.legend() + fig.canvas.draw() + eval(input()) + pylab.show() + print('All done') def main(): - testNeuroMeshMultiscale() + testNeuroMeshMultiscale() if __name__ == '__main__': - main() + main() # # minimal.py ends here. diff --git a/moose-examples/snippets/MULTI/minimal.py b/moose-examples/snippets/MULTI/minimal.py index 5035acdf0edf761a36c03cd72ada8f2c3b33393f..b5c018da1fb5d517465a8ff26797fc8811a9be2b 100644 --- a/moose-examples/snippets/MULTI/minimal.py +++ b/moose-examples/snippets/MULTI/minimal.py @@ -36,138 +36,138 @@ import moose EREST_ACT = -70e-3 def loadElec(): - library = moose.Neutral( '/library' ) - moose.setCwe( '/library' ) - model = moose.Neutral( '/model' ) - cellId = moose.loadModel( 'mincell.p', '/model/elec', "Neutral" ) - return cellId + library = moose.Neutral( '/library' ) + moose.setCwe( '/library' ) + model = moose.Neutral( '/model' ) + cellId = moose.loadModel( 'mincell.p', '/model/elec', "Neutral" ) + return cellId def loadChem( diffLength ): - chem = moose.Neutral( '/model/chem' ) - neuroCompt = moose.NeuroMesh( '/model/chem/kinetics' ) - neuroCompt.separateSpines = 1 - neuroCompt.geometryPolicy = 'cylinder' - spineCompt = moose.SpineMesh( '/model/chem/compartment_1' ) - moose.connect( neuroCompt, 'spineListOut', spineCompt, 'spineList', 'OneToOne' ) - psdCompt = moose.PsdMesh( '/model/chem/compartment_2' ) - #print 'Meshvolume[neuro, spine, psd] = ', neuroCompt.mesh[0].volume, spineCompt.mesh[0].volume, psdCompt.mesh[0].volume - moose.connect( neuroCompt, 'psdListOut', psdCompt, 'psdList', 'OneToOne' ) - modelId = moose.loadModel( 'minimal.g', '/model/chem', 'ee' ) - neuroCompt.name = 'dend' - spineCompt.name = 'spine' - psdCompt.name = 'psd' + chem = moose.Neutral( '/model/chem' ) + neuroCompt = moose.NeuroMesh( '/model/chem/kinetics' ) + neuroCompt.separateSpines = 1 + neuroCompt.geometryPolicy = 'cylinder' + spineCompt = moose.SpineMesh( '/model/chem/compartment_1' ) + moose.connect( neuroCompt, 'spineListOut', spineCompt, 'spineList', 'OneToOne' ) + psdCompt = moose.PsdMesh( '/model/chem/compartment_2' ) + #print 'Meshvolume[neuro, spine, psd] = ', neuroCompt.mesh[0].volume, spineCompt.mesh[0].volume, psdCompt.mesh[0].volume + moose.connect( neuroCompt, 'psdListOut', psdCompt, 'psdList', 'OneToOne' ) + modelId = moose.loadModel( 'minimal.g', '/model/chem', 'ee' ) + neuroCompt.name = 'dend' + spineCompt.name = 'spine' + psdCompt.name = 'psd' def makeNeuroMeshModel(): - diffLength = 20e-6 # Aim for just 3 compts. - elec = loadElec() - loadChem( diffLength ) - neuroCompt = moose.element( '/model/chem/dend' ) - neuroCompt.diffLength = diffLength - neuroCompt.cellPortion( elec, '/model/elec/#' ) - for x in moose.wildcardFind( '/model/chem/##[ISA=PoolBase]' ): - if (x.diffConst > 0): - x.diffConst = 1e-11 - for x in moose.wildcardFind( '/model/chem/##/Ca' ): - x.diffConst = 1e-10 + diffLength = 20e-6 # Aim for just 3 compts. + elec = loadElec() + loadChem( diffLength ) + neuroCompt = moose.element( '/model/chem/dend' ) + neuroCompt.diffLength = diffLength + neuroCompt.cellPortion( elec, '/model/elec/#' ) + for x in moose.wildcardFind( '/model/chem/##[ISA=PoolBase]' ): + if (x.diffConst > 0): + x.diffConst = 1e-11 + for x in moose.wildcardFind( '/model/chem/##/Ca' ): + x.diffConst = 1e-10 - # Put in dend solvers - ns = neuroCompt.numSegments - ndc = neuroCompt.numDiffCompts - print 'ns = ', ns, ', ndc = ', ndc - assert( neuroCompt.numDiffCompts == neuroCompt.mesh.num ) - assert( ns == 1 ) # dend, 5x (shaft+head) - assert( ndc == 1 ) - nmksolve = moose.Ksolve( '/model/chem/dend/ksolve' ) - nmdsolve = moose.Dsolve( '/model/chem/dend/dsolve' ) - nmstoich = moose.Stoich( '/model/chem/dend/stoich' ) - nmstoich.compartment = neuroCompt - nmstoich.ksolve = nmksolve - nmstoich.dsolve = nmdsolve - nmstoich.path = "/model/chem/dend/##" - print 'done setting path, numPools = ', nmdsolve.numPools - assert( nmdsolve.numPools == 1 ) - assert( nmdsolve.numAllVoxels == 1 ) - assert( nmstoich.numAllPools == 1 ) - # oddly, numLocalFields does not work. - ca = moose.element( '/model/chem/dend/DEND/Ca' ) - assert( ca.numData == ndc ) + # Put in dend solvers + ns = neuroCompt.numSegments + ndc = neuroCompt.numDiffCompts + print(('ns = ', ns, ', ndc = ', ndc)) + assert( neuroCompt.numDiffCompts == neuroCompt.mesh.num ) + assert( ns == 1 ) # dend, 5x (shaft+head) + assert( ndc == 1 ) + nmksolve = moose.Ksolve( '/model/chem/dend/ksolve' ) + nmdsolve = moose.Dsolve( '/model/chem/dend/dsolve' ) + nmstoich = moose.Stoich( '/model/chem/dend/stoich' ) + nmstoich.compartment = neuroCompt + nmstoich.ksolve = nmksolve + nmstoich.dsolve = nmdsolve + nmstoich.path = "/model/chem/dend/##" + print(('done setting path, numPools = ', nmdsolve.numPools)) + assert( nmdsolve.numPools == 1 ) + assert( nmdsolve.numAllVoxels == 1 ) + assert( nmstoich.numAllPools == 1 ) + # oddly, numLocalFields does not work. + ca = moose.element( '/model/chem/dend/DEND/Ca' ) + assert( ca.numData == ndc ) - # Put in spine solvers. Note that these get info from the neuroCompt - spineCompt = moose.element( '/model/chem/spine' ) - sdc = spineCompt.mesh.num - print 'sdc = ', sdc - assert( sdc == 1 ) - smksolve = moose.Ksolve( '/model/chem/spine/ksolve' ) - smdsolve = moose.Dsolve( '/model/chem/spine/dsolve' ) - smstoich = moose.Stoich( '/model/chem/spine/stoich' ) - smstoich.compartment = spineCompt - smstoich.ksolve = smksolve - smstoich.dsolve = smdsolve - smstoich.path = "/model/chem/spine/##" - assert( smstoich.numAllPools == 3 ) - assert( smdsolve.numPools == 3 ) - assert( smdsolve.numAllVoxels == 1 ) - - # Put in PSD solvers. Note that these get info from the neuroCompt - psdCompt = moose.element( '/model/chem/psd' ) - pdc = psdCompt.mesh.num - assert( pdc == 1 ) - pmksolve = moose.Ksolve( '/model/chem/psd/ksolve' ) - pmdsolve = moose.Dsolve( '/model/chem/psd/dsolve' ) - pmstoich = moose.Stoich( '/model/chem/psd/stoich' ) - pmstoich.compartment = psdCompt - pmstoich.ksolve = pmksolve - pmstoich.dsolve = pmdsolve - pmstoich.path = "/model/chem/psd/##" - assert( pmstoich.numAllPools == 3 ) - assert( pmdsolve.numPools == 3 ) - assert( pmdsolve.numAllVoxels == 1 ) - foo = moose.element( '/model/chem/psd/Ca' ) - print 'PSD: numfoo = ', foo.numData - print 'PSD: numAllVoxels = ', pmksolve.numAllVoxels + # Put in spine solvers. Note that these get info from the neuroCompt + spineCompt = moose.element( '/model/chem/spine' ) + sdc = spineCompt.mesh.num + print(('sdc = ', sdc)) + assert( sdc == 1 ) + smksolve = moose.Ksolve( '/model/chem/spine/ksolve' ) + smdsolve = moose.Dsolve( '/model/chem/spine/dsolve' ) + smstoich = moose.Stoich( '/model/chem/spine/stoich' ) + smstoich.compartment = spineCompt + smstoich.ksolve = smksolve + smstoich.dsolve = smdsolve + smstoich.path = "/model/chem/spine/##" + assert( smstoich.numAllPools == 3 ) + assert( smdsolve.numPools == 3 ) + assert( smdsolve.numAllVoxels == 1 ) + + # Put in PSD solvers. Note that these get info from the neuroCompt + psdCompt = moose.element( '/model/chem/psd' ) + pdc = psdCompt.mesh.num + assert( pdc == 1 ) + pmksolve = moose.Ksolve( '/model/chem/psd/ksolve' ) + pmdsolve = moose.Dsolve( '/model/chem/psd/dsolve' ) + pmstoich = moose.Stoich( '/model/chem/psd/stoich' ) + pmstoich.compartment = psdCompt + pmstoich.ksolve = pmksolve + pmstoich.dsolve = pmdsolve + pmstoich.path = "/model/chem/psd/##" + assert( pmstoich.numAllPools == 3 ) + assert( pmdsolve.numPools == 3 ) + assert( pmdsolve.numAllVoxels == 1 ) + foo = moose.element( '/model/chem/psd/Ca' ) + print(('PSD: numfoo = ', foo.numData)) + print(('PSD: numAllVoxels = ', pmksolve.numAllVoxels)) - """ - CaNpsd = moose.vec( '/model/chem/psdMesh/PSD/PP1_PSD/CaN' ) - print 'numCaN in PSD = ', CaNpsd.nInit, ', vol = ', CaNpsd.volume - CaNspine = moose.vec( '/model/chem/spine/SPINE/CaN_BULK/CaN' ) - print 'numCaN in spine = ', CaNspine.nInit, ', vol = ', CaNspine.volume - """ + """ + CaNpsd = moose.vec( '/model/chem/psdMesh/PSD/PP1_PSD/CaN' ) + print 'numCaN in PSD = ', CaNpsd.nInit, ', vol = ', CaNpsd.volume + CaNspine = moose.vec( '/model/chem/spine/SPINE/CaN_BULK/CaN' ) + print 'numCaN in spine = ', CaNspine.nInit, ', vol = ', CaNspine.volume + """ - # set up adaptors - aCa = moose.Adaptor( '/model/chem/psd/adaptCa', pdc ) + # set up adaptors + aCa = moose.Adaptor( '/model/chem/psd/adaptCa', pdc ) - adaptCa = moose.vec( '/model/chem/psd/adaptCa' ) - chemCa = moose.vec( '/model/chem/psd/Ca' ) - print 'aCa = ', aCa, ' foo = ', foo, "len( ChemCa ) = ", len( chemCa ), ", numData = ", chemCa.numData - assert( len( adaptCa ) == pdc ) - assert( len( chemCa ) == pdc ) - path = '/model/elec/spine_head' - elecCa = moose.element( path ) - moose.connect( elecCa, 'VmOut', adaptCa[0], 'input', 'Single' ) - #moose.connect( adaptCa, 'outputSrc', chemCa, 'setConc', 'OneToOne' ) - adaptCa.inputOffset = 0.0 # - adaptCa.outputOffset = 0.00008 # 80 nM offset in chem. - adaptCa.scale = 1e-5 # 520 to 0.0052 mM - #print adaptCa.outputOffset - #print adaptCa.scale + adaptCa = moose.vec( '/model/chem/psd/adaptCa' ) + chemCa = moose.vec( '/model/chem/psd/Ca' ) + print(('aCa = ', aCa, ' foo = ', foo, "len( ChemCa ) = ", len( chemCa ), ", numData = ", chemCa.numData)) + assert( len( adaptCa ) == pdc ) + assert( len( chemCa ) == pdc ) + path = '/model/elec/spine_head' + elecCa = moose.element( path ) + moose.connect( elecCa, 'VmOut', adaptCa[0], 'input', 'Single' ) + #moose.connect( adaptCa, 'outputSrc', chemCa, 'setConc', 'OneToOne' ) + adaptCa.inputOffset = 0.0 # + adaptCa.outputOffset = 0.00008 # 80 nM offset in chem. + adaptCa.scale = 1e-5 # 520 to 0.0052 mM + #print adaptCa.outputOffset + #print adaptCa.scale def addPlot( objpath, field, plot ): - #assert moose.exists( objpath ) - if moose.exists( objpath ): - tab = moose.Table( '/graphs/' + plot ) - obj = moose.element( objpath ) - if obj.className == 'Neutral': - print "addPlot failed: object is a Neutral: ", objpath - return moose.element( '/' ) - else: - #print "object was found: ", objpath, obj.className - moose.connect( tab, 'requestOut', obj, field ) - return tab - else: - print "addPlot failed: object not found: ", objpath - return moose.element( '/' ) + #assert moose.exists( objpath ) + if moose.exists( objpath ): + tab = moose.Table( '/graphs/' + plot ) + obj = moose.element( objpath ) + if obj.className == 'Neutral': + print(("addPlot failed: object is a Neutral: ", objpath)) + return moose.element( '/' ) + else: + #print "object was found: ", objpath, obj.className + moose.connect( tab, 'requestOut', obj, field ) + return tab + else: + print(("addPlot failed: object not found: ", objpath)) + return moose.element( '/' ) def makeElecPlots(): graphs = moose.Neutral( '/graphs' ) @@ -176,135 +176,127 @@ def makeElecPlots(): addPlot( '/model/elec/spine_head', 'getVm', 'elec/spineVm' ) def makeChemPlots(): - graphs = moose.Neutral( '/graphs' ) - chem = moose.Neutral( '/graphs/chem' ) - addPlot( '/model/chem/psd/Ca_CaM', 'getConc', 'chem/psdCaCam' ) - addPlot( '/model/chem/psd/Ca', 'getConc', 'chem/psdCa' ) - addPlot( '/model/chem/spine/Ca_CaM', 'getConc', 'chem/spineCaCam' ) - addPlot( '/model/chem/spine/Ca', 'getConc', 'chem/spineCa' ) - addPlot( '/model/chem/dend/DEND/Ca', 'getConc', 'chem/dendCa' ) + graphs = moose.Neutral( '/graphs' ) + chem = moose.Neutral( '/graphs/chem' ) + addPlot( '/model/chem/psd/Ca_CaM', 'getConc', 'chem/psdCaCam' ) + addPlot( '/model/chem/psd/Ca', 'getConc', 'chem/psdCa' ) + addPlot( '/model/chem/spine/Ca_CaM', 'getConc', 'chem/spineCaCam' ) + addPlot( '/model/chem/spine/Ca', 'getConc', 'chem/spineCa' ) + addPlot( '/model/chem/dend/DEND/Ca', 'getConc', 'chem/dendCa' ) def testNeuroMeshMultiscale(): - elecDt = 50e-6 - chemDt = 1e-1 - plotDt = 1e-1 - plotName = 'nm.plot' + elecDt = 50e-6 + chemDt = 1e-1 + plotDt = 1e-1 + plotName = 'nm.plot' - makeNeuroMeshModel() - print "after model is completely done" - for i in moose.wildcardFind( '/model/chem/#/#/#/transloc#' ): - print i[0].name, i[0].Kf, i[0].Kb, i[0].kf, i[0].kb + makeNeuroMeshModel() + print("after model is completely done") + for i in moose.wildcardFind( '/model/chem/#/#/#/transloc#' ): + print((i[0].name, i[0].Kf, i[0].Kb, i[0].kf, i[0].kb)) - """ - for i in moose.wildcardFind( '/model/chem/##[ISA=PoolBase]' ): - if ( i[0].diffConst > 0 ): - grandpaname = i.parent[0].parent.name + '/' - paname = i.parent[0].name + '/' - print grandpaname + paname + i[0].name, i[0].diffConst - print 'Neighbors:' - for t in moose.element( '/model/chem/spine/ksolve/junction' ).neighbors['masterJunction']: - print 'masterJunction <-', t.path - for t in moose.wildcardFind( '/model/chem/#/ksolve' ): - k = moose.element( t[0] ) - print k.path + ' localVoxels=', k.numLocalVoxels, ', allVoxels= ', k.numAllVoxels - """ - ''' - moose.useClock( 4, '/model/chem/dend/dsolve', 'process' ) - moose.useClock( 5, '/model/chem/dend/ksolve', 'process' ) - moose.useClock( 5, '/model/chem/spine/ksolve', 'process' ) - moose.useClock( 5, '/model/chem/psd/ksolve', 'process' ) - ''' + """ + for i in moose.wildcardFind( '/model/chem/##[ISA=PoolBase]' ): + if ( i[0].diffConst > 0 ): + grandpaname = i.parent[0].parent.name + '/' + paname = i.parent[0].name + '/' + print grandpaname + paname + i[0].name, i[0].diffConst + print 'Neighbors:' + for t in moose.element( '/model/chem/spine/ksolve/junction' ).neighbors['masterJunction']: + print 'masterJunction <-', t.path + for t in moose.wildcardFind( '/model/chem/#/ksolve' ): + k = moose.element( t[0] ) + print k.path + ' localVoxels=', k.numLocalVoxels, ', allVoxels= ', k.numAllVoxels + """ - makeChemPlots() - makeElecPlots() - moose.setClock( 0, elecDt ) - moose.setClock( 1, elecDt ) - moose.setClock( 2, elecDt ) - moose.setClock( 4, chemDt ) - moose.setClock( 5, chemDt ) - moose.setClock( 6, chemDt ) - moose.setClock( 7, plotDt ) - moose.setClock( 8, plotDt ) - moose.useClock( 0, '/model/elec/##[ISA=Compartment]', 'init' ) - moose.useClock( 1, '/model/elec/##[ISA=Compartment]', 'process' ) - moose.useClock( 1, '/model/elec/##[ISA=SpikeGen]', 'process' ) - moose.useClock( 2, '/model/elec/##[ISA=ChanBase],/model/##[ISA=SynBase],/model/##[ISA=CaConc]','process') - #moose.useClock( 5, '/model/chem/##[ISA=PoolBase],/model/##[ISA=ReacBase],/model/##[ISA=EnzBase]', 'process' ) - #moose.useClock( 6, '/model/chem/##[ISA=Adaptor]', 'process' ) - moose.useClock( 7, '/graphs/chem/#', 'process' ) - moose.useClock( 8, '/graphs/elec/#', 'process' ) - moose.useClock( 5, '/model/chem/#/dsolve', 'process' ) - moose.useClock( 6, '/model/chem/#/ksolve', 'process' ) - #hsolve = moose.HSolve( '/model/elec/hsolve' ) - #moose.useClock( 1, '/model/elec/hsolve', 'process' ) - #hsolve.dt = elecDt - #hsolve.target = '/model/elec/compt' - #moose.reinit() - moose.element( '/model/elec/spine_head' ).inject = 1e-9 - moose.element( '/model/chem/psd/Ca' ).concInit = 0.001 - moose.element( '/model/chem/spine/Ca' ).concInit = 0.002 - moose.element( '/model/chem/dend/DEND/Ca' ).concInit = 0.003 - moose.reinit() - """ - print 'pre' - eca = moose.vec( '/model/chem/psd/PSD/CaM/Ca' ) - for i in range( 3 ): - print eca[i].concInit, eca[i].conc, eca[i].nInit, eca[i].n, eca[i].volume - print 'dend' - eca = moose.vec( '/model/chem/dend/DEND/Ca' ) - #for i in ( 0, 1, 2, 30, 60, 90, 120, 144 ): - for i in range( 13 ): - print i, eca[i].concInit, eca[i].conc, eca[i].nInit, eca[i].n, eca[i].volume + ''' + moose.useClock( 4, '/model/chem/dend/dsolve', 'process' ) + moose.useClock( 5, '/model/chem/dend/ksolve', 'process' ) + moose.useClock( 5, '/model/chem/spine/ksolve', 'process' ) + moose.useClock( 5, '/model/chem/psd/ksolve', 'process' ) + ''' - print 'PSD' - eca = moose.vec( '/model/chem/psd/PSD/CaM/Ca' ) - for i in range( 3 ): - print eca[i].concInit, eca[i].conc, eca[i].nInit, eca[i].n, eca[i].volume - print 'spine' - eca = moose.vec( '/model/chem/spine/SPINE/CaM/Ca' ) - for i in range( 3 ): - print eca[i].concInit, eca[i].conc, eca[i].nInit, eca[i].n, eca[i].volume - """ + makeChemPlots() + makeElecPlots() + moose.setClock( 0, elecDt ) + moose.setClock( 1, elecDt ) + moose.setClock( 2, elecDt ) + moose.setClock( 4, chemDt ) + moose.setClock( 5, chemDt ) + moose.setClock( 6, chemDt ) + moose.setClock( 7, plotDt ) + moose.setClock( 8, plotDt ) + moose.useClock( 0, '/model/elec/##[ISA=Compartment]', 'init' ) + moose.useClock( 1, '/model/elec/##[ISA=Compartment]', 'process' ) + moose.useClock( 1, '/model/elec/##[ISA=SpikeGen]', 'process' ) + moose.useClock( 2, '/model/elec/##[ISA=ChanBase],/model/##[ISA=SynBase],/model/##[ISA=CaConc]','process') + #moose.useClock( 5, '/model/chem/##[ISA=PoolBase],/model/##[ISA=ReacBase],/model/##[ISA=EnzBase]', 'process' ) + #moose.useClock( 6, '/model/chem/##[ISA=Adaptor]', 'process' ) + moose.useClock( 7, '/graphs/chem/#', 'process' ) + moose.useClock( 8, '/graphs/elec/#', 'process' ) + moose.useClock( 5, '/model/chem/#/dsolve', 'process' ) + moose.useClock( 6, '/model/chem/#/ksolve', 'process' ) + #hsolve = moose.HSolve( '/model/elec/hsolve' ) + #moose.useClock( 1, '/model/elec/hsolve', 'process' ) + #hsolve.dt = elecDt + #hsolve.target = '/model/elec/compt' + #moose.reinit() + moose.element( '/model/elec/spine_head' ).inject = 1e-9 + moose.element( '/model/chem/psd/Ca' ).concInit = 0.001 + moose.element( '/model/chem/spine/Ca' ).concInit = 0.002 + moose.element( '/model/chem/dend/DEND/Ca' ).concInit = 0.003 + moose.reinit() + """ + print 'pre' + eca = moose.vec( '/model/chem/psd/PSD/CaM/Ca' ) + for i in range( 3 ): + print eca[i].concInit, eca[i].conc, eca[i].nInit, eca[i].n, eca[i].volume + print 'dend' + eca = moose.vec( '/model/chem/dend/DEND/Ca' ) + #for i in ( 0, 1, 2, 30, 60, 90, 120, 144 ): + for i in range( 13 ): + print i, eca[i].concInit, eca[i].conc, eca[i].nInit, eca[i].n, eca[i].volume - moose.start( 0.5 ) - plt.ion() - fig = plt.figure( figsize=(8,8) ) - chem = fig.add_subplot( 211 ) - chem.set_ylim( 0, 0.004 ) - plt.ylabel( 'Conc (mM)' ) - plt.xlabel( 'time (seconds)' ) - for x in moose.wildcardFind( '/graphs/chem/#[ISA=Table]' ): - pos = numpy.arange( 0, len(x.vector), 1 ) - line1, = chem.plot( pos, x.vector, label=x.name ) - plt.legend() + print 'PSD' + eca = moose.vec( '/model/chem/psd/PSD/CaM/Ca' ) + for i in range( 3 ): + print eca[i].concInit, eca[i].conc, eca[i].nInit, eca[i].n, eca[i].volume + print 'spine' + eca = moose.vec( '/model/chem/spine/SPINE/CaM/Ca' ) + for i in range( 3 ): + print eca[i].concInit, eca[i].conc, eca[i].nInit, eca[i].n, eca[i].volume + """ - elec = fig.add_subplot( 212 ) - plt.ylabel( 'Vm (V)' ) - plt.xlabel( 'time (seconds)' ) - for x in moose.wildcardFind( '/graphs/elec/#[ISA=Table]' ): - pos = numpy.arange( 0, len(x.vector), 1 ) - line1, = elec.plot( pos, x.vector, label=x.name ) - plt.legend() + moose.start( 0.5 ) + plt.ion() + fig = plt.figure( figsize=(8,8) ) + chem = fig.add_subplot( 211 ) + chem.set_ylim( 0, 0.004 ) + plt.ylabel( 'Conc (mM)' ) + plt.xlabel( 'time (seconds)' ) + for x in moose.wildcardFind( '/graphs/chem/#[ISA=Table]' ): + pos = numpy.arange( 0, len(x.vector), 1 ) + line1, = chem.plot( pos, x.vector, label=x.name ) + plt.legend() - fig.canvas.draw() - raw_input() - - ''' - for x in moose.wildcardFind( '/graphs/##[ISA=Table]' ): - t = numpy.arange( 0, x.vector.size, 1 ) - pylab.plot( t, x.vector, label=x.name ) - pylab.legend() - pylab.show() - ''' + elec = fig.add_subplot( 212 ) + plt.ylabel( 'Vm (V)' ) + plt.xlabel( 'time (seconds)' ) + for x in moose.wildcardFind( '/graphs/elec/#[ISA=Table]' ): + pos = numpy.arange( 0, len(x.vector), 1 ) + line1, = elec.plot( pos, x.vector, label=x.name ) + plt.legend() - print 'All done' + fig.canvas.draw() + eval(input()) + print('All done') def main(): - testNeuroMeshMultiscale() + testNeuroMeshMultiscale() if __name__ == '__main__': - main() + main() # # minimal.py ends here. diff --git a/moose-examples/snippets/MULTI/multi1.py b/moose-examples/snippets/MULTI/multi1.py index f4fc54ef6badc8f213866781c5ca997a07d2a261..4f60c8d7ac244755f226cf3403bffd9941513f13 100644 --- a/moose-examples/snippets/MULTI/multi1.py +++ b/moose-examples/snippets/MULTI/multi1.py @@ -29,7 +29,6 @@ # Code: import sys -sys.path.append('../../python') import os os.environ['NUMPTHREADS'] = '1' import math @@ -41,179 +40,165 @@ import proto18 EREST_ACT = -70e-3 def loadElec(): - library = moose.Neutral( '/library' ) - moose.setCwe( '/library' ) - proto18.make_Ca() - proto18.make_Ca_conc() - proto18.make_K_AHP() - proto18.make_K_C() - proto18.make_Na() - proto18.make_K_DR() - proto18.make_K_A() - proto18.make_glu() - proto18.make_NMDA() - proto18.make_Ca_NMDA() - proto18.make_NMDA_Ca_conc() - proto18.make_axon() - moose.setCwe( '/library' ) - model = moose.Neutral( '/model' ) - cellId = moose.loadModel( 'ca1_asym.p', '/model/elec', "Neutral" ) - return cellId + library = moose.Neutral( '/library' ) + moose.setCwe( '/library' ) + proto18.make_Ca() + proto18.make_Ca_conc() + proto18.make_K_AHP() + proto18.make_K_C() + proto18.make_Na() + proto18.make_K_DR() + proto18.make_K_A() + proto18.make_glu() + proto18.make_NMDA() + proto18.make_Ca_NMDA() + proto18.make_NMDA_Ca_conc() + proto18.make_axon() + moose.setCwe( '/library' ) + model = moose.Neutral( '/model' ) + cellId = moose.loadModel( 'ca1_asym.p', '/model/elec', "Neutral" ) + return cellId def loadChem( diffLength ): - chem = moose.Neutral( '/model/chem' ) - neuroCompt = moose.NeuroMesh( '/model/chem/kinetics' ) - neuroCompt.separateSpines = 1 - neuroCompt.geometryPolicy = 'cylinder' - spineCompt = moose.SpineMesh( '/model/chem/compartment_1' ) - moose.connect( neuroCompt, 'spineListOut', spineCompt, 'spineList', 'OneToOne' ) - psdCompt = moose.PsdMesh( '/model/chem/compartment_2' ) - #print 'Meshvolume[neuro, spine, psd] = ', neuroCompt.mesh[0].volume, spineCompt.mesh[0].volume, psdCompt.mesh[0].volume - moose.connect( neuroCompt, 'psdListOut', psdCompt, 'psdList', 'OneToOne' ) - modelId = moose.loadModel( 'minimal.g', '/model/chem', 'ee' ) - #modelId = moose.loadModel( 'psd_merged31d.g', '/model/chem', 'ee' ) - neuroCompt.name = 'dend' - spineCompt.name = 'spine' - psdCompt.name = 'psd' + chem = moose.Neutral( '/model/chem' ) + neuroCompt = moose.NeuroMesh( '/model/chem/kinetics' ) + neuroCompt.separateSpines = 1 + neuroCompt.geometryPolicy = 'cylinder' + spineCompt = moose.SpineMesh( '/model/chem/compartment_1' ) + moose.connect( neuroCompt, 'spineListOut', spineCompt, 'spineList', 'OneToOne' ) + psdCompt = moose.PsdMesh( '/model/chem/compartment_2' ) + #print 'Meshvolume[neuro, spine, psd] = ', neuroCompt.mesh[0].volume, spineCompt.mesh[0].volume, psdCompt.mesh[0].volume + moose.connect( neuroCompt, 'psdListOut', psdCompt, 'psdList', 'OneToOne' ) + modelId = moose.loadModel( 'minimal.g', '/model/chem', 'ee' ) + #modelId = moose.loadModel( 'psd_merged31d.g', '/model/chem', 'ee' ) + neuroCompt.name = 'dend' + spineCompt.name = 'spine' + psdCompt.name = 'psd' def makeNeuroMeshModel(): - diffLength = 10e-6 # Aim for 2 soma compartments. - elec = loadElec() - loadChem( diffLength ) - neuroCompt = moose.element( '/model/chem/dend' ) - neuroCompt.diffLength = diffLength - neuroCompt.cellPortion( elec, '/model/elec/#' ) - for x in moose.wildcardFind( '/model/chem/##[ISA=PoolBase]' ): - if (x.diffConst > 0): - x.diffConst = 1e-11 - for x in moose.wildcardFind( '/model/chem/##/Ca' ): - x.diffConst = 1e-10 - - # Put in dend solvers - ns = neuroCompt.numSegments - ndc = neuroCompt.numDiffCompts - print 'ns = ', ns, ', ndc = ', ndc - assert( neuroCompt.numDiffCompts == neuroCompt.mesh.num ) - assert( ns == 36 ) # - assert( ndc == 278 ) # - nmksolve = moose.Ksolve( '/model/chem/dend/ksolve' ) - nmdsolve = moose.Dsolve( '/model/chem/dend/dsolve' ) - nmstoich = moose.Stoich( '/model/chem/dend/stoich' ) - nmstoich.compartment = neuroCompt - nmstoich.ksolve = nmksolve - nmstoich.dsolve = nmdsolve - nmstoich.path = "/model/chem/dend/##" - print 'done setting path, numPools = ', nmdsolve.numPools - assert( nmdsolve.numPools == 1 ) - assert( nmdsolve.numAllVoxels == ndc ) - assert( nmstoich.numAllPools == 1 ) - # oddly, numLocalFields does not work. - ca = moose.element( '/model/chem/dend/DEND/Ca' ) - assert( ca.numData == ndc ) + diffLength = 10e-6 # Aim for 2 soma compartments. + elec = loadElec() + loadChem( diffLength ) + neuroCompt = moose.element( '/model/chem/dend' ) + neuroCompt.diffLength = diffLength + neuroCompt.cellPortion( elec, '/model/elec/#' ) + for x in moose.wildcardFind( '/model/chem/##[ISA=PoolBase]' ): + if (x.diffConst > 0): + x.diffConst = 1e-11 + for x in moose.wildcardFind( '/model/chem/##/Ca' ): + x.diffConst = 1e-10 + + # Put in dend solvers + ns = neuroCompt.numSegments + ndc = neuroCompt.numDiffCompts + print(('ns = ', ns, ', ndc = ', ndc)) + assert( neuroCompt.numDiffCompts == neuroCompt.mesh.num ) + assert( ns == 36 ) # + assert( ndc == 278 ) # + nmksolve = moose.Ksolve( '/model/chem/dend/ksolve' ) + nmdsolve = moose.Dsolve( '/model/chem/dend/dsolve' ) + nmstoich = moose.Stoich( '/model/chem/dend/stoich' ) + nmstoich.compartment = neuroCompt + nmstoich.ksolve = nmksolve + nmstoich.dsolve = nmdsolve + nmstoich.path = "/model/chem/dend/##" + print(('done setting path, numPools = ', nmdsolve.numPools)) + assert( nmdsolve.numPools == 1 ) + assert( nmdsolve.numAllVoxels == ndc ) + assert( nmstoich.numAllPools == 1 ) + # oddly, numLocalFields does not work. + ca = moose.element( '/model/chem/dend/DEND/Ca' ) + assert( ca.numData == ndc ) - # Put in spine solvers. Note that these get info from the neuroCompt - spineCompt = moose.element( '/model/chem/spine' ) - sdc = spineCompt.mesh.num - print 'sdc = ', sdc - assert( sdc == 13 ) - smksolve = moose.Ksolve( '/model/chem/spine/ksolve' ) - smdsolve = moose.Dsolve( '/model/chem/spine/dsolve' ) - smstoich = moose.Stoich( '/model/chem/spine/stoich' ) - smstoich.compartment = spineCompt - smstoich.ksolve = smksolve - smstoich.dsolve = smdsolve - smstoich.path = "/model/chem/spine/##" - print 'spine num Pools = ', smstoich.numAllPools - assert( smstoich.numAllPools == 3 ) - assert( smdsolve.numPools == 3 ) - assert( smdsolve.numAllVoxels == sdc ) - - # Put in PSD solvers. Note that these get info from the neuroCompt - psdCompt = moose.element( '/model/chem/psd' ) - pdc = psdCompt.mesh.num - assert( pdc == 13 ) - pmksolve = moose.Ksolve( '/model/chem/psd/ksolve' ) - pmdsolve = moose.Dsolve( '/model/chem/psd/dsolve' ) - pmstoich = moose.Stoich( '/model/chem/psd/stoich' ) - pmstoich.compartment = psdCompt - pmstoich.ksolve = pmksolve - pmstoich.dsolve = pmdsolve - pmstoich.path = "/model/chem/psd/##" - assert( pmstoich.numAllPools == 3 ) - assert( pmdsolve.numPools == 3 ) - assert( pmdsolve.numAllVoxels == pdc ) - foo = moose.element( '/model/chem/psd/Ca' ) - print 'PSD: numfoo = ', foo.numData - print 'PSD: numAllVoxels = ', pmksolve.numAllVoxels - - # Put in junctions between the diffusion solvers - nmdsolve.buildNeuroMeshJunctions( smdsolve, pmdsolve ) - - """ - CaNpsd = moose.vec( '/model/chem/psdMesh/PSD/PP1_PSD/CaN' ) - print 'numCaN in PSD = ', CaNpsd.nInit, ', vol = ', CaNpsd.volume - CaNspine = moose.vec( '/model/chem/spine/SPINE/CaN_BULK/CaN' ) - print 'numCaN in spine = ', CaNspine.nInit, ', vol = ', CaNspine.volume - """ - - ################################################################## - # set up adaptors - aCa = moose.Adaptor( '/model/chem/spine/adaptCa', sdc ) - adaptCa = moose.vec( '/model/chem/spine/adaptCa' ) - chemCa = moose.vec( '/model/chem/spine/Ca' ) - #print 'aCa = ', aCa, ' foo = ', foo, "len( ChemCa ) = ", len( chemCa ), ", numData = ", chemCa.numData, "len( adaptCa ) = ", len( adaptCa ) - assert( len( adaptCa ) == sdc ) - assert( len( chemCa ) == sdc ) - for i in range( sdc ): - elecCa = moose.element( '/model/elec/spine_head_14_' + str(i+1) + '/NMDA_Ca_conc' ) - #print elecCa - moose.connect( elecCa, 'concOut', adaptCa[i], 'input', 'Single' ) - moose.connect( adaptCa, 'output', chemCa, 'setConc', 'OneToOne' ) - adaptCa.inputOffset = 0.0 # - adaptCa.outputOffset = 0.00008 # 80 nM offset in chem. - adaptCa.scale = 1e-4 # 520 to 0.0052 mM - #print adaptCa.outputOffset - - - moose.le( '/model/chem/dend/DEND' ) - - - compts = neuroCompt.elecComptList - begin = neuroCompt.startVoxelInCompt - end = neuroCompt.endVoxelInCompt - aCa = moose.Adaptor( '/model/chem/dend/DEND/adaptCa', len( compts)) - adaptCa = moose.vec( '/model/chem/dend/DEND/adaptCa' ) - chemCa = moose.vec( '/model/chem/dend/DEND/Ca' ) - #print 'aCa = ', aCa, ' foo = ', foo, "len( ChemCa ) = ", len( chemCa ), ", numData = ", chemCa.numData, "len( adaptCa ) = ", len( adaptCa ) - assert( len( chemCa ) == ndc ) - for i in zip( compts, adaptCa, begin, end ): - name = i[0].path + '/Ca_conc' - if ( moose.exists( name ) ): - elecCa = moose.element( name ) - #print i[2], i[3], ' ', elecCa - #print i[1] - moose.connect( elecCa, 'concOut', i[1], 'input', 'Single' ) - for j in range( i[2], i[3] ): - moose.connect( i[1], 'output', chemCa[j], 'setConc', 'Single' ) - adaptCa.inputOffset = 0.0 # - adaptCa.outputOffset = 0.00008 # 80 nM offset in chem. - adaptCa.scale = 20e-6 # 10 arb units to 2 uM. + # Put in spine solvers. Note that these get info from the neuroCompt + spineCompt = moose.element( '/model/chem/spine' ) + sdc = spineCompt.mesh.num + print(('sdc = ', sdc)) + assert( sdc == 13 ) + smksolve = moose.Ksolve( '/model/chem/spine/ksolve' ) + smdsolve = moose.Dsolve( '/model/chem/spine/dsolve' ) + smstoich = moose.Stoich( '/model/chem/spine/stoich' ) + smstoich.compartment = spineCompt + smstoich.ksolve = smksolve + smstoich.dsolve = smdsolve + smstoich.path = "/model/chem/spine/##" + print(('spine num Pools = ', smstoich.numAllPools)) + assert( smstoich.numAllPools == 3 ) + assert( smdsolve.numPools == 3 ) + assert( smdsolve.numAllVoxels == sdc ) + + # Put in PSD solvers. Note that these get info from the neuroCompt + psdCompt = moose.element( '/model/chem/psd' ) + pdc = psdCompt.mesh.num + assert( pdc == 13 ) + pmksolve = moose.Ksolve( '/model/chem/psd/ksolve' ) + pmdsolve = moose.Dsolve( '/model/chem/psd/dsolve' ) + pmstoich = moose.Stoich( '/model/chem/psd/stoich' ) + pmstoich.compartment = psdCompt + pmstoich.ksolve = pmksolve + pmstoich.dsolve = pmdsolve + pmstoich.path = "/model/chem/psd/##" + assert( pmstoich.numAllPools == 3 ) + assert( pmdsolve.numPools == 3 ) + assert( pmdsolve.numAllVoxels == pdc ) + foo = moose.element( '/model/chem/psd/Ca' ) + print(('PSD: numfoo = ', foo.numData)) + print(('PSD: numAllVoxels = ', pmksolve.numAllVoxels)) + + # Put in junctions between the diffusion solvers + nmdsolve.buildNeuroMeshJunctions( smdsolve, pmdsolve ) + + ################################################################## + # set up adaptors + aCa = moose.Adaptor( '/model/chem/spine/adaptCa', sdc ) + adaptCa = moose.vec( '/model/chem/spine/adaptCa' ) + chemCa = moose.vec( '/model/chem/spine/Ca' ) + assert( len( adaptCa ) == sdc ) + assert( len( chemCa ) == sdc ) + for i in range( sdc ): + elecCa = moose.element( '/model/elec/spine_head_14_' + str(i+1) + '/NMDA_Ca_conc' ) + moose.connect( elecCa, 'concOut', adaptCa[i], 'input', 'Single' ) + moose.connect( adaptCa, 'output', chemCa, 'setConc', 'OneToOne' ) + adaptCa.inputOffset = 0.0 # + adaptCa.outputOffset = 0.00008 # 80 nM offset in chem. + adaptCa.scale = 1e-4 # 520 to 0.0052 mM + + moose.le( '/model/chem/dend/DEND' ) + compts = neuroCompt.elecComptList + begin = neuroCompt.startVoxelInCompt + end = neuroCompt.endVoxelInCompt + aCa = moose.Adaptor( '/model/chem/dend/DEND/adaptCa', len( compts)) + adaptCa = moose.vec( '/model/chem/dend/DEND/adaptCa' ) + chemCa = moose.vec( '/model/chem/dend/DEND/Ca' ) + assert( len( chemCa ) == ndc ) + for i in zip( compts, adaptCa, begin, end ): + name = i[0].path + '/Ca_conc' + if ( moose.exists( name ) ): + elecCa = moose.element( name ) + #print i[2], i[3], ' ', elecCa + #print i[1] + moose.connect( elecCa, 'concOut', i[1], 'input', 'Single' ) + for j in range( i[2], i[3] ): + moose.connect( i[1], 'output', chemCa[j], 'setConc', 'Single' ) + adaptCa.inputOffset = 0.0 # + adaptCa.outputOffset = 0.00008 # 80 nM offset in chem. + adaptCa.scale = 20e-6 # 10 arb units to 2 uM. def addPlot( objpath, field, plot ): - #assert moose.exists( objpath ) - if moose.exists( objpath ): - tab = moose.Table( '/graphs/' + plot ) - obj = moose.element( objpath ) - if obj.className == 'Neutral': - print "addPlot failed: object is a Neutral: ", objpath - return moose.element( '/' ) - else: - #print "object was found: ", objpath, obj.className - moose.connect( tab, 'requestOut', obj, field ) - return tab - else: - print "addPlot failed: object not found: ", objpath - return moose.element( '/' ) + #assert moose.exists( objpath ) + if moose.exists( objpath ): + tab = moose.Table( '/graphs/' + plot ) + obj = moose.element( objpath ) + if obj.className == 'Neutral': + print(("addPlot failed: object is a Neutral: ", objpath)) + return moose.element( '/' ) + else: + #print "object was found: ", objpath, obj.className + moose.connect( tab, 'requestOut', obj, field ) + return tab + else: + print(("addPlot failed: object not found: ", objpath)) + return moose.element( '/' ) def makeCaPlots(): graphs = moose.Neutral( '/graphs' ) @@ -230,68 +215,68 @@ def makeElecPlots(): addPlot( '/model/elec/spine_head_14_4', 'getVm', 'elec/spineVm' ) def makeChemPlots(): - graphs = moose.Neutral( '/graphs' ) - chem = moose.Neutral( '/graphs/chem' ) - addPlot( '/model/chem/psd/Ca_CaM', 'getConc', 'chem/psdCaCam' ) - addPlot( '/model/chem/psd/Ca', 'getConc', 'chem/psdCa' ) - addPlot( '/model/chem/spine/Ca_CaM', 'getConc', 'chem/spineCaCam' ) - addPlot( '/model/chem/spine/Ca[3]', 'getConc', 'chem/spine4Ca' ) - addPlot( '/model/chem/spine/Ca[11]', 'getConc', 'chem/spine12Ca' ) - addPlot( '/model/chem/dend/DEND/Ca', 'getConc', 'chem/dendCa' ) - addPlot( '/model/chem/dend/DEND/Ca[20]', 'getConc', 'chem/dendCa20' ) + graphs = moose.Neutral( '/graphs' ) + chem = moose.Neutral( '/graphs/chem' ) + addPlot( '/model/chem/psd/Ca_CaM', 'getConc', 'chem/psdCaCam' ) + addPlot( '/model/chem/psd/Ca', 'getConc', 'chem/psdCa' ) + addPlot( '/model/chem/spine/Ca_CaM', 'getConc', 'chem/spineCaCam' ) + addPlot( '/model/chem/spine/Ca[3]', 'getConc', 'chem/spine4Ca' ) + addPlot( '/model/chem/spine/Ca[11]', 'getConc', 'chem/spine12Ca' ) + addPlot( '/model/chem/dend/DEND/Ca', 'getConc', 'chem/dendCa' ) + addPlot( '/model/chem/dend/DEND/Ca[20]', 'getConc', 'chem/dendCa20' ) def makeGraphics(): - plt.ion() - fig = plt.figure( figsize=(10,16) ) - chem = fig.add_subplot( 411 ) - chem.set_ylim( 0, 0.006 ) - plt.ylabel( 'Conc (mM)' ) - plt.xlabel( 'time (seconds)' ) - plt.legend() - - elec = fig.add_subplot( 412 ) - plt.ylabel( 'Vm (V)' ) - plt.xlabel( 'time (seconds)' ) - plt.legend() - - ca = fig.add_subplot( 413 ) - plt.ylabel( '[Ca] (mM)' ) - plt.xlabel( 'time (seconds)' ) - plt.legend() - - lenplot = fig.add_subplot( 414 ) - plt.ylabel( 'Ca (mM )' ) - plt.xlabel( 'Voxel#)' ) - plt.legend() - spineCa = moose.vec( '/model/chem/spine/Ca' ) - dendCa = moose.vec( '/model/chem/dend/DEND/Ca' ) - line1, = lenplot.plot( range( len( spineCa ) ), spineCa.conc, label='spine' ) - line2, = lenplot.plot( range( len( dendCa ) ), dendCa.conc, label='dend' ) - - Ca = [ x.Ca * 0.0001 for x in moose.wildcardFind( '/model/elec/##[ISA=CaConcBase]') ] - line3, = lenplot.plot( range( len( Ca ) ), Ca, label='elec' ) - - spineCaM = moose.vec( '/model/chem/spine/Ca_CaM' ) - line4, = lenplot.plot( range( len( spineCaM ) ), spineCaM.conc, label='spineCaM' ) - psdCaM = moose.vec( '/model/chem/psd/Ca_CaM' ) - line5, = lenplot.plot( range( len( psdCaM ) ), psdCaM.conc, label='psdCaM' ) - lenplot.set_ylim( 0, 0.01 ) - fig.canvas.draw() - return ( chem, elec, ca, lenplot, fig, line1, line2, line3, line4, line5 ) + plt.ion() + fig = plt.figure( figsize=(10,16) ) + chem = fig.add_subplot( 411 ) + chem.set_ylim( 0, 0.006 ) + plt.ylabel( 'Conc (mM)' ) + plt.xlabel( 'time (seconds)' ) + plt.legend() + + elec = fig.add_subplot( 412 ) + plt.ylabel( 'Vm (V)' ) + plt.xlabel( 'time (seconds)' ) + plt.legend() + + ca = fig.add_subplot( 413 ) + plt.ylabel( '[Ca] (mM)' ) + plt.xlabel( 'time (seconds)' ) + plt.legend() + + lenplot = fig.add_subplot( 414 ) + plt.ylabel( 'Ca (mM )' ) + plt.xlabel( 'Voxel#)' ) + plt.legend() + spineCa = moose.vec( '/model/chem/spine/Ca' ) + dendCa = moose.vec( '/model/chem/dend/DEND/Ca' ) + line1, = lenplot.plot( list(range( len( spineCa ))), spineCa.conc, label='spine' ) + line2, = lenplot.plot( list(range( len( dendCa ))), dendCa.conc, label='dend' ) + + Ca = [ x.Ca * 0.0001 for x in moose.wildcardFind( '/model/elec/##[ISA=CaConcBase]') ] + line3, = lenplot.plot( list(range( len( Ca ))), Ca, label='elec' ) + + spineCaM = moose.vec( '/model/chem/spine/Ca_CaM' ) + line4, = lenplot.plot( list(range( len( spineCaM ))), spineCaM.conc, label='spineCaM' ) + psdCaM = moose.vec( '/model/chem/psd/Ca_CaM' ) + line5, = lenplot.plot( list(range( len( psdCaM ))), psdCaM.conc, label='psdCaM' ) + lenplot.set_ylim( 0, 0.01 ) + fig.canvas.draw() + return ( chem, elec, ca, lenplot, fig, line1, line2, line3, line4, line5 ) def updateGraphics( plotlist ): - spineCa = moose.vec( '/model/chem/spine/Ca' ) - dendCa = moose.vec( '/model/chem/dend/DEND/Ca' ) - plotlist[5].set_ydata( spineCa.conc ) - plotlist[6].set_ydata( dendCa.conc ) - - ca = [ x.Ca * 0.0001 for x in moose.wildcardFind( '/model/elec/##[ISA=CaConcBase]') ] - plotlist[7].set_ydata( ca ) - spineCaM = moose.vec( '/model/chem/spine/Ca_CaM' ) - plotlist[8].set_ydata( spineCaM.conc ) - psdCaM = moose.vec( '/model/chem/psd/Ca_CaM' ) - plotlist[9].set_ydata( psdCaM.conc ) - plotlist[4].canvas.draw() + spineCa = moose.vec( '/model/chem/spine/Ca' ) + dendCa = moose.vec( '/model/chem/dend/DEND/Ca' ) + plotlist[5].set_ydata( spineCa.conc ) + plotlist[6].set_ydata( dendCa.conc ) + + ca = [ x.Ca * 0.0001 for x in moose.wildcardFind( '/model/elec/##[ISA=CaConcBase]') ] + plotlist[7].set_ydata( ca ) + spineCaM = moose.vec( '/model/chem/spine/Ca_CaM' ) + plotlist[8].set_ydata( spineCaM.conc ) + psdCaM = moose.vec( '/model/chem/psd/Ca_CaM' ) + plotlist[9].set_ydata( psdCaM.conc ) + plotlist[4].canvas.draw() def finalizeGraphics( plotlist, cPlotDt, ePlotDt ): for x in moose.wildcardFind( '/graphs/chem/#[ISA=Table]' ): @@ -306,59 +291,49 @@ def finalizeGraphics( plotlist, cPlotDt, ePlotDt ): pos = numpy.arange( 0, x.vector.size, 1 ) * ePlotDt line1, = plotlist[2].plot( pos, x.vector, label=x.name ) plotlist[4].canvas.draw() - raw_input() + eval(input()) def testNeuroMeshMultiscale(): - runtime = 0.5 - #elecDt = 0.2e-6 - elecDt = 10e-6 - chemDt = 0.0025 - ePlotDt = 0.5e-3 - cPlotDt = 0.0025 - plotName = 'nm.plot' - - makeNeuroMeshModel() - print "after model is completely done" - for i in moose.wildcardFind( '/model/chem/#/#/#/transloc#' ): - print i[0].name, i[0].Kf, i[0].Kb, i[0].kf, i[0].kb - - makeChemPlots() - makeElecPlots() - makeCaPlots() - for i in range (10): - moose.setClock( i, elecDt ) - for i in range ( 10, 20 ): - moose.setClock( i, chemDt ) - moose.setClock( 8, ePlotDt ) - moose.setClock( 18, cPlotDt ) - moose.useClock( 8, '/graphs/elec/#,/graphs/ca/#', 'process' ) - moose.useClock( 18, '/graphs/chem/#', 'process' ) - hsolve = moose.HSolve( '/model/elec/hsolve' ) - hsolve.dt = elecDt - hsolve.target = '/model/elec/compt' - plotlist = makeGraphics() - moose.reinit() - moose.element( '/model/elec/soma' ).inject = 2e-10 - moose.element( '/model/chem/psd/Ca' ).concInit = 0.001 - moose.element( '/model/chem/spine/Ca' ).concInit = 0.002 - moose.element( '/model/chem/dend/DEND/Ca' ).concInit = 0.003 - moose.reinit() - - numDivs = 200 - partialRuntime = runtime / numDivs - for i in range( numDivs ): - moose.start( partialRuntime ) - updateGraphics( plotlist ) -# moose.element( '/model/elec/soma' ).inject = 0 -# moose.start( 0.25 ) - finalizeGraphics( plotlist, cPlotDt, ePlotDt ) + runtime = 0.5 + #elecDt = 0.2e-6 + elecDt = 10e-6 + chemDt = 0.0025 + ePlotDt = 0.5e-3 + cPlotDt = 0.0025 + plotName = 'nm.plot' + + makeNeuroMeshModel() + print("after model is completely done") + for i in moose.wildcardFind( '/model/chem/#/#/#/transloc#' ): + print((i[0].name, i[0].Kf, i[0].Kb, i[0].kf, i[0].kb)) + + makeChemPlots() + makeElecPlots() + makeCaPlots() + hsolve = moose.HSolve( '/model/elec/hsolve' ) + hsolve.dt = elecDt + hsolve.target = '/model/elec/compt' + plotlist = makeGraphics() + moose.reinit() + moose.element( '/model/elec/soma' ).inject = 2e-10 + moose.element( '/model/chem/psd/Ca' ).concInit = 0.001 + moose.element( '/model/chem/spine/Ca' ).concInit = 0.002 + moose.element( '/model/chem/dend/DEND/Ca' ).concInit = 0.003 + moose.reinit() + + numDivs = 200 + partialRuntime = runtime / numDivs + for i in range( numDivs ): + moose.start( partialRuntime ) + updateGraphics( plotlist ) + finalizeGraphics( plotlist, cPlotDt, ePlotDt ) def main(): - testNeuroMeshMultiscale() + testNeuroMeshMultiscale() if __name__ == '__main__': - main() + main() # # minimal.py ends here. diff --git a/moose-examples/snippets/MULTI/multi1_ee.py b/moose-examples/snippets/MULTI/multi1_ee.py index 3f3dc43dfc7fb95b45979b52b6fc6427d100af82..e37a2e17ccac75a5182c42325c3bc7cc5c7a15b2 100644 --- a/moose-examples/snippets/MULTI/multi1_ee.py +++ b/moose-examples/snippets/MULTI/multi1_ee.py @@ -29,9 +29,7 @@ # Code: import sys -sys.path.append('../../python') import os -os.environ['NUMPTHREADS'] = '1' import math import numpy import matplotlib.pyplot as plt @@ -41,179 +39,161 @@ import proto18 EREST_ACT = -70e-3 def loadElec(): - library = moose.Neutral( '/library' ) - moose.setCwe( '/library' ) - proto18.make_Ca() - proto18.make_Ca_conc() - proto18.make_K_AHP() - proto18.make_K_C() - proto18.make_Na() - proto18.make_K_DR() - proto18.make_K_A() - proto18.make_glu() - proto18.make_NMDA() - proto18.make_Ca_NMDA() - proto18.make_NMDA_Ca_conc() - proto18.make_axon() - moose.setCwe( '/library' ) - model = moose.Neutral( '/model' ) - cellId = moose.loadModel( 'ca1_asym.p', '/model/elec', "Neutral" ) - return cellId + library = moose.Neutral( '/library' ) + moose.setCwe( '/library' ) + proto18.make_Ca() + proto18.make_Ca_conc() + proto18.make_K_AHP() + proto18.make_K_C() + proto18.make_Na() + proto18.make_K_DR() + proto18.make_K_A() + proto18.make_glu() + proto18.make_NMDA() + proto18.make_Ca_NMDA() + proto18.make_NMDA_Ca_conc() + proto18.make_axon() + moose.setCwe( '/library' ) + model = moose.Neutral( '/model' ) + cellId = moose.loadModel( 'ca1_asym.p', '/model/elec', "Neutral" ) + return cellId def loadChem( diffLength ): - chem = moose.Neutral( '/model/chem' ) - neuroCompt = moose.NeuroMesh( '/model/chem/kinetics' ) - neuroCompt.separateSpines = 1 - neuroCompt.geometryPolicy = 'cylinder' - spineCompt = moose.SpineMesh( '/model/chem/compartment_1' ) - moose.connect( neuroCompt, 'spineListOut', spineCompt, 'spineList', 'OneToOne' ) - psdCompt = moose.PsdMesh( '/model/chem/compartment_2' ) - #print 'Meshvolume[neuro, spine, psd] = ', neuroCompt.mesh[0].volume, spineCompt.mesh[0].volume, psdCompt.mesh[0].volume - moose.connect( neuroCompt, 'psdListOut', psdCompt, 'psdList', 'OneToOne' ) - modelId = moose.loadModel( 'minimal.g', '/model/chem', 'ee' ) - #modelId = moose.loadModel( 'psd_merged31d.g', '/model/chem', 'ee' ) - neuroCompt.name = 'dend' - spineCompt.name = 'spine' - psdCompt.name = 'psd' + chem = moose.Neutral( '/model/chem' ) + neuroCompt = moose.NeuroMesh( '/model/chem/kinetics' ) + neuroCompt.separateSpines = 1 + neuroCompt.geometryPolicy = 'cylinder' + spineCompt = moose.SpineMesh( '/model/chem/compartment_1' ) + moose.connect( neuroCompt, 'spineListOut', spineCompt, 'spineList', 'OneToOne' ) + psdCompt = moose.PsdMesh( '/model/chem/compartment_2' ) + moose.connect( neuroCompt, 'psdListOut', psdCompt, 'psdList', 'OneToOne' ) + modelId = moose.loadModel( 'minimal.g', '/model/chem', 'ee' ) + neuroCompt.name = 'dend' + spineCompt.name = 'spine' + psdCompt.name = 'psd' def makeNeuroMeshModel(): - diffLength = 10e-6 # Aim for 2 soma compartments. - elec = loadElec() - loadChem( diffLength ) - neuroCompt = moose.element( '/model/chem/dend' ) - neuroCompt.diffLength = diffLength - neuroCompt.cellPortion( elec, '/model/elec/#' ) - for x in moose.wildcardFind( '/model/chem/##[ISA=PoolBase]' ): - if (x.diffConst > 0): - x.diffConst = 1e-11 - for x in moose.wildcardFind( '/model/chem/##/Ca' ): - x.diffConst = 1e-10 - - # Put in dend solvers - ns = neuroCompt.numSegments - ndc = neuroCompt.numDiffCompts - print 'ns = ', ns, ', ndc = ', ndc - assert( neuroCompt.numDiffCompts == neuroCompt.mesh.num ) - assert( ns == 36 ) # - assert( ndc == 278 ) # - nmksolve = moose.Ksolve( '/model/chem/dend/ksolve' ) - nmdsolve = moose.Dsolve( '/model/chem/dend/dsolve' ) - nmstoich = moose.Stoich( '/model/chem/dend/stoich' ) - nmstoich.compartment = neuroCompt - nmstoich.ksolve = nmksolve - nmstoich.dsolve = nmdsolve - nmstoich.path = "/model/chem/dend/##" - print 'done setting path, numPools = ', nmdsolve.numPools - assert( nmdsolve.numPools == 1 ) - assert( nmdsolve.numAllVoxels == ndc ) - assert( nmstoich.numAllPools == 1 ) - # oddly, numLocalFields does not work. - ca = moose.element( '/model/chem/dend/DEND/Ca' ) - assert( ca.numData == ndc ) - - # Put in spine solvers. Note that these get info from the neuroCompt - spineCompt = moose.element( '/model/chem/spine' ) - sdc = spineCompt.mesh.num - print 'sdc = ', sdc - assert( sdc == 13 ) - smksolve = moose.Ksolve( '/model/chem/spine/ksolve' ) - smdsolve = moose.Dsolve( '/model/chem/spine/dsolve' ) - smstoich = moose.Stoich( '/model/chem/spine/stoich' ) - smstoich.compartment = spineCompt - smstoich.ksolve = smksolve - smstoich.dsolve = smdsolve - smstoich.path = "/model/chem/spine/##" - print 'spine num Pools = ', smstoich.numAllPools - assert( smstoich.numAllPools == 3 ) - assert( smdsolve.numPools == 3 ) - assert( smdsolve.numAllVoxels == sdc ) + diffLength = 10e-6 # Aim for 2 soma compartments. + elec = loadElec() + loadChem( diffLength ) + neuroCompt = moose.element( '/model/chem/dend' ) + neuroCompt.diffLength = diffLength + neuroCompt.cellPortion( elec, '/model/elec/#' ) + for x in moose.wildcardFind( '/model/chem/##[ISA=PoolBase]' ): + if (x.diffConst > 0): + x.diffConst = 1e-11 + for x in moose.wildcardFind( '/model/chem/##/Ca' ): + x.diffConst = 1e-10 + + # Put in dend solvers + ns = neuroCompt.numSegments + ndc = neuroCompt.numDiffCompts + print(('ns = ', ns, ', ndc = ', ndc)) + assert( neuroCompt.numDiffCompts == neuroCompt.mesh.num ) + assert( ns == 36 ) # + assert( ndc == 278 ) # + nmksolve = moose.Ksolve( '/model/chem/dend/ksolve' ) + nmdsolve = moose.Dsolve( '/model/chem/dend/dsolve' ) + nmstoich = moose.Stoich( '/model/chem/dend/stoich' ) + nmstoich.compartment = neuroCompt + nmstoich.ksolve = nmksolve + nmstoich.dsolve = nmdsolve + nmstoich.path = "/model/chem/dend/##" + print(('done setting path, numPools = ', nmdsolve.numPools)) + assert( nmdsolve.numPools == 1 ) + assert( nmdsolve.numAllVoxels == ndc ) + assert( nmstoich.numAllPools == 1 ) + # oddly, numLocalFields does not work. + ca = moose.element( '/model/chem/dend/DEND/Ca' ) + assert( ca.numData == ndc ) - # Put in PSD solvers. Note that these get info from the neuroCompt - psdCompt = moose.element( '/model/chem/psd' ) - pdc = psdCompt.mesh.num - assert( pdc == 13 ) - pmksolve = moose.Ksolve( '/model/chem/psd/ksolve' ) - pmdsolve = moose.Dsolve( '/model/chem/psd/dsolve' ) - pmstoich = moose.Stoich( '/model/chem/psd/stoich' ) - pmstoich.compartment = psdCompt - pmstoich.ksolve = pmksolve - pmstoich.dsolve = pmdsolve - pmstoich.path = "/model/chem/psd/##" - assert( pmstoich.numAllPools == 3 ) - assert( pmdsolve.numPools == 3 ) - assert( pmdsolve.numAllVoxels == pdc ) - foo = moose.element( '/model/chem/psd/Ca' ) - print 'PSD: numfoo = ', foo.numData - print 'PSD: numAllVoxels = ', pmksolve.numAllVoxels - - # Put in junctions between the diffusion solvers - nmdsolve.buildNeuroMeshJunctions( smdsolve, pmdsolve ) - - """ - CaNpsd = moose.vec( '/model/chem/psdMesh/PSD/PP1_PSD/CaN' ) - print 'numCaN in PSD = ', CaNpsd.nInit, ', vol = ', CaNpsd.volume - CaNspine = moose.vec( '/model/chem/spine/SPINE/CaN_BULK/CaN' ) - print 'numCaN in spine = ', CaNspine.nInit, ', vol = ', CaNspine.volume - """ - - ################################################################## - # set up adaptors - aCa = moose.Adaptor( '/model/chem/spine/adaptCa', sdc ) - adaptCa = moose.vec( '/model/chem/spine/adaptCa' ) - chemCa = moose.vec( '/model/chem/spine/Ca' ) - #print 'aCa = ', aCa, ' foo = ', foo, "len( ChemCa ) = ", len( chemCa ), ", numData = ", chemCa.numData, "len( adaptCa ) = ", len( adaptCa ) - assert( len( adaptCa ) == sdc ) - assert( len( chemCa ) == sdc ) - for i in range( sdc ): - elecCa = moose.element( '/model/elec/spine_head_14_' + str(i+1) + '/NMDA_Ca_conc' ) - #print elecCa - moose.connect( elecCa, 'concOut', adaptCa[i], 'input', 'Single' ) - moose.connect( adaptCa, 'output', chemCa, 'setConc', 'OneToOne' ) - adaptCa.inputOffset = 0.0 # - adaptCa.outputOffset = 0.00008 # 80 nM offset in chem. - adaptCa.scale = 1e-4 # 520 to 0.0052 mM - #print adaptCa.outputOffset - - - moose.le( '/model/chem/dend/DEND' ) - - - compts = neuroCompt.elecComptList - begin = neuroCompt.startVoxelInCompt - end = neuroCompt.endVoxelInCompt - aCa = moose.Adaptor( '/model/chem/dend/DEND/adaptCa', len( compts)) - adaptCa = moose.vec( '/model/chem/dend/DEND/adaptCa' ) - chemCa = moose.vec( '/model/chem/dend/DEND/Ca' ) - #print 'aCa = ', aCa, ' foo = ', foo, "len( ChemCa ) = ", len( chemCa ), ", numData = ", chemCa.numData, "len( adaptCa ) = ", len( adaptCa ) - assert( len( chemCa ) == ndc ) - for i in zip( compts, adaptCa, begin, end ): - name = i[0].path + '/Ca_conc' - if ( moose.exists( name ) ): - elecCa = moose.element( name ) - #print i[2], i[3], ' ', elecCa - #print i[1] - moose.connect( elecCa, 'concOut', i[1], 'input', 'Single' ) - for j in range( i[2], i[3] ): - moose.connect( i[1], 'output', chemCa[j], 'setConc', 'Single' ) - adaptCa.inputOffset = 0.0 # - adaptCa.outputOffset = 0.00008 # 80 nM offset in chem. - adaptCa.scale = 20e-6 # 10 arb units to 2 uM. + # Put in spine solvers. Note that these get info from the neuroCompt + spineCompt = moose.element( '/model/chem/spine' ) + sdc = spineCompt.mesh.num + print(('sdc = ', sdc)) + assert( sdc == 13 ) + smksolve = moose.Ksolve( '/model/chem/spine/ksolve' ) + smdsolve = moose.Dsolve( '/model/chem/spine/dsolve' ) + smstoich = moose.Stoich( '/model/chem/spine/stoich' ) + smstoich.compartment = spineCompt + smstoich.ksolve = smksolve + smstoich.dsolve = smdsolve + smstoich.path = "/model/chem/spine/##" + print(('spine num Pools = ', smstoich.numAllPools)) + assert( smstoich.numAllPools == 3 ) + assert( smdsolve.numPools == 3 ) + assert( smdsolve.numAllVoxels == sdc ) + + # Put in PSD solvers. Note that these get info from the neuroCompt + psdCompt = moose.element( '/model/chem/psd' ) + pdc = psdCompt.mesh.num + assert( pdc == 13 ) + pmksolve = moose.Ksolve( '/model/chem/psd/ksolve' ) + pmdsolve = moose.Dsolve( '/model/chem/psd/dsolve' ) + pmstoich = moose.Stoich( '/model/chem/psd/stoich' ) + pmstoich.compartment = psdCompt + pmstoich.ksolve = pmksolve + pmstoich.dsolve = pmdsolve + pmstoich.path = "/model/chem/psd/##" + assert( pmstoich.numAllPools == 3 ) + assert( pmdsolve.numPools == 3 ) + assert( pmdsolve.numAllVoxels == pdc ) + foo = moose.element( '/model/chem/psd/Ca' ) + print(('PSD: numfoo = ', foo.numData)) + print(('PSD: numAllVoxels = ', pmksolve.numAllVoxels)) + + # Put in junctions between the diffusion solvers + nmdsolve.buildNeuroMeshJunctions( smdsolve, pmdsolve ) + + ################################################################## + # set up adaptors + aCa = moose.Adaptor( '/model/chem/spine/adaptCa', sdc ) + adaptCa = moose.vec( '/model/chem/spine/adaptCa' ) + chemCa = moose.vec( '/model/chem/spine/Ca' ) + assert( len( adaptCa ) == sdc ) + assert( len( chemCa ) == sdc ) + for i in range( sdc ): + elecCa = moose.element( '/model/elec/spine_head_14_' + str(i+1) + '/NMDA_Ca_conc' ) + #print elecCa + moose.connect( elecCa, 'concOut', adaptCa[i], 'input', 'Single' ) + moose.connect( adaptCa, 'output', chemCa, 'setConc', 'OneToOne' ) + adaptCa.inputOffset = 0.0 # + adaptCa.outputOffset = 0.00008 # 80 nM offset in chem. + adaptCa.scale = 1e-4 # 520 to 0.0052 mM + moose.le( '/model/chem/dend/DEND' ) + compts = neuroCompt.elecComptList + begin = neuroCompt.startVoxelInCompt + end = neuroCompt.endVoxelInCompt + aCa = moose.Adaptor( '/model/chem/dend/DEND/adaptCa', len( compts)) + adaptCa = moose.vec( '/model/chem/dend/DEND/adaptCa' ) + chemCa = moose.vec( '/model/chem/dend/DEND/Ca' ) + assert( len( chemCa ) == ndc ) + for i in zip( compts, adaptCa, begin, end ): + name = i[0].path + '/Ca_conc' + if ( moose.exists( name ) ): + elecCa = moose.element( name ) + moose.connect( elecCa, 'concOut', i[1], 'input', 'Single' ) + for j in range( i[2], i[3] ): + moose.connect( i[1], 'output', chemCa[j], 'setConc', 'Single' ) + adaptCa.inputOffset = 0.0 # + adaptCa.outputOffset = 0.00008 # 80 nM offset in chem. + adaptCa.scale = 20e-6 # 10 arb units to 2 uM. def addPlot( objpath, field, plot ): - #assert moose.exists( objpath ) - if moose.exists( objpath ): - tab = moose.Table( '/graphs/' + plot ) - obj = moose.element( objpath ) - if obj.className == 'Neutral': - print "addPlot failed: object is a Neutral: ", objpath - return moose.element( '/' ) - else: - #print "object was found: ", objpath, obj.className - moose.connect( tab, 'requestOut', obj, field ) - return tab - else: - print "addPlot failed: object not found: ", objpath - return moose.element( '/' ) + #assert moose.exists( objpath ) + if moose.exists( objpath ): + tab = moose.Table( '/graphs/' + plot ) + obj = moose.element( objpath ) + if obj.className == 'Neutral': + print(("addPlot failed: object is a Neutral: ", objpath)) + return moose.element( '/' ) + else: + #print "object was found: ", objpath, obj.className + moose.connect( tab, 'requestOut', obj, field ) + return tab + else: + print(("addPlot failed: object not found: ", objpath)) + return moose.element( '/' ) def makeCaPlots(): graphs = moose.Neutral( '/graphs' ) @@ -230,137 +210,135 @@ def makeElecPlots(): addPlot( '/model/elec/spine_head_14_4', 'getVm', 'elec/spineVm' ) def makeChemPlots(): - graphs = moose.Neutral( '/graphs' ) - chem = moose.Neutral( '/graphs/chem' ) - addPlot( '/model/chem/psd/Ca_CaM', 'getConc', 'chem/psdCaCam' ) - addPlot( '/model/chem/psd/Ca', 'getConc', 'chem/psdCa' ) - addPlot( '/model/chem/spine/Ca_CaM', 'getConc', 'chem/spineCaCam' ) - addPlot( '/model/chem/spine/Ca[3]', 'getConc', 'chem/spine4Ca' ) - addPlot( '/model/chem/spine/Ca[11]', 'getConc', 'chem/spine12Ca' ) - addPlot( '/model/chem/dend/DEND/Ca', 'getConc', 'chem/dendCa' ) - addPlot( '/model/chem/dend/DEND/Ca[20]', 'getConc', 'chem/dendCa20' ) + graphs = moose.Neutral( '/graphs' ) + chem = moose.Neutral( '/graphs/chem' ) + addPlot( '/model/chem/psd/Ca_CaM', 'getConc', 'chem/psdCaCam' ) + addPlot( '/model/chem/psd/Ca', 'getConc', 'chem/psdCa' ) + addPlot( '/model/chem/spine/Ca_CaM', 'getConc', 'chem/spineCaCam' ) + addPlot( '/model/chem/spine/Ca[3]', 'getConc', 'chem/spine4Ca' ) + addPlot( '/model/chem/spine/Ca[11]', 'getConc', 'chem/spine12Ca' ) + addPlot( '/model/chem/dend/DEND/Ca', 'getConc', 'chem/dendCa' ) + addPlot( '/model/chem/dend/DEND/Ca[20]', 'getConc', 'chem/dendCa20' ) def makeGraphics( cPlotDt, ePlotDt ): - plt.ion() - fig = plt.figure( figsize=(10,16) ) - chem = fig.add_subplot( 411 ) - chem.set_ylim( 0, 0.006 ) - plt.ylabel( 'Conc (mM)' ) - plt.xlabel( 'time (seconds)' ) - for x in moose.wildcardFind( '/graphs/chem/#[ISA=Table]' ): - pos = numpy.arange( 0, x.vector.size, 1 ) * cPlotDt - line1, = chem.plot( pos, x.vector, label=x.name ) - plt.legend() - - elec = fig.add_subplot( 412 ) - plt.ylabel( 'Vm (V)' ) - plt.xlabel( 'time (seconds)' ) - for x in moose.wildcardFind( '/graphs/elec/#[ISA=Table]' ): - pos = numpy.arange( 0, x.vector.size, 1 ) * ePlotDt - line1, = elec.plot( pos, x.vector, label=x.name ) - plt.legend() - - ca = fig.add_subplot( 413 ) - plt.ylabel( '[Ca] (mM)' ) - plt.xlabel( 'time (seconds)' ) - for x in moose.wildcardFind( '/graphs/ca/#[ISA=Table]' ): - pos = numpy.arange( 0, x.vector.size, 1 ) * ePlotDt - line1, = ca.plot( pos, x.vector, label=x.name ) - plt.legend() - - lenplot = fig.add_subplot( 414 ) - plt.ylabel( 'Ca (mM )' ) - plt.xlabel( 'Voxel#)' ) - - spineCa = moose.vec( '/model/chem/spine/Ca' ) - dendCa = moose.vec( '/model/chem/dend/DEND/Ca' ) - line1, = lenplot.plot( range( len( spineCa ) ), spineCa.conc, label='spine' ) - line2, = lenplot.plot( range( len( dendCa ) ), dendCa.conc, label='dend' ) - - ca = [ x.Ca * 0.0001 for x in moose.wildcardFind( '/model/elec/##[ISA=CaConcBase]') ] - line3, = lenplot.plot( range( len( ca ) ), ca, label='elec' ) - - spineCaM = moose.vec( '/model/chem/spine/Ca_CaM' ) - line4, = lenplot.plot( range( len( spineCaM ) ), spineCaM.conc, label='spineCaM' ) - psdCaM = moose.vec( '/model/chem/psd/Ca_CaM' ) - line5, = lenplot.plot( range( len( psdCaM ) ), psdCaM.conc, label='psdCaM' ) - plt.legend() - - - fig.canvas.draw() - raw_input() + plt.ion() + fig = plt.figure( figsize=(10,16) ) + chem = fig.add_subplot( 411 ) + chem.set_ylim( 0, 0.006 ) + plt.ylabel( 'Conc (mM)' ) + plt.xlabel( 'time (seconds)' ) + for x in moose.wildcardFind( '/graphs/chem/#[ISA=Table]' ): + pos = numpy.arange( 0, x.vector.size, 1 ) * cPlotDt + line1, = chem.plot( pos, x.vector, label=x.name ) + plt.legend() + + elec = fig.add_subplot( 412 ) + plt.ylabel( 'Vm (V)' ) + plt.xlabel( 'time (seconds)' ) + for x in moose.wildcardFind( '/graphs/elec/#[ISA=Table]' ): + pos = numpy.arange( 0, x.vector.size, 1 ) * ePlotDt + line1, = elec.plot( pos, x.vector, label=x.name ) + plt.legend() + + ca = fig.add_subplot( 413 ) + plt.ylabel( '[Ca] (mM)' ) + plt.xlabel( 'time (seconds)' ) + for x in moose.wildcardFind( '/graphs/ca/#[ISA=Table]' ): + pos = numpy.arange( 0, x.vector.size, 1 ) * ePlotDt + line1, = ca.plot( pos, x.vector, label=x.name ) + plt.legend() + + lenplot = fig.add_subplot( 414 ) + plt.ylabel( 'Ca (mM )' ) + plt.xlabel( 'Voxel#)' ) + + spineCa = moose.vec( '/model/chem/spine/Ca' ) + dendCa = moose.vec( '/model/chem/dend/DEND/Ca' ) + line1, = lenplot.plot( list(range( len( spineCa ))), spineCa.conc, label='spine' ) + line2, = lenplot.plot( list(range( len( dendCa ))), dendCa.conc, label='dend' ) + + ca = [ x.Ca * 0.0001 for x in moose.wildcardFind( '/model/elec/##[ISA=CaConcBase]') ] + line3, = lenplot.plot( list(range( len( ca ))), ca, label='elec' ) + + spineCaM = moose.vec( '/model/chem/spine/Ca_CaM' ) + line4, = lenplot.plot( list(range( len( spineCaM ))), spineCaM.conc, label='spineCaM' ) + psdCaM = moose.vec( '/model/chem/psd/Ca_CaM' ) + line5, = lenplot.plot( list(range( len( psdCaM ))), psdCaM.conc, label='psdCaM' ) + plt.legend() + + + fig.canvas.draw() + eval(input()) - ''' - for x in moose.wildcardFind( '/graphs/##[ISA=Table]' ): - t = numpy.arange( 0, x.vector.size, 1 ) - pylab.plot( t, x.vector, label=x.name ) - pylab.legend() - pylab.show() - ''' + ''' + for x in moose.wildcardFind( '/graphs/##[ISA=Table]' ): + t = numpy.arange( 0, x.vector.size, 1 ) + pylab.plot( t, x.vector, label=x.name ) + pylab.legend() + pylab.show() + ''' - print 'All done' + print('All done') def testNeuroMeshMultiscale(): - runtime = 0.5 - elecDt = 0.2e-6 - chemDt = 0.005 - ePlotDt = 0.5e-3 - cPlotDt = 0.005 - plotName = 'nm.plot' - - makeNeuroMeshModel() - print "after model is completely done" - for i in moose.wildcardFind( '/model/chem/#/#/#/transloc#' ): - print i[0].name, i[0].Kf, i[0].Kb, i[0].kf, i[0].kb - - makeChemPlots() - makeElecPlots() - makeCaPlots() - moose.setClock( 0, elecDt ) - moose.setClock( 1, elecDt ) - moose.setClock( 2, elecDt ) - moose.setClock( 4, chemDt ) - moose.setClock( 5, chemDt ) - moose.setClock( 6, chemDt ) - moose.setClock( 7, cPlotDt ) - moose.setClock( 8, ePlotDt ) - moose.useClock( 0, '/model/elec/##[ISA=Compartment]', 'init' ) - moose.useClock( 1, '/model/elec/##[ISA=Compartment]', 'process' ) - moose.useClock( 1, '/model/elec/##[ISA=SpikeGen]', 'process' ) - moose.useClock( 2, '/model/elec/##[ISA=ChanBase],/model/##[ISA=SynBase],/model/##[ISA=CaConc]','process') - #moose.useClock( 2, '/model/##[ISA=SynBase],/model/##[ISA=CaConc]','process') - #moose.useClock( 5, '/model/chem/##[ISA=PoolBase],/model/##[ISA=ReacBase],/model/##[ISA=EnzBase]', 'process' ) - #moose.useClock( 4, '/model/chem/##[ISA=Adaptor]', 'process' ) - moose.useClock( 4, '/model/chem/#/dsolve', 'process' ) - moose.useClock( 5, '/model/chem/#/ksolve', 'process' ) - moose.useClock( 6, '/model/chem/spine/adaptCa', 'process' ) - moose.useClock( 6, '/model/chem/dend/DEND/adaptCa', 'process' ) - moose.useClock( 7, '/graphs/chem/#', 'process' ) - moose.useClock( 8, '/graphs/elec/#,/graphs/ca/#', 'process' ) - ''' - hsolve = moose.HSolve( '/model/elec/hsolve' ) - moose.useClock( 1, '/model/elec/hsolve', 'process' ) - hsolve.dt = elecDt - hsolve.target = '/model/elec/compt' - ''' - moose.reinit() - moose.element( '/model/elec/soma' ).inject = 2e-10 - moose.element( '/model/chem/psd/Ca' ).concInit = 0.001 - moose.element( '/model/chem/spine/Ca' ).concInit = 0.002 - moose.element( '/model/chem/dend/DEND/Ca' ).concInit = 0.003 - moose.reinit() - - moose.start( runtime ) -# moose.element( '/model/elec/soma' ).inject = 0 -# moose.start( 0.25 ) - makeGraphics( cPlotDt, ePlotDt ) + runtime = 0.5 + elecDt = 0.2e-6 + chemDt = 0.005 + ePlotDt = 0.5e-3 + cPlotDt = 0.005 + plotName = 'nm.plot' + + makeNeuroMeshModel() + print("after model is completely done") + for i in moose.wildcardFind( '/model/chem/#/#/#/transloc#' ): + print((i[0].name, i[0].Kf, i[0].Kb, i[0].kf, i[0].kb)) + + makeChemPlots() + makeElecPlots() + makeCaPlots() + moose.setClock( 0, elecDt ) + moose.setClock( 1, elecDt ) + moose.setClock( 2, elecDt ) + moose.setClock( 4, chemDt ) + moose.setClock( 5, chemDt ) + moose.setClock( 6, chemDt ) + moose.setClock( 7, cPlotDt ) + moose.setClock( 8, ePlotDt ) + moose.useClock( 0, '/model/elec/##[ISA=Compartment]', 'init' ) + moose.useClock( 1, '/model/elec/##[ISA=Compartment]', 'process' ) + moose.useClock( 1, '/model/elec/##[ISA=SpikeGen]', 'process' ) + moose.useClock( 2, '/model/elec/##[ISA=ChanBase],/model/##[ISA=SynBase],/model/##[ISA=CaConc]','process') + #moose.useClock( 2, '/model/##[ISA=SynBase],/model/##[ISA=CaConc]','process') + #moose.useClock( 5, '/model/chem/##[ISA=PoolBase],/model/##[ISA=ReacBase],/model/##[ISA=EnzBase]', 'process' ) + #moose.useClock( 4, '/model/chem/##[ISA=Adaptor]', 'process' ) + moose.useClock( 4, '/model/chem/#/dsolve', 'process' ) + moose.useClock( 5, '/model/chem/#/ksolve', 'process' ) + moose.useClock( 6, '/model/chem/spine/adaptCa', 'process' ) + moose.useClock( 6, '/model/chem/dend/DEND/adaptCa', 'process' ) + moose.useClock( 7, '/graphs/chem/#', 'process' ) + moose.useClock( 8, '/graphs/elec/#,/graphs/ca/#', 'process' ) + ''' + hsolve = moose.HSolve( '/model/elec/hsolve' ) + moose.useClock( 1, '/model/elec/hsolve', 'process' ) + hsolve.dt = elecDt + hsolve.target = '/model/elec/compt' + ''' + moose.reinit() + moose.element( '/model/elec/soma' ).inject = 2e-10 + moose.element( '/model/chem/psd/Ca' ).concInit = 0.001 + moose.element( '/model/chem/spine/Ca' ).concInit = 0.002 + moose.element( '/model/chem/dend/DEND/Ca' ).concInit = 0.003 + moose.reinit() + + moose.start( runtime ) + makeGraphics( cPlotDt, ePlotDt ) def main(): - testNeuroMeshMultiscale() + testNeuroMeshMultiscale() if __name__ == '__main__': - main() + main() # # minimal.py ends here. diff --git a/moose-examples/snippets/MULTI/multi2.py b/moose-examples/snippets/MULTI/multi2.py index 373e25a7ad949abacbde64c2f5a2afc801e272ae..cae9588080f90ab9fc069f13c0e09392319376bc 100644 --- a/moose-examples/snippets/MULTI/multi2.py +++ b/moose-examples/snippets/MULTI/multi2.py @@ -44,180 +44,165 @@ import proto18 EREST_ACT = -70e-3 def loadElec(): - library = moose.Neutral( '/library' ) - moose.setCwe( '/library' ) - proto18.make_Ca() - proto18.make_Ca_conc() - proto18.make_K_AHP() - proto18.make_K_C() - proto18.make_Na() - proto18.make_K_DR() - proto18.make_K_A() - proto18.make_glu() - proto18.make_NMDA() - proto18.make_Ca_NMDA() - proto18.make_NMDA_Ca_conc() - proto18.make_axon() - moose.setCwe( '/library' ) - model = moose.Neutral( '/model' ) - cellId = moose.loadModel( 'ca1_asym.p', '/model/elec', "Neutral" ) - return cellId + library = moose.Neutral( '/library' ) + moose.setCwe( '/library' ) + proto18.make_Ca() + proto18.make_Ca_conc() + proto18.make_K_AHP() + proto18.make_K_C() + proto18.make_Na() + proto18.make_K_DR() + proto18.make_K_A() + proto18.make_glu() + proto18.make_NMDA() + proto18.make_Ca_NMDA() + proto18.make_NMDA_Ca_conc() + proto18.make_axon() + moose.setCwe( '/library' ) + model = moose.Neutral( '/model' ) + cellId = moose.loadModel( 'ca1_asym.p', '/model/elec', "Neutral" ) + return cellId def loadChem( diffLength ): - chem = moose.Neutral( '/model/chem' ) - neuroCompt = moose.NeuroMesh( '/model/chem/kinetics' ) - neuroCompt.separateSpines = 1 - neuroCompt.geometryPolicy = 'cylinder' - spineCompt = moose.SpineMesh( '/model/chem/compartment_1' ) - moose.connect( neuroCompt, 'spineListOut', spineCompt, 'spineList', 'OneToOne' ) - psdCompt = moose.PsdMesh( '/model/chem/compartment_2' ) - #print 'Meshvolume[neuro, spine, psd] = ', neuroCompt.mesh[0].volume, spineCompt.mesh[0].volume, psdCompt.mesh[0].volume - moose.connect( neuroCompt, 'psdListOut', psdCompt, 'psdList', 'OneToOne' ) - modelId = moose.loadModel( 'separate_compts.g', '/model/chem', 'ee' ) - #modelId = moose.loadModel( 'psd_merged31d.g', '/model/chem', 'ee' ) - neuroCompt.name = 'dend' - spineCompt.name = 'spine' - psdCompt.name = 'psd' + chem = moose.Neutral( '/model/chem' ) + neuroCompt = moose.NeuroMesh( '/model/chem/kinetics' ) + neuroCompt.separateSpines = 1 + neuroCompt.geometryPolicy = 'cylinder' + spineCompt = moose.SpineMesh( '/model/chem/compartment_1' ) + moose.connect( neuroCompt, 'spineListOut', spineCompt, 'spineList', 'OneToOne' ) + psdCompt = moose.PsdMesh( '/model/chem/compartment_2' ) + #print 'Meshvolume[neuro, spine, psd] = ', neuroCompt.mesh[0].volume, spineCompt.mesh[0].volume, psdCompt.mesh[0].volume + moose.connect( neuroCompt, 'psdListOut', psdCompt, 'psdList', 'OneToOne' ) + modelId = moose.loadModel( 'separate_compts.g', '/model/chem', 'ee' ) + #modelId = moose.loadModel( 'psd_merged31d.g', '/model/chem', 'ee' ) + neuroCompt.name = 'dend' + spineCompt.name = 'spine' + psdCompt.name = 'psd' def makeNeuroMeshModel(): - diffLength = 10e-6 # Aim for 2 soma compartments. - elec = loadElec() - loadChem( diffLength ) - neuroCompt = moose.element( '/model/chem/dend' ) - neuroCompt.diffLength = diffLength - neuroCompt.cellPortion( elec, '/model/elec/#' ) - for x in moose.wildcardFind( '/model/chem/##[ISA=PoolBase]' ): - if (x.diffConst > 0): - x.diffConst = 1e-11 - for x in moose.wildcardFind( '/model/chem/##/Ca' ): - x.diffConst = 1e-10 - - # Put in dend solvers - ns = neuroCompt.numSegments - ndc = neuroCompt.numDiffCompts - print 'ns = ', ns, ', ndc = ', ndc - assert( neuroCompt.numDiffCompts == neuroCompt.mesh.num ) - assert( ns == 36 ) # - assert( ndc == 278 ) # - nmksolve = moose.Ksolve( '/model/chem/dend/ksolve' ) - nmdsolve = moose.Dsolve( '/model/chem/dend/dsolve' ) - nmstoich = moose.Stoich( '/model/chem/dend/stoich' ) - nmstoich.compartment = neuroCompt - nmstoich.ksolve = nmksolve - nmstoich.dsolve = nmdsolve - nmstoich.path = "/model/chem/dend/##" - print 'done setting path, numPools = ', nmdsolve.numPools - assert( nmdsolve.numPools == 1 ) - assert( nmdsolve.numAllVoxels == ndc ) - assert( nmstoich.numAllPools == 1 ) - # oddly, numLocalFields does not work. - ca = moose.element( '/model/chem/dend/DEND/Ca' ) - assert( ca.numData == ndc ) - - # Put in spine solvers. Note that these get info from the neuroCompt - spineCompt = moose.element( '/model/chem/spine' ) - sdc = spineCompt.mesh.num - print 'sdc = ', sdc - assert( sdc == 13 ) - smksolve = moose.Ksolve( '/model/chem/spine/ksolve' ) - smdsolve = moose.Dsolve( '/model/chem/spine/dsolve' ) - smstoich = moose.Stoich( '/model/chem/spine/stoich' ) - smstoich.compartment = spineCompt - smstoich.ksolve = smksolve - smstoich.dsolve = smdsolve - smstoich.path = "/model/chem/spine/##" - print 'spine num Pools = ', smstoich.numAllPools, smdsolve.numPools - assert( smstoich.numAllPools == 35 ) - assert( smdsolve.numPools == 30 ) - assert( smdsolve.numAllVoxels == sdc ) + diffLength = 10e-6 # Aim for 2 soma compartments. + elec = loadElec() + loadChem( diffLength ) + neuroCompt = moose.element( '/model/chem/dend' ) + neuroCompt.diffLength = diffLength + neuroCompt.cellPortion( elec, '/model/elec/#' ) + for x in moose.wildcardFind( '/model/chem/##[ISA=PoolBase]' ): + if (x.diffConst > 0): + x.diffConst = 1e-11 + for x in moose.wildcardFind( '/model/chem/##/Ca' ): + x.diffConst = 1e-10 + + # Put in dend solvers + ns = neuroCompt.numSegments + ndc = neuroCompt.numDiffCompts + print(('ns = ', ns, ', ndc = ', ndc)) + assert( neuroCompt.numDiffCompts == neuroCompt.mesh.num ) + assert( ns == 36 ) # + assert( ndc == 278 ) # + nmksolve = moose.Ksolve( '/model/chem/dend/ksolve' ) + nmdsolve = moose.Dsolve( '/model/chem/dend/dsolve' ) + nmstoich = moose.Stoich( '/model/chem/dend/stoich' ) + nmstoich.compartment = neuroCompt + nmstoich.ksolve = nmksolve + nmstoich.dsolve = nmdsolve + nmstoich.path = "/model/chem/dend/##" + print(('done setting path, numPools = ', nmdsolve.numPools)) + assert( nmdsolve.numPools == 1 ) + assert( nmdsolve.numAllVoxels == ndc ) + assert( nmstoich.numAllPools == 1 ) + # oddly, numLocalFields does not work. + ca = moose.element( '/model/chem/dend/DEND/Ca' ) + assert( ca.numData == ndc ) - # Put in PSD solvers. Note that these get info from the neuroCompt - psdCompt = moose.element( '/model/chem/psd' ) - pdc = psdCompt.mesh.num - assert( pdc == 13 ) - pmksolve = moose.Ksolve( '/model/chem/psd/ksolve' ) - pmdsolve = moose.Dsolve( '/model/chem/psd/dsolve' ) - pmstoich = moose.Stoich( '/model/chem/psd/stoich' ) - pmstoich.compartment = psdCompt - pmstoich.ksolve = pmksolve - pmstoich.dsolve = pmdsolve - pmstoich.path = "/model/chem/psd/##" - print 'psd num Pools = ', pmstoich.numAllPools, pmdsolve.numPools - assert( pmstoich.numAllPools == 55 ) - assert( pmdsolve.numPools == 48 ) - assert( pmdsolve.numAllVoxels == pdc ) - foo = moose.element( '/model/chem/psd/Ca' ) - print 'PSD: numfoo = ', foo.numData - print 'PSD: numAllVoxels = ', pmksolve.numAllVoxels - - # Put in junctions between the diffusion solvers - nmdsolve.buildNeuroMeshJunctions( smdsolve, pmdsolve ) - - """ - CaNpsd = moose.vec( '/model/chem/psdMesh/PSD/PP1_PSD/CaN' ) - print 'numCaN in PSD = ', CaNpsd.nInit, ', vol = ', CaNpsd.volume - CaNspine = moose.vec( '/model/chem/spine/SPINE/CaN_BULK/CaN' ) - print 'numCaN in spine = ', CaNspine.nInit, ', vol = ', CaNspine.volume - """ - - ################################################################## - # set up adaptors - aCa = moose.Adaptor( '/model/chem/spine/adaptCa', sdc ) - adaptCa = moose.vec( '/model/chem/spine/adaptCa' ) - chemCa = moose.vec( '/model/chem/spine/Ca' ) - #print 'aCa = ', aCa, ' foo = ', foo, "len( ChemCa ) = ", len( chemCa ), ", numData = ", chemCa.numData, "len( adaptCa ) = ", len( adaptCa ) - assert( len( adaptCa ) == sdc ) - assert( len( chemCa ) == sdc ) - for i in range( sdc ): - elecCa = moose.element( '/model/elec/spine_head_14_' + str(i+1) + '/NMDA_Ca_conc' ) - #print elecCa - moose.connect( elecCa, 'concOut', adaptCa[i], 'input', 'Single' ) - moose.connect( adaptCa, 'output', chemCa, 'setConc', 'OneToOne' ) - adaptCa.inputOffset = 0.0 # - adaptCa.outputOffset = 0.00008 # 80 nM offset in chem. - adaptCa.scale = 5e-3 # 520 to 0.0052 mM - #print adaptCa.outputOffset - - - moose.le( '/model/chem/dend/DEND' ) - - - compts = neuroCompt.elecComptList - begin = neuroCompt.startVoxelInCompt - end = neuroCompt.endVoxelInCompt - aCa = moose.Adaptor( '/model/chem/dend/DEND/adaptCa', len( compts)) - adaptCa = moose.vec( '/model/chem/dend/DEND/adaptCa' ) - chemCa = moose.vec( '/model/chem/dend/DEND/Ca' ) - #print 'aCa = ', aCa, ' foo = ', foo, "len( ChemCa ) = ", len( chemCa ), ", numData = ", chemCa.numData, "len( adaptCa ) = ", len( adaptCa ) - assert( len( chemCa ) == ndc ) - for i in zip( compts, adaptCa, begin, end ): - name = i[0].path + '/Ca_conc' - if ( moose.exists( name ) ): - elecCa = moose.element( name ) - #print i[2], i[3], ' ', elecCa - #print i[1] - moose.connect( elecCa, 'concOut', i[1], 'input', 'Single' ) - for j in range( i[2], i[3] ): - moose.connect( i[1], 'output', chemCa[j], 'setConc', 'Single' ) - adaptCa.inputOffset = 0.0 # - adaptCa.outputOffset = 0.00008 # 80 nM offset in chem. - adaptCa.scale = 20e-6 # 10 arb units to 2 uM. + # Put in spine solvers. Note that these get info from the neuroCompt + spineCompt = moose.element( '/model/chem/spine' ) + sdc = spineCompt.mesh.num + print(('sdc = ', sdc)) + assert( sdc == 13 ) + smksolve = moose.Ksolve( '/model/chem/spine/ksolve' ) + smdsolve = moose.Dsolve( '/model/chem/spine/dsolve' ) + smstoich = moose.Stoich( '/model/chem/spine/stoich' ) + smstoich.compartment = spineCompt + smstoich.ksolve = smksolve + smstoich.dsolve = smdsolve + smstoich.path = "/model/chem/spine/##" + print(('spine num Pools = ', smstoich.numAllPools, smdsolve.numPools)) + assert( smstoich.numAllPools == 35 ) + assert( smdsolve.numPools == 30 ) + assert( smdsolve.numAllVoxels == sdc ) + + # Put in PSD solvers. Note that these get info from the neuroCompt + psdCompt = moose.element( '/model/chem/psd' ) + pdc = psdCompt.mesh.num + assert( pdc == 13 ) + pmksolve = moose.Ksolve( '/model/chem/psd/ksolve' ) + pmdsolve = moose.Dsolve( '/model/chem/psd/dsolve' ) + pmstoich = moose.Stoich( '/model/chem/psd/stoich' ) + pmstoich.compartment = psdCompt + pmstoich.ksolve = pmksolve + pmstoich.dsolve = pmdsolve + pmstoich.path = "/model/chem/psd/##" + print(('psd num Pools = ', pmstoich.numAllPools, pmdsolve.numPools)) + assert( pmstoich.numAllPools == 55 ) + assert( pmdsolve.numPools == 48 ) + assert( pmdsolve.numAllVoxels == pdc ) + foo = moose.element( '/model/chem/psd/Ca' ) + print(('PSD: numfoo = ', foo.numData)) + print(('PSD: numAllVoxels = ', pmksolve.numAllVoxels)) + + # Put in junctions between the diffusion solvers + nmdsolve.buildNeuroMeshJunctions( smdsolve, pmdsolve ) + + ################################################################## + # set up adaptors + aCa = moose.Adaptor( '/model/chem/spine/adaptCa', sdc ) + adaptCa = moose.vec( '/model/chem/spine/adaptCa' ) + chemCa = moose.vec( '/model/chem/spine/Ca' ) + #print 'aCa = ', aCa, ' foo = ', foo, "len( ChemCa ) = ", len( chemCa ), ", numData = ", chemCa.numData, "len( adaptCa ) = ", len( adaptCa ) + assert( len( adaptCa ) == sdc ) + assert( len( chemCa ) == sdc ) + for i in range( sdc ): + elecCa = moose.element( '/model/elec/spine_head_14_' + str(i+1) + '/NMDA_Ca_conc' ) + moose.connect( elecCa, 'concOut', adaptCa[i], 'input', 'Single' ) + moose.connect( adaptCa, 'output', chemCa, 'setConc', 'OneToOne' ) + adaptCa.inputOffset = 0.0 # + adaptCa.outputOffset = 0.00008 # 80 nM offset in chem. + adaptCa.scale = 5e-3 # 520 to 0.0052 mM + + moose.le( '/model/chem/dend/DEND' ) + compts = neuroCompt.elecComptList + begin = neuroCompt.startVoxelInCompt + end = neuroCompt.endVoxelInCompt + aCa = moose.Adaptor( '/model/chem/dend/DEND/adaptCa', len( compts)) + adaptCa = moose.vec( '/model/chem/dend/DEND/adaptCa' ) + chemCa = moose.vec( '/model/chem/dend/DEND/Ca' ) + assert( len( chemCa ) == ndc ) + for i in zip( compts, adaptCa, begin, end ): + name = i[0].path + '/Ca_conc' + if ( moose.exists( name ) ): + elecCa = moose.element( name ) + moose.connect( elecCa, 'concOut', i[1], 'input', 'Single' ) + for j in range( i[2], i[3] ): + moose.connect( i[1], 'output', chemCa[j], 'setConc', 'Single' ) + adaptCa.inputOffset = 0.0 # + adaptCa.outputOffset = 0.00008 # 80 nM offset in chem. + adaptCa.scale = 20e-6 # 10 arb units to 2 uM. def addPlot( objpath, field, plot ): - #assert moose.exists( objpath ) - if moose.exists( objpath ): - tab = moose.Table( '/graphs/' + plot ) - obj = moose.element( objpath ) - if obj.className == 'Neutral': - print "addPlot failed: object is a Neutral: ", objpath - return moose.element( '/' ) - else: - #print "object was found: ", objpath, obj.className - moose.connect( tab, 'requestOut', obj, field ) - return tab - else: - print "addPlot failed: object not found: ", objpath - return moose.element( '/' ) + #assert moose.exists( objpath ) + if moose.exists( objpath ): + tab = moose.Table( '/graphs/' + plot ) + obj = moose.element( objpath ) + if obj.className == 'Neutral': + print(("addPlot failed: object is a Neutral: ", objpath)) + return moose.element( '/' ) + else: + #print "object was found: ", objpath, obj.className + moose.connect( tab, 'requestOut', obj, field ) + return tab + else: + print(("addPlot failed: object not found: ", objpath)) + return moose.element( '/' ) def makeCaPlots(): graphs = moose.Neutral( '/graphs' ) @@ -234,146 +219,117 @@ def makeElecPlots(): addPlot( '/model/elec/spine_head_14_4', 'getVm', 'elec/spineVm' ) def makeChemPlots(): - graphs = moose.Neutral( '/graphs' ) - chem = moose.Neutral( '/graphs/chem' ) - addPlot( '/model/chem/psd/CaM_dash_Ca4', 'getConc', 'chem/psdCaCam' ) - addPlot( '/model/chem/psd/actCaMKII', 'getConc', 'chem/psdActCaMKII' ) - addPlot( '/model/chem/spine/CaM_dash_Ca4', 'getConc', 'chem/spineCaCam' ) - addPlot( '/model/chem/spine/CaM_dash_Ca4[12]', 'getConc', 'chem/spine12CaCam' ) - addPlot( '/model/chem/spine/actCaMKII', 'getConc', 'chem/spineActCaMKII' ) - addPlot( '/model/chem/spine/actCaMKII[11]', 'getConc', 'chem/spine12ActCaMKII' ) - addPlot( '/model/chem/psd/Ca', 'getConc', 'chem/psdCa' ) - addPlot( '/model/chem/psd/Ca[11]', 'getConc', 'chem/psd12Ca' ) - addPlot( '/model/chem/spine/Ca[3]', 'getConc', 'chem/spine4Ca' ) - addPlot( '/model/chem/spine/Ca[11]', 'getConc', 'chem/spine12Ca' ) - #addPlot( '/model/chem/dend/DEND/Ca', 'getConc', 'chem/dendCa' ) - #addPlot( '/model/chem/dend/DEND/Ca[20]', 'getConc', 'chem/dendCa20' ) + graphs = moose.Neutral( '/graphs' ) + chem = moose.Neutral( '/graphs/chem' ) + addPlot( '/model/chem/psd/CaM_dash_Ca4', 'getConc', 'chem/psdCaCam' ) + addPlot( '/model/chem/psd/actCaMKII', 'getConc', 'chem/psdActCaMKII' ) + addPlot( '/model/chem/spine/CaM_dash_Ca4', 'getConc', 'chem/spineCaCam' ) + addPlot( '/model/chem/spine/CaM_dash_Ca4[12]', 'getConc', 'chem/spine12CaCam' ) + addPlot( '/model/chem/spine/actCaMKII', 'getConc', 'chem/spineActCaMKII' ) + addPlot( '/model/chem/spine/actCaMKII[11]', 'getConc', 'chem/spine12ActCaMKII' ) + addPlot( '/model/chem/psd/Ca', 'getConc', 'chem/psdCa' ) + addPlot( '/model/chem/psd/Ca[11]', 'getConc', 'chem/psd12Ca' ) + addPlot( '/model/chem/spine/Ca[3]', 'getConc', 'chem/spine4Ca' ) + addPlot( '/model/chem/spine/Ca[11]', 'getConc', 'chem/spine12Ca' ) + #addPlot( '/model/chem/dend/DEND/Ca', 'getConc', 'chem/dendCa' ) + #addPlot( '/model/chem/dend/DEND/Ca[20]', 'getConc', 'chem/dendCa20' ) def makeGraphics( cPlotDt, ePlotDt ): - plt.ion() - fig = plt.figure( figsize=(10,16) ) - chem = fig.add_subplot( 411 ) - chem.set_ylim( 0, 0.006 ) - plt.ylabel( 'Conc (mM)' ) - plt.xlabel( 'time (seconds)' ) - for x in moose.wildcardFind( '/graphs/chem/#[ISA=Table]' ): - pos = numpy.arange( 0, x.vector.size, 1 ) * cPlotDt - line1, = chem.plot( pos, x.vector, label=x.name ) - plt.legend() - - elec = fig.add_subplot( 412 ) - plt.ylabel( 'Vm (V)' ) - plt.xlabel( 'time (seconds)' ) - for x in moose.wildcardFind( '/graphs/elec/#[ISA=Table]' ): - pos = numpy.arange( 0, x.vector.size, 1 ) * ePlotDt - line1, = elec.plot( pos, x.vector, label=x.name ) - plt.legend() - - ca = fig.add_subplot( 413 ) - plt.ylabel( '[Ca] (mM)' ) - plt.xlabel( 'time (seconds)' ) - for x in moose.wildcardFind( '/graphs/ca/#[ISA=Table]' ): - pos = numpy.arange( 0, x.vector.size, 1 ) * ePlotDt - line1, = ca.plot( pos, x.vector, label=x.name ) - plt.legend() - - lenplot = fig.add_subplot( 414 ) - plt.ylabel( 'Ca (mM )' ) - plt.xlabel( 'Voxel#)' ) - - spineCa = moose.vec( '/model/chem/spine/Ca' ) - dendCa = moose.vec( '/model/chem/dend/DEND/Ca' ) - line1, = lenplot.plot( range( len( spineCa ) ), spineCa.conc, label='spine' ) - line2, = lenplot.plot( range( len( dendCa ) ), dendCa.conc, label='dend' ) - - ca = [ x.Ca * 0.0001 for x in moose.wildcardFind( '/model/elec/##[ISA=CaConcBase]') ] - line3, = lenplot.plot( range( len( ca ) ), ca, label='elec' ) - - spineCaM = moose.vec( '/model/chem/spine/CaM_dash_Ca4' ) - line4, = lenplot.plot( range( len( spineCaM ) ), spineCaM.conc, label='spineCaM' ) - psdCaM = moose.vec( '/model/chem/psd/CaM_dash_Ca4' ) - line5, = lenplot.plot( range( len( psdCaM ) ), psdCaM.conc, label='psdCaM' ) - plt.legend() - - - fig.canvas.draw() - raw_input() - - ''' - for x in moose.wildcardFind( '/graphs/##[ISA=Table]' ): - t = numpy.arange( 0, x.vector.size, 1 ) - pylab.plot( t, x.vector, label=x.name ) - pylab.legend() - pylab.show() - ''' - - print 'All done' + plt.ion() + fig = plt.figure( figsize=(10,16) ) + chem = fig.add_subplot( 411 ) + chem.set_ylim( 0, 0.006 ) + plt.ylabel( 'Conc (mM)' ) + plt.xlabel( 'time (seconds)' ) + for x in moose.wildcardFind( '/graphs/chem/#[ISA=Table]' ): + pos = numpy.arange( 0, x.vector.size, 1 ) * cPlotDt + line1, = chem.plot( pos, x.vector, label=x.name ) + plt.legend() + + elec = fig.add_subplot( 412 ) + plt.ylabel( 'Vm (V)' ) + plt.xlabel( 'time (seconds)' ) + for x in moose.wildcardFind( '/graphs/elec/#[ISA=Table]' ): + pos = numpy.arange( 0, x.vector.size, 1 ) * ePlotDt + line1, = elec.plot( pos, x.vector, label=x.name ) + plt.legend() + + ca = fig.add_subplot( 413 ) + plt.ylabel( '[Ca] (mM)' ) + plt.xlabel( 'time (seconds)' ) + for x in moose.wildcardFind( '/graphs/ca/#[ISA=Table]' ): + pos = numpy.arange( 0, x.vector.size, 1 ) * ePlotDt + line1, = ca.plot( pos, x.vector, label=x.name ) + plt.legend() + + lenplot = fig.add_subplot( 414 ) + plt.ylabel( 'Ca (mM )' ) + plt.xlabel( 'Voxel#)' ) + + spineCa = moose.vec( '/model/chem/spine/Ca' ) + dendCa = moose.vec( '/model/chem/dend/DEND/Ca' ) + line1, = lenplot.plot( list(range( len( spineCa ))), spineCa.conc, label='spine' ) + line2, = lenplot.plot( list(range( len( dendCa ))), dendCa.conc, label='dend' ) + + ca = [ x.Ca * 0.0001 for x in moose.wildcardFind( '/model/elec/##[ISA=CaConcBase]') ] + line3, = lenplot.plot( list(range( len( ca ))), ca, label='elec' ) + + spineCaM = moose.vec( '/model/chem/spine/CaM_dash_Ca4' ) + line4, = lenplot.plot( list(range( len( spineCaM ))), spineCaM.conc, label='spineCaM' ) + psdCaM = moose.vec( '/model/chem/psd/CaM_dash_Ca4' ) + line5, = lenplot.plot( list(range( len( psdCaM ))), psdCaM.conc, label='psdCaM' ) + plt.legend() + + fig.canvas.draw() + eval(input()) + print('All done') def testNeuroMeshMultiscale(): - useHsolve = 0 - runtime = 0.5 - elecDt = 10e-6 - chemDt = 0.005 - ePlotDt = 0.5e-3 - cPlotDt = 0.005 - plotName = 'nm.plot' - - makeNeuroMeshModel() - print "after model is completely done" - for i in moose.wildcardFind( '/model/chem/#/#/#/transloc#' ): - print i[0].name, i[0].Kf, i[0].Kb, i[0].kf, i[0].kb - - makeChemPlots() - makeElecPlots() - makeCaPlots() - for i in range( 10 ): - moose.setClock( i, elecDt ) - for i in range( 10, 20 ): - moose.setClock( i, chemDt ) - moose.setClock( 8, ePlotDt ) - moose.setClock( 18, cPlotDt ) - if useHsolve: - hsolve = moose.HSolve( '/model/elec/hsolve' ) - #moose.useClock( 1, '/model/elec/hsolve', 'process' ) - hsolve.dt = elecDt - hsolve.target = '/model/elec/compt' - moose.reinit() - #soma = moose.element( '/model/elec/soma' ) - ''' - else: - moose.useClock( 0, '/model/elec/##[ISA=Compartment]', 'init' ) - moose.useClock( 1, '/model/elec/##[ISA=Compartment]', 'process' ) - moose.useClock( 2, '/model/elec/##[ISA=ChanBase],/model/##[ISA=SynBase],/model/##[ISA=CaConc]','process') - - moose.useClock( 1, '/model/elec/##[ISA=SpikeGen]', 'process' ) - moose.useClock( 2, '/model/##[ISA=SynBase],/model/##[ISA=CaConc]','process') - #moose.useClock( 5, '/model/chem/##[ISA=PoolBase],/model/##[ISA=ReacBase],/model/##[ISA=EnzBase]', 'process' ) - #moose.useClock( 4, '/model/chem/##[ISA=Adaptor]', 'process' ) - moose.useClock( 4, '/model/chem/#/dsolve', 'process' ) - moose.useClock( 5, '/model/chem/#/ksolve', 'process' ) - moose.useClock( 6, '/model/chem/spine/adaptCa', 'process' ) - moose.useClock( 6, '/model/chem/dend/DEND/adaptCa', 'process' ) - ''' - - moose.useClock( 18, '/graphs/chem/#', 'process' ) - moose.useClock( 8, '/graphs/elec/#,/graphs/ca/#', 'process' ) - moose.element( '/model/elec/soma' ).inject = 2e-10 - moose.element( '/model/chem/psd/Ca' ).concInit = 0.001 - moose.element( '/model/chem/spine/Ca' ).concInit = 0.002 - moose.element( '/model/chem/dend/DEND/Ca' ).concInit = 0.003 - moose.reinit() - - moose.start( runtime ) -# moose.element( '/model/elec/soma' ).inject = 0 -# moose.start( 0.25 ) - makeGraphics( cPlotDt, ePlotDt ) - + useHsolve = 0 + runtime = 0.5 + elecDt = 10e-6 + chemDt = 0.005 + ePlotDt = 0.5e-3 + cPlotDt = 0.005 + plotName = 'nm.plot' + + makeNeuroMeshModel() + print("after model is completely done") + for i in moose.wildcardFind( '/model/chem/#/#/#/transloc#' ): + print((i[0].name, i[0].Kf, i[0].Kb, i[0].kf, i[0].kb)) + + makeChemPlots() + makeElecPlots() + makeCaPlots() + for i in range( 10 ): + moose.setClock( i, elecDt ) + for i in range( 10, 20 ): + moose.setClock( i, chemDt ) + moose.setClock( 8, ePlotDt ) + moose.setClock( 18, cPlotDt ) + if useHsolve: + hsolve = moose.HSolve( '/model/elec/hsolve' ) + #moose.useClock( 1, '/model/elec/hsolve', 'process' ) + hsolve.dt = elecDt + hsolve.target = '/model/elec/compt' + moose.reinit() + #soma = moose.element( '/model/elec/soma' ) + moose.useClock( 18, '/graphs/chem/#', 'process' ) + moose.useClock( 8, '/graphs/elec/#,/graphs/ca/#', 'process' ) + moose.element( '/model/elec/soma' ).inject = 2e-10 + moose.element( '/model/chem/psd/Ca' ).concInit = 0.001 + moose.element( '/model/chem/spine/Ca' ).concInit = 0.002 + moose.element( '/model/chem/dend/DEND/Ca' ).concInit = 0.003 + moose.reinit() + + moose.start( runtime ) + makeGraphics( cPlotDt, ePlotDt ) def main(): - testNeuroMeshMultiscale() + testNeuroMeshMultiscale() if __name__ == '__main__': - main() + main() # # minimal.py ends here. diff --git a/moose-examples/snippets/MULTI/multi3.py b/moose-examples/snippets/MULTI/multi3.py index 005738ce4ca03fe581dcc24181914a953d2c02f6..d6cc945f94174e9bad2cd335ea8292e090ae9ae7 100644 --- a/moose-examples/snippets/MULTI/multi3.py +++ b/moose-examples/snippets/MULTI/multi3.py @@ -32,7 +32,6 @@ # Code: import sys -sys.path.append('../../python') import os os.environ['NUMPTHREADS'] = '1' import math @@ -44,184 +43,184 @@ import proto18 EREST_ACT = -70e-3 def loadElec(): - library = moose.Neutral( '/library' ) - moose.setCwe( '/library' ) - proto18.make_Ca() - proto18.make_Ca_conc() - proto18.make_K_AHP() - proto18.make_K_C() - proto18.make_Na() - proto18.make_K_DR() - proto18.make_K_A() - proto18.make_glu() - proto18.make_NMDA() - proto18.make_Ca_NMDA() - proto18.make_NMDA_Ca_conc() - proto18.make_axon() - moose.setCwe( '/library' ) - model = moose.Neutral( '/model' ) - cellId = moose.loadModel( 'ca1_asym.p', '/model/elec', "Neutral" ) - return cellId + library = moose.Neutral( '/library' ) + moose.setCwe( '/library' ) + proto18.make_Ca() + proto18.make_Ca_conc() + proto18.make_K_AHP() + proto18.make_K_C() + proto18.make_Na() + proto18.make_K_DR() + proto18.make_K_A() + proto18.make_glu() + proto18.make_NMDA() + proto18.make_Ca_NMDA() + proto18.make_NMDA_Ca_conc() + proto18.make_axon() + moose.setCwe( '/library' ) + model = moose.Neutral( '/model' ) + cellId = moose.loadModel( 'ca1_asym.p', '/model/elec', "Neutral" ) + return cellId def loadChem( diffLength ): - chem = moose.Neutral( '/model/chem' ) - neuroCompt = moose.NeuroMesh( '/model/chem/kinetics' ) - neuroCompt.separateSpines = 1 - neuroCompt.geometryPolicy = 'cylinder' - spineCompt = moose.SpineMesh( '/model/chem/compartment_1' ) - moose.connect( neuroCompt, 'spineListOut', spineCompt, 'spineList', 'OneToOne' ) - psdCompt = moose.PsdMesh( '/model/chem/compartment_2' ) - #print 'Meshvolume[neuro, spine, psd] = ', neuroCompt.mesh[0].volume, spineCompt.mesh[0].volume, psdCompt.mesh[0].volume - moose.connect( neuroCompt, 'psdListOut', psdCompt, 'psdList', 'OneToOne' ) - #modelId = moose.loadModel( 'separate_compts.g', '/model/chem', 'ee' ) - modelId = moose.loadModel( 'psd_merged31d.g', '/model/chem', 'ee' ) - neuroCompt.name = 'dend' - spineCompt.name = 'spine' - psdCompt.name = 'psd' + chem = moose.Neutral( '/model/chem' ) + neuroCompt = moose.NeuroMesh( '/model/chem/kinetics' ) + neuroCompt.separateSpines = 1 + neuroCompt.geometryPolicy = 'cylinder' + spineCompt = moose.SpineMesh( '/model/chem/compartment_1' ) + moose.connect( neuroCompt, 'spineListOut', spineCompt, 'spineList', 'OneToOne' ) + psdCompt = moose.PsdMesh( '/model/chem/compartment_2' ) + #print 'Meshvolume[neuro, spine, psd] = ', neuroCompt.mesh[0].volume, spineCompt.mesh[0].volume, psdCompt.mesh[0].volume + moose.connect( neuroCompt, 'psdListOut', psdCompt, 'psdList', 'OneToOne' ) + #modelId = moose.loadModel( 'separate_compts.g', '/model/chem', 'ee' ) + modelId = moose.loadModel( 'psd_merged31d.g', '/model/chem', 'ee' ) + neuroCompt.name = 'dend' + spineCompt.name = 'spine' + psdCompt.name = 'psd' def makeNeuroMeshModel(): - diffLength = 10e-6 # Aim for 2 soma compartments. - elec = loadElec() - loadChem( diffLength ) - neuroCompt = moose.element( '/model/chem/dend' ) - neuroCompt.diffLength = diffLength - neuroCompt.cellPortion( elec, '/model/elec/#' ) - for x in moose.wildcardFind( '/model/chem/##[ISA=PoolBase]' ): - if (x.diffConst > 0): - x.diffConst = 1e-11 - for x in moose.wildcardFind( '/model/chem/##/Ca' ): - x.diffConst = 1e-10 - - # Put in dend solvers - ns = neuroCompt.numSegments - ndc = neuroCompt.numDiffCompts - print 'ns = ', ns, ', ndc = ', ndc - assert( neuroCompt.numDiffCompts == neuroCompt.mesh.num ) - assert( ns == 36 ) # - assert( ndc == 278 ) # - nmksolve = moose.Ksolve( '/model/chem/dend/ksolve' ) - nmdsolve = moose.Dsolve( '/model/chem/dend/dsolve' ) - nmstoich = moose.Stoich( '/model/chem/dend/stoich' ) - nmstoich.compartment = neuroCompt - nmstoich.ksolve = nmksolve - nmstoich.dsolve = nmdsolve - nmstoich.path = "/model/chem/dend/##" - print 'done setting path, numPools = ', nmdsolve.numPools - assert( nmdsolve.numPools == 1 ) - assert( nmdsolve.numAllVoxels == ndc ) - assert( nmstoich.numAllPools == 1 ) - # oddly, numLocalFields does not work. - ca = moose.element( '/model/chem/dend/DEND/Ca' ) - assert( ca.numData == ndc ) + diffLength = 10e-6 # Aim for 2 soma compartments. + elec = loadElec() + loadChem( diffLength ) + neuroCompt = moose.element( '/model/chem/dend' ) + neuroCompt.diffLength = diffLength + neuroCompt.cellPortion( elec, '/model/elec/#' ) + for x in moose.wildcardFind( '/model/chem/##[ISA=PoolBase]' ): + if (x.diffConst > 0): + x.diffConst = 1e-11 + for x in moose.wildcardFind( '/model/chem/##/Ca' ): + x.diffConst = 1e-10 + + # Put in dend solvers + ns = neuroCompt.numSegments + ndc = neuroCompt.numDiffCompts + print(('ns = ', ns, ', ndc = ', ndc)) + assert( neuroCompt.numDiffCompts == neuroCompt.mesh.num ) + assert( ns == 36 ) # + assert( ndc == 278 ) # + nmksolve = moose.Ksolve( '/model/chem/dend/ksolve' ) + nmdsolve = moose.Dsolve( '/model/chem/dend/dsolve' ) + nmstoich = moose.Stoich( '/model/chem/dend/stoich' ) + nmstoich.compartment = neuroCompt + nmstoich.ksolve = nmksolve + nmstoich.dsolve = nmdsolve + nmstoich.path = "/model/chem/dend/##" + print(('done setting path, numPools = ', nmdsolve.numPools)) + assert( nmdsolve.numPools == 1 ) + assert( nmdsolve.numAllVoxels == ndc ) + assert( nmstoich.numAllPools == 1 ) + # oddly, numLocalFields does not work. + ca = moose.element( '/model/chem/dend/DEND/Ca' ) + assert( ca.numData == ndc ) - # Put in spine solvers. Note that these get info from the neuroCompt - spineCompt = moose.element( '/model/chem/spine' ) - sdc = spineCompt.mesh.num - print 'sdc = ', sdc - assert( sdc == 13 ) - smksolve = moose.Ksolve( '/model/chem/spine/ksolve' ) - smdsolve = moose.Dsolve( '/model/chem/spine/dsolve' ) - smstoich = moose.Stoich( '/model/chem/spine/stoich' ) - smstoich.compartment = spineCompt - smstoich.ksolve = smksolve - smstoich.dsolve = smdsolve - smstoich.path = "/model/chem/spine/##" - print 'spine num Pools = ', smstoich.numAllPools, 'dsolve n = ', smdsolve.numPools - assert( smstoich.numAllPools == 36 ) - assert( smdsolve.numPools == 31 ) - assert( smdsolve.numAllVoxels == sdc ) - - # Put in PSD solvers. Note that these get info from the neuroCompt - psdCompt = moose.element( '/model/chem/psd' ) - pdc = psdCompt.mesh.num - assert( pdc == 13 ) - pmksolve = moose.Ksolve( '/model/chem/psd/ksolve' ) - pmdsolve = moose.Dsolve( '/model/chem/psd/dsolve' ) - pmstoich = moose.Stoich( '/model/chem/psd/stoich' ) - pmstoich.compartment = psdCompt - pmstoich.ksolve = pmksolve - pmstoich.dsolve = pmdsolve - pmstoich.path = "/model/chem/psd/##" - print 'psd num Pools = ', pmstoich.numAllPools - assert( pmstoich.numAllPools == 56 ) - assert( pmdsolve.numPools == 49 ) - assert( pmdsolve.numAllVoxels == pdc ) - foo = moose.element( '/model/chem/psd/Ca' ) - print 'PSD: numfoo = ', foo.numData - print 'PSD: numAllVoxels = ', pmksolve.numAllVoxels - - # Put in junctions between the diffusion solvers - nmdsolve.buildNeuroMeshJunctions( smdsolve, pmdsolve ) - - # Put in cross-compartment reactions between ksolvers - nmstoich.buildXreacs( smstoich ) - smstoich.buildXreacs( pmstoich ) - - """ - CaNpsd = moose.vec( '/model/chem/psdMesh/PSD/PP1_PSD/CaN' ) - print 'numCaN in PSD = ', CaNpsd.nInit, ', vol = ', CaNpsd.volume - CaNspine = moose.vec( '/model/chem/spine/SPINE/CaN_BULK/CaN' ) - print 'numCaN in spine = ', CaNspine.nInit, ', vol = ', CaNspine.volume - """ - - ################################################################## - # set up adaptors - aCa = moose.Adaptor( '/model/chem/spine/adaptCa', sdc ) - adaptCa = moose.vec( '/model/chem/spine/adaptCa' ) - chemCa = moose.vec( '/model/chem/spine/Ca' ) - #print 'aCa = ', aCa, ' foo = ', foo, "len( ChemCa ) = ", len( chemCa ), ", numData = ", chemCa.numData, "len( adaptCa ) = ", len( adaptCa ) - assert( len( adaptCa ) == sdc ) - assert( len( chemCa ) == sdc ) - for i in range( sdc ): - elecCa = moose.element( '/model/elec/spine_head_14_' + str(i+1) + '/NMDA_Ca_conc' ) - #print elecCa - moose.connect( elecCa, 'concOut', adaptCa[i], 'input', 'Single' ) - moose.connect( adaptCa, 'output', chemCa, 'setConc', 'OneToOne' ) - adaptCa.inputOffset = 0.0 # - adaptCa.outputOffset = 0.00008 # 80 nM offset in chem. - adaptCa.scale = 5e-3 # 520 to 0.0052 mM - #print adaptCa.outputOffset - - - moose.le( '/model/chem/dend/DEND' ) - - - compts = neuroCompt.elecComptList - begin = neuroCompt.startVoxelInCompt - end = neuroCompt.endVoxelInCompt - aCa = moose.Adaptor( '/model/chem/dend/DEND/adaptCa', len( compts)) - adaptCa = moose.vec( '/model/chem/dend/DEND/adaptCa' ) - chemCa = moose.vec( '/model/chem/dend/DEND/Ca' ) - #print 'aCa = ', aCa, ' foo = ', foo, "len( ChemCa ) = ", len( chemCa ), ", numData = ", chemCa.numData, "len( adaptCa ) = ", len( adaptCa ) - assert( len( chemCa ) == ndc ) - for i in zip( compts, adaptCa, begin, end ): - name = i[0].path + '/Ca_conc' - if ( moose.exists( name ) ): - elecCa = moose.element( name ) - #print i[2], i[3], ' ', elecCa - #print i[1] - moose.connect( elecCa, 'concOut', i[1], 'input', 'Single' ) - for j in range( i[2], i[3] ): - moose.connect( i[1], 'output', chemCa[j], 'setConc', 'Single' ) - adaptCa.inputOffset = 0.0 # - adaptCa.outputOffset = 0.00008 # 80 nM offset in chem. - adaptCa.scale = 20e-6 # 10 arb units to 2 uM. + # Put in spine solvers. Note that these get info from the neuroCompt + spineCompt = moose.element( '/model/chem/spine' ) + sdc = spineCompt.mesh.num + print(('sdc = ', sdc)) + assert( sdc == 13 ) + smksolve = moose.Ksolve( '/model/chem/spine/ksolve' ) + smdsolve = moose.Dsolve( '/model/chem/spine/dsolve' ) + smstoich = moose.Stoich( '/model/chem/spine/stoich' ) + smstoich.compartment = spineCompt + smstoich.ksolve = smksolve + smstoich.dsolve = smdsolve + smstoich.path = "/model/chem/spine/##" + print(('spine num Pools = ', smstoich.numAllPools, 'dsolve n = ', smdsolve.numPools)) + assert( smstoich.numAllPools == 36 ) + assert( smdsolve.numPools == 31 ) + assert( smdsolve.numAllVoxels == sdc ) + + # Put in PSD solvers. Note that these get info from the neuroCompt + psdCompt = moose.element( '/model/chem/psd' ) + pdc = psdCompt.mesh.num + assert( pdc == 13 ) + pmksolve = moose.Ksolve( '/model/chem/psd/ksolve' ) + pmdsolve = moose.Dsolve( '/model/chem/psd/dsolve' ) + pmstoich = moose.Stoich( '/model/chem/psd/stoich' ) + pmstoich.compartment = psdCompt + pmstoich.ksolve = pmksolve + pmstoich.dsolve = pmdsolve + pmstoich.path = "/model/chem/psd/##" + print(('psd num Pools = ', pmstoich.numAllPools)) + assert( pmstoich.numAllPools == 56 ) + assert( pmdsolve.numPools == 49 ) + assert( pmdsolve.numAllVoxels == pdc ) + foo = moose.element( '/model/chem/psd/Ca' ) + print(('PSD: numfoo = ', foo.numData)) + print(('PSD: numAllVoxels = ', pmksolve.numAllVoxels)) + + # Put in junctions between the diffusion solvers + nmdsolve.buildNeuroMeshJunctions( smdsolve, pmdsolve ) + + # Put in cross-compartment reactions between ksolvers + nmstoich.buildXreacs( smstoich ) + smstoich.buildXreacs( pmstoich ) + + """ + CaNpsd = moose.vec( '/model/chem/psdMesh/PSD/PP1_PSD/CaN' ) + print 'numCaN in PSD = ', CaNpsd.nInit, ', vol = ', CaNpsd.volume + CaNspine = moose.vec( '/model/chem/spine/SPINE/CaN_BULK/CaN' ) + print 'numCaN in spine = ', CaNspine.nInit, ', vol = ', CaNspine.volume + """ + + ################################################################## + # set up adaptors + aCa = moose.Adaptor( '/model/chem/spine/adaptCa', sdc ) + adaptCa = moose.vec( '/model/chem/spine/adaptCa' ) + chemCa = moose.vec( '/model/chem/spine/Ca' ) + #print 'aCa = ', aCa, ' foo = ', foo, "len( ChemCa ) = ", len( chemCa ), ", numData = ", chemCa.numData, "len( adaptCa ) = ", len( adaptCa ) + assert( len( adaptCa ) == sdc ) + assert( len( chemCa ) == sdc ) + for i in range( sdc ): + elecCa = moose.element( '/model/elec/spine_head_14_' + str(i+1) + '/NMDA_Ca_conc' ) + #print elecCa + moose.connect( elecCa, 'concOut', adaptCa[i], 'input', 'Single' ) + moose.connect( adaptCa, 'output', chemCa, 'setConc', 'OneToOne' ) + adaptCa.inputOffset = 0.0 # + adaptCa.outputOffset = 0.00008 # 80 nM offset in chem. + adaptCa.scale = 5e-3 # 520 to 0.0052 mM + #print adaptCa.outputOffset + + + moose.le( '/model/chem/dend/DEND' ) + + + compts = neuroCompt.elecComptList + begin = neuroCompt.startVoxelInCompt + end = neuroCompt.endVoxelInCompt + aCa = moose.Adaptor( '/model/chem/dend/DEND/adaptCa', len( compts)) + adaptCa = moose.vec( '/model/chem/dend/DEND/adaptCa' ) + chemCa = moose.vec( '/model/chem/dend/DEND/Ca' ) + #print 'aCa = ', aCa, ' foo = ', foo, "len( ChemCa ) = ", len( chemCa ), ", numData = ", chemCa.numData, "len( adaptCa ) = ", len( adaptCa ) + assert( len( chemCa ) == ndc ) + for i in zip( compts, adaptCa, begin, end ): + name = i[0].path + '/Ca_conc' + if ( moose.exists( name ) ): + elecCa = moose.element( name ) + #print i[2], i[3], ' ', elecCa + #print i[1] + moose.connect( elecCa, 'concOut', i[1], 'input', 'Single' ) + for j in range( i[2], i[3] ): + moose.connect( i[1], 'output', chemCa[j], 'setConc', 'Single' ) + adaptCa.inputOffset = 0.0 # + adaptCa.outputOffset = 0.00008 # 80 nM offset in chem. + adaptCa.scale = 20e-6 # 10 arb units to 2 uM. def addPlot( objpath, field, plot ): - #assert moose.exists( objpath ) - if moose.exists( objpath ): - tab = moose.Table( '/graphs/' + plot ) - obj = moose.element( objpath ) - if obj.className == 'Neutral': - print "addPlot failed: object is a Neutral: ", objpath - return moose.element( '/' ) - else: - #print "object was found: ", objpath, obj.className - moose.connect( tab, 'requestOut', obj, field ) - return tab - else: - print "addPlot failed: object not found: ", objpath - return moose.element( '/' ) + #assert moose.exists( objpath ) + if moose.exists( objpath ): + tab = moose.Table( '/graphs/' + plot ) + obj = moose.element( objpath ) + if obj.className == 'Neutral': + print(("addPlot failed: object is a Neutral: ", objpath)) + return moose.element( '/' ) + else: + #print "object was found: ", objpath, obj.className + moose.connect( tab, 'requestOut', obj, field ) + return tab + else: + print(("addPlot failed: object not found: ", objpath)) + return moose.element( '/' ) def makeCaPlots(): graphs = moose.Neutral( '/graphs' ) @@ -238,148 +237,144 @@ def makeElecPlots(): addPlot( '/model/elec/spine_head_14_4', 'getVm', 'elec/spineVm' ) def makeChemPlots(): - graphs = moose.Neutral( '/graphs' ) - chem = moose.Neutral( '/graphs/chem' ) - addPlot( '/model/chem/psd/CaM_dash_Ca4', 'getConc', 'chem/psdCaCam' ) - addPlot( '/model/chem/psd/actCaMKII', 'getConc', 'chem/psdActCaMKII' ) - addPlot( '/model/chem/spine/CaM_dash_Ca4', 'getConc', 'chem/spineCaCam' ) - addPlot( '/model/chem/spine/CaM_dash_Ca4[12]', 'getConc', 'chem/spine12CaCam' ) - addPlot( '/model/chem/spine/actCaMKII', 'getConc', 'chem/spineActCaMKII' ) - addPlot( '/model/chem/spine/actCaMKII[11]', 'getConc', 'chem/spine12ActCaMKII' ) - addPlot( '/model/chem/psd/Ca', 'getConc', 'chem/psdCa' ) - addPlot( '/model/chem/psd/Ca[11]', 'getConc', 'chem/psd12Ca' ) - addPlot( '/model/chem/spine/Ca[3]', 'getConc', 'chem/spine4Ca' ) - addPlot( '/model/chem/spine/Ca[11]', 'getConc', 'chem/spine12Ca' ) - #addPlot( '/model/chem/dend/DEND/Ca', 'getConc', 'chem/dendCa' ) - #addPlot( '/model/chem/dend/DEND/Ca[20]', 'getConc', 'chem/dendCa20' ) + graphs = moose.Neutral( '/graphs' ) + chem = moose.Neutral( '/graphs/chem' ) + addPlot( '/model/chem/psd/CaM_dash_Ca4', 'getConc', 'chem/psdCaCam' ) + addPlot( '/model/chem/psd/actCaMKII', 'getConc', 'chem/psdActCaMKII' ) + addPlot( '/model/chem/spine/CaM_dash_Ca4', 'getConc', 'chem/spineCaCam' ) + addPlot( '/model/chem/spine/CaM_dash_Ca4[12]', 'getConc', 'chem/spine12CaCam' ) + addPlot( '/model/chem/spine/actCaMKII', 'getConc', 'chem/spineActCaMKII' ) + addPlot( '/model/chem/spine/actCaMKII[11]', 'getConc', 'chem/spine12ActCaMKII' ) + addPlot( '/model/chem/psd/Ca', 'getConc', 'chem/psdCa' ) + addPlot( '/model/chem/psd/Ca[11]', 'getConc', 'chem/psd12Ca' ) + addPlot( '/model/chem/spine/Ca[3]', 'getConc', 'chem/spine4Ca' ) + addPlot( '/model/chem/spine/Ca[11]', 'getConc', 'chem/spine12Ca' ) + #addPlot( '/model/chem/dend/DEND/Ca', 'getConc', 'chem/dendCa' ) + #addPlot( '/model/chem/dend/DEND/Ca[20]', 'getConc', 'chem/dendCa20' ) def makeGraphics( cPlotDt, ePlotDt ): - plt.ion() - fig = plt.figure( figsize=(10,16) ) - chem = fig.add_subplot( 411 ) - chem.set_ylim( 0, 0.006 ) - plt.ylabel( 'Conc (mM)' ) - plt.xlabel( 'time (seconds)' ) - for x in moose.wildcardFind( '/graphs/chem/#[ISA=Table]' ): - pos = numpy.arange( 0, x.vector.size, 1 ) * cPlotDt - line1, = chem.plot( pos, x.vector, label=x.name ) - plt.legend() - - elec = fig.add_subplot( 412 ) - plt.ylabel( 'Vm (V)' ) - plt.xlabel( 'time (seconds)' ) - for x in moose.wildcardFind( '/graphs/elec/#[ISA=Table]' ): - pos = numpy.arange( 0, x.vector.size, 1 ) * ePlotDt - line1, = elec.plot( pos, x.vector, label=x.name ) - plt.legend() - - ca = fig.add_subplot( 413 ) - plt.ylabel( '[Ca] (mM)' ) - plt.xlabel( 'time (seconds)' ) - for x in moose.wildcardFind( '/graphs/ca/#[ISA=Table]' ): - pos = numpy.arange( 0, x.vector.size, 1 ) * ePlotDt - line1, = ca.plot( pos, x.vector, label=x.name ) - plt.legend() - - lenplot = fig.add_subplot( 414 ) - plt.ylabel( 'Ca (mM )' ) - plt.xlabel( 'Voxel#)' ) - - spineCa = moose.vec( '/model/chem/spine/Ca' ) - dendCa = moose.vec( '/model/chem/dend/DEND/Ca' ) - line1, = lenplot.plot( range( len( spineCa ) ), spineCa.conc, label='spine' ) - line2, = lenplot.plot( range( len( dendCa ) ), dendCa.conc, label='dend' ) - - ca = [ x.Ca * 0.0001 for x in moose.wildcardFind( '/model/elec/##[ISA=CaConcBase]') ] - line3, = lenplot.plot( range( len( ca ) ), ca, label='elec' ) - - spineCaM = moose.vec( '/model/chem/spine/CaM_dash_Ca4' ) - line4, = lenplot.plot( range( len( spineCaM ) ), spineCaM.conc, label='spineCaM' ) - psdCaM = moose.vec( '/model/chem/psd/CaM_dash_Ca4' ) - line5, = lenplot.plot( range( len( psdCaM ) ), psdCaM.conc, label='psdCaM' ) - plt.legend() - - - fig.canvas.draw() - raw_input() + plt.ion() + fig = plt.figure( figsize=(10,16) ) + chem = fig.add_subplot( 411 ) + chem.set_ylim( 0, 0.006 ) + plt.ylabel( 'Conc (mM)' ) + plt.xlabel( 'time (seconds)' ) + for x in moose.wildcardFind( '/graphs/chem/#[ISA=Table]' ): + pos = numpy.arange( 0, x.vector.size, 1 ) * cPlotDt + line1, = chem.plot( pos, x.vector, label=x.name ) + plt.legend() + + elec = fig.add_subplot( 412 ) + plt.ylabel( 'Vm (V)' ) + plt.xlabel( 'time (seconds)' ) + for x in moose.wildcardFind( '/graphs/elec/#[ISA=Table]' ): + pos = numpy.arange( 0, x.vector.size, 1 ) * ePlotDt + line1, = elec.plot( pos, x.vector, label=x.name ) + plt.legend() + + ca = fig.add_subplot( 413 ) + plt.ylabel( '[Ca] (mM)' ) + plt.xlabel( 'time (seconds)' ) + for x in moose.wildcardFind( '/graphs/ca/#[ISA=Table]' ): + pos = numpy.arange( 0, x.vector.size, 1 ) * ePlotDt + line1, = ca.plot( pos, x.vector, label=x.name ) + plt.legend() + + lenplot = fig.add_subplot( 414 ) + plt.ylabel( 'Ca (mM )' ) + plt.xlabel( 'Voxel#)' ) + + spineCa = moose.vec( '/model/chem/spine/Ca' ) + dendCa = moose.vec( '/model/chem/dend/DEND/Ca' ) + line1, = lenplot.plot( list(range( len( spineCa ))), spineCa.conc, label='spine' ) + line2, = lenplot.plot( list(range( len( dendCa ))), dendCa.conc, label='dend' ) + + ca = [ x.Ca * 0.0001 for x in moose.wildcardFind( '/model/elec/##[ISA=CaConcBase]') ] + line3, = lenplot.plot( list(range( len( ca ))), ca, label='elec' ) + + spineCaM = moose.vec( '/model/chem/spine/CaM_dash_Ca4' ) + line4, = lenplot.plot( list(range( len( spineCaM ))), spineCaM.conc, label='spineCaM' ) + psdCaM = moose.vec( '/model/chem/psd/CaM_dash_Ca4' ) + line5, = lenplot.plot( list(range( len( psdCaM ))), psdCaM.conc, label='psdCaM' ) + plt.legend() + + + fig.canvas.draw() + eval(input()) - ''' - for x in moose.wildcardFind( '/graphs/##[ISA=Table]' ): - t = numpy.arange( 0, x.vector.size, 1 ) - pylab.plot( t, x.vector, label=x.name ) - pylab.legend() - pylab.show() - ''' + ''' + for x in moose.wildcardFind( '/graphs/##[ISA=Table]' ): + t = numpy.arange( 0, x.vector.size, 1 ) + pylab.plot( t, x.vector, label=x.name ) + pylab.legend() + pylab.show() + ''' - print 'All done' + print('All done') def testNeuroMeshMultiscale(): - useHsolve = 1 - runtime = 0.5 - if useHsolve: - elecDt = 50e-6 - else: - elecDt = 10e-6 - chemDt = 0.005 - ePlotDt = 0.5e-3 - cPlotDt = 0.005 - plotName = 'nm.plot' - - makeNeuroMeshModel() - print "after model is completely done" - for i in moose.wildcardFind( '/model/chem/#/#/#/transloc#' ): - print i[0].name, i[0].Kf, i[0].Kb, i[0].kf, i[0].kb - - makeChemPlots() - makeElecPlots() - makeCaPlots() - moose.setClock( 0, elecDt ) - moose.setClock( 1, elecDt ) - moose.setClock( 2, elecDt ) - moose.setClock( 4, chemDt ) - moose.setClock( 5, chemDt ) - moose.setClock( 6, chemDt ) - moose.setClock( 7, cPlotDt ) - moose.setClock( 8, ePlotDt ) - if useHsolve: - hsolve = moose.HSolve( '/model/elec/hsolve' ) - moose.useClock( 1, '/model/elec/hsolve', 'process' ) - hsolve.dt = elecDt - hsolve.target = '/model/elec/compt' - moose.reinit() - else: - moose.useClock( 0, '/model/elec/##[ISA=Compartment]', 'init' ) - moose.useClock( 1, '/model/elec/##[ISA=Compartment]', 'process' ) - moose.useClock( 2, '/model/elec/##[ISA=ChanBase],/model/##[ISA=SynBase],/model/##[ISA=CaConc]','process') - - moose.useClock( 1, '/model/elec/##[ISA=SpikeGen]', 'process' ) - moose.useClock( 2, '/model/##[ISA=SynBase],/model/##[ISA=CaConc]','process') - #moose.useClock( 5, '/model/chem/##[ISA=PoolBase],/model/##[ISA=ReacBase],/model/##[ISA=EnzBase]', 'process' ) - #moose.useClock( 4, '/model/chem/##[ISA=Adaptor]', 'process' ) - moose.useClock( 4, '/model/chem/#/dsolve', 'process' ) - moose.useClock( 4, '/model/chem/#/ksolve', 'init' ) - moose.useClock( 5, '/model/chem/#/ksolve', 'process' ) - moose.useClock( 6, '/model/chem/spine/adaptCa', 'process' ) - moose.useClock( 6, '/model/chem/dend/DEND/adaptCa', 'process' ) - moose.useClock( 7, '/graphs/chem/#', 'process' ) - moose.useClock( 8, '/graphs/elec/#,/graphs/ca/#', 'process' ) - moose.element( '/model/elec/soma' ).inject = 2e-10 - moose.element( '/model/chem/psd/Ca' ).concInit = 0.001 - moose.element( '/model/chem/spine/Ca' ).concInit = 0.002 - moose.element( '/model/chem/dend/DEND/Ca' ).concInit = 0.003 - moose.reinit() - - moose.start( runtime ) -# moose.element( '/model/elec/soma' ).inject = 0 -# moose.start( 0.25 ) - makeGraphics( cPlotDt, ePlotDt ) + useHsolve = 1 + runtime = 0.5 + if useHsolve: + elecDt = 50e-6 + else: + elecDt = 10e-6 + chemDt = 0.005 + ePlotDt = 0.5e-3 + cPlotDt = 0.005 + plotName = 'nm.plot' + makeNeuroMeshModel() + print("after model is completely done") + for i in moose.wildcardFind( '/model/chem/#/#/#/transloc#' ): + print((i[0].name, i[0].Kf, i[0].Kb, i[0].kf, i[0].kb)) + + makeChemPlots() + makeElecPlots() + makeCaPlots() + moose.setClock( 0, elecDt ) + moose.setClock( 1, elecDt ) + moose.setClock( 2, elecDt ) + moose.setClock( 4, chemDt ) + moose.setClock( 5, chemDt ) + moose.setClock( 6, chemDt ) + moose.setClock( 7, cPlotDt ) + moose.setClock( 8, ePlotDt ) + if useHsolve: + hsolve = moose.HSolve( '/model/elec/hsolve' ) + moose.useClock( 1, '/model/elec/hsolve', 'process' ) + hsolve.dt = elecDt + hsolve.target = '/model/elec/compt' + moose.reinit() + else: + moose.useClock( 0, '/model/elec/##[ISA=Compartment]', 'init' ) + moose.useClock( 1, '/model/elec/##[ISA=Compartment]', 'process' ) + moose.useClock( 2, '/model/elec/##[ISA=ChanBase],/model/##[ISA=SynBase],/model/##[ISA=CaConc]','process') + + moose.useClock( 1, '/model/elec/##[ISA=SpikeGen]', 'process' ) + moose.useClock( 2, '/model/##[ISA=SynBase],/model/##[ISA=CaConc]','process') + + moose.useClock( 4, '/model/chem/#/dsolve', 'process' ) + moose.useClock( 4, '/model/chem/#/ksolve', 'init' ) + moose.useClock( 5, '/model/chem/#/ksolve', 'process' ) + moose.useClock( 6, '/model/chem/spine/adaptCa', 'process' ) + moose.useClock( 6, '/model/chem/dend/DEND/adaptCa', 'process' ) + moose.useClock( 7, '/graphs/chem/#', 'process' ) + moose.useClock( 8, '/graphs/elec/#,/graphs/ca/#', 'process' ) + moose.element( '/model/elec/soma' ).inject = 2e-10 + moose.element( '/model/chem/psd/Ca' ).concInit = 0.001 + moose.element( '/model/chem/spine/Ca' ).concInit = 0.002 + moose.element( '/model/chem/dend/DEND/Ca' ).concInit = 0.003 + moose.reinit() + + moose.start( runtime ) + makeGraphics( cPlotDt, ePlotDt ) def main(): - testNeuroMeshMultiscale() + testNeuroMeshMultiscale() if __name__ == '__main__': - main() + main() # # minimal.py ends here. diff --git a/moose-examples/snippets/MULTI/proto18.py b/moose-examples/snippets/MULTI/proto18.py index 06057af60b1cde37dfb2693bb9d180b88ba9e37e..05ba3d549fc67b8401765b174aa5bb7ea516ded9 100644 --- a/moose-examples/snippets/MULTI/proto18.py +++ b/moose-examples/snippets/MULTI/proto18.py @@ -4,7 +4,7 @@ #** The 1991 Traub set of voltage and concentration dependent channels #** Implemented as tabchannels by : Dave Beeman #** R.D.Traub, R. K. S. Wong, R. Miles, and H. Michelson -#** Journal of Neurophysiology, Vol. 66, p. 635 (1991) +#** Journal of Neurophysiology, Vol. 66, p. 635 (1991) #** #** This file depends on functions and constants defined in defaults.g #** As it is also intended as an example of the use of the tabchannel @@ -52,61 +52,61 @@ SOMA_A = 3.320e-9 #// soma area in square meters #//======================================================================== def make_Ca(): - if moose.exists( 'Ca' ): - return - Ca = moose.HHChannel( 'Ca' ) - Ca.Ek = ECA - Ca.Gbar = 40 * SOMA_A - Ca.Gk = 0 - Ca.Xpower = 2 - Ca.Ypower = 1 - Ca.Zpower = 0 - - xgate = moose.element( 'Ca/gateX' ) - xA = numpy.array( [ 1.6e3, 0, 1.0, -1.0 * (0.065 + EREST_ACT), -0.01389, -20e3 * (0.0511 + EREST_ACT), 20e3, -1.0, -1.0 * (0.0511 + EREST_ACT), 5.0e-3, 3000, -0.1, 0.05 ] ) -# xgate.min = -0.1 -# xgate.max = 0.05 -# xgate.divs = 3000 + if moose.exists( 'Ca' ): + return + Ca = moose.HHChannel( 'Ca' ) + Ca.Ek = ECA + Ca.Gbar = 40 * SOMA_A + Ca.Gk = 0 + Ca.Xpower = 2 + Ca.Ypower = 1 + Ca.Zpower = 0 + + xgate = moose.element( 'Ca/gateX' ) + xA = numpy.array( [ 1.6e3, 0, 1.0, -1.0 * (0.065 + EREST_ACT), -0.01389, -20e3 * (0.0511 + EREST_ACT), 20e3, -1.0, -1.0 * (0.0511 + EREST_ACT), 5.0e-3, 3000, -0.1, 0.05 ] ) +# xgate.min = -0.1 +# xgate.max = 0.05 +# xgate.divs = 3000 #// Converting Traub's expressions for the gCa/s alpha and beta functions #// to SI units and entering the A, B, C, D and F parameters, we get: -# xgate.alpha( 1.6e3, 0, 1.0, -1.0 * (0.065 + EREST_ACT), -0.01389 ) -# xgate.beta( -20e3 * (0.0511 + EREST_ACT), 20e3, -1.0, -1.0 * (0.0511 + EREST_ACT), 5.0e-3 ) - #xgate.setupAlpha( xA ) - xgate.alphaParms = xA +# xgate.alpha( 1.6e3, 0, 1.0, -1.0 * (0.065 + EREST_ACT), -0.01389 ) +# xgate.beta( -20e3 * (0.0511 + EREST_ACT), 20e3, -1.0, -1.0 * (0.0511 + EREST_ACT), 5.0e-3 ) + #xgate.setupAlpha( xA ) + xgate.alphaParms = xA # The Y gate (gCa/r) is not quite of this form. For V > EREST_ACT, alpha = # 5*{exp({-50*(V - EREST_ACT)})}. Otherwise, alpha = 5. Over the entire # range, alpha + beta = 5. To create the Y_A and Y_B tables, we use some # of the pieces of the setupalpha function. - ygate = moose.element( 'Ca/gateY' ) - ygate.min = -0.1 - ygate.max = 0.05 - ygate.divs = 3000 - yA = numpy.zeros( (ygate.divs + 1), dtype=float) - yB = numpy.zeros( (ygate.divs + 1), dtype=float) + ygate = moose.element( 'Ca/gateY' ) + ygate.min = -0.1 + ygate.max = 0.05 + ygate.divs = 3000 + yA = numpy.zeros( (ygate.divs + 1), dtype=float) + yB = numpy.zeros( (ygate.divs + 1), dtype=float) #Fill the Y_A table with alpha values and the Y_B table with (alpha+beta) - dx = (ygate.max - ygate.min)/ygate.divs - x = ygate.min - for i in range( ygate.divs + 1 ): - if ( x > EREST_ACT): - yA[i] = 5.0 * math.exp( -50 * (x - EREST_ACT) ) - else: - yA[i] = 5.0 - yB[i] = 5.0 - x += dx - ygate.tableA = yA - ygate.tableB = yB + dx = (ygate.max - ygate.min)/ygate.divs + x = ygate.min + for i in range( ygate.divs + 1 ): + if ( x > EREST_ACT): + yA[i] = 5.0 * math.exp( -50 * (x - EREST_ACT) ) + else: + yA[i] = 5.0 + yB[i] = 5.0 + x += dx + ygate.tableA = yA + ygate.tableB = yB # Tell the cell reader that the current from this channel must be fed into # the Ca_conc pool of calcium. - addmsg1 = moose.Mstring( '/library/Ca/addmsg1' ) - addmsg1.value = '. IkOut ../Ca_conc current' + addmsg1 = moose.Mstring( '/library/Ca/addmsg1' ) + addmsg1.value = '. IkOut ../Ca_conc current' # in some compartments, whe have an NMDA_Ca_conc object to put the current # into. - addmsg2 = moose.Mstring( '/library/Ca/addmsg2' ) - addmsg2.value = '. IkOut ../NMDA_Ca_conc current' + addmsg2 = moose.Mstring( '/library/Ca/addmsg2' ) + addmsg2.value = '. IkOut ../NMDA_Ca_conc current' # As we typically use the cell reader to create copies of these prototype #elements in one or more compartments, we need some way to be sure that the #needed messages are established. Although the cell reader has enough @@ -153,12 +153,12 @@ def make_Ca(): #//======================================================================== def make_Ca_conc(): - if moose.exists( 'Ca_conc' ): - return - conc = moose.CaConc( 'Ca_conc' ) - conc.tau = 0.013333 # sec - conc.B = 17.402e12 # Curr to conc conversion for soma - conc.Ca_base = 0.0 + if moose.exists( 'Ca_conc' ): + return + conc = moose.CaConc( 'Ca_conc' ) + conc.tau = 0.013333 # sec + conc.B = 17.402e12 # Curr to conc conversion for soma + conc.Ca_base = 0.0 #This Ca_concen element should receive a message from any calcium channels # with the current going through the channel. Here we have this specified @@ -176,38 +176,38 @@ def make_Ca_conc(): # functions of concentration, instead of voltage. def make_K_AHP(): - if moose.exists( 'K_AHP' ): - return - - K_AHP = moose.HHChannel( 'K_AHP' ) - K_AHP.Ek = EK # V - K_AHP.Gbar = 8 * SOMA_A # S - K_AHP.Gk = 0 # S - K_AHP.Xpower = 0 - K_AHP.Ypower = 0 - K_AHP.Zpower = 1 - - zgate = moose.element( 'K_AHP/gateZ' ) - xmax = 500.0 - zgate.min = 0 - zgate.max = xmax - zgate.divs = 3000 - zA = numpy.zeros( (zgate.divs + 1), dtype=float) - zB = numpy.zeros( (zgate.divs + 1), dtype=float) - dx = (zgate.max - zgate.min)/zgate.divs - x = zgate.min - for i in range( zgate.divs + 1 ): - if (x < (xmax / 2.0 )): - zA[i] = 0.02*x - else: - zA[i] = 10.0 - zB[i] = zA[i] + 1.0 - x = x + dx - - zgate.tableA = zA - zgate.tableB = zB - addmsg1 = moose.Mstring( '/library/K_AHP/addmsg1' ) - addmsg1.value = '../Ca_conc concOut . concen' + if moose.exists( 'K_AHP' ): + return + + K_AHP = moose.HHChannel( 'K_AHP' ) + K_AHP.Ek = EK # V + K_AHP.Gbar = 8 * SOMA_A # S + K_AHP.Gk = 0 # S + K_AHP.Xpower = 0 + K_AHP.Ypower = 0 + K_AHP.Zpower = 1 + + zgate = moose.element( 'K_AHP/gateZ' ) + xmax = 500.0 + zgate.min = 0 + zgate.max = xmax + zgate.divs = 3000 + zA = numpy.zeros( (zgate.divs + 1), dtype=float) + zB = numpy.zeros( (zgate.divs + 1), dtype=float) + dx = (zgate.max - zgate.min)/zgate.divs + x = zgate.min + for i in range( zgate.divs + 1 ): + if (x < (xmax / 2.0 )): + zA[i] = 0.02*x + else: + zA[i] = 10.0 + zB[i] = zA[i] + 1.0 + x = x + dx + + zgate.tableA = zA + zgate.tableB = zB + addmsg1 = moose.Mstring( '/library/K_AHP/addmsg1' ) + addmsg1.value = '../Ca_conc concOut . concen' # Use an added field to tell the cell reader to set up a message from the # Ca_Conc with concentration info, to the current K_AHP object. @@ -228,71 +228,71 @@ def make_K_AHP(): #the multiplicative Ca-dependent factor in the conductance. def make_K_C(): - if moose.exists( 'K_C'): - return - - K_C = moose.HHChannel( 'K_C' ) - K_C.Ek = EK # V - K_C.Gbar = 100.0 * SOMA_A # S - K_C.Gk = 0 # S - K_C.Xpower = 1 - K_C.Zpower = 1 - K_C.instant = 4 # Flag: 0x100 means Z gate is instant. - - # Now make a X-table for the voltage-dependent activation parameter. - xgate = moose.element( 'K_C/gateX' ) - xgate.min = -0.1 - xgate.max = 0.05 - xgate.divs = 3000 - xA = numpy.zeros( (xgate.divs + 1), dtype=float) - xB = numpy.zeros( (xgate.divs + 1), dtype=float) - dx = (xgate.max - xgate.min)/xgate.divs - x = xgate.min - for i in range( xgate.divs + 1 ): - alpha = 0.0 - beta = 0.0 - if (x < EREST_ACT + 0.05): - alpha = math.exp( 53.872 * (x - EREST_ACT) - 0.66835 ) / 0.018975 - beta = 2000* (math.exp ( (EREST_ACT + 0.0065 - x)/0.027)) - alpha - else: - alpha = 2000 * math.exp( ( EREST_ACT + 0.0065 - x)/0.027 ) - beta = 0.0 - xA[i] = alpha - xB[i] = alpha + beta - x = x + dx - xgate.tableA = xA - xgate.tableB = xB + if moose.exists( 'K_C'): + return + + K_C = moose.HHChannel( 'K_C' ) + K_C.Ek = EK # V + K_C.Gbar = 100.0 * SOMA_A # S + K_C.Gk = 0 # S + K_C.Xpower = 1 + K_C.Zpower = 1 + K_C.instant = 4 # Flag: 0x100 means Z gate is instant. + + # Now make a X-table for the voltage-dependent activation parameter. + xgate = moose.element( 'K_C/gateX' ) + xgate.min = -0.1 + xgate.max = 0.05 + xgate.divs = 3000 + xA = numpy.zeros( (xgate.divs + 1), dtype=float) + xB = numpy.zeros( (xgate.divs + 1), dtype=float) + dx = (xgate.max - xgate.min)/xgate.divs + x = xgate.min + for i in range( xgate.divs + 1 ): + alpha = 0.0 + beta = 0.0 + if (x < EREST_ACT + 0.05): + alpha = math.exp( 53.872 * (x - EREST_ACT) - 0.66835 ) / 0.018975 + beta = 2000* (math.exp ( (EREST_ACT + 0.0065 - x)/0.027)) - alpha + else: + alpha = 2000 * math.exp( ( EREST_ACT + 0.0065 - x)/0.027 ) + beta = 0.0 + xA[i] = alpha + xB[i] = alpha + beta + x = x + dx + xgate.tableA = xA + xgate.tableB = xB # Create a table for the function of concentration, allowing a # concentration range of 0 to 1000, with 50 divisions. This is done # using the Z gate, which can receive a CONCEN message. By using # the "instant" flag, the A and B tables are evaluated as lookup tables, # rather than being used in a differential equation. - zgate = moose.element( 'K_C/gateZ' ) - zgate.min = 0.0 - xmax = 500.0 - zgate.max = xmax - zgate.divs = 3000 - zA = numpy.zeros( (zgate.divs + 1), dtype=float) - zB = numpy.zeros( (zgate.divs + 1), dtype=float) - dx = ( zgate.max - zgate.min)/ zgate.divs - x = zgate.min - for i in range( xgate.divs + 1 ): - if ( x < ( xmax / 4.0 ) ): - zA[i] = x * 4.0 / xmax - else: - zA[i] = 1.0 - zB[i] = 1.0 - x += dx - zgate.tableA = zA - zgate.tableB = zB + zgate = moose.element( 'K_C/gateZ' ) + zgate.min = 0.0 + xmax = 500.0 + zgate.max = xmax + zgate.divs = 3000 + zA = numpy.zeros( (zgate.divs + 1), dtype=float) + zB = numpy.zeros( (zgate.divs + 1), dtype=float) + dx = ( zgate.max - zgate.min)/ zgate.divs + x = zgate.min + for i in range( xgate.divs + 1 ): + if ( x < ( xmax / 4.0 ) ): + zA[i] = x * 4.0 / xmax + else: + zA[i] = 1.0 + zB[i] = 1.0 + x += dx + zgate.tableA = zA + zgate.tableB = zB # Now we need to provide for messages that link to external elements. # The message that sends the Ca concentration to the Z gate tables is stored # in an added field of the channel, so that it may be found by the cell # reader. - addmsg1 = moose.Mstring( '/library/K_C/addmsg1' ) - addmsg1.value = '../Ca_conc concOut . concen' + addmsg1 = moose.Mstring( '/library/K_C/addmsg1' ) + addmsg1.value = '../Ca_conc concOut . concen' # The remaining channels are straightforward tabchannel implementations @@ -301,133 +301,133 @@ def make_K_C(): #/ Tabchannel Na Hippocampal cell channel #/======================================================================== def make_Na(): - if moose.exists( 'Na' ): - return - Na = moose.HHChannel( 'Na' ) - Na.Ek = ENA # V - Na.Gbar = 300 * SOMA_A # S - Na.Gk = 0 # S - Na.Xpower = 2 - Na.Ypower = 1 - Na.Zpower = 0 - - xgate = moose.element( 'Na/gateX' ) - xA = numpy.array( [ 320e3 * (0.0131 + EREST_ACT), - -320e3, -1.0, -1.0 * (0.0131 + EREST_ACT), -0.004, - -280e3 * (0.0401 + EREST_ACT), 280e3, -1.0, - -1.0 * (0.0401 + EREST_ACT), 5.0e-3, - 3000, -0.1, 0.05 ] ) - xgate.alphaParms = xA - - - #xgate.alpha( 320e3 * (0.0131 + EREST_ACT), -320e3, -1.0, -1.0 * (0.0131 + EREST_ACT), -0.004 ) - #xgate.beta( -280e3 * (0.0401 + EREST_ACT), 280e3, -1.0, -1.0 * (0.0401 + EREST_ACT), 5.0e-3 ) - - ygate = moose.element( 'Na/gateY' ) - yA = numpy.array( [ 128.0, 0.0, 0.0, -1.0 * (0.017 + EREST_ACT), 0.018, - 4.0e3, 0.0, 1.0, -1.0 * (0.040 + EREST_ACT), -5.0e-3, - 3000, -0.1, 0.05 ] ) - ygate.alphaParms = yA - - #ygate.alpha( 128.0, 0.0, 0.0, -1.0 * (0.017 + EREST_ACT), 0.018 ) - #ygate.beta( 4.0e3, 0.0, 1.0, -1.0 * (0.040 + EREST_ACT), -5.0e-3 ) + if moose.exists( 'Na' ): + return + Na = moose.HHChannel( 'Na' ) + Na.Ek = ENA # V + Na.Gbar = 300 * SOMA_A # S + Na.Gk = 0 # S + Na.Xpower = 2 + Na.Ypower = 1 + Na.Zpower = 0 + + xgate = moose.element( 'Na/gateX' ) + xA = numpy.array( [ 320e3 * (0.0131 + EREST_ACT), + -320e3, -1.0, -1.0 * (0.0131 + EREST_ACT), -0.004, + -280e3 * (0.0401 + EREST_ACT), 280e3, -1.0, + -1.0 * (0.0401 + EREST_ACT), 5.0e-3, + 3000, -0.1, 0.05 ] ) + xgate.alphaParms = xA + + + #xgate.alpha( 320e3 * (0.0131 + EREST_ACT), -320e3, -1.0, -1.0 * (0.0131 + EREST_ACT), -0.004 ) + #xgate.beta( -280e3 * (0.0401 + EREST_ACT), 280e3, -1.0, -1.0 * (0.0401 + EREST_ACT), 5.0e-3 ) + + ygate = moose.element( 'Na/gateY' ) + yA = numpy.array( [ 128.0, 0.0, 0.0, -1.0 * (0.017 + EREST_ACT), 0.018, + 4.0e3, 0.0, 1.0, -1.0 * (0.040 + EREST_ACT), -5.0e-3, + 3000, -0.1, 0.05 ] ) + ygate.alphaParms = yA + + #ygate.alpha( 128.0, 0.0, 0.0, -1.0 * (0.017 + EREST_ACT), 0.018 ) + #ygate.beta( 4.0e3, 0.0, 1.0, -1.0 * (0.040 + EREST_ACT), -5.0e-3 ) #======================================================================== # Tabchannel K(DR) Hippocampal cell channel #======================================================================== def make_K_DR(): - if moose.exists( 'K_DR' ): - return - K_DR = moose.HHChannel( 'K_DR' ) - K_DR.Ek = EK # V - K_DR.Gbar = 150 * SOMA_A # S - K_DR.Gk = 0 # S - K_DR.Xpower = 1 - K_DR.Ypower = 0 - K_DR.Zpower = 0 - - xgate = moose.element( 'K_DR/gateX' ) - xA = numpy.array( [ 16e3 * (0.0351 + EREST_ACT), - -16e3, -1.0, -1.0 * (0.0351 + EREST_ACT), -0.005, - 250, 0.0, 0.0, -1.0 * (0.02 + EREST_ACT), 0.04, - 3000, -0.1, 0.05 ] ) - xgate.alphaParms = xA - #xgate.alpha( 16e3 * (0.0351 + EREST_ACT), -16e3, -1.0, -1.0 * (0.0351 + EREST_ACT), -0.005 ) - #xgate.beta( 250, 0.0, 0.0, -1.0 * (0.02 + EREST_ACT), 0.04 ) + if moose.exists( 'K_DR' ): + return + K_DR = moose.HHChannel( 'K_DR' ) + K_DR.Ek = EK # V + K_DR.Gbar = 150 * SOMA_A # S + K_DR.Gk = 0 # S + K_DR.Xpower = 1 + K_DR.Ypower = 0 + K_DR.Zpower = 0 + + xgate = moose.element( 'K_DR/gateX' ) + xA = numpy.array( [ 16e3 * (0.0351 + EREST_ACT), + -16e3, -1.0, -1.0 * (0.0351 + EREST_ACT), -0.005, + 250, 0.0, 0.0, -1.0 * (0.02 + EREST_ACT), 0.04, + 3000, -0.1, 0.05 ] ) + xgate.alphaParms = xA + #xgate.alpha( 16e3 * (0.0351 + EREST_ACT), -16e3, -1.0, -1.0 * (0.0351 + EREST_ACT), -0.005 ) + #xgate.beta( 250, 0.0, 0.0, -1.0 * (0.02 + EREST_ACT), 0.04 ) #======================================================================== # Tabchannel K(A) Hippocampal cell channel #======================================================================== def make_K_A(): - if moose.exists( 'K_A' ): - return - K_A = moose.HHChannel( 'K_A' ) - K_A.Ek = EK # V - K_A.Gbar = 50 * SOMA_A # S - K_A.Gk = 0 # S - K_A.Xpower = 1 - K_A.Ypower = 1 - K_A.Zpower = 0 - - xgate = moose.element( 'K_A/gateX' ) - xA = numpy.array( [ 20e3 * (0.0131 + EREST_ACT), - -20e3, -1.0, -1.0 * (0.0131 + EREST_ACT), -0.01, - -17.5e3 * (0.0401 + EREST_ACT), - 17.5e3, -1.0, -1.0 * (0.0401 + EREST_ACT), 0.01, - 3000, -0.1, 0.05 ] ) - xgate.alphaParms = xA - # xgate.alpha( 20e3 * (0.0131 + EREST_ACT), -20e3, -1.0, -1.0 * (0.0131 + EREST_ACT), -0.01 ) - # xgate.beta( -17.5e3 * (0.0401 + EREST_ACT), 17.5e3, -1.0, -1.0 * (0.0401 + EREST_ACT), 0.01 ) - - ygate = moose.element( 'K_A/gateY' ) - yA = numpy.array( [ 1.6, 0.0, 0.0, 0.013 - EREST_ACT, 0.018, - 50.0, 0.0, 1.0, -1.0 * (0.0101 + EREST_ACT), -0.005, - 3000, -0.1, 0.05 ] ) - ygate.alphaParms = yA - # ygate.alpha( 1.6, 0.0, 0.0, 0.013 - EREST_ACT, 0.018 ) - # ygate.beta( 50.0, 0.0, 1.0, -1.0 * (0.0101 + EREST_ACT), -0.005 ) + if moose.exists( 'K_A' ): + return + K_A = moose.HHChannel( 'K_A' ) + K_A.Ek = EK # V + K_A.Gbar = 50 * SOMA_A # S + K_A.Gk = 0 # S + K_A.Xpower = 1 + K_A.Ypower = 1 + K_A.Zpower = 0 + + xgate = moose.element( 'K_A/gateX' ) + xA = numpy.array( [ 20e3 * (0.0131 + EREST_ACT), + -20e3, -1.0, -1.0 * (0.0131 + EREST_ACT), -0.01, + -17.5e3 * (0.0401 + EREST_ACT), + 17.5e3, -1.0, -1.0 * (0.0401 + EREST_ACT), 0.01, + 3000, -0.1, 0.05 ] ) + xgate.alphaParms = xA + # xgate.alpha( 20e3 * (0.0131 + EREST_ACT), -20e3, -1.0, -1.0 * (0.0131 + EREST_ACT), -0.01 ) + # xgate.beta( -17.5e3 * (0.0401 + EREST_ACT), 17.5e3, -1.0, -1.0 * (0.0401 + EREST_ACT), 0.01 ) + + ygate = moose.element( 'K_A/gateY' ) + yA = numpy.array( [ 1.6, 0.0, 0.0, 0.013 - EREST_ACT, 0.018, + 50.0, 0.0, 1.0, -1.0 * (0.0101 + EREST_ACT), -0.005, + 3000, -0.1, 0.05 ] ) + ygate.alphaParms = yA + # ygate.alpha( 1.6, 0.0, 0.0, 0.013 - EREST_ACT, 0.018 ) + # ygate.beta( 50.0, 0.0, 1.0, -1.0 * (0.0101 + EREST_ACT), -0.005 ) #======================================================================== # SynChan: Glu receptor #======================================================================== def make_glu(): - if moose.exists( 'glu' ): - return - glu = moose.SynChan( 'glu' ) - glu.Ek = 0.0 - glu.tau1 = 2.0e-3 - glu.tau2 = 9.0e-3 - glu.Gbar = 40 * SOMA_A + if moose.exists( 'glu' ): + return + glu = moose.SynChan( 'glu' ) + glu.Ek = 0.0 + glu.tau1 = 2.0e-3 + glu.tau2 = 9.0e-3 + glu.Gbar = 40 * SOMA_A #======================================================================== # SynChan: NMDA receptor #======================================================================== def make_NMDA(): - if moose.exists( 'NMDA' ): - return - NMDA = moose.SynChan( 'NMDA' ) - NMDA.Ek = 0.0 - NMDA.tau1 = 20.0e-3 - NMDA.tau2 = 20.0e-3 - NMDA.Gbar = 5 * SOMA_A - - block = moose.MgBlock( '/library/NMDA/block' ) - block.CMg = 1.2 # [Mg] in mM - block.Zk = 2 - block.KMg_A = 1.0/0.28 - block.KMg_B = 1.0/62 - - moose.connect( NMDA, 'channelOut', block, 'origChannel', 'OneToOne' ) - addmsg1 = moose.Mstring( '/library/NMDA/addmsg1' ) - addmsg1.value = '.. channel ./block channel' - #Here we want to also tell the cell reader to _remove_ the original - #Gk, Ek term going from the channel to the compartment, as this is - # now handled by the MgBlock. - #addmsg2 = moose.Mstring( 'NMDA/addmsg2' - #addmsg2.value = 'DropMsg .. channel' - addmsg3 = moose.Mstring( '/library/NMDA/addmsg3' ) - addmsg3.value = '.. VmOut . Vm' + if moose.exists( 'NMDA' ): + return + NMDA = moose.SynChan( 'NMDA' ) + NMDA.Ek = 0.0 + NMDA.tau1 = 20.0e-3 + NMDA.tau2 = 20.0e-3 + NMDA.Gbar = 5 * SOMA_A + + block = moose.MgBlock( '/library/NMDA/block' ) + block.CMg = 1.2 # [Mg] in mM + block.Zk = 2 + block.KMg_A = 1.0/0.28 + block.KMg_B = 1.0/62 + + moose.connect( NMDA, 'channelOut', block, 'origChannel', 'OneToOne' ) + addmsg1 = moose.Mstring( '/library/NMDA/addmsg1' ) + addmsg1.value = '.. channel ./block channel' + #Here we want to also tell the cell reader to _remove_ the original + #Gk, Ek term going from the channel to the compartment, as this is + # now handled by the MgBlock. + #addmsg2 = moose.Mstring( 'NMDA/addmsg2' + #addmsg2.value = 'DropMsg .. channel' + addmsg3 = moose.Mstring( '/library/NMDA/addmsg3' ) + addmsg3.value = '.. VmOut . Vm' #addfield NMDA addmsg1 @@ -448,37 +448,37 @@ def make_NMDA(): #======================================================================== def make_Ca_NMDA(): - if moose.exists( 'Ca_NMDA' ): - return - Ca_NMDA = moose.SynChan( 'Ca_NMDA' ) - Ca_NMDA.Ek = ECA - Ca_NMDA.tau1 = 20.0e-3 - Ca_NMDA.tau2 = 20.0e-3 - Ca_NMDA.Gbar = 5 * SOMA_A - - block = moose.MgBlock( '/library/Ca_NMDA/block' ) - block.CMg = 1.2 # [Mg] in mM - block.Zk = 2 - block.KMg_A = 1.0/0.28 - block.KMg_B = 1.0/62 - - moose.connect( Ca_NMDA, 'channelOut', block, 'origChannel', 'OneToOne' ) - addmsg1 = moose.Mstring( '/library/Ca_NMDA/addmsg1' ) - addmsg1.value = '.. VmOut ./block Vm' - addmsg2 = moose.Mstring( '/library/Ca_NMDA/addmsg2' ) - addmsg2.value = './block IkOut ../NMDA_Ca_conc current' - # The original model has the Ca current also coming here. + if moose.exists( 'Ca_NMDA' ): + return + Ca_NMDA = moose.SynChan( 'Ca_NMDA' ) + Ca_NMDA.Ek = ECA + Ca_NMDA.tau1 = 20.0e-3 + Ca_NMDA.tau2 = 20.0e-3 + Ca_NMDA.Gbar = 5 * SOMA_A + + block = moose.MgBlock( '/library/Ca_NMDA/block' ) + block.CMg = 1.2 # [Mg] in mM + block.Zk = 2 + block.KMg_A = 1.0/0.28 + block.KMg_B = 1.0/62 + + moose.connect( Ca_NMDA, 'channelOut', block, 'origChannel', 'OneToOne' ) + addmsg1 = moose.Mstring( '/library/Ca_NMDA/addmsg1' ) + addmsg1.value = '.. VmOut ./block Vm' + addmsg2 = moose.Mstring( '/library/Ca_NMDA/addmsg2' ) + addmsg2.value = './block IkOut ../NMDA_Ca_conc current' + # The original model has the Ca current also coming here. #======================================================================== # Ca pool for influx through Ca_NMDA #======================================================================== def make_NMDA_Ca_conc(): - if moose.exists( 'NMDA_Ca_conc' ): - return - NMDA_Ca_conc = moose.CaConc( 'NMDA_Ca_conc' ) - NMDA_Ca_conc.tau = 0.004 # sec. Faster in spine than dend - NMDA_Ca_conc.B = 17.402e12 # overridden by cellreader. - NMDA_Ca_conc.Ca_base = 0.0 + if moose.exists( 'NMDA_Ca_conc' ): + return + NMDA_Ca_conc = moose.CaConc( 'NMDA_Ca_conc' ) + NMDA_Ca_conc.tau = 0.004 # sec. Faster in spine than dend + NMDA_Ca_conc.B = 17.402e12 # overridden by cellreader. + NMDA_Ca_conc.Ca_base = 0.0 # This pool used to set up Ca info coming to it. Now we insist that the # originating channel should specify the deferred message. @@ -489,9 +489,9 @@ def make_NMDA_Ca_conc(): #//addmsg axon/spike axon BUFFER name def make_axon(): - if moose.exists( 'axon' ): - return - axon = moose.SpikeGen( 'axon' ) - axon.threshold = -40e-3 # V - axon.abs_refract = 10e-3 # sec + if moose.exists( 'axon' ): + return + axon = moose.SpikeGen( 'axon' ) + axon.threshold = -40e-3 # V + axon.abs_refract = 10e-3 # sec diff --git a/moose-examples/snippets/MULTI/runcell18.py b/moose-examples/snippets/MULTI/runcell18.py index 3007dd726d8c871ef3e674a7501af74d48f83974..cbe5037c594bb37eca4086c9fcd286e24e89f723 100644 --- a/moose-examples/snippets/MULTI/runcell18.py +++ b/moose-examples/snippets/MULTI/runcell18.py @@ -6,10 +6,10 @@ import moose import proto18 def dumpPlots( fname ): - if ( os.path.exists( fname ) ): - os.remove( fname ) - tab.xplot( fname, 'soma.Vm' ) - catab.xplot( fname, 'soma.Ca' ) + if ( os.path.exists( fname ) ): + os.remove( fname ) + tab.xplot( fname, 'soma.Vm' ) + catab.xplot( fname, 'soma.Ca' ) library = moose.Neutral( '/library' ) moose.setCwe( '/library' ) @@ -38,7 +38,7 @@ soma.inject = 2e-10 moose.connect( tab, 'requestOut', soma, 'getVm' ) capool = moose.element( '/cell/soma/Ca_conc' ) moose.connect( catab, 'requestOut', capool, 'getCa' ) -print 1 +print((1)) dt = 50e-6 moose.setClock( 0, dt ) moose.setClock( 1, dt ) @@ -49,12 +49,12 @@ moose.useClock( 1, '/cell/##[ISA=Compartment]', 'process' ) moose.useClock( 2, '/cell/##[ISA!=Compartment]', 'process' ) moose.useClock( 3, '/graphs/soma,/graphs/ca', 'process' ) -print 2 +print((2)) moose.reinit() -print 3 +print((3)) moose.start( 0.1 ) dumpPlots( '50usec.plot' ) -print 4 +print((4)) moose.reinit() hsolve = moose.HSolve( '/cell/hsolve' ) moose.useClock( 1, '/cell/hsolve', 'process' ) @@ -62,10 +62,10 @@ hsolve.dt = dt hsolve.target = '/cell/soma' moose.reinit() moose.reinit() -print 5 +print((5)) moose.start( 0.1 ) -print 6 +print((6)) dumpPlots( 'h50usec.plot' ) -print 7 +print((7)) diff --git a/moose-examples/snippets/MULTI/x_compt.py b/moose-examples/snippets/MULTI/x_compt.py index 1aeba1f2c41183c4e259b8165358b4a065090730..62c20560e896179a52787a05c2fbdba6b7ffccdc 100644 --- a/moose-examples/snippets/MULTI/x_compt.py +++ b/moose-examples/snippets/MULTI/x_compt.py @@ -44,23 +44,23 @@ import proto18 EREST_ACT = -70e-3 def loadElec(): - library = moose.Neutral( '/library' ) - moose.setCwe( '/library' ) - proto18.make_Ca() - proto18.make_Ca_conc() - proto18.make_K_AHP() - proto18.make_K_C() - proto18.make_Na() - proto18.make_K_DR() - proto18.make_K_A() - proto18.make_glu() - proto18.make_NMDA() - proto18.make_Ca_NMDA() - proto18.make_NMDA_Ca_conc() - proto18.make_axon() - model = moose.Neutral( '/model' ) - cellId = moose.loadModel( 'ca1_asym.p', '/model/elec', "hsolve" ) - return cellId + library = moose.Neutral( '/library' ) + moose.setCwe( '/library' ) + proto18.make_Ca() + proto18.make_Ca_conc() + proto18.make_K_AHP() + proto18.make_K_C() + proto18.make_Na() + proto18.make_K_DR() + proto18.make_K_A() + proto18.make_glu() + proto18.make_NMDA() + proto18.make_Ca_NMDA() + proto18.make_NMDA_Ca_conc() + proto18.make_axon() + model = moose.Neutral( '/model' ) + cellId = moose.loadModel( 'ca1_asym.p', '/model/elec', "hsolve" ) + return cellId def addPlot( objpath, field, plot ): assert moose.exists( objpath ) @@ -79,169 +79,169 @@ def dumpPlots( fname ): moose.element( x[0] ).xplot( fname, x[0].name + '_e' ) def moveCompt( path, oldParent, newParent ): - meshEntries = moose.element( newParent.path + '/mesh' ) - # Set up vol messaging from new compts to all their child objects. - for x in moose.wildcardFind( path + '/##[ISA=PoolBase]' ): - moose.connect( meshEntries, 'mesh', x, 'mesh', 'OneToOne' ) - orig = moose.element( path ) - moose.move( orig, newParent ) - moose.delete( moose.vec( oldParent.path ) ) - chem = moose.element( '/model/chem' ) - moose.move( newParent, chem ) + meshEntries = moose.element( newParent.path + '/mesh' ) + # Set up vol messaging from new compts to all their child objects. + for x in moose.wildcardFind( path + '/##[ISA=PoolBase]' ): + moose.connect( meshEntries, 'mesh', x, 'mesh', 'OneToOne' ) + orig = moose.element( path ) + moose.move( orig, newParent ) + moose.delete( moose.vec( oldParent.path ) ) + chem = moose.element( '/model/chem' ) + moose.move( newParent, chem ) def loadChem( neuroCompt, spineCompt, psdCompt ): - # We need the compartments to come in with a volume of 1 to match the - # original CubeMesh. - assert( neuroCompt.volume == 1.0 ) - assert( spineCompt.volume == 1.0 ) - assert( psdCompt.volume == 1.0 ) - assert( neuroCompt.mesh.num == 1 ) - #print 'volume = ', neuroCompt.mesh[0].volume - #assert( neuroCompt.mesh[0].volume == 1.0 ) - #an unfortunate mismatch - # So we'll have to resize the volumes of the current compartments to the - # new ones. - - modelId = moose.loadModel( 'x_compt.g', '/model', 'ee' ) - chem = moose.element( '/model/model' ) - chem.name = 'chem' - oldN = moose.element( '/model/chem/compartment_1' ) - oldS = moose.element( '/model/chem/compartment_2' ) - oldP = moose.element( '/model/chem/kinetics' ) - oldN.volume = neuroCompt.mesh[0].volume - oldS.volume = spineCompt.mesh[0].volume - oldP.volume = psdCompt.mesh[0].volume - moveCompt( '/model/chem/kinetics/DEND', oldN, neuroCompt ) - moveCompt( '/model/chem/kinetics/SPINE', oldS, spineCompt ) - moveCompt( '/model/chem/kinetics/PSD', oldP, psdCompt ) + # We need the compartments to come in with a volume of 1 to match the + # original CubeMesh. + assert( neuroCompt.volume == 1.0 ) + assert( spineCompt.volume == 1.0 ) + assert( psdCompt.volume == 1.0 ) + assert( neuroCompt.mesh.num == 1 ) + #print 'volume = ', neuroCompt.mesh[0].volume + #assert( neuroCompt.mesh[0].volume == 1.0 ) + #an unfortunate mismatch + # So we'll have to resize the volumes of the current compartments to the + # new ones. + + modelId = moose.loadModel( 'x_compt.g', '/model', 'ee' ) + chem = moose.element( '/model/model' ) + chem.name = 'chem' + oldN = moose.element( '/model/chem/compartment_1' ) + oldS = moose.element( '/model/chem/compartment_2' ) + oldP = moose.element( '/model/chem/kinetics' ) + oldN.volume = neuroCompt.mesh[0].volume + oldS.volume = spineCompt.mesh[0].volume + oldP.volume = psdCompt.mesh[0].volume + moveCompt( '/model/chem/kinetics/DEND', oldN, neuroCompt ) + moveCompt( '/model/chem/kinetics/SPINE', oldS, spineCompt ) + moveCompt( '/model/chem/kinetics/PSD', oldP, psdCompt ) def makeNeuroMeshModel(): - diffLength = 20e-6 # But we only want diffusion over part of the model. - numSyn = 13 - elec = loadElec() - synInput = moose.SpikeGen( '/model/elec/synInput' ) - synInput.threshold = -1.0 - synInput.edgeTriggered = 0 - synInput.Vm( 0 ) - synInput.refractT = 47e-3 - - for i in range( numSyn ): - name = '/model/elec/spine_head_14_' + str( i + 1 ) - r = moose.element( name + '/glu' ) - r.synapse.num = 1 - syn = moose.element( r.path + '/synapse' ) - moose.connect( synInput, 'spikeOut', syn, 'addSpike', 'Single' ) - syn.weight = 0.2 * i * ( numSyn - 1 - i ) - syn.delay = i * 1.0e-3 - - neuroCompt = moose.NeuroMesh( '/model/neuroMesh' ) - #print 'neuroMeshvolume = ', neuroCompt.mesh[0].volume - neuroCompt.separateSpines = 1 - neuroCompt.diffLength = diffLength - neuroCompt.geometryPolicy = 'cylinder' - spineCompt = moose.SpineMesh( '/model/spineMesh' ) - #print 'spineMeshvolume = ', spineCompt.mesh[0].volume - moose.connect( neuroCompt, 'spineListOut', spineCompt, 'spineList', 'OneToOne' ) - psdCompt = moose.PsdMesh( '/model/psdMesh' ) - #print 'psdMeshvolume = ', psdCompt.mesh[0].volume - moose.connect( neuroCompt, 'psdListOut', psdCompt, 'psdList', 'OneToOne' ) - loadChem( neuroCompt, spineCompt, psdCompt ) - #for x in moose.wildcardFind( '/model/chem/##/Ca' ): - # x.diffConst = 1e-11 - - # Put in the solvers, see how they fare. - nmksolve = moose.GslStoich( '/model/chem/neuroMesh/ksolve' ) - nmksolve.path = '/model/chem/neuroMesh/##' - nmksolve.compartment = moose.element( '/model/chem/neuroMesh' ) - nmksolve.method = 'rk5' - nm = moose.element( '/model/chem/neuroMesh/mesh' ) - moose.connect( nm, 'remesh', nmksolve, 'remesh' ) + diffLength = 20e-6 # But we only want diffusion over part of the model. + numSyn = 13 + elec = loadElec() + synInput = moose.SpikeGen( '/model/elec/synInput' ) + synInput.threshold = -1.0 + synInput.edgeTriggered = 0 + synInput.Vm( 0 ) + synInput.refractT = 47e-3 + + for i in range( numSyn ): + name = '/model/elec/spine_head_14_' + str( i + 1 ) + r = moose.element( name + '/glu' ) + r.synapse.num = 1 + syn = moose.element( r.path + '/synapse' ) + moose.connect( synInput, 'spikeOut', syn, 'addSpike', 'Single' ) + syn.weight = 0.2 * i * ( numSyn - 1 - i ) + syn.delay = i * 1.0e-3 + + neuroCompt = moose.NeuroMesh( '/model/neuroMesh' ) + #print 'neuroMeshvolume = ', neuroCompt.mesh[0].volume + neuroCompt.separateSpines = 1 + neuroCompt.diffLength = diffLength + neuroCompt.geometryPolicy = 'cylinder' + spineCompt = moose.SpineMesh( '/model/spineMesh' ) + #print 'spineMeshvolume = ', spineCompt.mesh[0].volume + moose.connect( neuroCompt, 'spineListOut', spineCompt, 'spineList', 'OneToOne' ) + psdCompt = moose.PsdMesh( '/model/psdMesh' ) + #print 'psdMeshvolume = ', psdCompt.mesh[0].volume + moose.connect( neuroCompt, 'psdListOut', psdCompt, 'psdList', 'OneToOne' ) + loadChem( neuroCompt, spineCompt, psdCompt ) + #for x in moose.wildcardFind( '/model/chem/##/Ca' ): + # x.diffConst = 1e-11 + + # Put in the solvers, see how they fare. + nmksolve = moose.GslStoich( '/model/chem/neuroMesh/ksolve' ) + nmksolve.path = '/model/chem/neuroMesh/##' + nmksolve.compartment = moose.element( '/model/chem/neuroMesh' ) + nmksolve.method = 'rk5' + nm = moose.element( '/model/chem/neuroMesh/mesh' ) + moose.connect( nm, 'remesh', nmksolve, 'remesh' ) #print "neuron: nv=", nmksolve.numLocalVoxels, ", nav=", nmksolve.numAllVoxels, nmksolve.numVarPools, nmksolve.numAllPools #print 'setting up smksolve' - smksolve = moose.GslStoich( '/model/chem/spineMesh/ksolve' ) - smksolve.path = '/model/chem/spineMesh/##' - smksolve.compartment = moose.element( '/model/chem/spineMesh' ) - smksolve.method = 'rk5' - sm = moose.element( '/model/chem/spineMesh/mesh' ) - moose.connect( sm, 'remesh', smksolve, 'remesh' ) - #print "spine: nv=", smksolve.numLocalVoxels, ", nav=", smksolve.numAllVoxels, smksolve.numVarPools, smksolve.numAllPools - # - #print 'setting up pmksolve' - pmksolve = moose.GslStoich( '/model/chem/psdMesh/ksolve' ) - pmksolve.path = '/model/chem/psdMesh/##' - pmksolve.compartment = moose.element( '/model/chem/psdMesh' ) - pmksolve.method = 'rk5' - pm = moose.element( '/model/chem/psdMesh/mesh' ) - moose.connect( pm, 'remesh', pmksolve, 'remesh' ) - #print "psd: nv=", pmksolve.numLocalVoxels, ", nav=", pmksolve.numAllVoxels, pmksolve.numVarPools, pmksolve.numAllPools - # - #print 'neuroMeshvolume = ', neuroCompt.mesh[0].volume - - #print 'Assigning the cell model' - # Now to set up the model. - #neuroCompt.cell = elec - neuroCompt.cellPortion( elec, '/model/elec/lat_14_#,/model/elec/spine_neck#,/model/elec/spine_head#' ) - ns = neuroCompt.numSegments - #assert( ns == 11 ) # dend, 5x (shaft+head) - ndc = neuroCompt.numDiffCompts - assert( ndc == 13 ) - ndc = neuroCompt.mesh.num - assert( ndc == 13 ) - - sdc = spineCompt.mesh.num - assert( sdc == 13 ) - pdc = psdCompt.mesh.num - assert( pdc == 13 ) - #print 'mesh nums ( neuro, spine, psd ) = ', ndc, sdc, pdc, ', numSeg = ', ns - - mesh = moose.vec( '/model/chem/neuroMesh/mesh' ) - #for i in range( ndc ): - # print 's[', i, '] = ', mesh[i].volume - mesh2 = moose.vec( '/model/chem/spineMesh/mesh' ) -# for i in range( sdc ): -# print 's[', i, '] = ', mesh2[i].volume - #print 'numPSD = ', moose.element( '/model/chem/psdMesh/mesh' ).localNumField - mesh = moose.vec( '/model/chem/psdMesh/mesh' ) - #print 'psd mesh.volume = ', mesh.volume - #for i in range( pdc ): - # print 's[', i, '] = ', mesh[i].volume - # - # We need to use the spine solver as the master for the purposes of - # these calculations. This will handle the diffusion calculations - # between head and dendrite, and between head and PSD. - smksolve.addJunction( nmksolve ) - #print "spine: nv=", smksolve.numLocalVoxels, ", nav=", smksolve.numAllVoxels, smksolve.numVarPools, smksolve.numAllPools - smksolve.addJunction( pmksolve ) - #print "psd: nv=", pmksolve.numLocalVoxels, ", nav=", pmksolve.numAllVoxels, pmksolve.numVarPools, pmksolve.numAllPools - - # oddly, numLocalFields does not work. - #moose.le( '/model/chem/neuroMesh' ) - ca = moose.element( '/model/chem/neuroMesh/DEND/Ca' ) - assert( ca.lastDimension == ndc ) - """ - CaNpsd = moose.vec( '/model/chem/psdMesh/PSD/PP1_PSD/CaN' ) - print 'numCaN in PSD = ', CaNpsd.nInit, ', vol = ', CaNpsd.volume - CaNspine = moose.vec( '/model/chem/spineMesh/SPINE/CaN_BULK/CaN' ) - print 'numCaN in spine = ', CaNspine.nInit, ', vol = ', CaNspine.volume - """ - - # set up adaptors - aCa = moose.Adaptor( '/model/chem/psdMesh/adaptCa', pdc ) - adaptCa = moose.vec( '/model/chem/psdMesh/adaptCa' ) - chemCa = moose.vec( '/model/chem/psdMesh/PSD/Ca' ) - assert( len( adaptCa ) == pdc ) - assert( len( chemCa ) == pdc ) - for i in range( pdc ): - path = '/model/elec/spine_head_14_' + str( i + 1 ) + '/NMDA_Ca_conc' - elecCa = moose.element( path ) - moose.connect( elecCa, 'concOut', adaptCa[i], 'input', 'Single' ) - moose.connect( adaptCa, 'outputSrc', chemCa, 'setConc', 'OneToOne' ) - adaptCa.inputOffset = 0.0 # - adaptCa.outputOffset = 0.000 # 100 nM offset in chem. - adaptCa.scale = 1e-5 # 520 to 0.0052 mM - #print adaptCa.outputOffset - #print adaptCa.scale + smksolve = moose.GslStoich( '/model/chem/spineMesh/ksolve' ) + smksolve.path = '/model/chem/spineMesh/##' + smksolve.compartment = moose.element( '/model/chem/spineMesh' ) + smksolve.method = 'rk5' + sm = moose.element( '/model/chem/spineMesh/mesh' ) + moose.connect( sm, 'remesh', smksolve, 'remesh' ) + #print "spine: nv=", smksolve.numLocalVoxels, ", nav=", smksolve.numAllVoxels, smksolve.numVarPools, smksolve.numAllPools + # + #print 'setting up pmksolve' + pmksolve = moose.GslStoich( '/model/chem/psdMesh/ksolve' ) + pmksolve.path = '/model/chem/psdMesh/##' + pmksolve.compartment = moose.element( '/model/chem/psdMesh' ) + pmksolve.method = 'rk5' + pm = moose.element( '/model/chem/psdMesh/mesh' ) + moose.connect( pm, 'remesh', pmksolve, 'remesh' ) + #print "psd: nv=", pmksolve.numLocalVoxels, ", nav=", pmksolve.numAllVoxels, pmksolve.numVarPools, pmksolve.numAllPools + # + #print 'neuroMeshvolume = ', neuroCompt.mesh[0].volume + + #print 'Assigning the cell model' + # Now to set up the model. + #neuroCompt.cell = elec + neuroCompt.cellPortion( elec, '/model/elec/lat_14_#,/model/elec/spine_neck#,/model/elec/spine_head#' ) + ns = neuroCompt.numSegments + #assert( ns == 11 ) # dend, 5x (shaft+head) + ndc = neuroCompt.numDiffCompts + assert( ndc == 13 ) + ndc = neuroCompt.mesh.num + assert( ndc == 13 ) + + sdc = spineCompt.mesh.num + assert( sdc == 13 ) + pdc = psdCompt.mesh.num + assert( pdc == 13 ) + #print 'mesh nums ( neuro, spine, psd ) = ', ndc, sdc, pdc, ', numSeg = ', ns + + mesh = moose.vec( '/model/chem/neuroMesh/mesh' ) + #for i in range( ndc ): + # print 's[', i, '] = ', mesh[i].volume + mesh2 = moose.vec( '/model/chem/spineMesh/mesh' ) +# for i in range( sdc ): +# print 's[', i, '] = ', mesh2[i].volume + #print 'numPSD = ', moose.element( '/model/chem/psdMesh/mesh' ).localNumField + mesh = moose.vec( '/model/chem/psdMesh/mesh' ) + #print 'psd mesh.volume = ', mesh.volume + #for i in range( pdc ): + # print 's[', i, '] = ', mesh[i].volume + # + # We need to use the spine solver as the master for the purposes of + # these calculations. This will handle the diffusion calculations + # between head and dendrite, and between head and PSD. + smksolve.addJunction( nmksolve ) + #print "spine: nv=", smksolve.numLocalVoxels, ", nav=", smksolve.numAllVoxels, smksolve.numVarPools, smksolve.numAllPools + smksolve.addJunction( pmksolve ) + #print "psd: nv=", pmksolve.numLocalVoxels, ", nav=", pmksolve.numAllVoxels, pmksolve.numVarPools, pmksolve.numAllPools + + # oddly, numLocalFields does not work. + #moose.le( '/model/chem/neuroMesh' ) + ca = moose.element( '/model/chem/neuroMesh/DEND/Ca' ) + assert( ca.lastDimension == ndc ) + """ + CaNpsd = moose.vec( '/model/chem/psdMesh/PSD/PP1_PSD/CaN' ) + print 'numCaN in PSD = ', CaNpsd.nInit, ', vol = ', CaNpsd.volume + CaNspine = moose.vec( '/model/chem/spineMesh/SPINE/CaN_BULK/CaN' ) + print 'numCaN in spine = ', CaNspine.nInit, ', vol = ', CaNspine.volume + """ + + # set up adaptors + aCa = moose.Adaptor( '/model/chem/psdMesh/adaptCa', pdc ) + adaptCa = moose.vec( '/model/chem/psdMesh/adaptCa' ) + chemCa = moose.vec( '/model/chem/psdMesh/PSD/Ca' ) + assert( len( adaptCa ) == pdc ) + assert( len( chemCa ) == pdc ) + for i in range( pdc ): + path = '/model/elec/spine_head_14_' + str( i + 1 ) + '/NMDA_Ca_conc' + elecCa = moose.element( path ) + moose.connect( elecCa, 'concOut', adaptCa[i], 'input', 'Single' ) + moose.connect( adaptCa, 'outputSrc', chemCa, 'setConc', 'OneToOne' ) + adaptCa.inputOffset = 0.0 # + adaptCa.outputOffset = 0.000 # 100 nM offset in chem. + adaptCa.scale = 1e-5 # 520 to 0.0052 mM + #print adaptCa.outputOffset + #print adaptCa.scale def makeElecPlots(): graphs = moose.Neutral( '/graphs' ) @@ -294,83 +294,83 @@ def makeChemPlots(): addPlot( '/model/chem/spineMesh/SPINE/bar[6]', 'getConc', 'bar6' ) def testNeuroMeshMultiscale(): - elecDt = 50e-6 - chemDt = 1e-4 - plotDt = 5e-4 - plotName = 'x_compt.plot' - - makeNeuroMeshModel() - """ - for i in moose.wildcardFind( '/model/chem/##[ISA=PoolBase]' ): - if ( i[0].diffConst > 0 ): - grandpaname = i.parent[0].parent.name + '/' - paname = i.parent[0].name + '/' - print grandpaname + paname + i[0].name, i[0].diffConst - """ - """ - moose.le( '/model/chem/spineMesh/ksolve' ) - print 'Neighbors:' - for t in moose.element( '/model/chem/spineMesh/ksolve/junction' ).neighbors['masterJunction']: - print 'masterJunction <-', t.path - for t in moose.wildcardFind( '/model/chem/#Mesh/ksolve' ): - k = moose.element( t[0] ) - print k.path + ' localVoxels=', k.numLocalVoxels, ', allVoxels= ', k.numAllVoxels - """ - - makeChemPlots() - makeElecPlots() - moose.setClock( 0, elecDt ) - moose.setClock( 1, elecDt ) - moose.setClock( 2, elecDt ) - moose.setClock( 5, chemDt ) - moose.setClock( 6, chemDt ) - moose.setClock( 7, plotDt ) - moose.setClock( 8, plotDt ) - moose.useClock( 0, '/model/elec/##[ISA=Compartment]', 'init' ) - moose.useClock( 1, '/model/elec/##[ISA=SpikeGen]', 'process' ) - moose.useClock( 2, '/model/elec/##[ISA=ChanBase],/model/##[ISA=SynBase],/model/##[ISA=CaConc]','process') - moose.useClock( 5, '/model/chem/##[ISA=PoolBase],/model/##[ISA=ReacBase],/model/##[ISA=EnzBase]', 'process' ) - moose.useClock( 6, '/model/chem/##[ISA=Adaptor]', 'process' ) - moose.useClock( 7, '/graphs/#', 'process' ) - moose.useClock( 8, '/graphs/elec/#', 'process' ) - moose.useClock( 5, '/model/chem/#Mesh/ksolve', 'init' ) - moose.useClock( 6, '/model/chem/#Mesh/ksolve', 'process' ) - hsolve = moose.HSolve( '/model/elec/hsolve' ) - moose.useClock( 1, '/model/elec/hsolve', 'process' ) - hsolve.dt = elecDt - hsolve.target = '/model/elec/compt' - moose.reinit() - moose.reinit() - """ - print 'pre' - eca = moose.vec( '/model/chem/psdMesh/PSD/CaM/Ca' ) - for i in range( 3 ): - print eca[i].concInit, eca[i].conc, eca[i].nInit, eca[i].n, eca[i].volume - print 'dend' - eca = moose.vec( '/model/chem/neuroMesh/DEND/Ca' ) - for i in ( 0, 1, 2, 30, 60, 90, 120, 144 ): - print i, eca[i].concInit, eca[i].conc, eca[i].nInit, eca[i].n, eca[i].volume - - print 'PSD' - eca = moose.vec( '/model/chem/psdMesh/PSD/CaM/Ca' ) - for i in range( 3 ): - print eca[i].concInit, eca[i].conc, eca[i].nInit, eca[i].n, eca[i].volume - print 'spine' - eca = moose.vec( '/model/chem/spineMesh/SPINE/CaM/Ca' ) - for i in range( 3 ): - print eca[i].concInit, eca[i].conc, eca[i].nInit, eca[i].n, eca[i].volume - """ - - moose.start( 0.5 ) - dumpPlots( plotName ) - print 'All done' + elecDt = 50e-6 + chemDt = 1e-4 + plotDt = 5e-4 + plotName = 'x_compt.plot' + + makeNeuroMeshModel() + """ + for i in moose.wildcardFind( '/model/chem/##[ISA=PoolBase]' ): + if ( i[0].diffConst > 0 ): + grandpaname = i.parent[0].parent.name + '/' + paname = i.parent[0].name + '/' + print grandpaname + paname + i[0].name, i[0].diffConst + """ + """ + moose.le( '/model/chem/spineMesh/ksolve' ) + print 'Neighbors:' + for t in moose.element( '/model/chem/spineMesh/ksolve/junction' ).neighbors['masterJunction']: + print 'masterJunction <-', t.path + for t in moose.wildcardFind( '/model/chem/#Mesh/ksolve' ): + k = moose.element( t[0] ) + print k.path + ' localVoxels=', k.numLocalVoxels, ', allVoxels= ', k.numAllVoxels + """ + + makeChemPlots() + makeElecPlots() + moose.setClock( 0, elecDt ) + moose.setClock( 1, elecDt ) + moose.setClock( 2, elecDt ) + moose.setClock( 5, chemDt ) + moose.setClock( 6, chemDt ) + moose.setClock( 7, plotDt ) + moose.setClock( 8, plotDt ) + moose.useClock( 0, '/model/elec/##[ISA=Compartment]', 'init' ) + moose.useClock( 1, '/model/elec/##[ISA=SpikeGen]', 'process' ) + moose.useClock( 2, '/model/elec/##[ISA=ChanBase],/model/##[ISA=SynBase],/model/##[ISA=CaConc]','process') + moose.useClock( 5, '/model/chem/##[ISA=PoolBase],/model/##[ISA=ReacBase],/model/##[ISA=EnzBase]', 'process' ) + moose.useClock( 6, '/model/chem/##[ISA=Adaptor]', 'process' ) + moose.useClock( 7, '/graphs/#', 'process' ) + moose.useClock( 8, '/graphs/elec/#', 'process' ) + moose.useClock( 5, '/model/chem/#Mesh/ksolve', 'init' ) + moose.useClock( 6, '/model/chem/#Mesh/ksolve', 'process' ) + hsolve = moose.HSolve( '/model/elec/hsolve' ) + moose.useClock( 1, '/model/elec/hsolve', 'process' ) + hsolve.dt = elecDt + hsolve.target = '/model/elec/compt' + moose.reinit() + moose.reinit() + """ + print 'pre' + eca = moose.vec( '/model/chem/psdMesh/PSD/CaM/Ca' ) + for i in range( 3 ): + print eca[i].concInit, eca[i].conc, eca[i].nInit, eca[i].n, eca[i].volume + print 'dend' + eca = moose.vec( '/model/chem/neuroMesh/DEND/Ca' ) + for i in ( 0, 1, 2, 30, 60, 90, 120, 144 ): + print i, eca[i].concInit, eca[i].conc, eca[i].nInit, eca[i].n, eca[i].volume + + print 'PSD' + eca = moose.vec( '/model/chem/psdMesh/PSD/CaM/Ca' ) + for i in range( 3 ): + print eca[i].concInit, eca[i].conc, eca[i].nInit, eca[i].n, eca[i].volume + print 'spine' + eca = moose.vec( '/model/chem/spineMesh/SPINE/CaM/Ca' ) + for i in range( 3 ): + print eca[i].concInit, eca[i].conc, eca[i].nInit, eca[i].n, eca[i].volume + """ + + moose.start( 0.5 ) + dumpPlots( plotName ) + print('All done') def main(): - testNeuroMeshMultiscale() + testNeuroMeshMultiscale() if __name__ == '__main__': - main() + main() # # loadMulti.py ends here. diff --git a/moose-examples/snippets/RandSpikeStats.py b/moose-examples/snippets/RandSpikeStats.py index cea9c03244ce1f75f2b4139024a0df08aa8c9b46..9be0ffa812edcde654ac1d639dc0eea4e8bd7498 100644 --- a/moose-examples/snippets/RandSpikeStats.py +++ b/moose-examples/snippets/RandSpikeStats.py @@ -102,4 +102,4 @@ def main(): # Run the 'main' if this script is executed standalone. if __name__ == '__main__': - main() + main() diff --git a/moose-examples/snippets/STDP.py b/moose-examples/snippets/STDP.py index dec9be84090458baed4e0e5a653ee6e7832abc35..bd16f32d92b4a6390ad25aa1e52042b358964f27 100644 --- a/moose-examples/snippets/STDP.py +++ b/moose-examples/snippets/STDP.py @@ -157,7 +157,7 @@ def main(): t_extent = 20e-3 # s # dt = tpost - tpre # negative dt corresponds to post before pre - print '-----------------------------------------------' + print('-----------------------------------------------') for deltat in arange(t_extent,0.0,-ddt): reset_settle() # post neuron spike @@ -167,9 +167,9 @@ def main(): make_neuron_spike(0) moose.start(1e-3) dw = ( syn.synapse[0].weight - weight ) / weight - print 'post before pre, dt = %1.3f s, dw/w = %1.3f'%(-deltat,dw) + print(('post before pre, dt = %1.3f s, dw/w = %1.3f'%(-deltat,dw))) dwlist_neg.append(dw) - print '-----------------------------------------------' + print('-----------------------------------------------') # positive dt corresponds to pre before post dwlist_pos = [] for deltat in arange(ddt,t_extent+ddt,ddt): @@ -181,9 +181,9 @@ def main(): make_neuron_spike(1) moose.start(1e-3) dw = ( syn.synapse[0].weight - weight ) / weight - print 'pre before post, dt = %1.3f s, dw/w = %1.3f'%(deltat,dw) + print(('pre before post, dt = %1.3f s, dw/w = %1.3f'%(deltat,dw))) dwlist_pos.append(dw) - print '-----------------------------------------------' + print('-----------------------------------------------') # ########################################### # Plot the simulated Vm-s and STDP curve diff --git a/moose-examples/snippets/bidirectionalPlasticity.py b/moose-examples/snippets/bidirectionalPlasticity.py index 11d6b5eedce56872c657fa13231f4037f3ee48d5..1101807e89bddf151c9a7b60850a52971699a010 100644 --- a/moose-examples/snippets/bidirectionalPlasticity.py +++ b/moose-examples/snippets/bidirectionalPlasticity.py @@ -49,13 +49,13 @@ def main(): modelId = moose.loadModel( './stargazin_synapse.g', 'model', method ) moose.start( 1000.0 ) # Run the model for 1000 seconds. Ca = moose.element( '/model/kinetics/BULK/Ca' ) - Ca.concInit = 2.0e-3 # Calcium stimulus for turnon + Ca.concInit = 2.0e-3 # Calcium stimulus for turnon moose.start( 20.0 ) # Run the model for 100 seconds. - Ca.concInit = 0.08e-3 # Calcium back to baseline + Ca.concInit = 0.08e-3 # Calcium back to baseline moose.start( 1000.0 ) # Let system settle for 1000 sec - Ca.concInit = 0.2e-3 # Calcium turnoff stimulus + Ca.concInit = 0.2e-3 # Calcium turnoff stimulus moose.start( 2000.0 ) # Run the model for 1000 seconds for turnoff - Ca.concInit = 0.08e-3 # Calcium back to baseline + Ca.concInit = 0.08e-3 # Calcium back to baseline moose.start( 2000.0 ) # Let system settle for 2000 sec displayPlots() @@ -63,4 +63,4 @@ def main(): # Run the 'main' if this script is executed standalone. if __name__ == '__main__': - main() + main() diff --git a/moose-examples/snippets/changeFuncExpression.py b/moose-examples/snippets/changeFuncExpression.py index 13e9b6cff79f7d278e80871a5e4888758ec651ba..0e6dd09a498a4acf5bc008faf17fb584bd2c0b90 100644 --- a/moose-examples/snippets/changeFuncExpression.py +++ b/moose-examples/snippets/changeFuncExpression.py @@ -23,29 +23,29 @@ import moose useY = False def makeModel(): - # create container for model - model = moose.Neutral( 'model' ) - compartment = moose.CubeMesh( '/model/compartment' ) - compartment.volume = 1e-15 - # the mesh is created automatically by the compartment - mesh = moose.element( '/model/compartment/mesh' ) - - # create molecules and reactions + # create container for model + model = moose.Neutral( 'model' ) + compartment = moose.CubeMesh( '/model/compartment' ) + compartment.volume = 1e-15 + # the mesh is created automatically by the compartment + mesh = moose.element( '/model/compartment/mesh' ) + + # create molecules and reactions # a <----> b # b + 10c ---func---> d - a = moose.Pool( '/model/compartment/a' ) - b = moose.Pool( '/model/compartment/b' ) - c = moose.Pool( '/model/compartment/c' ) - d = moose.BufPool( '/model/compartment/d' ) - reac = moose.Reac( '/model/compartment/reac' ) + a = moose.Pool( '/model/compartment/a' ) + b = moose.Pool( '/model/compartment/b' ) + c = moose.Pool( '/model/compartment/c' ) + d = moose.BufPool( '/model/compartment/d' ) + reac = moose.Reac( '/model/compartment/reac' ) func = moose.Function( '/model/compartment/d/func' ) func.numVars = 2 #func.x.num = 2 - # connect them up for reactions + # connect them up for reactions - moose.connect( reac, 'sub', a, 'reac' ) - moose.connect( reac, 'prd', b, 'reac' ) + moose.connect( reac, 'sub', a, 'reac' ) + moose.connect( reac, 'prd', b, 'reac' ) if useY: moose.connect( func, 'requestOut', b, 'getN' ) moose.connect( func, 'requestOut', c, 'getN' ) @@ -59,72 +59,72 @@ def makeModel(): else: func.expr = "x0 + 10*x1" - # connect them up to the compartment for volumes - #for x in ( a, b, c, cplx1, cplx2 ): - # moose.connect( x, 'mesh', mesh, 'mesh' ) - - # Assign parameters - a.concInit = 1 - b.concInit = 0.5 - c.concInit = 0.1 - reac.Kf = 0.001 - reac.Kb = 0.01 - - # Create the output tables - graphs = moose.Neutral( '/model/graphs' ) - outputA = moose.Table2 ( '/model/graphs/concA' ) - outputB = moose.Table2 ( '/model/graphs/concB' ) - outputC = moose.Table2 ( '/model/graphs/concC' ) - outputD = moose.Table2 ( '/model/graphs/concD' ) - - # connect up the tables - moose.connect( outputA, 'requestOut', a, 'getConc' ); - moose.connect( outputB, 'requestOut', b, 'getConc' ); - moose.connect( outputC, 'requestOut', c, 'getConc' ); - moose.connect( outputD, 'requestOut', d, 'getConc' ); + # connect them up to the compartment for volumes + #for x in ( a, b, c, cplx1, cplx2 ): + # moose.connect( x, 'mesh', mesh, 'mesh' ) + + # Assign parameters + a.concInit = 1 + b.concInit = 0.5 + c.concInit = 0.1 + reac.Kf = 0.001 + reac.Kb = 0.01 + + # Create the output tables + graphs = moose.Neutral( '/model/graphs' ) + outputA = moose.Table2 ( '/model/graphs/concA' ) + outputB = moose.Table2 ( '/model/graphs/concB' ) + outputC = moose.Table2 ( '/model/graphs/concC' ) + outputD = moose.Table2 ( '/model/graphs/concD' ) + + # connect up the tables + moose.connect( outputA, 'requestOut', a, 'getConc' ); + moose.connect( outputB, 'requestOut', b, 'getConc' ); + moose.connect( outputC, 'requestOut', c, 'getConc' ); + moose.connect( outputD, 'requestOut', d, 'getConc' ); def displayPlots(): - for x in moose.wildcardFind( '/model/graphs/conc#' ): - t = numpy.arange( 0, x.vector.size, 1 ) #sec - pylab.plot( t, x.vector, label=x.name ) - pylab.legend() - pylab.show() + for x in moose.wildcardFind( '/model/graphs/conc#' ): + t = numpy.arange( 0, x.vector.size, 1 ) #sec + pylab.plot( t, x.vector, label=x.name ) + pylab.legend() + pylab.show() def main(): - makeModel() + makeModel() ''' ''' - ksolve = moose.Ksolve( '/model/compartment/ksolve' ) - stoich = moose.Stoich( '/model/compartment/stoich' ) - stoich.compartment = moose.element( '/model/compartment' ) - stoich.ksolve = ksolve - stoich.path = "/model/compartment/##" - #solver.method = "rk5" - #mesh = moose.element( "/model/compartment/mesh" ) - #moose.connect( mesh, "remesh", solver, "remesh" ) + ksolve = moose.Ksolve( '/model/compartment/ksolve' ) + stoich = moose.Stoich( '/model/compartment/stoich' ) + stoich.compartment = moose.element( '/model/compartment' ) + stoich.ksolve = ksolve + stoich.path = "/model/compartment/##" + #solver.method = "rk5" + #mesh = moose.element( "/model/compartment/mesh" ) + #moose.connect( mesh, "remesh", solver, "remesh" ) ''' - moose.setClock( 5, 1.0 ) # clock for the solver - moose.useClock( 5, '/model/compartment/ksolve', 'process' ) + moose.setClock( 5, 1.0 ) # clock for the solver + moose.useClock( 5, '/model/compartment/ksolve', 'process' ) ''' - moose.reinit() - moose.start( 100.0 ) # Run the model for 100 seconds. + moose.reinit() + moose.start( 100.0 ) # Run the model for 100 seconds. func = moose.element( '/model/compartment/d/func' ) if useY: func.expr = "-y0 + 10*y1" else: func.expr = "-x0 + 10*x1" - moose.start( 100.0 ) # Run the model for 100 seconds. + moose.start( 100.0 ) # Run the model for 100 seconds. #moose.showfields( '/model/compartment/d' ) #moose.showfields( '/model/compartment/d/func' ) - print func.x.value - print moose.element( '/model/compartment/b' ).n + print((func.x.value)) + print((moose.element( '/model/compartment/b' ).n)) - # Iterate through all plots, dump their contents to data.plot. - displayPlots() + # Iterate through all plots, dump their contents to data.plot. + displayPlots() - quit() + quit() # Run the 'main' if this script is executed standalone. if __name__ == '__main__': - main() + main() diff --git a/moose-examples/snippets/chemDoseResponse.py b/moose-examples/snippets/chemDoseResponse.py index c3b7737079be134f3fee8c8bb67796051d94700b..42aa297e8750a8001922a212bfcf002d9b1b9245 100644 --- a/moose-examples/snippets/chemDoseResponse.py +++ b/moose-examples/snippets/chemDoseResponse.py @@ -183,4 +183,4 @@ def makeModel(): # Run the 'main' if this script is executed standalone. if __name__ == '__main__': - main() + main() diff --git a/moose-examples/snippets/compartment_net.py b/moose-examples/snippets/compartment_net.py index 8d66b30642d3cf695e41e0ffb7833997f4bc5316..58b32e9fa14b3d2deb3ad4791101c5fe5ffd145a 100644 --- a/moose-examples/snippets/compartment_net.py +++ b/moose-examples/snippets/compartment_net.py @@ -67,10 +67,10 @@ def create_population(container, size): """ path = container.path - print path, size, type(path) + print((path, size, type(path))) comps = create_1comp_neuron('{}/neuron'.format(path), number=size) synpath = path+'/synchan' - print synpath, size, type(size) + print((synpath, size, type(size))) synchan = moose.vec(synpath, n=size, dtype='SynChan') synchan.Gbar = 1e-8 synchan.tau1 = 2e-3 @@ -109,14 +109,14 @@ def make_synapses(spikegen, synhandler, connprob=1.0, delay=5e-3): sh.synapse.vec.delay = 5e-3 for ii, syn in enumerate(sh.synapse): msg = moose.connect(spikegen[ii], 'spikeOut', syn, 'addSpike') - print 'Connected', spikegen[ii].path, 'to', syn.path, 'on', sh.path + print(('Connected', spikegen[ii].path, 'to', syn.path, 'on', sh.path)) def create_network(size=2): """Create a network containing two neuronal populations, pop_A and pop_B and connect them up""" net = moose.Neutral('network') pop_a = create_population(moose.Neutral('/network/pop_A'), size) - print pop_a + print(pop_a) pop_b = create_population(moose.Neutral('/network/pop_B'), size) make_synapses(pop_a['spikegen'], pop_b['synhandler']) pulse = moose.PulseGen('pulse') @@ -156,7 +156,7 @@ if __name__ == '__main__': moose.start(simtime) plt.subplot(221) for oid in vm_a.vec: - print oid, oid.vector.shape + print((oid, oid.vector.shape)) plt.plot(oid.vector, label=oid.path) plt.legend() plt.subplot(223) diff --git a/moose-examples/snippets/compartment_net_no_array.py b/moose-examples/snippets/compartment_net_no_array.py index a67f271433b31712a770bbb039d843db95b51d7c..47beb305eaeca27293e22322990153e3565645e2 100644 --- a/moose-examples/snippets/compartment_net_no_array.py +++ b/moose-examples/snippets/compartment_net_no_array.py @@ -338,14 +338,14 @@ def assign_clocks(model_container_list, simdt, plotdt): global inited # `inited` is for avoiding double scheduling of the same object if not inited: - print 'SimDt=%g, PlotDt=%g' % (simdt, plotdt) + print(('SimDt=%g, PlotDt=%g' % (simdt, plotdt))) moose.setClock(0, simdt) moose.setClock(1, simdt) moose.setClock(2, simdt) moose.setClock(3, simdt) moose.setClock(4, plotdt) for path in model_container_list: - print 'Scheduling elements under:', path + print(('Scheduling elements under:', path)) moose.useClock(0, '%s/##[TYPE=Compartment]' % (path), 'init') moose.useClock(1, '%s/##[TYPE=Compartment]' % (path), 'process') moose.useClock(2, '%s/##[TYPE=SynChan],%s/##[TYPE=HHChannel]' % (path, path), 'process') diff --git a/moose-examples/snippets/compartmental_neuron.py b/moose-examples/snippets/compartmental_neuron.py index 86ba70fdf101656d78cd7ea3f9d37d531df849ee..33a5db56bbbe9bec7f080bd545f13942f69b13db 100644 --- a/moose-examples/snippets/compartmental_neuron.py +++ b/moose-examples/snippets/compartmental_neuron.py @@ -52,7 +52,7 @@ compartment and the membrane voltage in both compartments are recorded and saved into a csv file. """ -from __future__ import print_function + import sys import numpy as np import moose diff --git a/moose-examples/snippets/convert_Genesis2Sbml.py b/moose-examples/snippets/convert_Genesis2Sbml.py index 4fca921289c6affa66ed17194b9221c3139ca519..9366c29367cb6634ab38c05532eb62dcd6f6513b 100644 --- a/moose-examples/snippets/convert_Genesis2Sbml.py +++ b/moose-examples/snippets/convert_Genesis2Sbml.py @@ -52,13 +52,12 @@ def main(): into Moose using loadModel function and using writeSBML function one can save the model into SBML format. \n libsbml should be installed -""" - #This command loads the file into the path '/Kholodenko' - moose.loadModel('../genesis/Kholodenko.g','/Kholodenko') - - #Writes model to xml file - written = mooseWriteSBML('/Kholodenko','../genesis/Kholodenko_tosbml.xml') - print written + #This command loads the file into the path '/Kholodenko' + moose.loadModel('../genesis/Kholodenko.g','/Kholodenko') + + #Writes model to xml file + written = mooseWriteSBML('/Kholodenko','../genesis/Kholodenko_tosbml.xml') + print(written) if __name__ == '__main__': - main() + main() diff --git a/moose-examples/snippets/crossComptNeuroMesh.py b/moose-examples/snippets/crossComptNeuroMesh.py index 189cc3bec3ae657d3ace006bd7412c4315fc7b1c..24883b8b07a5548a512241d40fddc0c353b62617 100644 --- a/moose-examples/snippets/crossComptNeuroMesh.py +++ b/moose-examples/snippets/crossComptNeuroMesh.py @@ -12,8 +12,11 @@ import math import pylab import numpy import matplotlib.pyplot as plt +import sys import moose +print(( '[INFO] Using moose from %s' % moose.__file__ )) + def makeCompt( name, parent, dx, dy, dia ): RM = 1.0 RA = 1.0 @@ -67,40 +70,40 @@ def makeNeuron( numSeg ): def makeModel(): numSeg = 5 diffConst = 0.0 - # create container for model - model = moose.Neutral( 'model' ) - compt0 = moose.NeuroMesh( '/model/compt0' ) + # create container for model + model = moose.Neutral( 'model' ) + compt0 = moose.NeuroMesh( '/model/compt0' ) compt0.separateSpines = 1 compt0.geometryPolicy = 'cylinder' - compt1 = moose.SpineMesh( '/model/compt1' ) + compt1 = moose.SpineMesh( '/model/compt1' ) moose.connect( compt0, 'spineListOut', compt1, 'spineList', 'OneToOne' ) - compt2 = moose.PsdMesh( '/model/compt2' ) + compt2 = moose.PsdMesh( '/model/compt2' ) moose.connect( compt0, 'psdListOut', compt2, 'psdList', 'OneToOne' ) - # create molecules and reactions - a = moose.Pool( '/model/compt0/a' ) - b = moose.Pool( '/model/compt1/b' ) - c = moose.Pool( '/model/compt2/c' ) - reac0 = moose.Reac( '/model/compt0/reac0' ) - reac1 = moose.Reac( '/model/compt1/reac1' ) - - # connect them up for reactions - moose.connect( reac0, 'sub', a, 'reac' ) - moose.connect( reac0, 'prd', b, 'reac' ) - moose.connect( reac1, 'sub', b, 'reac' ) - moose.connect( reac1, 'prd', c, 'reac' ) - - # Assign parameters - a.diffConst = diffConst - b.diffConst = diffConst - c.diffConst = diffConst - a.concInit = 1 - b.concInit = 12.1 - c.concInit = 1 - reac0.Kf = 1 - reac0.Kb = 1 - reac1.Kf = 1 - reac1.Kb = 1 + # create molecules and reactions + a = moose.Pool( '/model/compt0/a' ) + b = moose.Pool( '/model/compt1/b' ) + c = moose.Pool( '/model/compt2/c' ) + reac0 = moose.Reac( '/model/compt0/reac0' ) + reac1 = moose.Reac( '/model/compt1/reac1' ) + + # connect them up for reactions + moose.connect( reac0, 'sub', a, 'reac' ) + moose.connect( reac0, 'prd', b, 'reac' ) + moose.connect( reac1, 'sub', b, 'reac' ) + moose.connect( reac1, 'prd', c, 'reac' ) + + # Assign parameters + a.diffConst = diffConst + b.diffConst = diffConst + c.diffConst = diffConst + a.concInit = 1 + b.concInit = 12.1 + c.concInit = 1 + reac0.Kf = 1 + reac0.Kb = 1 + reac1.Kf = 1 + reac1.Kb = 1 # Create a 'neuron' with a dozen spiny compartments. elec = makeNeuron( numSeg ) @@ -143,25 +146,25 @@ def makeModel(): stoich2.filterXreacs() - print a.vec.volume, b.vec.volume, c.vec.volume - a.vec.concInit = range( numSeg + 1, 0, -1 ) - b.vec.concInit = [5.0 * ( 1 + x ) for x in range( numSeg )] - c.vec.concInit = range( 1, numSeg + 1 ) - print a.vec.concInit, b.vec.concInit, c.vec.concInit + print((a.vec.volume, b.vec.volume, c.vec.volume)) + a.vec.concInit = list(range( numSeg + 1, 0, -1)) + b.vec.concInit = [5.0 * ( 1 + x ) for x in range( numSeg )] + c.vec.concInit = list(range( 1, numSeg + 1)) + print((a.vec.concInit, b.vec.concInit, c.vec.concInit)) - # Create the output tables - graphs = moose.Neutral( '/model/graphs' ) - outputA = moose.Table2 ( '/model/graphs/concA' ) - outputB = moose.Table2 ( '/model/graphs/concB' ) - outputC = moose.Table2 ( '/model/graphs/concC' ) + # Create the output tables + graphs = moose.Neutral( '/model/graphs' ) + outputA = moose.Table2 ( '/model/graphs/concA' ) + outputB = moose.Table2 ( '/model/graphs/concB' ) + outputC = moose.Table2 ( '/model/graphs/concC' ) - # connect up the tables + # connect up the tables a1 = moose.element( '/model/compt0/a[' + str( numSeg )+ ']') b1 = moose.element( '/model/compt1/b[' +str(numSeg - 1)+']') c1 = moose.element( '/model/compt2/c[' +str(numSeg - 1)+']') - moose.connect( outputA, 'requestOut', a1, 'getConc' ); - moose.connect( outputB, 'requestOut', b1, 'getConc' ); - moose.connect( outputC, 'requestOut', c1, 'getConc' ); + moose.connect( outputA, 'requestOut', a1, 'getConc' ); + moose.connect( outputB, 'requestOut', b1, 'getConc' ); + moose.connect( outputC, 'requestOut', c1, 'getConc' ); def main(): @@ -232,10 +235,13 @@ def display(): line4, = timeseries.plot( t, x.vector, label=x.name ) plt.legend() fig.canvas.draw() + outfile = '%s.png' % sys.argv[0] + # print( "Hit 'enter' to exit" ) + # raw_input() + plt.savefig( outfile ) + print(('[INFO] Results are saved to %s' % outfile )) - print( "Hit 'enter' to exit" ) - raw_input() # Run the 'main' if this script is executed standalone. if __name__ == '__main__': - main() + main() diff --git a/moose-examples/snippets/crossComptOscillator.py b/moose-examples/snippets/crossComptOscillator.py index cc812bc5b750aff7282620940902fd8e4af199bd..0357c9ccc02bbf92826e957180327e64b7b2d217 100644 --- a/moose-examples/snippets/crossComptOscillator.py +++ b/moose-examples/snippets/crossComptOscillator.py @@ -7,6 +7,8 @@ ## See the file COPYING.LIB for the full notice. ######################################################################### +from __future__ import print_function + import moose import pylab import numpy @@ -26,10 +28,10 @@ def main(): """ # the kkit reader doesn't know how to do multicompt solver setup. solver = "ee" - mfile = '../genesis/OSC_diff_vols.g' - runtime = 3000.0 + mfile = '../genesis/OSC_diff_vols.g' + runtime = 3000.0 simDt = 1.0 - modelId = moose.loadModel( mfile, 'model', solver ) + modelId = moose.loadModel( mfile, 'model', solver ) #moose.delete( '/model/kinetics/A/Stot' ) compt0 = moose.element( '/model/kinetics' ) compt1 = moose.element( '/model/compartment_1' ) @@ -52,37 +54,37 @@ def main(): stoich1.ksolve = ksolve1 stoich1.path = '/model/compartment_1/##' #stoich0.buildXreacs( stoich1 ) - print ksolve0.numLocalVoxels, ksolve0.numPools, stoich0.numAllPools + print(ksolve0.numLocalVoxels, ksolve0.numPools, stoich0.numAllPools) assert( ksolve0.numLocalVoxels == 1 ) assert( ksolve0.numPools == 7 ) assert( stoich0.numVarPools == 5 ) assert( stoich0.numBufPools == 1 ) assert( stoich0.numProxyPools == 1 ) assert( stoich0.numAllPools == 7 ) - print len( stoich0.proxyPools[stoich1] ), - print len( stoich1.proxyPools[stoich0] ) + print(len( stoich0.proxyPools[stoich1] ), end=' ') + print(len( stoich1.proxyPools[stoich0] )) assert( len( stoich0.proxyPools[stoich1] ) == 1 ) assert( len( stoich1.proxyPools[stoich0] ) == 1 ) - print ksolve1.numLocalVoxels, ksolve1.numPools, stoich1.numAllPools + print(ksolve1.numLocalVoxels, ksolve1.numPools, stoich1.numAllPools) assert( ksolve1.numLocalVoxels == 1 ) assert( ksolve1.numPools == 6 ) assert( stoich1.numAllPools == 6 ) stoich0.buildXreacs( stoich1 ) - print moose.element( '/model/kinetics/endo' ) - print moose.element( '/model/compartment_1/exo' ) + print(moose.element( '/model/kinetics/endo' )) + print(moose.element( '/model/compartment_1/exo' )) moose.le( '/model/compartment_1' ) - moose.reinit() - moose.start( runtime ) + moose.reinit() + moose.start( runtime ) - # Display all plots. - for x in moose.wildcardFind( '/model/#graphs/conc#/#' ): + # Display all plots. + for x in moose.wildcardFind( '/model/#graphs/conc#/#' ): t = numpy.arange( 0, x.vector.size, 1 ) * simDt pylab.plot( t, x.vector, label=x.name ) pylab.legend() pylab.show() - #quit() + #quit() # Run the 'main' if this script is executed standalone. if __name__ == '__main__': - main() + main() diff --git a/moose-examples/snippets/crossComptSimpleReac.py b/moose-examples/snippets/crossComptSimpleReac.py index 82571b307727dbf6a828be51bae607dcf0415e1c..d76ce9197fade3990f59eeb902afd9cff1c67eed 100644 --- a/moose-examples/snippets/crossComptSimpleReac.py +++ b/moose-examples/snippets/crossComptSimpleReac.py @@ -15,14 +15,14 @@ import numpy import moose def makeModel(): - # create container for model - model = moose.Neutral( 'model' ) - compt0 = moose.CubeMesh( '/model/compt0' ) - compt0.volume = 1e-15 - compt1 = moose.CubeMesh( '/model/compt1' ) - compt1.volume = 1e-16 - compt2 = moose.CubeMesh( '/model/compt2' ) - compt2.volume = 1e-17 + # create container for model + model = moose.Neutral( 'model' ) + compt0 = moose.CubeMesh( '/model/compt0' ) + compt0.volume = 1e-15 + compt1 = moose.CubeMesh( '/model/compt1' ) + compt1.volume = 1e-16 + compt2 = moose.CubeMesh( '/model/compt2' ) + compt2.volume = 1e-17 # Position containers so that they abut each other, with # compt1 in the middle. @@ -31,40 +31,40 @@ def makeModel(): compt0.y0 += side compt2.x1 += side compt2.x0 += side - print('Volumes = ', compt0.volume, compt1.volume, compt2.volume) - - # create molecules and reactions - a = moose.Pool( '/model/compt0/a' ) - b = moose.Pool( '/model/compt1/b' ) - c = moose.Pool( '/model/compt2/c' ) - reac0 = moose.Reac( '/model/compt1/reac0' ) - reac1 = moose.Reac( '/model/compt1/reac1' ) - - # connect them up for reactions - moose.connect( reac0, 'sub', a, 'reac' ) - moose.connect( reac0, 'prd', b, 'reac' ) - moose.connect( reac1, 'sub', b, 'reac' ) - moose.connect( reac1, 'prd', c, 'reac' ) - - # Assign parameters - a.concInit = 1 - b.concInit = 12.1 - c.concInit = 1 - reac0.Kf = 0.1 - reac0.Kb = 0.1 - reac1.Kf = 0.1 - reac1.Kb = 0.1 - - # Create the output tables - graphs = moose.Neutral( '/model/graphs' ) - outputA = moose.Table2 ( '/model/graphs/concA' ) - outputB = moose.Table2 ( '/model/graphs/concB' ) - outputC = moose.Table2 ( '/model/graphs/concC' ) - - # connect up the tables - moose.connect( outputA, 'requestOut', a, 'getConc' ); - moose.connect( outputB, 'requestOut', b, 'getConc' ); - moose.connect( outputC, 'requestOut', c, 'getConc' ); + print(('Volumes = ', compt0.volume, compt1.volume, compt2.volume)) + + # create molecules and reactions + a = moose.Pool( '/model/compt0/a' ) + b = moose.Pool( '/model/compt1/b' ) + c = moose.Pool( '/model/compt2/c' ) + reac0 = moose.Reac( '/model/compt1/reac0' ) + reac1 = moose.Reac( '/model/compt1/reac1' ) + + # connect them up for reactions + moose.connect( reac0, 'sub', a, 'reac' ) + moose.connect( reac0, 'prd', b, 'reac' ) + moose.connect( reac1, 'sub', b, 'reac' ) + moose.connect( reac1, 'prd', c, 'reac' ) + + # Assign parameters + a.concInit = 1 + b.concInit = 12.1 + c.concInit = 1 + reac0.Kf = 0.1 + reac0.Kb = 0.1 + reac1.Kf = 0.1 + reac1.Kb = 0.1 + + # Create the output tables + graphs = moose.Neutral( '/model/graphs' ) + outputA = moose.Table2 ( '/model/graphs/concA' ) + outputB = moose.Table2 ( '/model/graphs/concB' ) + outputC = moose.Table2 ( '/model/graphs/concC' ) + + # connect up the tables + moose.connect( outputA, 'requestOut', a, 'getConc' ); + moose.connect( outputB, 'requestOut', b, 'getConc' ); + moose.connect( outputC, 'requestOut', c, 'getConc' ); # Build the solvers. No need for diffusion in this version. ksolve0 = moose.Ksolve( '/model/compt0/ksolve0' ) @@ -138,7 +138,7 @@ def main(): moose.start( runtime ) # Run the model for 100 seconds. print("All concs should converge to 2.0 even though vols differ:") for x in moose.wildcardFind( '/model/compt#/#[ISA=PoolBase]' ): - print(x.name, x.conc) + print((x.name, x.conc)) # FIXME: Plotting causes seg-fault. ## Iterate through all plots, dump their contents to data.plot. @@ -151,4 +151,4 @@ def main(): # Run the 'main' if this script is executed standalone. if __name__ == '__main__': - main() + main() diff --git a/moose-examples/snippets/crossComptSimpleReacGSSA.py b/moose-examples/snippets/crossComptSimpleReacGSSA.py index 879fd90d8bcf3284e2f20e23acf03eccce3ae44e..8723205aed88d4c34241accd054a3f57cf051560 100644 --- a/moose-examples/snippets/crossComptSimpleReacGSSA.py +++ b/moose-examples/snippets/crossComptSimpleReacGSSA.py @@ -15,14 +15,14 @@ import numpy import moose def makeModel(): - # create container for model - model = moose.Neutral( 'model' ) - compt0 = moose.CubeMesh( '/model/compt0' ) - compt0.volume = 1e-18 - compt1 = moose.CubeMesh( '/model/compt1' ) - compt1.volume = 1e-19 - compt2 = moose.CubeMesh( '/model/compt2' ) - compt2.volume = 1e-20 + # create container for model + model = moose.Neutral( 'model' ) + compt0 = moose.CubeMesh( '/model/compt0' ) + compt0.volume = 1e-18 + compt1 = moose.CubeMesh( '/model/compt1' ) + compt1.volume = 1e-19 + compt2 = moose.CubeMesh( '/model/compt2' ) + compt2.volume = 1e-20 # Position containers so that they abut each other, with # compt1 in the middle. @@ -31,40 +31,40 @@ def makeModel(): compt0.y0 += side compt2.x1 += side compt2.x0 += side - print('Volumes = ', compt0.volume, compt1.volume, compt2.volume) - - # create molecules and reactions - a = moose.Pool( '/model/compt0/a' ) - b = moose.Pool( '/model/compt1/b' ) - c = moose.Pool( '/model/compt2/c' ) - reac0 = moose.Reac( '/model/compt1/reac0' ) - reac1 = moose.Reac( '/model/compt1/reac1' ) - - # connect them up for reactions - moose.connect( reac0, 'sub', a, 'reac' ) - moose.connect( reac0, 'prd', b, 'reac' ) - moose.connect( reac1, 'sub', b, 'reac' ) - moose.connect( reac1, 'prd', c, 'reac' ) - - # Assign parameters - a.concInit = 1 - b.concInit = 12.1 - c.concInit = 1 - reac0.Kf = 0.1 - reac0.Kb = 0.1 - reac1.Kf = 0.1 - reac1.Kb = 0.1 - - # Create the output tables - graphs = moose.Neutral( '/model/graphs' ) - outputA = moose.Table2 ( '/model/graphs/concA' ) - outputB = moose.Table2 ( '/model/graphs/concB' ) - outputC = moose.Table2 ( '/model/graphs/concC' ) - - # connect up the tables - moose.connect( outputA, 'requestOut', a, 'getConc' ); - moose.connect( outputB, 'requestOut', b, 'getConc' ); - moose.connect( outputC, 'requestOut', c, 'getConc' ); + print(('Volumes = ', compt0.volume, compt1.volume, compt2.volume)) + + # create molecules and reactions + a = moose.Pool( '/model/compt0/a' ) + b = moose.Pool( '/model/compt1/b' ) + c = moose.Pool( '/model/compt2/c' ) + reac0 = moose.Reac( '/model/compt1/reac0' ) + reac1 = moose.Reac( '/model/compt1/reac1' ) + + # connect them up for reactions + moose.connect( reac0, 'sub', a, 'reac' ) + moose.connect( reac0, 'prd', b, 'reac' ) + moose.connect( reac1, 'sub', b, 'reac' ) + moose.connect( reac1, 'prd', c, 'reac' ) + + # Assign parameters + a.concInit = 1 + b.concInit = 12.1 + c.concInit = 1 + reac0.Kf = 0.1 + reac0.Kb = 0.1 + reac1.Kf = 0.1 + reac1.Kb = 0.1 + + # Create the output tables + graphs = moose.Neutral( '/model/graphs' ) + outputA = moose.Table2 ( '/model/graphs/concA' ) + outputB = moose.Table2 ( '/model/graphs/concB' ) + outputC = moose.Table2 ( '/model/graphs/concC' ) + + # connect up the tables + moose.connect( outputA, 'requestOut', a, 'getConc' ); + moose.connect( outputB, 'requestOut', b, 'getConc' ); + moose.connect( outputC, 'requestOut', c, 'getConc' ); # Build the solvers. No need for diffusion in this version. ksolve0 = moose.Gsolve( '/model/compt0/ksolve0' ) @@ -138,7 +138,7 @@ def main(): moose.start( runtime ) # Run the model for 100 seconds. print("All concs should converge to 2.0 even though vols differ:") for x in moose.wildcardFind( '/model/compt#/#[ISA=PoolBase]' ): - print(x.name, x.conc) + print((x.name, x.conc)) # Iterate through all plots, dump their contents to data.plot. for x in moose.wildcardFind( '/model/graphs/conc#' ): @@ -150,4 +150,4 @@ def main(): # Run the 'main' if this script is executed standalone. if __name__ == '__main__': - main() + main() diff --git a/moose-examples/snippets/cspaceSteadyState.py b/moose-examples/snippets/cspaceSteadyState.py index a21f3bf3eeac93f3770c790fefe066ac9fd33089..06a5f0bc8445df1e4a661528b83729274852f7a4 100644 --- a/moose-examples/snippets/cspaceSteadyState.py +++ b/moose-examples/snippets/cspaceSteadyState.py @@ -12,13 +12,13 @@ # It looks for the fixed points 100 times, as follows: # - Set up the random initial condition that fits the conservation laws # - Run for 2 seconds. This should not be mathematically necessary, but -# for obscure numerical reasons it makes it much more likely that the -# steady state solver will succeed in finding a state. +# for obscure numerical reasons it makes it much more likely that the +# steady state solver will succeed in finding a state. # - Find the fixed point # - Print out the fixed point vector and various diagnostics. # - Run for 10 seconds. This is completely unnecessary, and is done here -# just so that the resultant graph will show what kind of state has been -# found. +# just so that the resultant graph will show what kind of state has been +# found. # After it does all this, the program runs for 100 more seconds on the last # found fixed point (which turns out to be a saddle node), then # is hard-switched in the script to the first attractor basin from which @@ -27,13 +27,13 @@ # seconds. # Looking at the output you will see many features of note: # - the first attractor (stable point) and the saddle point -# (unstable fixed point) are both found quite often. But the second -# attractor is found just once. Has a very small basin of attraction. +# (unstable fixed point) are both found quite often. But the second +# attractor is found just once. Has a very small basin of attraction. # - The values found for each of the fixed points match well with the -# values found by running the system to steady-state at the end. +# values found by running the system to steady-state at the end. # - There are a large number of failures to find a fixed point. These are -# found and reported in the diagnostics. They show up on the plot -# as cases where the 10-second runs are not flat. +# found and reported in the diagnostics. They show up on the plot +# as cases where the 10-second runs are not flat. # # If you wanted to find fixed points in a production model, you would # not need to do the 10-second runs, and you would need to eliminate the @@ -50,73 +50,73 @@ import numpy import moose def displayPlots(): - for x in moose.wildcardFind( '/model/graphs/#' ): - t = numpy.arange( 0, x.vector.size, 1 ) #sec - pylab.plot( t, x.vector, label=x.name ) - pylab.legend() - pylab.show() + for x in moose.wildcardFind( '/model/graphs/#' ): + t = numpy.arange( 0, x.vector.size, 1 ) #sec + pylab.plot( t, x.vector, label=x.name ) + pylab.legend() + pylab.show() def getState( ksolve, state ): - state.randomInit() - moose.start( 0.1 ) # Run the model for 2 seconds. - state.settle() + state.randomInit() + moose.start( 0.1 ) # Run the model for 2 seconds. + state.settle() ''' - scale = 1.0 / ( 1e-15 * 6.022e23 ) - for x in ksolve.nVec[0]: - print x * scale, - # print ksolve.nVec[0] - print state.nIter, state.status, state.stateType, state.nNegEigenvalues, state.nPosEigenvalues, state.solutionStatus + scale = 1.0 / ( 1e-15 * 6.022e23 ) + for x in ksolve.nVec[0]: + print x * scale, + # print ksolve.nVec[0] + print state.nIter, state.status, state.stateType, state.nNegEigenvalues, state.nPosEigenvalues, state.solutionStatus ''' - moose.start( 20.0 ) # Run model for 10 seconds, just for display + moose.start( 20.0 ) # Run model for 10 seconds, just for display def main(): - # The wildcard uses # for single level, and ## for recursive. - #compartment = makeModel() + # The wildcard uses # for single level, and ## for recursive. + #compartment = makeModel() moose.loadModel( '../genesis/M1719.cspace', '/model', 'ee' ) compartment = moose.element( 'model/kinetics' ) compartment.name = 'compartment' - ksolve = moose.Ksolve( '/model/compartment/ksolve' ) - stoich = moose.Stoich( '/model/compartment/stoich' ) - stoich.compartment = compartment - stoich.ksolve = ksolve - #ksolve.stoich = stoich - stoich.path = "/model/compartment/##" - state = moose.SteadyState( '/model/compartment/state' ) + ksolve = moose.Ksolve( '/model/compartment/ksolve' ) + stoich = moose.Stoich( '/model/compartment/stoich' ) + stoich.compartment = compartment + stoich.ksolve = ksolve + #ksolve.stoich = stoich + stoich.path = "/model/compartment/##" + state = moose.SteadyState( '/model/compartment/state' ) - moose.reinit() - state.stoich = stoich - #state.showMatrices() - state.convergenceCriterion = 1e-7 + moose.reinit() + state.stoich = stoich + #state.showMatrices() + state.convergenceCriterion = 1e-7 moose.le( '/model/graphs' ) a = moose.element( '/model/compartment/a' ) b = moose.element( '/model/compartment/b' ) c = moose.element( '/model/compartment/c' ) - for i in range( 0, 100 ): - getState( ksolve, state ) - - moose.start( 100.0 ) # Run the model for 100 seconds. + for i in range( 0, 100 ): + getState( ksolve, state ) + + moose.start( 100.0 ) # Run the model for 100 seconds. - b = moose.element( '/model/compartment/b' ) - c = moose.element( '/model/compartment/c' ) + b = moose.element( '/model/compartment/b' ) + c = moose.element( '/model/compartment/c' ) - # move most molecules over to b - b.conc = b.conc + c.conc * 0.95 - c.conc = c.conc * 0.05 - moose.start( 100.0 ) # Run the model for 100 seconds. + # move most molecules over to b + b.conc = b.conc + c.conc * 0.95 + c.conc = c.conc * 0.05 + moose.start( 100.0 ) # Run the model for 100 seconds. - # move most molecules back to a - c.conc = c.conc + b.conc * 0.95 - b.conc = b.conc * 0.05 - moose.start( 100.0 ) # Run the model for 100 seconds. + # move most molecules back to a + c.conc = c.conc + b.conc * 0.95 + b.conc = b.conc * 0.05 + moose.start( 100.0 ) # Run the model for 100 seconds. - # Iterate through all plots, dump their contents to data.plot. - displayPlots() + # Iterate through all plots, dump their contents to data.plot. + displayPlots() - quit() + quit() # Run the 'main' if this script is executed standalone. if __name__ == '__main__': - main() + main() diff --git a/moose-examples/snippets/cubeMeshSigNeur.py b/moose-examples/snippets/cubeMeshSigNeur.py index 4669db48eb8e2d11ac150f6cc155acd5722b0383..355ff27b330c1f579b180c30a2db2d017c6fa1da 100644 --- a/moose-examples/snippets/cubeMeshSigNeur.py +++ b/moose-examples/snippets/cubeMeshSigNeur.py @@ -155,9 +155,9 @@ def createPool( compt, name, concInit ): # This is a Ca-activated enzyme that phosphorylates and inactivates kChan # as per the following scheme: -# Ca + inact_kinase <===> Ca.kinase -# kChan ----- Ca.kinase -----> kChan_p -# kChan_p -------> kChan +# Ca + inact_kinase <===> Ca.kinase +# kChan ----- Ca.kinase -----> kChan_p +# kChan_p -------> kChan def createChemModel( neuroCompt ): dendCa = createPool( neuroCompt, 'Ca', 1e-4 ) dendKinaseInact = createPool( neuroCompt, 'inact_kinase', 1e-4 ) diff --git a/moose-examples/snippets/cylinderDiffusion.py b/moose-examples/snippets/cylinderDiffusion.py index 0b4d8665a5f181f04c997301f8e343cc65b42cd8..a4ff666cc60581f99598771f9a1fad02aed308e7 100644 --- a/moose-examples/snippets/cylinderDiffusion.py +++ b/moose-examples/snippets/cylinderDiffusion.py @@ -57,11 +57,11 @@ def makeModel(): The concentrations of all molecules are displayed in an animation. """ # create container for model - r0 = 2e-6 # m - r1 = 1e-6 # m + r0 = 2e-6 # m + r1 = 1e-6 # m num = 100 diffLength = 1e-6 # m - len = num * diffLength # m + len = num * diffLength # m diffConst = 10e-12 # m^2/sec motorRate = 10e-6 # m/sec concA = 1 # millimolar @@ -106,7 +106,7 @@ def makeModel(): os.kill( PID, signal.SIGUSR1 ) stoich.path = "/model/compartment/##" - print dsolve.numPools + print((dsolve.numPools)) assert( dsolve.numPools == 3 ) a.vec[0].concInit = concA b.vec[0].concInit = concA @@ -180,15 +180,15 @@ def main(): ctot2 = sum( c.vec.n ) dtot2 = sum( d.vec.n ) - print 'Ratio of initial to final total numbers of of a, b, c, d = ' - print atot2/atot, btot2/btot, ctot2/ctot, dtot2/dtot - print 'Initial to final (b+c)=', (btot2 + ctot2) / (btot + ctot ) - print "\nHit 'enter' to exit" - raw_input() + print('Ratio of initial to final total numbers of of a, b, c, d = ') + print((atot2/atot, btot2/btot, ctot2/ctot, dtot2/dtot)) + print(('Initial to final (b+c)=', (btot2 + ctot2) / (btot + ctot ))) + print("\nHit 'enter' to exit") + eval(input()) quit() # Run the 'main' if this script is executed standalone. if __name__ == '__main__': - main() + main() diff --git a/moose-examples/snippets/cylinderMotor.py b/moose-examples/snippets/cylinderMotor.py index 91257b95d51c071f88ecaa4966e66aeb26c5337b..b9b96ad612e522ce5c61b3305e633288efbfcc4d 100644 --- a/moose-examples/snippets/cylinderMotor.py +++ b/moose-examples/snippets/cylinderMotor.py @@ -30,36 +30,36 @@ import signal PID = os.getpid() def doNothing( *args ): - pass + pass signal.signal( signal.SIGUSR1, doNothing ) def makeModel(): - # create container for model - r0 = 1e-6 # m - r1 = 1e-6 # m - num = 25 - diffLength = 1e-6 # m - len = num * diffLength # m - diffConst = 1e-12 # m^2/sec - motorConst = 1e-6 # m/sec - concA = 1 # millimolar - - model = moose.Neutral( 'model' ) - compartment = moose.CylMesh( '/model/compartment' ) - compartment.r0 = r0 - compartment.r1 = r1 - compartment.x0 = 0 - compartment.x1 = len - compartment.diffLength = diffLength - - assert( compartment.numDiffCompts == num ) - - # create molecules and reactions - a = moose.Pool( '/model/compartment/a' ) - b = moose.Pool( '/model/compartment/b' ) - c = moose.Pool( '/model/compartment/c' ) - d = moose.Pool( '/model/compartment/d' ) + # create container for model + r0 = 1e-6 # m + r1 = 1e-6 # m + num = 25 + diffLength = 1e-6 # m + len = num * diffLength # m + diffConst = 1e-12 # m^2/sec + motorConst = 1e-6 # m/sec + concA = 1 # millimolar + + model = moose.Neutral( 'model' ) + compartment = moose.CylMesh( '/model/compartment' ) + compartment.r0 = r0 + compartment.r1 = r1 + compartment.x0 = 0 + compartment.x1 = len + compartment.diffLength = diffLength + + assert( compartment.numDiffCompts == num ) + + # create molecules and reactions + a = moose.Pool( '/model/compartment/a' ) + b = moose.Pool( '/model/compartment/b' ) + c = moose.Pool( '/model/compartment/c' ) + d = moose.Pool( '/model/compartment/d' ) """ r1 = moose.Reac( '/model/compartment/r1' ) moose.connect( r1, 'sub', b, 'reac' ) @@ -69,39 +69,39 @@ def makeModel(): r1.Kb = 0.01 # 1/sec """ - # Assign parameters - a.diffConst = 0.0; - b.diffConst = 0.0; - #b.motorRate = motorRate - c.diffConst = 0.0; - d.diffConst = 0.0; - #d.diffConst = diffConst; - os.kill( PID, signal.SIGUSR1 ) + # Assign parameters + a.diffConst = 0.0; + b.diffConst = 0.0; + #b.motorRate = motorRate + c.diffConst = 0.0; + d.diffConst = 0.0; + #d.diffConst = diffConst; + os.kill( PID, signal.SIGUSR1 ) a.motorConst = motorConst b.motorConst = motorConst c.motorConst = -motorConst d.motorConst = -motorConst - # Make solvers - ksolve = moose.Ksolve( '/model/compartment/ksolve' ) - dsolve = moose.Dsolve( '/model/compartment/dsolve' ) - stoich = moose.Stoich( '/model/compartment/stoich' ) - stoich.compartment = compartment - stoich.ksolve = ksolve - stoich.dsolve = dsolve - stoich.path = "/model/compartment/##" + # Make solvers + ksolve = moose.Ksolve( '/model/compartment/ksolve' ) + dsolve = moose.Dsolve( '/model/compartment/dsolve' ) + stoich = moose.Stoich( '/model/compartment/stoich' ) + stoich.compartment = compartment + stoich.ksolve = ksolve + stoich.dsolve = dsolve + stoich.path = "/model/compartment/##" assert( dsolve.numPools == 4 ) - a.vec[0].concInit = concA * 1 - b.vec[num-1].concInit = concA * 2 - c.vec[0].concInit = concA * 3 - d.vec[num-1].concInit = concA * 4 + a.vec[0].concInit = concA * 1 + b.vec[num-1].concInit = concA * 2 + c.vec[0].concInit = concA * 3 + d.vec[num-1].concInit = concA * 4 def displayPlots(): - a = moose.element( '/model/compartment/a' ) - b = moose.element( '/model/compartment/b' ) - c = moose.element( '/model/compartment/c' ) - d = moose.element( '/model/compartment/d' ) + a = moose.element( '/model/compartment/a' ) + b = moose.element( '/model/compartment/b' ) + c = moose.element( '/model/compartment/c' ) + d = moose.element( '/model/compartment/d' ) pos = numpy.arange( 0, a.vec.conc.size, 1 ) pylab.plot( pos, a.vec.conc, label='a' ) pylab.plot( pos, b.vec.conc, label='b' ) @@ -111,44 +111,44 @@ def displayPlots(): pylab.show() def main(): - dt4 = 0.01 - dt5 = 0.01 + dt4 = 0.01 + dt5 = 0.01 runtime = 10.0 # seconds # Set up clocks. The dsolver to know before assigning stoich - moose.setClock( 4, dt4 ) - moose.setClock( 5, dt5 ) + moose.setClock( 4, dt4 ) + moose.setClock( 5, dt5 ) - makeModel() - moose.useClock( 4, '/model/compartment/dsolve', 'process' ) + makeModel() + moose.useClock( 4, '/model/compartment/dsolve', 'process' ) # Ksolve must be scheduled after dsolve. - moose.useClock( 5, '/model/compartment/ksolve', 'process' ) + moose.useClock( 5, '/model/compartment/ksolve', 'process' ) - moose.reinit() - moose.start( runtime ) # Run the model + moose.reinit() + moose.start( runtime ) # Run the model - a = moose.element( '/model/compartment/a' ) - b = moose.element( '/model/compartment/b' ) - c = moose.element( '/model/compartment/c' ) - d = moose.element( '/model/compartment/d' ) + a = moose.element( '/model/compartment/a' ) + b = moose.element( '/model/compartment/b' ) + c = moose.element( '/model/compartment/c' ) + d = moose.element( '/model/compartment/d' ) atot = sum( a.vec.conc ) btot = sum( b.vec.conc ) ctot = sum( c.vec.conc ) dtot = sum( d.vec.conc ) - print 'tot = ', atot, btot, ctot, dtot, ' (b+c)=', btot+ctot + print(('tot = ', atot, btot, ctot, dtot, ' (b+c)=', btot+ctot)) displayPlots() - moose.start( runtime ) # Run the model + moose.start( runtime ) # Run the model atot = sum( a.vec.conc ) btot = sum( b.vec.conc ) ctot = sum( c.vec.conc ) dtot = sum( d.vec.conc ) - print 'tot = ', atot, btot, ctot, dtot, ' (b+c)=', btot+ctot + print(('tot = ', atot, btot, ctot, dtot, ' (b+c)=', btot+ctot)) - quit() + quit() # Run the 'main' if this script is executed standalone. if __name__ == '__main__': - main() + main() diff --git a/moose-examples/snippets/diffSpinyNeuron.py b/moose-examples/snippets/diffSpinyNeuron.py index af7f457acbd578ec6130baee50c51545ec9ca355..169848731123e9e9272d52a1595fa4427dbed520 100644 --- a/moose-examples/snippets/diffSpinyNeuron.py +++ b/moose-examples/snippets/diffSpinyNeuron.py @@ -102,12 +102,12 @@ def makeModel(): stoich2.filterXreacs() Ca_input_dend = moose.vec( '/model/chem/compt0/Ca_input' ) - print len( Ca_input_dend ) + print((len( Ca_input_dend ))) for i in range( 60 ): Ca_input_dend[ 3 + i * 3 ].conc = 2.0 Ca_input_PSD = moose.vec( '/model/chem/compt2/Ca_input' ) - print len( Ca_input_PSD ) + print((len( Ca_input_PSD ))) for i in range( 5 ): Ca_input_PSD[ 2 + i * 2].conc = 1.0 @@ -157,36 +157,36 @@ def makeDisplay(): plt.xlabel( 'time (seconds)' ) plt.legend() - Ca = moose.vec( '/model/chem/compt0/Ca' ) - Ca_input = moose.vec( '/model/chem/compt0/Ca_input' ) - line1, = dend.plot( range( len( Ca ) ), Ca.conc, label='Ca' ) - line2, = dend.plot( range( len( Ca_input ) ), Ca_input.conc, label='Ca_input' ) + Ca = moose.vec( '/model/chem/compt0/Ca' ) + Ca_input = moose.vec( '/model/chem/compt0/Ca_input' ) + line1, = dend.plot( list(range( len( Ca ))), Ca.conc, label='Ca' ) + line2, = dend.plot( list(range( len( Ca_input ))), Ca_input.conc, label='Ca_input' ) dend.set_ylim( 0, 2 ) - Ca = moose.vec( '/model/chem/compt1/Ca' ) - line3, = spine.plot( range( len( Ca ) ), Ca.conc, label='Ca' ) + Ca = moose.vec( '/model/chem/compt1/Ca' ) + line3, = spine.plot( list(range( len( Ca ))), Ca.conc, label='Ca' ) spine.set_ylim( 0, 1 ) - Ca = moose.vec( '/model/chem/compt2/Ca' ) - Ca_input = moose.vec( '/model/chem/compt2/Ca_input' ) - line4, = psd.plot( range( len( Ca ) ), Ca.conc, label='Ca' ) - line5, = psd.plot( range( len( Ca_input ) ), Ca_input.conc, label='Ca_input' ) + Ca = moose.vec( '/model/chem/compt2/Ca' ) + Ca_input = moose.vec( '/model/chem/compt2/Ca_input' ) + line4, = psd.plot( list(range( len( Ca ))), Ca.conc, label='Ca' ) + line5, = psd.plot( list(range( len( Ca_input ))), Ca_input.conc, label='Ca_input' ) psd.set_ylim( 0, 1 ) fig.canvas.draw() return ( timeSeries, dend, spine, psd, fig, line1, line2, line3, line4, line5, timeLabel ) def updateDisplay( plotlist ): - Ca = moose.vec( '/model/chem/compt0/Ca' ) - Ca_input = moose.vec( '/model/chem/compt0/Ca_input' ) + Ca = moose.vec( '/model/chem/compt0/Ca' ) + Ca_input = moose.vec( '/model/chem/compt0/Ca_input' ) plotlist[5].set_ydata( Ca.conc ) plotlist[6].set_ydata( Ca_input.conc ) - Ca = moose.vec( '/model/chem/compt1/Ca' ) + Ca = moose.vec( '/model/chem/compt1/Ca' ) plotlist[7].set_ydata( Ca.conc ) - Ca = moose.vec( '/model/chem/compt2/Ca' ) - Ca_input = moose.vec( '/model/chem/compt2/Ca_input' ) + Ca = moose.vec( '/model/chem/compt2/Ca' ) + Ca_input = moose.vec( '/model/chem/compt2/Ca_input' ) plotlist[8].set_ydata( Ca.conc ) plotlist[9].set_ydata( Ca_input.conc ) plotlist[4].canvas.draw() @@ -198,7 +198,7 @@ def finalizeDisplay( plotlist, cPlotDt ): line1, = plotlist[0].plot( pos, x.vector, label=x.name ) plotlist[4].canvas.draw() print( "Hit 'enter' to exit" ) - raw_input() + eval(input()) def makeChemModel( compt, doInput ): """ @@ -279,4 +279,4 @@ def main(): # Run the 'main' if this script is executed standalone. if __name__ == '__main__': - main() + main() diff --git a/moose-examples/snippets/fieldelement.py b/moose-examples/snippets/fieldelement.py index 53835f9d0a061ab4a88d744bb626462f6c39238e..ee456c715fe3bd2457ea6ff6212ab8f59ca0e5c6 100644 --- a/moose-examples/snippets/fieldelement.py +++ b/moose-examples/snippets/fieldelement.py @@ -92,7 +92,7 @@ import moose # Create an IntFire vec containing 10 elements, a refers to alpha[0] a = moose.IntFire('alpha', 10) -print 'a=', a +print(('a=', a)) for i in range( 10 ): syn = moose.SimpleSynHandler( 'alpha[' + str(i) + ']/sh' ) moose.connect( syn, 'activationOut', a.vec[i], 'activation' ) @@ -103,49 +103,49 @@ moose.connect( syn, 'activationOut', a, 'activation', 'OneToOne' ) # FieldElement identity ############################### x = syn.synapse # x is an ElementField alpha[0].synapse -print 'x=',x -print 'x.num=', x.num # Initially there are no synapses, so this will be 0 +print(('x=',x)) +print(('x.num=', x.num)) # Initially there are no synapses, so this will be 0 syn.synapse.num = 3 # We set number of field elements to 3 -print 'x.num=', x.num # x refers to a.synapse, so this should be 3 +print(('x.num=', x.num)) # x refers to a.synapse, so this should be 3 b = moose.element('alpha[0]/sh/synapse[1]') # We access x[1] -print 'b=',b -print 'x[1]=', x[1] -print 'b==x[1]?', b == x[1] +print(('b=',b)) +print(('x[1]=', x[1])) +print(('b==x[1]?', b == x[1])) ############################### # Check fieldIndex and dataId ############################### -print 'syn.synapse[0]=', syn.synapse[0] -print 'syn.synapse[1]=', syn.synapse[1] # The fieldIndex should change, not dataId +print(('syn.synapse[0]=', syn.synapse[0])) +print(('syn.synapse[1]=', syn.synapse[1])) # The fieldIndex should change, not dataId ######################### # setVec call example ######################### -print 'alpha[0].synapse.delay=', x.delay +print(('alpha[0].synapse.delay=', x.delay)) x.delay = [1.0, 2.0, 3.0] # This sets `delay` field in all elements via setVec call -print 'alpha[0].synapse.delay=', x.delay +print(('alpha[0].synapse.delay=', x.delay)) x.delay = [1.141592] * len(x) # This is a Pythonic way of replicating the values in a list - ensures same length -print 'alpha[0].synapse.delay=', x.delay +print(('alpha[0].synapse.delay=', x.delay)) ##################################################### # Play a little more with ObjId, FieldElement, Id ##################################################### -print 'Length of alpha[1]/synapse=', len(moose.element('/alpha[1]/sh').synapse) +print(('Length of alpha[1]/synapse=', len(moose.element('/alpha[1]/sh').synapse))) c = moose.element('alpha[1]/sh/synapse[2]') # This should throw an error - alpha[1] does not have 3 synapses. -print 'b=', b, 'numData=', b.numData -print 'c=', c, 'numData=', c.numData +print(('b=', b, 'numData=', b.numData)) +print(('c=', c, 'numData=', c.numData)) try: - print 'len(c)=', len(c) -except TypeError, e: - print e + print(('len(c)=', len(c))) +except TypeError as e: + print(e) d = moose.element('/alpha[1]/sh') try: - print d.synapse[1] -except IndexError, e: - print e + print((d.synapse[1])) +except IndexError as e: + print(e) else: - print 'Expected an IndexError. Length of synapse=', len(d.synapse) + print(('Expected an IndexError. Length of synapse=', len(d.synapse))) # The fieldIndex should change, not dataId x = moose.element(a.vec, 0, 1) y = moose.element(a.vec, 1, 2) -print x, y +print((x, y)) diff --git a/moose-examples/snippets/findChemSteadyState.py b/moose-examples/snippets/findChemSteadyState.py index 6f928d139e86252127cad63da0b1e3279cf62afb..85783ced1b7ae91cfa1245f3df5421dd0204e514 100644 --- a/moose-examples/snippets/findChemSteadyState.py +++ b/moose-examples/snippets/findChemSteadyState.py @@ -7,6 +7,8 @@ ## See the file COPYING.LIB for the full notice. ######################################################################### +from __future__ import print_function + import math import pylab import numpy @@ -180,11 +182,12 @@ def getState( ksolve, state ): moose.start( 2.0 ) # Run the model for 2 seconds. state.settle() # This function finds the steady states. for x in ksolve.nVec[0]: - print x * scale, - print state.nIter, state.status, state.stateType, state.nNegEigenvalues, state.nPosEigenvalues, state.solutionStatus + print(x * scale, end=' ') + + print(state.nIter, state.status, state.stateType, state.nNegEigenvalues, state.nPosEigenvalues, state.solutionStatus) moose.start( 10.0 ) # Run model for 10 seconds, just for display # Run the 'main' if this script is executed standalone. if __name__ == '__main__': - main() + main() diff --git a/moose-examples/snippets/func.py b/moose-examples/snippets/func.py index d5bfc7d24ed50373b445f96deb87ad32f29df07e..b521fe5948ad008afc34576eb09a24c529602587 100644 --- a/moose-examples/snippets/func.py +++ b/moose-examples/snippets/func.py @@ -62,17 +62,17 @@ def test_func_nosim(): for ii in range(num-1): expr += 'x_%d, ' % (ii) expr += 'x_%d)' % (num-1) - print 'Expression:', expr + print(('Expression:', expr)) func_0.expr = expr for ii in range(num): var = 'x_%d' % (ii) - print 'Setting:', var, '=', func_0.var[var] + print(('Setting:', var, '=', func_0.var[var])) func_0.var[var] = float(ii) - print 'Expression:', func_0.expr - print 'Variables after assignment:' + print(('Expression:', func_0.expr)) + print('Variables after assignment:') for v in func_0.vars: - print ' %s = %g' % (v, func_0.var[v]) - print 'value %g\n' % (func_0.value) + print((' %s = %g' % (v, func_0.var[v]))) + print(('value %g\n' % (func_0.value))) def test_func(): """This function creates a Func object evaluating a function of a @@ -106,7 +106,7 @@ def test_func(): input.startTime = 0.0 input.stepPosition = xarr[0] input.stopTime = xarr[-1] - xarr[0] - print input.startTime, input.stopTime + print((input.startTime, input.stopTime)) moose.connect(input, 'output', func_1, 'xIn') @@ -129,7 +129,7 @@ def test_func(): moose.useClock(3, '%s/##' % (data.path), 'process') moose.reinit() t = xarr[-1] - xarr[0] - print 'Run for', t + print(('Run for', t)) moose.start(t) y = np.asarray(y_tab.vector) yp = np.asarray(yprime_tab.vector) diff --git a/moose-examples/snippets/funcInputToPools.py b/moose-examples/snippets/funcInputToPools.py index 12939853cf77644251ed93cb68ddc3455fdf7d8f..b047738117d832bdae020c8df789aef191257be5 100644 --- a/moose-examples/snippets/funcInputToPools.py +++ b/moose-examples/snippets/funcInputToPools.py @@ -39,46 +39,46 @@ import moose import sys def makeModel(): - if len( sys.argv ) == 1: - useGsolve = True + if len( sys.argv ) == 1: + useGsolve = True else: - useGsolve = ( sys.argv[1] == 'True' ) - # create container for model - model = moose.Neutral( 'model' ) - compartment = moose.CubeMesh( '/model/compartment' ) - compartment.volume = 1e-22 - # the mesh is created automatically by the compartment - moose.le( '/model/compartment' ) - mesh = moose.element( '/model/compartment/mesh' ) - - # create molecules and reactions - a = moose.Pool( '/model/compartment/a' ) - b = moose.Pool( '/model/compartment/b' ) - - # create functions of time + useGsolve = ( sys.argv[1] == 'True' ) + # create container for model + model = moose.Neutral( 'model' ) + compartment = moose.CubeMesh( '/model/compartment' ) + compartment.volume = 1e-22 + # the mesh is created automatically by the compartment + moose.le( '/model/compartment' ) + mesh = moose.element( '/model/compartment/mesh' ) + + # create molecules and reactions + a = moose.Pool( '/model/compartment/a' ) + b = moose.Pool( '/model/compartment/b' ) + + # create functions of time f1 = moose.Function( '/model/compartment/f1' ) f2 = moose.Function( '/model/compartment/f2' ) - # connect them up for reactions - moose.connect( f1, 'valueOut', a, 'setConc' ) - moose.connect( f2, 'valueOut', b, 'increment' ) + # connect them up for reactions + moose.connect( f1, 'valueOut', a, 'setConc' ) + moose.connect( f2, 'valueOut', b, 'increment' ) - # Assign parameters - a.concInit = 0 - b.concInit = 1 + # Assign parameters + a.concInit = 0 + b.concInit = 1 #f1.numVars = 1 #f2.numVars = 1 f1.expr = '1 + sin(t)' f2.expr = '10 * cos(t)' - # Create the output tables - graphs = moose.Neutral( '/model/graphs' ) - outputA = moose.Table2 ( '/model/graphs/nA' ) - outputB = moose.Table2 ( '/model/graphs/nB' ) + # Create the output tables + graphs = moose.Neutral( '/model/graphs' ) + outputA = moose.Table2 ( '/model/graphs/nA' ) + outputB = moose.Table2 ( '/model/graphs/nB' ) - # connect up the tables - moose.connect( outputA, 'requestOut', a, 'getN' ); - moose.connect( outputB, 'requestOut', b, 'getN' ); + # connect up the tables + moose.connect( outputA, 'requestOut', a, 'getN' ); + moose.connect( outputB, 'requestOut', b, 'getN' ); # Set up the solvers if useGsolve: @@ -93,31 +93,31 @@ def makeModel(): ''' ''' - # We need a finer timestep than the default 0.1 seconds, + # We need a finer timestep than the default 0.1 seconds, # in order to get numerical accuracy. for i in range (10, 19 ): - moose.setClock( i, 0.1 ) # for computational objects + moose.setClock( i, 0.1 ) # for computational objects def main(): - makeModel() + makeModel() moose.seed() - moose.reinit() - moose.start( 50.0 ) # Run the model for 100 seconds. + moose.reinit() + moose.start( 50.0 ) # Run the model for 100 seconds. - a = moose.element( '/model/compartment/a' ) - b = moose.element( '/model/compartment/b' ) + a = moose.element( '/model/compartment/a' ) + b = moose.element( '/model/compartment/b' ) - # Iterate through all plots, dump their contents to data.plot. - for x in moose.wildcardFind( '/model/graphs/n#' ): - #x.xplot( 'scriptKineticModel.plot', x.name ) - t = numpy.arange( 0, x.vector.size, 1 ) * x.dt # sec - pylab.plot( t, x.vector, label=x.name ) - pylab.legend() - pylab.show() + # Iterate through all plots, dump their contents to data.plot. + for x in moose.wildcardFind( '/model/graphs/n#' ): + #x.xplot( 'scriptKineticModel.plot', x.name ) + t = numpy.arange( 0, x.vector.size, 1 ) * x.dt # sec + pylab.plot( t, x.vector, label=x.name ) + pylab.legend() + pylab.show() - quit() + quit() # Run the 'main' if this script is executed standalone. if __name__ == '__main__': - main() + main() diff --git a/moose-examples/snippets/funcRateHarmonicOsc.py b/moose-examples/snippets/funcRateHarmonicOsc.py index 029f49f0a781c7ae02503e4ea96e93aee1f1921e..6fbd0af96a8e6b60171863d425376f68dde4ff4b 100644 --- a/moose-examples/snippets/funcRateHarmonicOsc.py +++ b/moose-examples/snippets/funcRateHarmonicOsc.py @@ -14,18 +14,18 @@ import moose runtime = 120.0 def makeModel(): - # create container for model - model = moose.Neutral( 'model' ) - harmonic = moose.CubeMesh( '/model/harmonic' ) - harmonic.volume = 1e-15 - lotka = moose.CubeMesh( '/model/lotka' ) - lotka.volume = 1e-15 - - # create molecules and reactions - p = moose.Pool( '/model/harmonic/p' ) - v = moose.Pool( '/model/harmonic/v' ) - pdot = moose.Function( '/model/harmonic/p/func' ) - vdot = moose.Function( '/model/harmonic/v/func' ) + # create container for model + model = moose.Neutral( 'model' ) + harmonic = moose.CubeMesh( '/model/harmonic' ) + harmonic.volume = 1e-15 + lotka = moose.CubeMesh( '/model/lotka' ) + lotka.volume = 1e-15 + + # create molecules and reactions + p = moose.Pool( '/model/harmonic/p' ) + v = moose.Pool( '/model/harmonic/v' ) + pdot = moose.Function( '/model/harmonic/p/func' ) + vdot = moose.Function( '/model/harmonic/v/func' ) # Parameters offset1 = 1.0 @@ -38,25 +38,25 @@ def makeModel(): pdot.expr = "x0 - " + str( offset1 ) vdot.expr = "-" + str( k ) + " * (x0 - " + str( offset2 ) + ")" - # connect them up for reactions - moose.connect( p, 'nOut', vdot.x[0], 'input' ) - moose.connect( v, 'nOut', pdot.x[0], 'input' ) + # connect them up for reactions + moose.connect( p, 'nOut', vdot.x[0], 'input' ) + moose.connect( v, 'nOut', pdot.x[0], 'input' ) moose.connect( vdot, 'valueOut', v, 'increment' ) moose.connect( pdot, 'valueOut', p, 'increment' ) - # Create the output tables - graphs = moose.Neutral( '/model/graphs' ) - pplot = moose.Table2 ( '/model/graphs/p' ) - vplot = moose.Table2 ( '/model/graphs/v' ) + # Create the output tables + graphs = moose.Neutral( '/model/graphs' ) + pplot = moose.Table2 ( '/model/graphs/p' ) + vplot = moose.Table2 ( '/model/graphs/v' ) - # connect up the tables - moose.connect( pplot, 'requestOut', p, 'getN' ); - moose.connect( vplot, 'requestOut', v, 'getN' ); + # connect up the tables + moose.connect( pplot, 'requestOut', p, 'getN' ); + moose.connect( vplot, 'requestOut', v, 'getN' ); def main(): - """ - funcRateHarmonicOsc illustrates the use of function objects to + """ + funcRateHarmonicOsc illustrates the use of function objects to directly define the rates of change of pool concentration. This example shows how to set up a simple harmonic oscillator system of differential equations using the script. In normal use one would @@ -64,31 +64,31 @@ def main(): The equations are :: - p' = v - offset1 - v' = -k(p - offset2) + p' = v - offset1 + v' = -k(p - offset2) - where the rates for Pools p and v are computed using Functions. - Note the use of offsets. This is because MOOSE chemical - systems cannot have negative concentrations. - - The model is set up to run using default Exponential Euler - integration, and then using the GSL deterministic solver. - """ - makeModel() + where the rates for Pools p and v are computed using Functions. + Note the use of offsets. This is because MOOSE chemical + systems cannot have negative concentrations. + + The model is set up to run using default Exponential Euler + integration, and then using the GSL deterministic solver. + """ + makeModel() for i in range( 11, 18 ): moose.setClock( i, 0.01 ) moose.setClock( 18, 0.1 ) - moose.reinit() - moose.start( runtime ) # Run the model - - # Iterate through all plots, dump their contents to data.plot. - for x in moose.wildcardFind( '/model/graphs/#' ): - #x.xplot( 'scriptKineticModel.plot', x.name ) - t = numpy.arange( 0, x.vector.size, 1 ) * x.dt # sec - pylab.plot( t, x.vector, label=x.name ) + moose.reinit() + moose.start( runtime ) # Run the model + + # Iterate through all plots, dump their contents to data.plot. + for x in moose.wildcardFind( '/model/graphs/#' ): + #x.xplot( 'scriptKineticModel.plot', x.name ) + t = numpy.arange( 0, x.vector.size, 1 ) * x.dt # sec + pylab.plot( t, x.vector, label=x.name ) pylab.suptitle( "Integration using ee" ) - pylab.legend() + pylab.legend() pylab.figure() compt = moose.element( '/model/harmonic' ) @@ -99,18 +99,18 @@ def main(): stoich.path = '/model/harmonic/##' for i in range( 11, 18 ): moose.setClock( i, 0.1 ) - moose.reinit() - moose.start( runtime ) # Run the model + moose.reinit() + moose.start( runtime ) # Run the model - for x in moose.wildcardFind( '/model/graphs/#' ): - t = numpy.arange( 0, x.vector.size, 1 ) * x.dt # sec - pylab.plot( t, x.vector, label=x.name ) + for x in moose.wildcardFind( '/model/graphs/#' ): + t = numpy.arange( 0, x.vector.size, 1 ) * x.dt # sec + pylab.plot( t, x.vector, label=x.name ) pylab.suptitle( "Integration using gsl" ) - pylab.legend() - pylab.show() + pylab.legend() + pylab.show() - quit() + quit() # Run the 'main' if this script is executed standalone. if __name__ == '__main__': - main() + main() diff --git a/moose-examples/snippets/funcReacLotkaVolterra.py b/moose-examples/snippets/funcReacLotkaVolterra.py index a19223929f32623f6bef44e1e3bba45924568aef..13a90119e3efa1aef762ebbd1ac1cbb301db3ced 100644 --- a/moose-examples/snippets/funcReacLotkaVolterra.py +++ b/moose-examples/snippets/funcReacLotkaVolterra.py @@ -15,21 +15,21 @@ import moose runtime = 50.0 def makeModel(): - # create container for model - model = moose.Neutral( 'model' ) - harmonic = moose.CubeMesh( '/model/harmonic' ) - harmonic.volume = 1e-15 - lotka = moose.CubeMesh( '/model/lotka' ) - lotka.volume = 1e-15 - - # create molecules and reactions - x = moose.Pool( '/model/lotka/x' ) - y = moose.Pool( '/model/lotka/y' ) + # create container for model + model = moose.Neutral( 'model' ) + harmonic = moose.CubeMesh( '/model/harmonic' ) + harmonic.volume = 1e-15 + lotka = moose.CubeMesh( '/model/lotka' ) + lotka.volume = 1e-15 + + # create molecules and reactions + x = moose.Pool( '/model/lotka/x' ) + y = moose.Pool( '/model/lotka/y' ) z = moose.BufPool( '/model/lotka/z' ) # Dummy molecule. xreac = moose.Reac( '/model/lotka/xreac' ) yreac = moose.Reac( '/model/lotka/yreac' ) - xrate = moose.Function( '/model/lotka/xreac/func' ) - yrate = moose.Function( '/model/lotka/yreac/func' ) + xrate = moose.Function( '/model/lotka/xreac/func' ) + yrate = moose.Function( '/model/lotka/yreac/func' ) # Parameters alpha = 1.0 @@ -49,9 +49,9 @@ def makeModel(): xreac.Kb = 0 yreac.Kb = 0 - # connect them up for reactions - moose.connect( y, 'nOut', xrate.x[0], 'input' ) - moose.connect( x, 'nOut', yrate.x[0], 'input' ) + # connect them up for reactions + moose.connect( y, 'nOut', xrate.x[0], 'input' ) + moose.connect( x, 'nOut', yrate.x[0], 'input' ) moose.connect( xrate, 'valueOut', xreac, 'setNumKf' ) moose.connect( yrate, 'valueOut', yreac, 'setNumKf' ) moose.connect( xreac, 'sub', x, 'reac' ) @@ -59,14 +59,14 @@ def makeModel(): moose.connect( yreac, 'sub', y, 'reac' ) moose.connect( yreac, 'prd', z, 'reac' ) - # Create the output tables - graphs = moose.Neutral( '/model/graphs' ) - xplot = moose.Table2 ( '/model/graphs/x' ) - yplot = moose.Table2 ( '/model/graphs/y' ) + # Create the output tables + graphs = moose.Neutral( '/model/graphs' ) + xplot = moose.Table2 ( '/model/graphs/x' ) + yplot = moose.Table2 ( '/model/graphs/y' ) - # connect up the tables - moose.connect( xplot, 'requestOut', x, 'getN' ); - moose.connect( yplot, 'requestOut', y, 'getN' ); + # connect up the tables + moose.connect( xplot, 'requestOut', x, 'getN' ); + moose.connect( yplot, 'requestOut', y, 'getN' ); def main(): """ diff --git a/moose-examples/snippets/gssaCylinderDiffusion.py b/moose-examples/snippets/gssaCylinderDiffusion.py index 57033a4267c77d0408f54a55e5df004d0759507d..932c4aa23319d27fd6d73326df7482d0c4c23607 100644 --- a/moose-examples/snippets/gssaCylinderDiffusion.py +++ b/moose-examples/snippets/gssaCylinderDiffusion.py @@ -9,12 +9,12 @@ import sys -sys.path.append('../../python') import math import pylab import numpy import matplotlib.pyplot as plt import moose +print(('[INFO] Using moose from %s' % moose.__file__ )) import os import signal @@ -58,11 +58,11 @@ def makeModel(): The concentrations of all molecules are displayed in an animation. """ # create container for model - r0 = 2e-6 # m - r1 = 1e-6 # m + r0 = 2e-6 # m + r1 = 1e-6 # m num = 100 diffLength = 1e-6 # m - len = num * diffLength # m + len = num * diffLength # m diffConst = 10e-12 #motorRate = 1e-6 #diffConst = 0 @@ -108,7 +108,7 @@ def makeModel(): os.kill( PID, signal.SIGUSR1 ) stoich.path = "/model/compartment/##" - print dsolve.numPools + print((dsolve.numPools)) assert( dsolve.numPools == 4 ) a.vec.concInit = concA b.vec.concInit = concA / 5.0 @@ -178,22 +178,24 @@ def main(): for t in numpy.arange( 0, runtime, plotdt ): moose.start( plotdt ) updatePlots( plotlist, t ) - # moose.start( runtime ) # Run the model + + # save the final result to a file. + outfile = '%s.png' % sys.argv[0] + plt.savefig( outfile ) + print(( '[INFO] Saved results to %s' % outfile )) atot2 = sum( a.vec.n ) btot2 = sum( b.vec.n ) ctot2 = sum( c.vec.n ) dtot2 = sum( d.vec.n ) - print 'Ratio of initial to final total numbers of of a, b, c, d = ' - print atot2/atot, btot2/btot, ctot2/ctot, dtot2/dtot - print 'Initial to final (b+c)=', (btot2 + ctot2) / (btot + ctot ) - print "\nHit 'enter' to exit" - #raw_input() - + msg = 'Ratio of initial to final total numbers of ' + msg += 'a=%f b=%f, c=%f, d=%f'% (atot2/atot, btot2/btot, ctot2/ctot, dtot2/dtot) + print(msg) + print(('Initial to final (b+c)=%f' % (float(btot2 + ctot2) / (btot + ctot )))) quit() # Run the 'main' if this script is executed standalone. if __name__ == '__main__': - main() + main() diff --git a/moose-examples/snippets/gssaRDspiny.py b/moose-examples/snippets/gssaRDspiny.py index 46beebcd6ea0be27d0148b3f2023c10734863755..5e95febee536c861a86992cfd74dd36ba52017f5 100644 --- a/moose-examples/snippets/gssaRDspiny.py +++ b/moose-examples/snippets/gssaRDspiny.py @@ -133,46 +133,46 @@ def makeDisplay(): plt.xlabel( 'time (seconds)' ) plt.legend() - a = moose.vec( '/model/chem/compt0/a' ) - b = moose.vec( '/model/chem/compt0/b' ) - line1, = dend.plot( range( len( a ) ), a.conc, label='a' ) - line2, = dend.plot( range( len( b ) ), b.conc, label='b' ) + a = moose.vec( '/model/chem/compt0/a' ) + b = moose.vec( '/model/chem/compt0/b' ) + line1, = dend.plot( list(range( len( a ))), a.conc, label='a' ) + line2, = dend.plot( list(range( len( b ))), b.conc, label='b' ) dend.set_ylim( 0, 0.6 ) - a = moose.vec( '/model/chem/compt1/a' ) - b = moose.vec( '/model/chem/compt1/b' ) - line3, = spine.plot( range( len( a ) ), a.conc, label='a' ) - line4, = spine.plot( range( len( b ) ), b.conc, label='b' ) + a = moose.vec( '/model/chem/compt1/a' ) + b = moose.vec( '/model/chem/compt1/b' ) + line3, = spine.plot( list(range( len( a ))), a.conc, label='a' ) + line4, = spine.plot( list(range( len( b ))), b.conc, label='b' ) spine.set_ylim( 0, 0.6 ) - a = moose.vec( '/model/chem/compt2/a' ) - b = moose.vec( '/model/chem/compt2/b' ) - line5, = psd.plot( range( len( a ) ), a.conc, label='a' ) - line6, = psd.plot( range( len( b ) ), b.conc, label='b' ) + a = moose.vec( '/model/chem/compt2/a' ) + b = moose.vec( '/model/chem/compt2/b' ) + line5, = psd.plot( list(range( len( a ))), a.conc, label='a' ) + line6, = psd.plot( list(range( len( b ))), b.conc, label='b' ) psd.set_ylim( 0, 0.6 ) fig.canvas.draw() return ( timeSeries, dend, spine, psd, fig, line1, line2, line3, line4, line5, line6, timeLabel ) def updateDisplay( plotlist ): - a = moose.vec( '/model/chem/compt0/a' ) - b = moose.vec( '/model/chem/compt0/b' ) + a = moose.vec( '/model/chem/compt0/a' ) + b = moose.vec( '/model/chem/compt0/b' ) plotlist[5].set_ydata( a.conc ) plotlist[6].set_ydata( b.conc ) - print 'compt0:', min(a.n), max(a.n), min(b.n), max(b.n) + print(('compt0:', min(a.n), max(a.n), min(b.n), max(b.n))) - a = moose.vec( '/model/chem/compt1/a' ) - b = moose.vec( '/model/chem/compt1/b' ) + a = moose.vec( '/model/chem/compt1/a' ) + b = moose.vec( '/model/chem/compt1/b' ) plotlist[7].set_ydata( a.conc ) plotlist[8].set_ydata( b.conc ) - print 'compt1:', min(a.n), max(a.n), min(b.n), max(b.n) + print(('compt1:', min(a.n), max(a.n), min(b.n), max(b.n))) - a = moose.vec( '/model/chem/compt2/a' ) - b = moose.vec( '/model/chem/compt2/b' ) + a = moose.vec( '/model/chem/compt2/a' ) + b = moose.vec( '/model/chem/compt2/b' ) plotlist[9].set_ydata( a.conc ) plotlist[10].set_ydata( b.conc ) plotlist[4].canvas.draw() - print 'compt2:', min(a.n), max(a.n), min(b.n), max(b.n) + print(('compt2:', min(a.n), max(a.n), min(b.n), max(b.n))) def finalizeDisplay( plotlist, cPlotDt ): @@ -181,7 +181,7 @@ def finalizeDisplay( plotlist, cPlotDt ): line1, = plotlist[0].plot( pos, x.vector, label=x.name ) plotlist[4].canvas.draw() print( "Hit 'enter' to exit" ) - raw_input() + eval(input()) def makeChemModel( compt ): """ @@ -293,4 +293,4 @@ def main(): # Run the 'main' if this script is executed standalone. if __name__ == '__main__': - main() + main() diff --git a/moose-examples/snippets/hdfdemo.py b/moose-examples/snippets/hdfdemo.py index f1fdc2e7f9f3c8098c2b3f0662e768ebb98e2de7..081b2c1feea0bf491127584e5c3004b308952299 100644 --- a/moose-examples/snippets/hdfdemo.py +++ b/moose-examples/snippets/hdfdemo.py @@ -92,7 +92,7 @@ def example(): moose.start(30.0) hdfwriter.close() vm_tab.plainPlot('hdfdemo_Vm.csv') - print 'Finished simulation. Data was saved in', hdfwriter.filename + print(('Finished simulation. Data was saved in', hdfwriter.filename)) if __name__ == '__main__': diff --git a/moose-examples/snippets/helloMoose.py b/moose-examples/snippets/helloMoose.py index 1db5f60ec3ea91ffcd07f79b63024d60fa8d3585..c9fe293384d0e1a9cf1d5094edce92b841e71286 100644 --- a/moose-examples/snippets/helloMoose.py +++ b/moose-examples/snippets/helloMoose.py @@ -36,4 +36,4 @@ def main(): pylab.show() if __name__ == '__main__': - main() + main() diff --git a/moose-examples/snippets/hhcomp.py b/moose-examples/snippets/hhcomp.py index 7115a57a6a55b2136fb9209ce3080f1d91e77524..3a7e46fda4a78a60ef4b5da022641ffbabb703c3 100644 --- a/moose-examples/snippets/hhcomp.py +++ b/moose-examples/snippets/hhcomp.py @@ -205,7 +205,7 @@ def test_hhcomp(): model = moose.Neutral('/model') data = moose.Neutral('/data') comp, na, k = create_hhcomp(parent=model.path) - print comp.Rm, comp.Cm, na.Ek, na.Gbar, k.Ek, k.Gbar + print((comp.Rm, comp.Cm, na.Ek, na.Gbar, k.Ek, k.Gbar)) pg = moose.PulseGen('%s/pg' % (model.path)) pg.firstDelay = 20e-3 pg.firstWidth = 40e-3 diff --git a/moose-examples/snippets/insertSpines.py b/moose-examples/snippets/insertSpines.py index 024e8aa332f0a3c38bcfc958257e35b9b3684b43..5d8a31c80811067201dc0d5bc4b025b3ab7c0fc1 100644 --- a/moose-examples/snippets/insertSpines.py +++ b/moose-examples/snippets/insertSpines.py @@ -56,7 +56,7 @@ def main(): # Now we set up the display compts = moose.wildcardFind( "/model/elec/#[ISA=CompartmentBase]" ) compts[0].inject = inject - ecomptPath = map( lambda x : x.path, compts ) + ecomptPath = [x.path for x in compts] morphology = moogli.read_morphology_from_moose(name = "", path = "/model/elec") #morphology.create_group( "group_all", ecomptPath, -0.08, 0.02, \ # [0.0, 0.5, 1.0, 1.0], [1.0, 0.0, 0.0, 0.9] ) @@ -67,7 +67,7 @@ def main(): viewer.set_background_color( 1.0, 1.0, 1.0, 1.0 ) def callback( morphology, viewer ): moose.start( frameRunTime ) - Vm = map( lambda x: moose.element( x ).Vm, compts ) + Vm = [moose.element( x ).Vm for x in compts] morphology.set_color( "group_all", Vm ) currTime = moose.element( '/clock' ).currentTime #print currTime, compts[0].Vm diff --git a/moose-examples/snippets/insertSpinesWithoutRdesigneur.py b/moose-examples/snippets/insertSpinesWithoutRdesigneur.py index 48ae40e3f863203785c21a11568c91a6039e1a46..484653e2293d9dfee566035a1e48f8d15d5bf3ab 100644 --- a/moose-examples/snippets/insertSpinesWithoutRdesigneur.py +++ b/moose-examples/snippets/insertSpinesWithoutRdesigneur.py @@ -84,7 +84,7 @@ def main(): # Now we set up the display compts = moose.wildcardFind( "/model/#[ISA=CompartmentBase]" ) compts[0].inject = inject - ecomptPath = map( lambda x : x.path, compts ) + ecomptPath = [x.path for x in compts] morphology = moogli.read_morphology_from_moose(name = "", path = "/model") morphology.create_group( "group_all", ecomptPath, -0.08, 0.02, \ [0.0, 0.5, 1.0, 1.0], [1.0, 0.0, 0.0, 0.9] ) @@ -92,7 +92,7 @@ def main(): viewer = moogli.DynamicMorphologyViewerWidget(morphology) def callback( morphology, viewer ): moose.start( frameRunTime ) - Vm = map( lambda x: moose.element( x ).Vm, compts ) + Vm = [moose.element( x ).Vm for x in compts] morphology.set_color( "group_all", Vm ) currTime = moose.element( '/clock' ).currentTime #print currTime, compts[0].Vm diff --git a/moose-examples/snippets/interpol.py b/moose-examples/snippets/interpol.py index 61193c64f04a9bb21fc8da8c44e70dae94bd1c26..a2f031f00acb8fae09d8fff257218650d9fab024 100644 --- a/moose-examples/snippets/interpol.py +++ b/moose-examples/snippets/interpol.py @@ -72,8 +72,8 @@ stimtab.stepSize = 0.0 # stimtab.startTime = 0.0 # stimtab.stopTime = simtime stimtab.vector = np.linspace(-4, 4, 1000) -print stimtab.vector -print interpol.vector +print((stimtab.vector)) +print((interpol.vector)) moose.connect(stimtab, 'output', interpol, 'input') diff --git a/moose-examples/snippets/interpol2d.py b/moose-examples/snippets/interpol2d.py index 46a3041f6c2565d6998267de16ee9d302b6f2069..a6ccef2e09e4b0f807f7544b750beb66a3251e38 100644 --- a/moose-examples/snippets/interpol2d.py +++ b/moose-examples/snippets/interpol2d.py @@ -61,18 +61,18 @@ def interpolation_demo(): # Make a 50 element array with entries at equal distance from # [0,1) and reshape it into a 10x5 matrix and assign to table. matrix = np.linspace(0, 1.0, 50).reshape(10, 5) - print 'Setting table to' - print matrix + print('Setting table to') + print(matrix) interpol.tableVector2D = matrix # interpolating beyond top left corner. # value should be pos = (0.8, 0.3) - print 'Interpolated value at', pos - print interpol.z[pos[0], pos[1]] + print(('Interpolated value at', pos)) + print((interpol.z[pos[0], pos[1]])) - print 'Point going out of bound on both x and y', interpol.z[1.1, 1.1] - print 'Point going out of bound on both x and y', interpol.z[0.5, 1.1] + print(('Point going out of bound on both x and y', interpol.z[1.1, 1.1])) + print(('Point going out of bound on both x and y', interpol.z[0.5, 1.1])) if __name__ == '__main__': interpolation_demo() diff --git a/moose-examples/snippets/loadCspaceModel.py b/moose-examples/snippets/loadCspaceModel.py index 561f4199e912a1d77823e47aebb45486325c2d28..a5956fbabdc8907727773a5379c0bbc8eaf53963 100644 --- a/moose-examples/snippets/loadCspaceModel.py +++ b/moose-examples/snippets/loadCspaceModel.py @@ -49,26 +49,26 @@ import pylab import numpy import moose def main(): - """ This example illustrates loading and running, a kinetic model - defined in cspace format. We use the gsl solver here. The model already - defines a couple of plots and sets the runtime to 3000 seconds. - """ - # This command loads the file into the path '/model', and tells - # the system to use the gsl solver. - modelId = moose.loadModel( 'Osc.cspace', 'model', 'gsl' ) - moose.reinit() - moose.start( 3000.0 ) # Run the model for 300 seconds. + """ This example illustrates loading and running, a kinetic model + defined in cspace format. We use the gsl solver here. The model already + defines a couple of plots and sets the runtime to 3000 seconds. + """ + # This command loads the file into the path '/model', and tells + # the system to use the gsl solver. + modelId = moose.loadModel( 'Osc.cspace', 'model', 'gsl' ) + moose.reinit() + moose.start( 3000.0 ) # Run the model for 300 seconds. - # display all plots - for x in moose.wildcardFind( '/model/graphs/#' ): - t = numpy.arange( 0, x.vector.size, 1 ) #sec - pylab.plot( t, x.vector, label=x.name ) - pylab.legend() - pylab.show() + # display all plots + for x in moose.wildcardFind( '/model/graphs/#' ): + t = numpy.arange( 0, x.vector.size, 1 ) #sec + pylab.plot( t, x.vector, label=x.name ) + pylab.legend() + pylab.show() - # moose.saveModel( modelId, 'saveReaction.g' ) - quit() + # moose.saveModel( modelId, 'saveReaction.g' ) + quit() # Run the 'main' if this script is executed standalone. if __name__ == '__main__': - main() + main() diff --git a/moose-examples/snippets/loadKineticModel.py b/moose-examples/snippets/loadKineticModel.py index 49206ad8b570d215a042d010ee39964de0e451ae..c31d4619f646ca772259dcd3d15230ed126075fe 100644 --- a/moose-examples/snippets/loadKineticModel.py +++ b/moose-examples/snippets/loadKineticModel.py @@ -51,47 +51,47 @@ import sys def main(): """ This example illustrates loading, running, and saving a kinetic model - defined in kkit format. It uses a default kkit model but you can specify another using the command line ``python filename runtime solver``. We use the gsl solver here. The model already defines a couple of plots and sets the runtime to 20 seconds. - """ - solver = "gsl" # Pick any of gsl, gssa, ee.. - mfile = '../genesis/kkit_objects_example.g' - runtime = 20.0 - if ( len( sys.argv ) >= 3 ): + defined in kkit format. It uses a default kkit model but you can specify another using the command line ``python filename runtime solver``. We use the gsl solver here. The model already defines a couple of plots and sets the runtime to 20 seconds. + """ + solver = "gsl" # Pick any of gsl, gssa, ee.. + mfile = '../genesis/kkit_objects_example.g' + runtime = 20.0 + if ( len( sys.argv ) >= 3 ): if sys.argv[1][0] == '/': - mfile = sys.argv[1] + mfile = sys.argv[1] else: - mfile = '../genesis/' + sys.argv[1] - runtime = float( sys.argv[2] ) - if ( len( sys.argv ) == 4 ): + mfile = '../genesis/' + sys.argv[1] + runtime = float( sys.argv[2] ) + if ( len( sys.argv ) == 4 ): solver = sys.argv[3] - modelId = moose.loadModel( mfile, 'model', solver ) + modelId = moose.loadModel( mfile, 'model', solver ) # Increase volume so that the stochastic solver gssa # gives an interesting output #compt = moose.element( '/model/kinetics' ) #compt.volume = 1e-19 - moose.reinit() - moose.start( runtime ) + moose.reinit() + moose.start( runtime ) # Report parameters ''' - for x in moose.wildcardFind( '/model/kinetics/##[ISA=PoolBase]' ): - print x.name, x.nInit, x.concInit - for x in moose.wildcardFind( '/model/kinetics/##[ISA=ReacBase]' ): - print x.name, 'num: (', x.numKf, ', ', x.numKb, '), conc: (', x.Kf, ', ', x.Kb, ')' - for x in moose.wildcardFind('/model/kinetics/##[ISA=EnzBase]'): - print x.name, '(', x.Km, ', ', x.numKm, ', ', x.kcat, ')' + for x in moose.wildcardFind( '/model/kinetics/##[ISA=PoolBase]' ): + print x.name, x.nInit, x.concInit + for x in moose.wildcardFind( '/model/kinetics/##[ISA=ReacBase]' ): + print x.name, 'num: (', x.numKf, ', ', x.numKb, '), conc: (', x.Kf, ', ', x.Kb, ')' + for x in moose.wildcardFind('/model/kinetics/##[ISA=EnzBase]'): + print x.name, '(', x.Km, ', ', x.numKm, ', ', x.kcat, ')' ''' - # Display all plots. - for x in moose.wildcardFind( '/model/#graphs/conc#/#' ): + # Display all plots. + for x in moose.wildcardFind( '/model/#graphs/conc#/#' ): t = numpy.arange( 0, x.vector.size, 1 ) * x.dt pylab.plot( t, x.vector, label=x.name ) pylab.legend() pylab.show() - quit() + quit() # Run the 'main' if this script is executed standalone. if __name__ == '__main__': - main() + main() diff --git a/moose-examples/snippets/loadMorphology.py b/moose-examples/snippets/loadMorphology.py index 99cbc62a6beb8f2b6629858eef3459b7714105f8..a721544915e1a617443e51d29b88e7a6d70bb198 100644 --- a/moose-examples/snippets/loadMorphology.py +++ b/moose-examples/snippets/loadMorphology.py @@ -27,7 +27,7 @@ def main(): # Now we set up the display compts = moose.wildcardFind( "/model/testSwc/#[ISA=CompartmentBase]" ) compts[0].inject = inject - ecomptPath = map( lambda x : x.path, compts ) + ecomptPath = [x.path for x in compts] morphology = moogli.read_morphology_from_moose(name = "", path = "/model/testSwc") morphology.create_group( "group_all", ecomptPath, -0.08, 0.02, \ [0.0, 0.5, 1.0, 1.0], [1.0, 0.0, 0.0, 0.9] ) @@ -35,7 +35,7 @@ def main(): viewer = moogli.DynamicMorphologyViewerWidget(morphology) def callback( morphology, viewer ): moose.start( frameRunTime ) - Vm = map( lambda x: moose.element( x ).Vm, compts ) + Vm = [moose.element( x ).Vm for x in compts] morphology.set_color( "group_all", Vm ) currTime = moose.element( '/clock' ).currentTime #print currTime, compts[0].Vm diff --git a/moose-examples/snippets/loadSbmlmodel.py b/moose-examples/snippets/loadSbmlmodel.py index 9323a467ff664bc068fa695dc75fe57aebd4023f..1a717245c46aa94048d709e5127f8fd344373574 100644 --- a/moose-examples/snippets/loadSbmlmodel.py +++ b/moose-examples/snippets/loadSbmlmodel.py @@ -35,22 +35,22 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # +import sys +import os.path -import moose -import matplotlib import numpy as np -import matplotlib.pyplot as plt -import sys import pylab + +import moose from moose.SBML import * -import os.path +from moose.chemUtil.add_Delete_ChemicalSolver import * def main(): """ This example illustrates loading, running of an SBML model defined in XML format.\n - The model 00001-sbml-l3v1.xml is taken from l3v1 SBML testcase.\n - Plots are setup.\n - Model is run for 20sec.\n - As a general rule we created model under '/path/model' and plots under '/path/graphs'.\n + The model 00001-sbml-l3v1.xml is taken from l3v1 SBML testcase.\n + Plots are setup.\n + Model is run for 20sec.\n + As a general rule we created model under '/path/model' and plots under '/path/graphs'.\n """ mfile = "../genesis/00001-sbml-l3v1.xml" @@ -67,11 +67,14 @@ def main(): runtime = 20.0 else: runtime = float(sys.argv[2]) + + # Loading the sbml file into MOOSE, models are loaded in path/model + sbmlId = moose.SBML.readSBML.mooseReadSBML(mfile,'sbml') # Loading the sbml file into MOOSE, models are loaded in path/model sbmlId = mooseReadSBML(mfile,'/sbml') if isinstance(sbmlId, (list, tuple)): - print sbmlId + print(sbmlId) elif sbmlId.path != '/': s1 = moose.element('/sbml/model/compartment/S1') @@ -86,7 +89,9 @@ def main(): moose.connect( outputs1,'requestOut', s1, 'getConc' ); moose.connect( outputs2,'requestOut', s2, 'getConc' ); - + # gsl solver is added, default is ee + mooseaddChemSolver(sbmlId.path,"ee") + # Reset and Run moose.reinit() moose.start(runtime) @@ -97,7 +102,7 @@ def displayPlots(): # Display all plots. for x in moose.wildcardFind( '/sbml/graphs/#[TYPE=Table2]' ): t = np.arange( 0, x.vector.size, 1 ) #sec - plt.plot( t, x.vector, label=x.name ) + pylab.plot( t, x.vector, label=x.name ) pylab.legend() pylab.show() diff --git a/moose-examples/snippets/mgblock.py b/moose-examples/snippets/mgblock.py index 2ad8741b7368447a95a60ed223f9de4781f5e9dc..0c66ec532393641cffb858b74cd668ff5ed2d224 100644 --- a/moose-examples/snippets/mgblock.py +++ b/moose-examples/snippets/mgblock.py @@ -133,7 +133,7 @@ def test_mgblock(): for i in range( 10 ): moose.setClock( i, simdt ) moose.setClock( Gnmda.tick, plotdt ) - print spikegen.dt, Gnmda.dt + print((spikegen.dt, Gnmda.dt)) moose.reinit() moose.start( simtime ) t = pylab.linspace(0, simtime*1e3, len(Vm.vector)) diff --git a/moose-examples/snippets/multiscaleOneCompt.py b/moose-examples/snippets/multiscaleOneCompt.py index 19202121376195176205d693af225d166705aad4..2ab9541672617b237a27e8b0b6c688ae916a1caa 100644 --- a/moose-examples/snippets/multiscaleOneCompt.py +++ b/moose-examples/snippets/multiscaleOneCompt.py @@ -8,8 +8,9 @@ ## See the file COPYING.LIB for the full notice. ######################################################################### +from __future__ import print_function + import sys -sys.path.append('../../python') import os os.environ['NUMPTHREADS'] = '1' import math @@ -19,6 +20,7 @@ import matplotlib.pyplot as plt import moose import proto18 +scriptDir = os.path.dirname( os.path.realpath( __file__ ) ) #EREST_ACT = -70e-3 def loadElec(): @@ -33,19 +35,19 @@ def loadElec(): for x in moose.wildcardFind( "/library/##" ): x.tick = -1 model = moose.Neutral( '/model' ) - cellId = moose.loadModel( 'soma.p', '/model/elec', "Neutral" ) + cellId = moose.loadModel( + os.path.join( scriptDir, 'soma.p') + , '/model/elec', "Neutral" + ) moose.setCwe( '/' ) - ''' - hsolve = moose.HSolve( '/model/elec/hsolve' ) - hsolve.dt = 50.0e-6 - hsolve.target = '/model/elec/soma' - moose.reinit() - ''' return cellId def loadChem(): chem = moose.Neutral( '/model/chem' ) - modelId = moose.loadModel( '../genesis/chanPhosphByCaMKII.g', '/model/chem', 'gsl' ) + modelId = moose.loadModel( + os.path.join( scriptDir, '..', 'genesis', 'chanPhosphByCaMKII.g' ) + , '/model/chem', 'gsl' + ) nmstoich = moose.element( '/model/chem/kinetics/stoich' ) def makeModel(): @@ -87,7 +89,7 @@ def addPlot( objpath, field, plot, tick ): tab.tick = tick return tab else: - print "failed in addPlot(", objpath, field, plot, tick, ")" + print(("failed in addPlot(", objpath, field, plot, tick, ")")) return 0 def main(): @@ -177,4 +179,4 @@ def main(): quit() if __name__ == '__main__': - main() + main() diff --git a/moose-examples/snippets/neuronFromDotp.py b/moose-examples/snippets/neuronFromDotp.py index 8b8702c588987274b21ce3790a50a1a3c47dac1b..e7008c03ecada0e6fc0e5ef59e5edd079975dcf5 100644 --- a/moose-examples/snippets/neuronFromDotp.py +++ b/moose-examples/snippets/neuronFromDotp.py @@ -78,80 +78,80 @@ VMAX = 120e-3 + EREST_ACT VDIVS = 3000 def makeChannelPrototypes(): - """Create channel prototypes for readcell.""" - library = moose.Neutral( '/library' ) - moose.setCwe( '/library' ) - compt = moose.SymCompartment( '/library/symcompartment' ) - Em = EREST_ACT + 10.613e-3 - compt.Em = Em - compt.initVm = EREST_ACT - compt.Cm = 7.85e-9 * 0.5 - compt.Rm = 4.2e5 * 5.0 - compt.Ra = 7639.44e3 - nachan = moose.HHChannel( '/library/Na' ) - nachan.Xpower = 3 - xGate = moose.HHGate(nachan.path + '/gateX') - xGate.setupAlpha(Na_m_params + [VDIVS, VMIN, VMAX]) - xGate.useInterpolation = 1 - nachan.Ypower = 1 - yGate = moose.HHGate(nachan.path + '/gateY') - yGate.setupAlpha(Na_h_params + [VDIVS, VMIN, VMAX]) - yGate.useInterpolation = 1 - nachan.Gbar = 0.942e-3 - nachan.Ek = 115e-3+EREST_ACT - - kchan = moose.HHChannel( '/library/K' ) - kchan.Xpower = 4.0 - xGate = moose.HHGate(kchan.path + '/gateX') - xGate.setupAlpha(K_n_params + [VDIVS, VMIN, VMAX]) - xGate.useInterpolation = 1 - kchan.Gbar = 0.2836e-3 - kchan.Ek = -12e-3+EREST_ACT + """Create channel prototypes for readcell.""" + library = moose.Neutral( '/library' ) + moose.setCwe( '/library' ) + compt = moose.SymCompartment( '/library/symcompartment' ) + Em = EREST_ACT + 10.613e-3 + compt.Em = Em + compt.initVm = EREST_ACT + compt.Cm = 7.85e-9 * 0.5 + compt.Rm = 4.2e5 * 5.0 + compt.Ra = 7639.44e3 + nachan = moose.HHChannel( '/library/Na' ) + nachan.Xpower = 3 + xGate = moose.HHGate(nachan.path + '/gateX') + xGate.setupAlpha(Na_m_params + [VDIVS, VMIN, VMAX]) + xGate.useInterpolation = 1 + nachan.Ypower = 1 + yGate = moose.HHGate(nachan.path + '/gateY') + yGate.setupAlpha(Na_h_params + [VDIVS, VMIN, VMAX]) + yGate.useInterpolation = 1 + nachan.Gbar = 0.942e-3 + nachan.Ek = 115e-3+EREST_ACT + + kchan = moose.HHChannel( '/library/K' ) + kchan.Xpower = 4.0 + xGate = moose.HHGate(kchan.path + '/gateX') + xGate.setupAlpha(K_n_params + [VDIVS, VMIN, VMAX]) + xGate.useInterpolation = 1 + kchan.Gbar = 0.2836e-3 + kchan.Ek = -12e-3+EREST_ACT def addPlot( objpath, field, plot ): - assert moose.exists( objpath ) - tab = moose.Table( '/graphs/' + plot ) - obj = moose.element( objpath ) - moose.connect( tab, 'requestOut', obj, field ) - return tab + assert moose.exists( objpath ) + tab = moose.Table( '/graphs/' + plot ) + obj = moose.element( objpath ) + moose.connect( tab, 'requestOut', obj, field ) + return tab def dumpPlots(): - plots = moose.wildcardFind( '/graphs/##[ISA=Table]' ) - for x in moose.wildcardFind( '/graphs/##[ISA=Table]' ): - t = numpy.arange( 0, x.size ) * x.dt # msec - pylab.plot( t, x.vector, label=x.name) + plots = moose.wildcardFind( '/graphs/##[ISA=Table]' ) + for x in moose.wildcardFind( '/graphs/##[ISA=Table]' ): + t = numpy.arange( 0, x.size ) * x.dt # msec + pylab.plot( t, x.vector, label=x.name) - pylab.legend() - pylab.show() + pylab.legend() + pylab.show() def makeModel(): - makeChannelPrototypes() - cellId = moose.loadModel( 'dotp.p', '/model', 'Neutral' ) - moose.element( '/model/soma' ).inject = 1.7e-9 - graphs = moose.Neutral( '/graphs' ) - addPlot( '/model/soma', 'getVm', 'somaVm' ) - addPlot( '/model/apical_14', 'getVm', 'midVm' ) - addPlot( '/model/lat_15_2', 'getVm', 'latVm' ) - addPlot( '/model/apical_19', 'getVm', 'tipVm' ) + makeChannelPrototypes() + cellId = moose.loadModel( 'dotp.p', '/model', 'Neutral' ) + moose.element( '/model/soma' ).inject = 1.7e-9 + graphs = moose.Neutral( '/graphs' ) + addPlot( '/model/soma', 'getVm', 'somaVm' ) + addPlot( '/model/apical_14', 'getVm', 'midVm' ) + addPlot( '/model/lat_15_2', 'getVm', 'latVm' ) + addPlot( '/model/apical_19', 'getVm', 'tipVm' ) def testModel( useSolver ): - plotDt = 2e-4 - if ( useSolver ): - elecDt = 50e-6 - chemDt = 2e-3 + plotDt = 2e-4 + if ( useSolver ): + elecDt = 50e-6 + chemDt = 2e-3 - makeModel() - moose.setClock( 18, plotDt ) + makeModel() + moose.setClock( 18, plotDt ) - moose.reinit() - moose.start( 0.1 ) - dumpPlots() + moose.reinit() + moose.start( 0.1 ) + dumpPlots() def main(): - testModel( 1 ) + testModel( 1 ) if __name__ == '__main__': - main() + main() # # neuronFromDotp.py ends here diff --git a/moose-examples/snippets/nsdf.py b/moose-examples/snippets/nsdf.py index 93db9164ee322ddaa65969362c0b735132391479..fc6d20070ee061ebd17ff2db310ce63b432caaea 100644 --- a/moose-examples/snippets/nsdf.py +++ b/moose-examples/snippets/nsdf.py @@ -125,12 +125,12 @@ def setup_model(): nsdf.mode = 2 #overwrite existing file nsdf.flushLimit = 100 moose.connect(nsdf, 'requestOut', pulse, 'getOutputValue') - print 'event input', nsdf.eventInput, nsdf.eventInput.num - print nsdf + print(('event input', nsdf.eventInput, nsdf.eventInput.num)) + print(nsdf) nsdf.eventInput.num = 1 ei = nsdf.eventInput[0] - print ei.path + print((ei.path)) moose.connect(t_lead, 'spikeOut', nsdf.eventInput[0], 'input') tab = moose.Table('spiketab') tab.threshold = t_lead.threshold @@ -138,10 +138,10 @@ def setup_model(): for ii in range(32): moose.setClock(ii, dt) moose.connect(pulse, 'output', tab, 'spike') - print 'Starting simulation at:', datetime.now().isoformat() + print(('Starting simulation at:', datetime.now().isoformat())) moose.reinit() moose.start(simtime) - print 'Finished simulation at:', datetime.now().isoformat() + print(('Finished simulation at:', datetime.now().isoformat())) np.savetxt('nsdf.txt', tab.vector) ################################### # Set the environment attributes diff --git a/moose-examples/snippets/nsdf_vec.py b/moose-examples/snippets/nsdf_vec.py index 879c26d08ea1e03d96ed57448bbf0daadc934e55..7a35586db66bbe3996921a65447b7db64f08418c 100644 --- a/moose-examples/snippets/nsdf_vec.py +++ b/moose-examples/snippets/nsdf_vec.py @@ -66,7 +66,7 @@ nsdf.py """ -from __future__ import print_function + import numpy as np from datetime import datetime import getpass @@ -110,10 +110,10 @@ def write_nsdf(): clock = moose.element('/clock') for ii in range(32): moose.setClock(ii, dt) - print('Starting simulation at:', datetime.now().isoformat()) + print(('Starting simulation at:', datetime.now().isoformat())) moose.reinit() moose.start(simtime) - print('Finished simulation at:', datetime.now().isoformat()) + print(('Finished simulation at:', datetime.now().isoformat())) ################################### # Set the environment attributes ################################### diff --git a/moose-examples/snippets/proto18.py b/moose-examples/snippets/proto18.py index 83448ef7e89ab3e274f9dbcfd79ccd7056b90110..b2fecbb3aa0ee275de072b61752e9087f8c1f511 100644 --- a/moose-examples/snippets/proto18.py +++ b/moose-examples/snippets/proto18.py @@ -4,7 +4,7 @@ #** The 1991 Traub set of voltage and concentration dependent channels #** Implemented as tabchannels by : Dave Beeman #** R.D.Traub, R. K. S. Wong, R. Miles, and H. Michelson -#** Journal of Neurophysiology, Vol. 66, p. 635 (1991) +#** Journal of Neurophysiology, Vol. 66, p. 635 (1991) #** #** This file depends on functions and constants defined in defaults.g #** As it is also intended as an example of the use of the tabchannel @@ -52,61 +52,61 @@ SOMA_A = 3.320e-9 #// soma area in square meters #//======================================================================== def make_Ca(): - if moose.exists( 'Ca' ): - return - Ca = moose.HHChannel( 'Ca' ) - Ca.Ek = ECA - Ca.Gbar = 40 * SOMA_A - Ca.Gk = 0 - Ca.Xpower = 2 - Ca.Ypower = 1 - Ca.Zpower = 0 - - xgate = moose.element( 'Ca/gateX' ) - xA = numpy.array( [ 1.6e3, 0, 1.0, -1.0 * (0.065 + EREST_ACT), -0.01389, -20e3 * (0.0511 + EREST_ACT), 20e3, -1.0, -1.0 * (0.0511 + EREST_ACT), 5.0e-3, 3000, -0.1, 0.05 ] ) -# xgate.min = -0.1 -# xgate.max = 0.05 -# xgate.divs = 3000 + if moose.exists( 'Ca' ): + return + Ca = moose.HHChannel( 'Ca' ) + Ca.Ek = ECA + Ca.Gbar = 40 * SOMA_A + Ca.Gk = 0 + Ca.Xpower = 2 + Ca.Ypower = 1 + Ca.Zpower = 0 + + xgate = moose.element( 'Ca/gateX' ) + xA = numpy.array( [ 1.6e3, 0, 1.0, -1.0 * (0.065 + EREST_ACT), -0.01389, -20e3 * (0.0511 + EREST_ACT), 20e3, -1.0, -1.0 * (0.0511 + EREST_ACT), 5.0e-3, 3000, -0.1, 0.05 ] ) +# xgate.min = -0.1 +# xgate.max = 0.05 +# xgate.divs = 3000 #// Converting Traub's expressions for the gCa/s alpha and beta functions #// to SI units and entering the A, B, C, D and F parameters, we get: -# xgate.alpha( 1.6e3, 0, 1.0, -1.0 * (0.065 + EREST_ACT), -0.01389 ) -# xgate.beta( -20e3 * (0.0511 + EREST_ACT), 20e3, -1.0, -1.0 * (0.0511 + EREST_ACT), 5.0e-3 ) - #xgate.setupAlpha( xA ) - xgate.alphaParms = xA +# xgate.alpha( 1.6e3, 0, 1.0, -1.0 * (0.065 + EREST_ACT), -0.01389 ) +# xgate.beta( -20e3 * (0.0511 + EREST_ACT), 20e3, -1.0, -1.0 * (0.0511 + EREST_ACT), 5.0e-3 ) + #xgate.setupAlpha( xA ) + xgate.alphaParms = xA # The Y gate (gCa/r) is not quite of this form. For V > EREST_ACT, alpha = # 5*{exp({-50*(V - EREST_ACT)})}. Otherwise, alpha = 5. Over the entire # range, alpha + beta = 5. To create the Y_A and Y_B tables, we use some # of the pieces of the setupalpha function. - ygate = moose.element( 'Ca/gateY' ) - ygate.min = -0.1 - ygate.max = 0.05 - ygate.divs = 3000 - yA = numpy.zeros( (ygate.divs + 1), dtype=float) - yB = numpy.zeros( (ygate.divs + 1), dtype=float) + ygate = moose.element( 'Ca/gateY' ) + ygate.min = -0.1 + ygate.max = 0.05 + ygate.divs = 3000 + yA = numpy.zeros( (ygate.divs + 1), dtype=float) + yB = numpy.zeros( (ygate.divs + 1), dtype=float) #Fill the Y_A table with alpha values and the Y_B table with (alpha+beta) - dx = (ygate.max - ygate.min)/ygate.divs - x = ygate.min - for i in range( ygate.divs + 1 ): - if ( x > EREST_ACT): - yA[i] = 5.0 * math.exp( -50 * (x - EREST_ACT) ) - else: - yA[i] = 5.0 - yB[i] = 5.0 - x += dx - ygate.tableA = yA - ygate.tableB = yB + dx = (ygate.max - ygate.min)/ygate.divs + x = ygate.min + for i in range( ygate.divs + 1 ): + if ( x > EREST_ACT): + yA[i] = 5.0 * math.exp( -50 * (x - EREST_ACT) ) + else: + yA[i] = 5.0 + yB[i] = 5.0 + x += dx + ygate.tableA = yA + ygate.tableB = yB # Tell the cell reader that the current from this channel must be fed into # the Ca_conc pool of calcium. - addmsg1 = moose.Mstring( '/library/Ca/addmsg1' ) - addmsg1.value = '. IkOut ../Ca_conc current' + addmsg1 = moose.Mstring( '/library/Ca/addmsg1' ) + addmsg1.value = '. IkOut ../Ca_conc current' # in some compartments, whe have an NMDA_Ca_conc object to put the current # into. - addmsg2 = moose.Mstring( '/library/Ca/addmsg2' ) - addmsg2.value = '. IkOut ../NMDA_Ca_conc current' + addmsg2 = moose.Mstring( '/library/Ca/addmsg2' ) + addmsg2.value = '. IkOut ../NMDA_Ca_conc current' # As we typically use the cell reader to create copies of these prototype #elements in one or more compartments, we need some way to be sure that the #needed messages are established. Although the cell reader has enough @@ -153,12 +153,12 @@ def make_Ca(): #//======================================================================== def make_Ca_conc(): - if moose.exists( 'Ca_conc' ): - return - conc = moose.CaConc( 'Ca_conc' ) - conc.tau = 0.013333 # sec - conc.B = 17.402e12 # Curr to conc conversion for soma - conc.Ca_base = 0.0 + if moose.exists( 'Ca_conc' ): + return + conc = moose.CaConc( 'Ca_conc' ) + conc.tau = 0.013333 # sec + conc.B = 17.402e12 # Curr to conc conversion for soma + conc.Ca_base = 0.0 #This Ca_concen element should receive a message from any calcium channels # with the current going through the channel. Here we have this specified @@ -176,38 +176,38 @@ def make_Ca_conc(): # functions of concentration, instead of voltage. def make_K_AHP(): - if moose.exists( 'K_AHP' ): - return - - K_AHP = moose.HHChannel( 'K_AHP' ) - K_AHP.Ek = EK # V - K_AHP.Gbar = 8 * SOMA_A # S - K_AHP.Gk = 0 # S - K_AHP.Xpower = 0 - K_AHP.Ypower = 0 - K_AHP.Zpower = 1 - - zgate = moose.element( 'K_AHP/gateZ' ) - xmax = 500.0 - zgate.min = 0 - zgate.max = xmax - zgate.divs = 3000 - zA = numpy.zeros( (zgate.divs + 1), dtype=float) - zB = numpy.zeros( (zgate.divs + 1), dtype=float) - dx = (zgate.max - zgate.min)/zgate.divs - x = zgate.min - for i in range( zgate.divs + 1 ): - if (x < (xmax / 2.0 )): - zA[i] = 0.02*x - else: - zA[i] = 10.0 - zB[i] = zA[i] + 1.0 - x = x + dx - - zgate.tableA = zA - zgate.tableB = zB - addmsg1 = moose.Mstring( '/library/K_AHP/addmsg1' ) - addmsg1.value = '../Ca_conc concOut . concen' + if moose.exists( 'K_AHP' ): + return + + K_AHP = moose.HHChannel( 'K_AHP' ) + K_AHP.Ek = EK # V + K_AHP.Gbar = 8 * SOMA_A # S + K_AHP.Gk = 0 # S + K_AHP.Xpower = 0 + K_AHP.Ypower = 0 + K_AHP.Zpower = 1 + + zgate = moose.element( 'K_AHP/gateZ' ) + xmax = 500.0 + zgate.min = 0 + zgate.max = xmax + zgate.divs = 3000 + zA = numpy.zeros( (zgate.divs + 1), dtype=float) + zB = numpy.zeros( (zgate.divs + 1), dtype=float) + dx = (zgate.max - zgate.min)/zgate.divs + x = zgate.min + for i in range( zgate.divs + 1 ): + if (x < (xmax / 2.0 )): + zA[i] = 0.02*x + else: + zA[i] = 10.0 + zB[i] = zA[i] + 1.0 + x = x + dx + + zgate.tableA = zA + zgate.tableB = zB + addmsg1 = moose.Mstring( '/library/K_AHP/addmsg1' ) + addmsg1.value = '../Ca_conc concOut . concen' # Use an added field to tell the cell reader to set up a message from the # Ca_Conc with concentration info, to the current K_AHP object. @@ -228,71 +228,71 @@ def make_K_AHP(): #the multiplicative Ca-dependent factor in the conductance. def make_K_C(): - if moose.exists( 'K_C'): - return - - K_C = moose.HHChannel( 'K_C' ) - K_C.Ek = EK # V - K_C.Gbar = 100.0 * SOMA_A # S - K_C.Gk = 0 # S - K_C.Xpower = 1 - K_C.Zpower = 1 - K_C.instant = 4 # Flag: 0x100 means Z gate is instant. - - # Now make a X-table for the voltage-dependent activation parameter. - xgate = moose.element( 'K_C/gateX' ) - xgate.min = -0.1 - xgate.max = 0.05 - xgate.divs = 3000 - xA = numpy.zeros( (xgate.divs + 1), dtype=float) - xB = numpy.zeros( (xgate.divs + 1), dtype=float) - dx = (xgate.max - xgate.min)/xgate.divs - x = xgate.min - for i in range( xgate.divs + 1 ): - alpha = 0.0 - beta = 0.0 - if (x < EREST_ACT + 0.05): - alpha = math.exp( 53.872 * (x - EREST_ACT) - 0.66835 ) / 0.018975 - beta = 2000* (math.exp ( (EREST_ACT + 0.0065 - x)/0.027)) - alpha - else: - alpha = 2000 * math.exp( ( EREST_ACT + 0.0065 - x)/0.027 ) - beta = 0.0 - xA[i] = alpha - xB[i] = alpha + beta - x = x + dx - xgate.tableA = xA - xgate.tableB = xB + if moose.exists( 'K_C'): + return + + K_C = moose.HHChannel( 'K_C' ) + K_C.Ek = EK # V + K_C.Gbar = 100.0 * SOMA_A # S + K_C.Gk = 0 # S + K_C.Xpower = 1 + K_C.Zpower = 1 + K_C.instant = 4 # Flag: 0x100 means Z gate is instant. + + # Now make a X-table for the voltage-dependent activation parameter. + xgate = moose.element( 'K_C/gateX' ) + xgate.min = -0.1 + xgate.max = 0.05 + xgate.divs = 3000 + xA = numpy.zeros( (xgate.divs + 1), dtype=float) + xB = numpy.zeros( (xgate.divs + 1), dtype=float) + dx = (xgate.max - xgate.min)/xgate.divs + x = xgate.min + for i in range( xgate.divs + 1 ): + alpha = 0.0 + beta = 0.0 + if (x < EREST_ACT + 0.05): + alpha = math.exp( 53.872 * (x - EREST_ACT) - 0.66835 ) / 0.018975 + beta = 2000* (math.exp ( (EREST_ACT + 0.0065 - x)/0.027)) - alpha + else: + alpha = 2000 * math.exp( ( EREST_ACT + 0.0065 - x)/0.027 ) + beta = 0.0 + xA[i] = alpha + xB[i] = alpha + beta + x = x + dx + xgate.tableA = xA + xgate.tableB = xB # Create a table for the function of concentration, allowing a # concentration range of 0 to 1000, with 50 divisions. This is done # using the Z gate, which can receive a CONCEN message. By using # the "instant" flag, the A and B tables are evaluated as lookup tables, # rather than being used in a differential equation. - zgate = moose.element( 'K_C/gateZ' ) - zgate.min = 0.0 - xmax = 500.0 - zgate.max = xmax - zgate.divs = 3000 - zA = numpy.zeros( (zgate.divs + 1), dtype=float) - zB = numpy.zeros( (zgate.divs + 1), dtype=float) - dx = ( zgate.max - zgate.min)/ zgate.divs - x = zgate.min - for i in range( xgate.divs + 1 ): - if ( x < ( xmax / 4.0 ) ): - zA[i] = x * 4.0 / xmax - else: - zA[i] = 1.0 - zB[i] = 1.0 - x += dx - zgate.tableA = zA - zgate.tableB = zB + zgate = moose.element( 'K_C/gateZ' ) + zgate.min = 0.0 + xmax = 500.0 + zgate.max = xmax + zgate.divs = 3000 + zA = numpy.zeros( (zgate.divs + 1), dtype=float) + zB = numpy.zeros( (zgate.divs + 1), dtype=float) + dx = ( zgate.max - zgate.min)/ zgate.divs + x = zgate.min + for i in range( xgate.divs + 1 ): + if ( x < ( xmax / 4.0 ) ): + zA[i] = x * 4.0 / xmax + else: + zA[i] = 1.0 + zB[i] = 1.0 + x += dx + zgate.tableA = zA + zgate.tableB = zB # Now we need to provide for messages that link to external elements. # The message that sends the Ca concentration to the Z gate tables is stored # in an added field of the channel, so that it may be found by the cell # reader. - addmsg1 = moose.Mstring( '/library/K_C/addmsg1' ) - addmsg1.value = '../Ca_conc concOut . concen' + addmsg1 = moose.Mstring( '/library/K_C/addmsg1' ) + addmsg1.value = '../Ca_conc concOut . concen' # The remaining channels are straightforward tabchannel implementations @@ -301,103 +301,103 @@ def make_K_C(): #/ Tabchannel Na Hippocampal cell channel #/======================================================================== def make_Na(): - if moose.exists( 'Na' ): - return - Na = moose.HHChannel( 'Na' ) - Na.Ek = ENA # V - Na.Gbar = 300 * SOMA_A # S - Na.Gk = 0 # S - Na.Xpower = 2 - Na.Ypower = 1 - Na.Zpower = 0 - - xgate = moose.element( 'Na/gateX' ) - xA = numpy.array( [ 320e3 * (0.0131 + EREST_ACT), - -320e3, -1.0, -1.0 * (0.0131 + EREST_ACT), -0.004, - -280e3 * (0.0401 + EREST_ACT), 280e3, -1.0, - -1.0 * (0.0401 + EREST_ACT), 5.0e-3, - 3000, -0.1, 0.05 ] ) - xgate.alphaParms = xA - - - #xgate.alpha( 320e3 * (0.0131 + EREST_ACT), -320e3, -1.0, -1.0 * (0.0131 + EREST_ACT), -0.004 ) - #xgate.beta( -280e3 * (0.0401 + EREST_ACT), 280e3, -1.0, -1.0 * (0.0401 + EREST_ACT), 5.0e-3 ) - - ygate = moose.element( 'Na/gateY' ) - yA = numpy.array( [ 128.0, 0.0, 0.0, -1.0 * (0.017 + EREST_ACT), 0.018, - 4.0e3, 0.0, 1.0, -1.0 * (0.040 + EREST_ACT), -5.0e-3, - 3000, -0.1, 0.05 ] ) - ygate.alphaParms = yA - - #ygate.alpha( 128.0, 0.0, 0.0, -1.0 * (0.017 + EREST_ACT), 0.018 ) - #ygate.beta( 4.0e3, 0.0, 1.0, -1.0 * (0.040 + EREST_ACT), -5.0e-3 ) + if moose.exists( 'Na' ): + return + Na = moose.HHChannel( 'Na' ) + Na.Ek = ENA # V + Na.Gbar = 300 * SOMA_A # S + Na.Gk = 0 # S + Na.Xpower = 2 + Na.Ypower = 1 + Na.Zpower = 0 + + xgate = moose.element( 'Na/gateX' ) + xA = numpy.array( [ 320e3 * (0.0131 + EREST_ACT), + -320e3, -1.0, -1.0 * (0.0131 + EREST_ACT), -0.004, + -280e3 * (0.0401 + EREST_ACT), 280e3, -1.0, + -1.0 * (0.0401 + EREST_ACT), 5.0e-3, + 3000, -0.1, 0.05 ] ) + xgate.alphaParms = xA + + + #xgate.alpha( 320e3 * (0.0131 + EREST_ACT), -320e3, -1.0, -1.0 * (0.0131 + EREST_ACT), -0.004 ) + #xgate.beta( -280e3 * (0.0401 + EREST_ACT), 280e3, -1.0, -1.0 * (0.0401 + EREST_ACT), 5.0e-3 ) + + ygate = moose.element( 'Na/gateY' ) + yA = numpy.array( [ 128.0, 0.0, 0.0, -1.0 * (0.017 + EREST_ACT), 0.018, + 4.0e3, 0.0, 1.0, -1.0 * (0.040 + EREST_ACT), -5.0e-3, + 3000, -0.1, 0.05 ] ) + ygate.alphaParms = yA + + #ygate.alpha( 128.0, 0.0, 0.0, -1.0 * (0.017 + EREST_ACT), 0.018 ) + #ygate.beta( 4.0e3, 0.0, 1.0, -1.0 * (0.040 + EREST_ACT), -5.0e-3 ) #======================================================================== # Tabchannel K(DR) Hippocampal cell channel #======================================================================== def make_K_DR(): - if moose.exists( 'K_DR' ): - return - K_DR = moose.HHChannel( 'K_DR' ) - K_DR.Ek = EK # V - K_DR.Gbar = 150 * SOMA_A # S - K_DR.Gk = 0 # S - K_DR.Xpower = 1 - K_DR.Ypower = 0 - K_DR.Zpower = 0 - - xgate = moose.element( 'K_DR/gateX' ) - xA = numpy.array( [ 16e3 * (0.0351 + EREST_ACT), - -16e3, -1.0, -1.0 * (0.0351 + EREST_ACT), -0.005, - 250, 0.0, 0.0, -1.0 * (0.02 + EREST_ACT), 0.04, - 3000, -0.1, 0.05 ] ) - xgate.alphaParms = xA - #xgate.alpha( 16e3 * (0.0351 + EREST_ACT), -16e3, -1.0, -1.0 * (0.0351 + EREST_ACT), -0.005 ) - #xgate.beta( 250, 0.0, 0.0, -1.0 * (0.02 + EREST_ACT), 0.04 ) + if moose.exists( 'K_DR' ): + return + K_DR = moose.HHChannel( 'K_DR' ) + K_DR.Ek = EK # V + K_DR.Gbar = 150 * SOMA_A # S + K_DR.Gk = 0 # S + K_DR.Xpower = 1 + K_DR.Ypower = 0 + K_DR.Zpower = 0 + + xgate = moose.element( 'K_DR/gateX' ) + xA = numpy.array( [ 16e3 * (0.0351 + EREST_ACT), + -16e3, -1.0, -1.0 * (0.0351 + EREST_ACT), -0.005, + 250, 0.0, 0.0, -1.0 * (0.02 + EREST_ACT), 0.04, + 3000, -0.1, 0.05 ] ) + xgate.alphaParms = xA + #xgate.alpha( 16e3 * (0.0351 + EREST_ACT), -16e3, -1.0, -1.0 * (0.0351 + EREST_ACT), -0.005 ) + #xgate.beta( 250, 0.0, 0.0, -1.0 * (0.02 + EREST_ACT), 0.04 ) #======================================================================== # Tabchannel K(A) Hippocampal cell channel #======================================================================== def make_K_A(): - if moose.exists( 'K_A' ): - return - K_A = moose.HHChannel( 'K_A' ) - K_A.Ek = EK # V - K_A.Gbar = 50 * SOMA_A # S - K_A.Gk = 0 # S - K_A.Xpower = 1 - K_A.Ypower = 1 - K_A.Zpower = 0 - - xgate = moose.element( 'K_A/gateX' ) - xA = numpy.array( [ 20e3 * (0.0131 + EREST_ACT), - -20e3, -1.0, -1.0 * (0.0131 + EREST_ACT), -0.01, - -17.5e3 * (0.0401 + EREST_ACT), - 17.5e3, -1.0, -1.0 * (0.0401 + EREST_ACT), 0.01, - 3000, -0.1, 0.05 ] ) - xgate.alphaParms = xA - # xgate.alpha( 20e3 * (0.0131 + EREST_ACT), -20e3, -1.0, -1.0 * (0.0131 + EREST_ACT), -0.01 ) - # xgate.beta( -17.5e3 * (0.0401 + EREST_ACT), 17.5e3, -1.0, -1.0 * (0.0401 + EREST_ACT), 0.01 ) - - ygate = moose.element( 'K_A/gateY' ) - yA = numpy.array( [ 1.6, 0.0, 0.0, 0.013 - EREST_ACT, 0.018, - 50.0, 0.0, 1.0, -1.0 * (0.0101 + EREST_ACT), -0.005, - 3000, -0.1, 0.05 ] ) - ygate.alphaParms = yA - # ygate.alpha( 1.6, 0.0, 0.0, 0.013 - EREST_ACT, 0.018 ) - # ygate.beta( 50.0, 0.0, 1.0, -1.0 * (0.0101 + EREST_ACT), -0.005 ) + if moose.exists( 'K_A' ): + return + K_A = moose.HHChannel( 'K_A' ) + K_A.Ek = EK # V + K_A.Gbar = 50 * SOMA_A # S + K_A.Gk = 0 # S + K_A.Xpower = 1 + K_A.Ypower = 1 + K_A.Zpower = 0 + + xgate = moose.element( 'K_A/gateX' ) + xA = numpy.array( [ 20e3 * (0.0131 + EREST_ACT), + -20e3, -1.0, -1.0 * (0.0131 + EREST_ACT), -0.01, + -17.5e3 * (0.0401 + EREST_ACT), + 17.5e3, -1.0, -1.0 * (0.0401 + EREST_ACT), 0.01, + 3000, -0.1, 0.05 ] ) + xgate.alphaParms = xA + # xgate.alpha( 20e3 * (0.0131 + EREST_ACT), -20e3, -1.0, -1.0 * (0.0131 + EREST_ACT), -0.01 ) + # xgate.beta( -17.5e3 * (0.0401 + EREST_ACT), 17.5e3, -1.0, -1.0 * (0.0401 + EREST_ACT), 0.01 ) + + ygate = moose.element( 'K_A/gateY' ) + yA = numpy.array( [ 1.6, 0.0, 0.0, 0.013 - EREST_ACT, 0.018, + 50.0, 0.0, 1.0, -1.0 * (0.0101 + EREST_ACT), -0.005, + 3000, -0.1, 0.05 ] ) + ygate.alphaParms = yA + # ygate.alpha( 1.6, 0.0, 0.0, 0.013 - EREST_ACT, 0.018 ) + # ygate.beta( 50.0, 0.0, 1.0, -1.0 * (0.0101 + EREST_ACT), -0.005 ) #======================================================================== # SynChan: Glu receptor #======================================================================== def make_glu(): - if moose.exists( 'glu' ): - return - glu = moose.SynChan( 'glu' ) - glu.Ek = 0.0 - glu.tau1 = 2.0e-3 - glu.tau2 = 9.0e-3 - glu.Gbar = 40 * SOMA_A + if moose.exists( 'glu' ): + return + glu = moose.SynChan( 'glu' ) + glu.Ek = 0.0 + glu.tau1 = 2.0e-3 + glu.tau2 = 9.0e-3 + glu.Gbar = 40 * SOMA_A sh = moose.SimpleSynHandler( 'glu/sh' ) moose.connect( sh, 'activationOut', glu, 'activation' ) sh.numSynapses = 1 @@ -409,39 +409,39 @@ def make_glu(): #======================================================================== def make_NMDA(): - if moose.exists( 'NMDA' ): - return - NMDA = moose.SynChan( 'NMDA' ) - NMDA.Ek = 0.0 - NMDA.tau1 = 20.0e-3 - NMDA.tau2 = 20.0e-3 - NMDA.Gbar = 5 * SOMA_A - - block = moose.MgBlock( '/library/NMDA/block' ) - block.CMg = 1.2 # [Mg] in mM - block.Zk = 2 - block.KMg_A = 1.0/0.28 - block.KMg_B = 1.0/62 - - moose.connect( NMDA, 'channelOut', block, 'origChannel', 'OneToOne' ) - addmsg1 = moose.Mstring( '/library/NMDA/addmsg1' ) - addmsg1.value = '.. channel ./block channel' - #Here we want to also tell the cell reader to _remove_ the original - #Gk, Ek term going from the channel to the compartment, as this is - # now handled by the MgBlock. - #addmsg2 = moose.Mstring( 'NMDA/addmsg2' - #addmsg2.value = 'DropMsg .. channel' - addmsg1 = moose.Mstring( '/library/NMDA/addmsg1' ) - addmsg1.value = '.. VmOut ./block Vm' - addmsg2 = moose.Mstring( '/library/NMDA/addmsg2' ) - addmsg2.value = './block IkOut ../Ca_conc current' - addmsg3 = moose.Mstring( '/library/NMDA/addmsg3' ) - addmsg3.value = '.. VmOut . Vm' - - sh = moose.SimpleSynHandler( 'NMDA/sh' ) - moose.connect( sh, 'activationOut', NMDA, 'activation' ) - sh.numSynapses = 1 - sh.synapse[0].weight = 1 + if moose.exists( 'NMDA' ): + return + NMDA = moose.SynChan( 'NMDA' ) + NMDA.Ek = 0.0 + NMDA.tau1 = 20.0e-3 + NMDA.tau2 = 20.0e-3 + NMDA.Gbar = 5 * SOMA_A + + block = moose.MgBlock( '/library/NMDA/block' ) + block.CMg = 1.2 # [Mg] in mM + block.Zk = 2 + block.KMg_A = 1.0/0.28 + block.KMg_B = 1.0/62 + + moose.connect( NMDA, 'channelOut', block, 'origChannel', 'OneToOne' ) + addmsg1 = moose.Mstring( '/library/NMDA/addmsg1' ) + addmsg1.value = '.. channel ./block channel' + #Here we want to also tell the cell reader to _remove_ the original + #Gk, Ek term going from the channel to the compartment, as this is + # now handled by the MgBlock. + #addmsg2 = moose.Mstring( 'NMDA/addmsg2' + #addmsg2.value = 'DropMsg .. channel' + addmsg1 = moose.Mstring( '/library/NMDA/addmsg1' ) + addmsg1.value = '.. VmOut ./block Vm' + addmsg2 = moose.Mstring( '/library/NMDA/addmsg2' ) + addmsg2.value = './block IkOut ../Ca_conc current' + addmsg3 = moose.Mstring( '/library/NMDA/addmsg3' ) + addmsg3.value = '.. VmOut . Vm' + + sh = moose.SimpleSynHandler( 'NMDA/sh' ) + moose.connect( sh, 'activationOut', NMDA, 'activation' ) + sh.numSynapses = 1 + sh.synapse[0].weight = 1 #addfield NMDA addmsg1 #setfield NMDA addmsg1 ".. ./block VOLTAGE Vm" @@ -461,37 +461,37 @@ def make_NMDA(): #======================================================================== def make_Ca_NMDA(): - if moose.exists( 'Ca_NMDA' ): - return - Ca_NMDA = moose.SynChan( 'Ca_NMDA' ) - Ca_NMDA.Ek = ECA - Ca_NMDA.tau1 = 20.0e-3 - Ca_NMDA.tau2 = 20.0e-3 - Ca_NMDA.Gbar = 5 * SOMA_A - - block = moose.MgBlock( '/library/Ca_NMDA/block' ) - block.CMg = 1.2 # [Mg] in mM - block.Zk = 2 - block.KMg_A = 1.0/0.28 - block.KMg_B = 1.0/62 - - moose.connect( Ca_NMDA, 'channelOut', block, 'origChannel', 'OneToOne' ) - addmsg1 = moose.Mstring( '/library/Ca_NMDA/addmsg1' ) - addmsg1.value = '.. VmOut ./block Vm' - addmsg2 = moose.Mstring( '/library/Ca_NMDA/addmsg2' ) - addmsg2.value = './block IkOut ../NMDA_Ca_conc current' - # The original model has the Ca current also coming here. + if moose.exists( 'Ca_NMDA' ): + return + Ca_NMDA = moose.SynChan( 'Ca_NMDA' ) + Ca_NMDA.Ek = ECA + Ca_NMDA.tau1 = 20.0e-3 + Ca_NMDA.tau2 = 20.0e-3 + Ca_NMDA.Gbar = 5 * SOMA_A + + block = moose.MgBlock( '/library/Ca_NMDA/block' ) + block.CMg = 1.2 # [Mg] in mM + block.Zk = 2 + block.KMg_A = 1.0/0.28 + block.KMg_B = 1.0/62 + + moose.connect( Ca_NMDA, 'channelOut', block, 'origChannel', 'OneToOne' ) + addmsg1 = moose.Mstring( '/library/Ca_NMDA/addmsg1' ) + addmsg1.value = '.. VmOut ./block Vm' + addmsg2 = moose.Mstring( '/library/Ca_NMDA/addmsg2' ) + addmsg2.value = './block IkOut ../NMDA_Ca_conc current' + # The original model has the Ca current also coming here. #======================================================================== # Ca pool for influx through Ca_NMDA #======================================================================== def make_NMDA_Ca_conc(): - if moose.exists( 'NMDA_Ca_conc' ): - return - NMDA_Ca_conc = moose.CaConc( 'NMDA_Ca_conc' ) - NMDA_Ca_conc.tau = 0.004 # sec. Faster in spine than dend - NMDA_Ca_conc.B = 17.402e12 # overridden by cellreader. - NMDA_Ca_conc.Ca_base = 0.0 + if moose.exists( 'NMDA_Ca_conc' ): + return + NMDA_Ca_conc = moose.CaConc( 'NMDA_Ca_conc' ) + NMDA_Ca_conc.tau = 0.004 # sec. Faster in spine than dend + NMDA_Ca_conc.B = 17.402e12 # overridden by cellreader. + NMDA_Ca_conc.Ca_base = 0.0 # This pool used to set up Ca info coming to it. Now we insist that the # originating channel should specify the deferred message. @@ -502,9 +502,9 @@ def make_NMDA_Ca_conc(): #//addmsg axon/spike axon BUFFER name def make_axon(): - if moose.exists( 'axon' ): - return - axon = moose.SpikeGen( 'axon' ) - axon.threshold = -40e-3 # V - axon.abs_refract = 10e-3 # sec + if moose.exists( 'axon' ): + return + axon = moose.SpikeGen( 'axon' ) + axon.threshold = -40e-3 # V + axon.abs_refract = 10e-3 # sec diff --git a/moose-examples/snippets/pulsegen2.py b/moose-examples/snippets/pulsegen2.py index 812e63027100b728cca92fa88a7880e74a9263ed..b5c9f0ca90de3064a5090a3e8ee1bd6a120257ca 100644 --- a/moose-examples/snippets/pulsegen2.py +++ b/moose-examples/snippets/pulsegen2.py @@ -164,7 +164,7 @@ pylab.plot(plotGate.vector) pylab.title('Free Running Gate') pylab.tight_layout() pylab.show() -print "pulsegen.py: finished simulation" +print("pulsegen.py: finished simulation") # # pulsegen2.py ends here diff --git a/moose-examples/snippets/reacDiffBranchingNeuron.py b/moose-examples/snippets/reacDiffBranchingNeuron.py index fa4864eb01ca15cb0d5784d32aeb00af3a285bc0..c76a32066c6675922f1100e147130087531a8d85 100644 --- a/moose-examples/snippets/reacDiffBranchingNeuron.py +++ b/moose-examples/snippets/reacDiffBranchingNeuron.py @@ -99,8 +99,8 @@ def makeDisplay(): return ( timeSeries, fig, line, timeLabel, yp ) def updateDisplay( plotlist ): - a = moose.vec( '/model/chem/compt0/a' ) - b = moose.vec( '/model/chem/compt0/b' ) + a = moose.vec( '/model/chem/compt0/a' ) + b = moose.vec( '/model/chem/compt0/b' ) plotlist[2].set_ydata( a.conc * 10 + plotlist[4] ) plotlist[1].canvas.draw() @@ -113,7 +113,7 @@ def finalizeDisplay( plotlist, cPlotDt ): plt.legend() plotlist[1].canvas.draw() print( "Hit 'enter' to exit" ) - raw_input() + eval(input()) def makeChemModel( compt ): """ @@ -232,4 +232,4 @@ def main(): # Run the 'main' if this script is executed standalone. if __name__ == '__main__': - main() + main() diff --git a/moose-examples/snippets/reacDiffConcGradient.py b/moose-examples/snippets/reacDiffConcGradient.py index 80cf4637c401889326d5bc51572a75ffacffd0fa..67f002095d40ffeb2ce9ab4e5810bcc923da5fdf 100644 --- a/moose-examples/snippets/reacDiffConcGradient.py +++ b/moose-examples/snippets/reacDiffConcGradient.py @@ -17,7 +17,7 @@ import moose diffConst = 1e-12 def makeCyl( num, concInit, radius, x0, x1 ): - compt = moose.CylMesh( '/model/compt' + num ) + compt = moose.CylMesh( '/model/compt' + num ) compt.x0 = x0 compt.x1 = x1 compt.y0 = 0 @@ -29,14 +29,14 @@ def makeCyl( num, concInit, radius, x0, x1 ): compt.diffLength = x1-x0 a = moose.Pool( compt.path + '/a' ) b = moose.Pool( compt.path + '/b' + num ) - reac = moose.Reac( compt.path + '/reac' ) - moose.connect( reac, 'sub', a, 'reac' ) - moose.connect( reac, 'prd', b, 'reac' ) + reac = moose.Reac( compt.path + '/reac' ) + moose.connect( reac, 'sub', a, 'reac' ) + moose.connect( reac, 'prd', b, 'reac' ) a.diffConst = diffConst a.concInit = concInit b.concInit = concInit - reac.Kf = 0.1 - reac.Kb = 0.1 + reac.Kf = 0.1 + reac.Kb = 0.1 return a, b, compt def makeModel(): @@ -44,40 +44,40 @@ def makeModel(): len0 = 4e-6 len1 = 2e-6 len2 = 1e-6 - # create container for model - model = moose.Neutral( 'model' ) + # create container for model + model = moose.Neutral( 'model' ) a0, b0, compt0 = makeCyl( '0', 1, radius, -len0, 0 ) a1, b1, compt1 = makeCyl( '1', 2, radius, 0, len1 ) a2, b2, compt2 = makeCyl( '2', 6, radius, len1, len1 + len2 ) - print('Volumes = ', compt0.volume, compt1.volume, compt2.volume) + print(('Volumes = ', compt0.volume, compt1.volume, compt2.volume)) - # create molecules and reactions - reac0 = moose.Reac( '/model/compt1/reac0' ) - reac1 = moose.Reac( '/model/compt1/reac1' ) + # create molecules and reactions + reac0 = moose.Reac( '/model/compt1/reac0' ) + reac1 = moose.Reac( '/model/compt1/reac1' ) - # connect them up for reactions - moose.connect( reac0, 'sub', b0, 'reac' ) - moose.connect( reac0, 'prd', b1, 'reac' ) - moose.connect( reac1, 'sub', b1, 'reac' ) - moose.connect( reac1, 'prd', b2, 'reac' ) + # connect them up for reactions + moose.connect( reac0, 'sub', b0, 'reac' ) + moose.connect( reac0, 'prd', b1, 'reac' ) + moose.connect( reac1, 'sub', b1, 'reac' ) + moose.connect( reac1, 'prd', b2, 'reac' ) - # Assign parameters - reac0.Kf = 0.5 - reac0.Kb = 0.05 - reac1.Kf = 0.5 - reac1.Kb = 0.05 + # Assign parameters + reac0.Kf = 0.5 + reac0.Kb = 0.05 + reac1.Kf = 0.5 + reac1.Kb = 0.05 - # Create the output tables - graphs = moose.Neutral( '/model/graphs' ) - outputA0 = moose.Table2 ( '/model/graphs/concA0' ) - outputA1 = moose.Table2 ( '/model/graphs/concA1' ) - outputA2 = moose.Table2 ( '/model/graphs/concA2' ) + # Create the output tables + graphs = moose.Neutral( '/model/graphs' ) + outputA0 = moose.Table2 ( '/model/graphs/concA0' ) + outputA1 = moose.Table2 ( '/model/graphs/concA1' ) + outputA2 = moose.Table2 ( '/model/graphs/concA2' ) - # connect up the tables - moose.connect( outputA0, 'requestOut', a0, 'getConc' ); - moose.connect( outputA1, 'requestOut', a1, 'getConc' ); - moose.connect( outputA2, 'requestOut', a2, 'getConc' ); + # connect up the tables + moose.connect( outputA0, 'requestOut', a0, 'getConc' ); + moose.connect( outputA1, 'requestOut', a1, 'getConc' ); + moose.connect( outputA2, 'requestOut', a2, 'getConc' ); # Build the solvers. No need for diffusion in this version. ksolve0 = moose.Ksolve( '/model/compt0/ksolve0' ) @@ -143,10 +143,10 @@ def main(): initTot = 0 tot = 0 for x in moose.wildcardFind( '/model/compt#/#[ISA=PoolBase]' ): - print(x.name, x.conc) + print((x.name, x.conc)) tot += x.n initTot += x.nInit - print("Totals: expected = ", initTot, ", got: ", tot) + print(("Totals: expected = ", initTot, ", got: ", tot)) # Iterate through all plots, dump their contents to data.plot. for x in moose.wildcardFind( '/model/graphs/conc#' ): @@ -158,4 +158,4 @@ def main(): # Run the 'main' if this script is executed standalone. if __name__ == '__main__': - main() + main() diff --git a/moose-examples/snippets/reacDiffSpinyNeuron.py b/moose-examples/snippets/reacDiffSpinyNeuron.py index 2edb86b99b86f76523258a1772db777f3dc1e708..067147f004f59d62721451aa199d4d3e2f358415 100644 --- a/moose-examples/snippets/reacDiffSpinyNeuron.py +++ b/moose-examples/snippets/reacDiffSpinyNeuron.py @@ -93,7 +93,7 @@ def makeModel(): graphs = moose.Neutral( '/model/graphs' ) moose.le( '/model/chem/compt1' ) a = moose.element( '/model/chem/compt1' ) - print a.voxelVolume + print((a.voxelVolume)) makeTab( 'a_soma', '/model/chem/compt0/a[0]' ) makeTab( 'b_soma', '/model/chem/compt0/b[0]' ) makeTab( 'a_apical', '/model/chem/compt0/a[' + str( num ) + ']' ) @@ -135,40 +135,40 @@ def makeDisplay(): plt.xlabel( 'time (seconds)' ) plt.legend() - a = moose.vec( '/model/chem/compt0/a' ) - b = moose.vec( '/model/chem/compt0/b' ) - line1, = dend.plot( range( len( a ) ), a.conc, label='a' ) - line2, = dend.plot( range( len( b ) ), b.conc, label='b' ) + a = moose.vec( '/model/chem/compt0/a' ) + b = moose.vec( '/model/chem/compt0/b' ) + line1, = dend.plot( list(range( len( a ))), a.conc, label='a' ) + line2, = dend.plot( list(range( len( b ))), b.conc, label='b' ) dend.set_ylim( 0, 0.6 ) - a = moose.vec( '/model/chem/compt1/a' ) - b = moose.vec( '/model/chem/compt1/b' ) - line3, = spine.plot( range( len( a ) ), a.conc, label='a' ) - line4, = spine.plot( range( len( b ) ), b.conc, label='b' ) + a = moose.vec( '/model/chem/compt1/a' ) + b = moose.vec( '/model/chem/compt1/b' ) + line3, = spine.plot( list(range( len( a ))), a.conc, label='a' ) + line4, = spine.plot( list(range( len( b ))), b.conc, label='b' ) spine.set_ylim( 0, 0.6 ) - a = moose.vec( '/model/chem/compt2/a' ) - b = moose.vec( '/model/chem/compt2/b' ) - line5, = psd.plot( range( len( a ) ), a.conc, label='a' ) - line6, = psd.plot( range( len( b ) ), b.conc, label='b' ) + a = moose.vec( '/model/chem/compt2/a' ) + b = moose.vec( '/model/chem/compt2/b' ) + line5, = psd.plot( list(range( len( a ))), a.conc, label='a' ) + line6, = psd.plot( list(range( len( b ))), b.conc, label='b' ) psd.set_ylim( 0, 0.6 ) fig.canvas.draw() return ( timeSeries, dend, spine, psd, fig, line1, line2, line3, line4, line5, line6, timeLabel ) def updateDisplay( plotlist ): - a = moose.vec( '/model/chem/compt0/a' ) - b = moose.vec( '/model/chem/compt0/b' ) + a = moose.vec( '/model/chem/compt0/a' ) + b = moose.vec( '/model/chem/compt0/b' ) plotlist[5].set_ydata( a.conc ) plotlist[6].set_ydata( b.conc ) - a = moose.vec( '/model/chem/compt1/a' ) - b = moose.vec( '/model/chem/compt1/b' ) + a = moose.vec( '/model/chem/compt1/a' ) + b = moose.vec( '/model/chem/compt1/b' ) plotlist[7].set_ydata( a.conc ) plotlist[8].set_ydata( b.conc ) - a = moose.vec( '/model/chem/compt2/a' ) - b = moose.vec( '/model/chem/compt2/b' ) + a = moose.vec( '/model/chem/compt2/a' ) + b = moose.vec( '/model/chem/compt2/b' ) plotlist[9].set_ydata( a.conc ) plotlist[10].set_ydata( b.conc ) plotlist[4].canvas.draw() @@ -180,7 +180,7 @@ def finalizeDisplay( plotlist, cPlotDt ): line1, = plotlist[0].plot( pos, x.vector, label=x.name ) plotlist[4].canvas.draw() print( "Hit 'enter' to exit" ) - raw_input() + eval(input()) def makeChemModel( compt ): """ @@ -294,4 +294,4 @@ def main(): # Run the 'main' if this script is executed standalone. if __name__ == '__main__': - main() + main() diff --git a/moose-examples/snippets/recurrentIntFire.py b/moose-examples/snippets/recurrentIntFire.py index 6a480cc4941b55ec56013b400504771f9441f014..1e291e1eefe77daa941084cb2d1c96f3afa4186b 100644 --- a/moose-examples/snippets/recurrentIntFire.py +++ b/moose-examples/snippets/recurrentIntFire.py @@ -22,49 +22,49 @@ sys.path.append('/home/subha/src/moose_async13/python') import moose def make_network(): - size = 1024 - dt = 0.2 - runsteps = 50 - delayMin = 0 - delayMax = 4 - weightMax = 1 - Vmax = 1.0 - thresh = 0.4 - refractoryPeriod = 0.4 + size = 1024 + dt = 0.2 + runsteps = 50 + delayMin = 0 + delayMax = 4 + weightMax = 1 + Vmax = 1.0 + thresh = 0.4 + refractoryPeriod = 0.4 tau = 0.5 - connectionProbability = 0.01 - random.seed( 123 ) - nprand.seed( 456 ) - t0 = time.time() + connectionProbability = 0.01 + random.seed( 123 ) + nprand.seed( 456 ) + t0 = time.time() - network = moose.IntFire( 'network', size ); - syns = moose.SimpleSynHandler( '/network/syns', size ); + network = moose.IntFire( 'network', size ); + syns = moose.SimpleSynHandler( '/network/syns', size ); moose.connect( syns, 'activationOut', network, 'activation', 'OneToOne' ) - moose.le( '/network' ) - syns.vec.numSynapses = [1] * size - sv = moose.vec( '/network/syns/synapse' ) - print 'before connect t = ', time.time() - t0 - mid = moose.connect( network, 'spikeOut', sv, 'addSpike', 'Sparse') - print 'after connect t = ', time.time() - t0 - #print mid.destFields - m2 = moose.element( mid ) - m2.setRandomConnectivity( connectionProbability, 5489 ) - print 'after setting connectivity, t = ', time.time() - t0 - #network.vec.Vm = [(Vmax*random.random()) for r in range(size)] - network.vec.Vm = nprand.rand( size ) * Vmax - network.vec.thresh = thresh - network.vec.refractoryPeriod = refractoryPeriod - network.vec.tau = tau - numSynVec = syns.vec.numSynapses - print 'Middle of setup, t = ', time.time() - t0 - numTotSyn = sum( numSynVec ) - print numSynVec.size, ', tot = ', numTotSyn, ', numSynVec = ', numSynVec - for item in syns.vec: - sh = moose.element( item ) + moose.le( '/network' ) + syns.vec.numSynapses = [1] * size + sv = moose.vec( '/network/syns/synapse' ) + print(('before connect t = ', time.time() - t0)) + mid = moose.connect( network, 'spikeOut', sv, 'addSpike', 'Sparse') + print(('after connect t = ', time.time() - t0)) + #print mid.destFields + m2 = moose.element( mid ) + m2.setRandomConnectivity( connectionProbability, 5489 ) + print(('after setting connectivity, t = ', time.time() - t0)) + #network.vec.Vm = [(Vmax*random.random()) for r in range(size)] + network.vec.Vm = nprand.rand( size ) * Vmax + network.vec.thresh = thresh + network.vec.refractoryPeriod = refractoryPeriod + network.vec.tau = tau + numSynVec = syns.vec.numSynapses + print(('Middle of setup, t = ', time.time() - t0)) + numTotSyn = sum( numSynVec ) + print((numSynVec.size, ', tot = ', numTotSyn, ', numSynVec = ', numSynVec)) + for item in syns.vec: + sh = moose.element( item ) sh.synapse.delay = delayMin + (delayMax - delayMin ) * nprand.rand( len( sh.synapse ) ) - #sh.synapse.delay = [ (delayMin + random.random() * (delayMax - delayMin ) for r in range( len( sh.synapse ) ) ] - sh.synapse.weight = nprand.rand( len( sh.synapse ) ) * weightMax - print 'after setup, t = ', time.time() - t0 + #sh.synapse.delay = [ (delayMin + random.random() * (delayMax - delayMin ) for r in range( len( sh.synapse ) ) ] + sh.synapse.weight = nprand.rand( len( sh.synapse ) ) * weightMax + print(('after setup, t = ', time.time() - t0)) numStats = 100 stats = moose.SpikeStats( '/stats', numStats ) @@ -77,26 +77,26 @@ def make_network(): moose.connect( network.vec[k], 'spikeOut', stats.vec[i], 'addSpike' ) moose.connect( plots, 'requestOut', stats, 'getMean', 'OneToOne' ) - #moose.useClock( 0, '/network/syns,/network', 'process' ) - moose.useClock( 0, '/network/syns', 'process' ) - moose.useClock( 1, '/network', 'process' ) - moose.useClock( 2, '/stats', 'process' ) - moose.useClock( 3, '/plot', 'process' ) - moose.setClock( 0, dt ) - moose.setClock( 1, dt ) - moose.setClock( 2, dt ) - moose.setClock( 3, dt ) - moose.setClock( 9, dt ) - t1 = time.time() - moose.reinit() - print 'reinit time t = ', time.time() - t1 - network.vec.Vm = nprand.rand( size ) * Vmax - print 'setting Vm , t = ', time.time() - t1 - t1 = time.time() - print 'starting' - moose.start(runsteps * dt) - print 'runtime, t = ', time.time() - t1 - print network.vec.Vm[99:103], network.vec.Vm[900:903] + #moose.useClock( 0, '/network/syns,/network', 'process' ) + moose.useClock( 0, '/network/syns', 'process' ) + moose.useClock( 1, '/network', 'process' ) + moose.useClock( 2, '/stats', 'process' ) + moose.useClock( 3, '/plot', 'process' ) + moose.setClock( 0, dt ) + moose.setClock( 1, dt ) + moose.setClock( 2, dt ) + moose.setClock( 3, dt ) + moose.setClock( 9, dt ) + t1 = time.time() + moose.reinit() + print(('reinit time t = ', time.time() - t1)) + network.vec.Vm = nprand.rand( size ) * Vmax + print(('setting Vm , t = ', time.time() - t1)) + t1 = time.time() + print('starting') + moose.start(runsteps * dt) + print(('runtime, t = ', time.time() - t1)) + print((network.vec.Vm[99:103], network.vec.Vm[900:903])) t = [i * dt for i in range( plots.vec[0].vector.size )] i = 0 for p in plots.vec: diff --git a/moose-examples/snippets/recurrentLIF.py b/moose-examples/snippets/recurrentLIF.py index 6f00fdfae9c696bb305aafd8f9c3a35662a4fb32..0bb5249fe2b542ebac140e22658393886ca72cc2 100644 --- a/moose-examples/snippets/recurrentLIF.py +++ b/moose-examples/snippets/recurrentLIF.py @@ -22,50 +22,50 @@ sys.path.append('/home/subha/src/moose_async13/python') import moose def make_network(): - size = 1024 - dt = 0.2 - runsteps = 50 - delayMin = 0 - delayMax = 4 - weightMax = 1 - Vmax = 1.0 - thresh = 0.4 - refractoryPeriod = 0.4 + size = 1024 + dt = 0.2 + runsteps = 50 + delayMin = 0 + delayMax = 4 + weightMax = 1 + Vmax = 1.0 + thresh = 0.4 + refractoryPeriod = 0.4 tau = 0.5 - connectionProbability = 0.01 - random.seed( 123 ) - nprand.seed( 456 ) - t0 = time.time() + connectionProbability = 0.01 + random.seed( 123 ) + nprand.seed( 456 ) + t0 = time.time() - network = moose.LIF( 'network', size ); - syns = moose.SimpleSynHandler( '/network/syns', size ); + network = moose.LIF( 'network', size ); + syns = moose.SimpleSynHandler( '/network/syns', size ); moose.connect( syns, 'activationOut', network, 'activation', 'OneToOne' ) - moose.le( '/network' ) - syns.vec.numSynapses = [1] * size - sv = moose.vec( '/network/syns/synapse' ) - print 'before connect t = ', time.time() - t0 - mid = moose.connect( network, 'spikeOut', sv, 'addSpike', 'Sparse') - print 'after connect t = ', time.time() - t0 - #print mid.destFields - m2 = moose.element( mid ) - m2.setRandomConnectivity( connectionProbability, 5489 ) - print 'after setting connectivity, t = ', time.time() - t0 - #network.vec.Vm = [(Vmax*random.random()) for r in range(size)] - network.vec.Vm = nprand.rand( size ) * Vmax - network.vec.thresh = thresh - network.vec.refractoryPeriod = refractoryPeriod - network.vec.Rm = 1e10 - network.vec.Cm = 5e-9 - numSynVec = syns.vec.numSynapses - print 'Middle of setup, t = ', time.time() - t0 - numTotSyn = sum( numSynVec ) - print numSynVec.size, ', tot = ', numTotSyn, ', numSynVec = ', numSynVec - for item in syns.vec: - sh = moose.element( item ) + moose.le( '/network' ) + syns.vec.numSynapses = [1] * size + sv = moose.vec( '/network/syns/synapse' ) + print(('before connect t = ', time.time() - t0)) + mid = moose.connect( network, 'spikeOut', sv, 'addSpike', 'Sparse') + print(('after connect t = ', time.time() - t0)) + #print mid.destFields + m2 = moose.element( mid ) + m2.setRandomConnectivity( connectionProbability, 5489 ) + print(('after setting connectivity, t = ', time.time() - t0)) + #network.vec.Vm = [(Vmax*random.random()) for r in range(size)] + network.vec.Vm = nprand.rand( size ) * Vmax + network.vec.thresh = thresh + network.vec.refractoryPeriod = refractoryPeriod + network.vec.Rm = 1e10 + network.vec.Cm = 5e-9 + numSynVec = syns.vec.numSynapses + print(('Middle of setup, t = ', time.time() - t0)) + numTotSyn = sum( numSynVec ) + print((numSynVec.size, ', tot = ', numTotSyn, ', numSynVec = ', numSynVec)) + for item in syns.vec: + sh = moose.element( item ) sh.synapse.delay = delayMin + (delayMax - delayMin ) * nprand.rand( len( sh.synapse ) ) - #sh.synapse.delay = [ (delayMin + random.random() * (delayMax - delayMin ) for r in range( len( sh.synapse ) ) ] - sh.synapse.weight = nprand.rand( len( sh.synapse ) ) * weightMax - print 'after setup, t = ', time.time() - t0 + #sh.synapse.delay = [ (delayMin + random.random() * (delayMax - delayMin ) for r in range( len( sh.synapse ) ) ] + sh.synapse.weight = nprand.rand( len( sh.synapse ) ) * weightMax + print(('after setup, t = ', time.time() - t0)) numStats = 100 stats = moose.SpikeStats( '/stats', numStats ) @@ -78,26 +78,26 @@ def make_network(): moose.connect( network.vec[k], 'spikeOut', stats.vec[i], 'addSpike' ) moose.connect( plots, 'requestOut', stats, 'getMean', 'OneToOne' ) - #moose.useClock( 0, '/network/syns,/network', 'process' ) - moose.useClock( 0, '/network/syns', 'process' ) - moose.useClock( 1, '/network', 'process' ) - moose.useClock( 2, '/stats', 'process' ) - moose.useClock( 3, '/plot', 'process' ) - moose.setClock( 0, dt ) - moose.setClock( 1, dt ) - moose.setClock( 2, dt ) - moose.setClock( 3, dt ) - moose.setClock( 9, dt ) - t1 = time.time() - moose.reinit() - print 'reinit time t = ', time.time() - t1 - network.vec.Vm = nprand.rand( size ) * Vmax - print 'setting Vm , t = ', time.time() - t1 - t1 = time.time() - print 'starting' - moose.start(runsteps * dt) - print 'runtime, t = ', time.time() - t1 - print network.vec.Vm[99:103], network.vec.Vm[900:903] + #moose.useClock( 0, '/network/syns,/network', 'process' ) + moose.useClock( 0, '/network/syns', 'process' ) + moose.useClock( 1, '/network', 'process' ) + moose.useClock( 2, '/stats', 'process' ) + moose.useClock( 3, '/plot', 'process' ) + moose.setClock( 0, dt ) + moose.setClock( 1, dt ) + moose.setClock( 2, dt ) + moose.setClock( 3, dt ) + moose.setClock( 9, dt ) + t1 = time.time() + moose.reinit() + print(('reinit time t = ', time.time() - t1)) + network.vec.Vm = nprand.rand( size ) * Vmax + print(('setting Vm , t = ', time.time() - t1)) + t1 = time.time() + print('starting') + moose.start(runsteps * dt) + print(('runtime, t = ', time.time() - t1)) + print((network.vec.Vm[99:103], network.vec.Vm[900:903])) t = [i * dt for i in range( plots.vec[0].vector.size )] i = 0 for p in plots.vec: diff --git a/moose-examples/snippets/rxdFuncDiffusion.py b/moose-examples/snippets/rxdFuncDiffusion.py index 142341dc321d79d7f99efd199643d38337b47629..b33983677d70756d28539bab3e3590e83c8f90b7 100644 --- a/moose-examples/snippets/rxdFuncDiffusion.py +++ b/moose-examples/snippets/rxdFuncDiffusion.py @@ -1,9 +1,12 @@ +import sys import numpy import pylab import moose import time import sys +print(('[DEBUG] Using moose from %s' % moose.__file__)) + ''' This example implements a reaction-diffusion like system which is bistable and propagates losslessly. It is based on the NEURON example @@ -58,8 +61,9 @@ t1 = time.time() for t in range( 0, runtime-1, updateDt ): moose.start( updateDt ) plt = pylab.plot( x, c.vec.n, label='t = '+str(t + updateDt) ) +print(("Time = %f " % (time.time() - t1))) -print("Time = %s " % ( time.time() - t1) ) +print(("Time = %s " % ( time.time() - t1) )) pylab.ylim( 0, 1.05 ) pylab.legend() pylab.show( ) diff --git a/moose-examples/snippets/rxdFuncDiffusionStoch.py b/moose-examples/snippets/rxdFuncDiffusionStoch.py index 64883f0c05646623e9a9c6f1a8af049bcc8ff1df..7b2894759267a5252ca7c981c6a1449fb0ffb323 100644 --- a/moose-examples/snippets/rxdFuncDiffusionStoch.py +++ b/moose-examples/snippets/rxdFuncDiffusionStoch.py @@ -55,7 +55,7 @@ c.vec.nInit = [ 100 for q in x ] # Run and plot it. moose.reinit() -print dir(compt) +print((dir(compt))) updateDt = 50 runtime = updateDt * 4 plt = pylab.plot( x, c.vec.n, label='t = 0 ') @@ -63,7 +63,7 @@ t1 = time.time() for t in range( 0, runtime-1, updateDt ): moose.start( updateDt ) plt = pylab.plot( x, c.vec.n, label='t = '+str(t + updateDt) ) -print "Time = ", time.time() - t1 +print(("Time = ", time.time() - t1)) pylab.ylim( 0, 105 ) pylab.legend() diff --git a/moose-examples/snippets/rxdReacDiffusion.py b/moose-examples/snippets/rxdReacDiffusion.py index b6b1adaf167f0e4ef07c00264dc186a67ff493e3..d462b768796533216394738315ab20213dfe306b 100644 --- a/moose-examples/snippets/rxdReacDiffusion.py +++ b/moose-examples/snippets/rxdReacDiffusion.py @@ -71,7 +71,7 @@ t1 = time.time() for t in range( 0, runtime-1, updateDt ): moose.start( updateDt ) plt = pylab.plot( x, c.vec.n, label='t = '+str(t + updateDt) ) -print "Time = ", time.time() - t1 +print(("Time = ", time.time() - t1)) pylab.ylim( 0, 1.05 ) pylab.legend() diff --git a/moose-examples/snippets/rxdSpineSize.py b/moose-examples/snippets/rxdSpineSize.py index 1d071aba3aceba2f52303e4404d90aea61aaf852..544adc56cca8b4a302b2457358323c1e384fac28 100644 --- a/moose-examples/snippets/rxdSpineSize.py +++ b/moose-examples/snippets/rxdSpineSize.py @@ -54,7 +54,7 @@ def makeChemProto( name ): chem = moose.Neutral( '/library/' + name ) comptVol = diffLen * dendDia * dendDia * PI / 4.0 for i in ( ['dend', comptVol], ['spine', 1e-19], ['psd', 1e-20] ): - print 'making ', i + print(('making ', i)) compt = moose.CubeMesh( chem.path + '/' + i[0] ) compt.volume = i[1] #x = moose.Pool( compt.path + '/x' ) @@ -72,7 +72,7 @@ def makeChemProto( name ): x.diffConst = diffConst func = moose.Function( x.path + '/func' ) func.expr = "-x0 * (0.3 - " + nstr + " * x0) * ( 1 - " + nstr + " * x0)" - print func.expr + print((func.expr)) func.x.num = 1 moose.connect( x, 'nOut', func.x[0], 'input' ) moose.connect( func, 'valueOut', x, 'increment' ) @@ -264,9 +264,9 @@ def create_viewer(path, moose_dendrite, dendZ, diaTab, psdZ): view.stop() viewer = moogli.Viewer("Viewer") - viewer.attach_shapes(network.shapes.values()) + viewer.attach_shapes(list(network.shapes.values())) viewer.detach_shape(dendrite) - viewer.attach_shapes(chem_compt_group.shapes.values()) + viewer.attach_shapes(list(chem_compt_group.shapes.values())) view = moogli.View("main-view", prelude=prelude, diff --git a/moose-examples/snippets/savemodel.py b/moose-examples/snippets/savemodel.py index bf29b914d6a3c8f7c2cdcd7f4929e9b7f21f9ef3..3c296bba76a7407a356b3c4ec5489ce1027bf102 100644 --- a/moose-examples/snippets/savemodel.py +++ b/moose-examples/snippets/savemodel.py @@ -49,13 +49,20 @@ into Moose using "loadModel" function and using "saveModel" function one can save the model back to Genesis format """ +import os import sys -#sys.path.append('../../python') import moose from moose.genesis import * +cwd = os.path.dirname( os.path.realpath( __file__ ) ) + if __name__ == '__main__': - """ The script demonstates to convert Chemical (Genesis) file back to Genesis file using moose """ - model = moose.loadModel('../genesis/reaction.g', '/model') - written = write('/model', 'testsave.g') - print written + """ + The script demonstates to convert Chemical (Genesis) file back to Genesis + file using moose + """ + model = moose.loadModel( + os.path.join( cwd, '../genesis/reaction.g' ), '/model' + ) + written = mooseWriteKkit('/model', 'testsave.g') + print( written ) diff --git a/moose-examples/snippets/scaleVolumes.py b/moose-examples/snippets/scaleVolumes.py index 6a69da65d8c56332801060119e56aac0b08740af..5591d205abc6983de1fe543cdbf65426db78480b 100644 --- a/moose-examples/snippets/scaleVolumes.py +++ b/moose-examples/snippets/scaleVolumes.py @@ -13,74 +13,74 @@ import numpy import moose def makeModel(): - # create container for model - model = moose.Neutral( 'model' ) - compartment = moose.CubeMesh( '/model/compartment' ) - compartment.volume = 1e-20 - # the mesh is created automatically by the compartment - mesh = moose.element( '/model/compartment/mesh' ) - - # create molecules and reactions - a = moose.Pool( '/model/compartment/a' ) - b = moose.Pool( '/model/compartment/b' ) - c = moose.Pool( '/model/compartment/c' ) - enz1 = moose.Enz( '/model/compartment/b/enz1' ) - enz2 = moose.Enz( '/model/compartment/c/enz2' ) - cplx1 = moose.Pool( '/model/compartment/b/enz1/cplx' ) - cplx2 = moose.Pool( '/model/compartment/c/enz2/cplx' ) - reac = moose.Reac( '/model/compartment/reac' ) - - # connect them up for reactions - moose.connect( enz1, 'sub', a, 'reac' ) - moose.connect( enz1, 'prd', b, 'reac' ) - moose.connect( enz1, 'enz', b, 'reac' ) - moose.connect( enz1, 'cplx', cplx1, 'reac' ) - - moose.connect( enz2, 'sub', b, 'reac' ) - moose.connect( enz2, 'prd', a, 'reac' ) - moose.connect( enz2, 'enz', c, 'reac' ) - moose.connect( enz2, 'cplx', cplx2, 'reac' ) - - moose.connect( reac, 'sub', a, 'reac' ) - moose.connect( reac, 'prd', b, 'reac' ) - - # connect them up to the compartment for volumes - #for x in ( a, b, c, cplx1, cplx2 ): - # moose.connect( x, 'mesh', mesh, 'mesh' ) - - # Assign parameters - a.concInit = 1 - b.concInit = 0 - c.concInit = 0.01 - enz1.kcat = 0.4 - enz1.Km = 4 - enz2.kcat = 0.6 - enz2.Km = 0.01 - reac.Kf = 0.001 - reac.Kb = 0.01 - - # Create the output tables - graphs = moose.Neutral( '/model/graphs' ) - outputA = moose.Table2( '/model/graphs/concA' ) - outputB = moose.Table2( '/model/graphs/concB' ) - - # connect up the tables - moose.connect( outputA, 'requestOut', a, 'getConc' ); - moose.connect( outputB, 'requestOut', b, 'getConc' ); + # create container for model + model = moose.Neutral( 'model' ) + compartment = moose.CubeMesh( '/model/compartment' ) + compartment.volume = 1e-20 + # the mesh is created automatically by the compartment + mesh = moose.element( '/model/compartment/mesh' ) + + # create molecules and reactions + a = moose.Pool( '/model/compartment/a' ) + b = moose.Pool( '/model/compartment/b' ) + c = moose.Pool( '/model/compartment/c' ) + enz1 = moose.Enz( '/model/compartment/b/enz1' ) + enz2 = moose.Enz( '/model/compartment/c/enz2' ) + cplx1 = moose.Pool( '/model/compartment/b/enz1/cplx' ) + cplx2 = moose.Pool( '/model/compartment/c/enz2/cplx' ) + reac = moose.Reac( '/model/compartment/reac' ) + + # connect them up for reactions + moose.connect( enz1, 'sub', a, 'reac' ) + moose.connect( enz1, 'prd', b, 'reac' ) + moose.connect( enz1, 'enz', b, 'reac' ) + moose.connect( enz1, 'cplx', cplx1, 'reac' ) + + moose.connect( enz2, 'sub', b, 'reac' ) + moose.connect( enz2, 'prd', a, 'reac' ) + moose.connect( enz2, 'enz', c, 'reac' ) + moose.connect( enz2, 'cplx', cplx2, 'reac' ) + + moose.connect( reac, 'sub', a, 'reac' ) + moose.connect( reac, 'prd', b, 'reac' ) + + # connect them up to the compartment for volumes + #for x in ( a, b, c, cplx1, cplx2 ): + # moose.connect( x, 'mesh', mesh, 'mesh' ) + + # Assign parameters + a.concInit = 1 + b.concInit = 0 + c.concInit = 0.01 + enz1.kcat = 0.4 + enz1.Km = 4 + enz2.kcat = 0.6 + enz2.Km = 0.01 + reac.Kf = 0.001 + reac.Kb = 0.01 + + # Create the output tables + graphs = moose.Neutral( '/model/graphs' ) + outputA = moose.Table2( '/model/graphs/concA' ) + outputB = moose.Table2( '/model/graphs/concB' ) + + # connect up the tables + moose.connect( outputA, 'requestOut', a, 'getConc' ); + moose.connect( outputB, 'requestOut', b, 'getConc' ); ''' - # Schedule the whole lot - moose.setClock( 4, 0.01 ) # for the computational objects - moose.setClock( 8, 1.0 ) # for the plots - # The wildcard uses # for single level, and ## for recursive. - moose.useClock( 4, '/model/compartment/##', 'process' ) - moose.useClock( 8, '/model/graphs/#', 'process' ) + # Schedule the whole lot + moose.setClock( 4, 0.01 ) # for the computational objects + moose.setClock( 8, 1.0 ) # for the plots + # The wildcard uses # for single level, and ## for recursive. + moose.useClock( 4, '/model/compartment/##', 'process' ) + moose.useClock( 8, '/model/graphs/#', 'process' ) ''' def displayPlots(): - for x in moose.wildcardFind( '/model/graphs/conc#' ): - t = numpy.arange( 0, x.vector.size, 1 ) #sec - pylab.plot( t, x.vector, label=x.name ) + for x in moose.wildcardFind( '/model/graphs/conc#' ): + t = numpy.arange( 0, x.vector.size, 1 ) #sec + pylab.plot( t, x.vector, label=x.name ) def main(): @@ -128,7 +128,7 @@ def main(): for vol in ( 1e-19, 1e-20, 1e-21, 3e-22, 1e-22, 3e-23, 1e-23 ): # Set the volume compt.volume = vol - print 'vol = ', vol, ', a.concInit = ', a.concInit, ', a.nInit = ', a.nInit + print(('vol = ', vol, ', a.concInit = ', a.concInit, ', a.nInit = ', a.nInit)) moose.reinit() moose.start( 100.0 ) # Run the model for 100 seconds. @@ -149,11 +149,11 @@ def main(): # Iterate through all plots, dump their contents to data.plot. displayPlots() pylab.show( block=False ) - print 'vol = ', vol, 'hit enter to go to next plot' - raw_input() + print(('vol = ', vol, 'hit enter to go to next plot')) + eval(input()) quit() # Run the 'main' if this script is executed standalone. if __name__ == '__main__': - main() + main() diff --git a/moose-examples/snippets/scriptGssaSolver.py b/moose-examples/snippets/scriptGssaSolver.py index 94f10aed79b95463a7f9e8889294727b6765b6d2..0bf5c4c09ee36b88c612ffca23946d905446fcc7 100644 --- a/moose-examples/snippets/scriptGssaSolver.py +++ b/moose-examples/snippets/scriptGssaSolver.py @@ -21,103 +21,103 @@ import numpy import moose def makeModel(): - # create container for model - model = moose.Neutral( 'model' ) - compartment = moose.CubeMesh( '/model/compartment' ) - compartment.volume = 1e-20 - # the mesh is created automatically by the compartment - mesh = moose.element( '/model/compartment/mesh' ) - - # create molecules and reactions - a = moose.Pool( '/model/compartment/a' ) - b = moose.Pool( '/model/compartment/b' ) - c = moose.Pool( '/model/compartment/c' ) - enz1 = moose.Enz( '/model/compartment/b/enz1' ) - enz2 = moose.Enz( '/model/compartment/c/enz2' ) - cplx1 = moose.Pool( '/model/compartment/b/enz1/cplx' ) - cplx2 = moose.Pool( '/model/compartment/c/enz2/cplx' ) - reac = moose.Reac( '/model/compartment/reac' ) - - # connect them up for reactions - moose.connect( enz1, 'sub', a, 'reac' ) - moose.connect( enz1, 'prd', b, 'reac' ) - moose.connect( enz1, 'enz', b, 'reac' ) - moose.connect( enz1, 'cplx', cplx1, 'reac' ) - - moose.connect( enz2, 'sub', b, 'reac' ) - moose.connect( enz2, 'prd', a, 'reac' ) - moose.connect( enz2, 'enz', c, 'reac' ) - moose.connect( enz2, 'cplx', cplx2, 'reac' ) - - moose.connect( reac, 'sub', a, 'reac' ) - moose.connect( reac, 'prd', b, 'reac' ) - - # connect them up to the compartment for volumes - #for x in ( a, b, c, cplx1, cplx2 ): - # moose.connect( x, 'mesh', mesh, 'mesh' ) - - # Assign parameters - a.concInit = 1 - b.concInit = 0 - c.concInit = 0.01 - enz1.kcat = 0.4 - enz1.Km = 4 - enz2.kcat = 0.6 - enz2.Km = 0.01 - reac.Kf = 0.001 - reac.Kb = 0.01 - - # Create the output tables - graphs = moose.Neutral( '/model/graphs' ) - outputA = moose.Table2 ( '/model/graphs/concA' ) - outputB = moose.Table2 ( '/model/graphs/concB' ) - - # connect up the tables - moose.connect( outputA, 'requestOut', a, 'getConc' ); - moose.connect( outputB, 'requestOut', b, 'getConc' ); + # create container for model + model = moose.Neutral( 'model' ) + compartment = moose.CubeMesh( '/model/compartment' ) + compartment.volume = 1e-20 + # the mesh is created automatically by the compartment + mesh = moose.element( '/model/compartment/mesh' ) + + # create molecules and reactions + a = moose.Pool( '/model/compartment/a' ) + b = moose.Pool( '/model/compartment/b' ) + c = moose.Pool( '/model/compartment/c' ) + enz1 = moose.Enz( '/model/compartment/b/enz1' ) + enz2 = moose.Enz( '/model/compartment/c/enz2' ) + cplx1 = moose.Pool( '/model/compartment/b/enz1/cplx' ) + cplx2 = moose.Pool( '/model/compartment/c/enz2/cplx' ) + reac = moose.Reac( '/model/compartment/reac' ) + + # connect them up for reactions + moose.connect( enz1, 'sub', a, 'reac' ) + moose.connect( enz1, 'prd', b, 'reac' ) + moose.connect( enz1, 'enz', b, 'reac' ) + moose.connect( enz1, 'cplx', cplx1, 'reac' ) + + moose.connect( enz2, 'sub', b, 'reac' ) + moose.connect( enz2, 'prd', a, 'reac' ) + moose.connect( enz2, 'enz', c, 'reac' ) + moose.connect( enz2, 'cplx', cplx2, 'reac' ) + + moose.connect( reac, 'sub', a, 'reac' ) + moose.connect( reac, 'prd', b, 'reac' ) + + # connect them up to the compartment for volumes + #for x in ( a, b, c, cplx1, cplx2 ): + # moose.connect( x, 'mesh', mesh, 'mesh' ) + + # Assign parameters + a.concInit = 1 + b.concInit = 0 + c.concInit = 0.01 + enz1.kcat = 0.4 + enz1.Km = 4 + enz2.kcat = 0.6 + enz2.Km = 0.01 + reac.Kf = 0.001 + reac.Kb = 0.01 + + # Create the output tables + graphs = moose.Neutral( '/model/graphs' ) + outputA = moose.Table2 ( '/model/graphs/concA' ) + outputB = moose.Table2 ( '/model/graphs/concB' ) + + # connect up the tables + moose.connect( outputA, 'requestOut', a, 'getConc' ); + moose.connect( outputB, 'requestOut', b, 'getConc' ); def displayPlots(): - for x in moose.wildcardFind( '/model/graphs/conc#' ): - t = numpy.arange( 0, x.vector.size, 1 ) #sec - pylab.plot( t, x.vector, label=x.name ) - pylab.legend() - pylab.show() + for x in moose.wildcardFind( '/model/graphs/conc#' ): + t = numpy.arange( 0, x.vector.size, 1 ) #sec + pylab.plot( t, x.vector, label=x.name ) + pylab.legend() + pylab.show() def main(): - makeModel() - gsolve = moose.Gsolve( '/model/compartment/gsolve' ) - stoich = moose.Stoich( '/model/compartment/stoich' ) - stoich.compartment = moose.element( '/model/compartment' ) - stoich.ksolve = gsolve - stoich.path = "/model/compartment/##" - #solver.method = "rk5" - #mesh = moose.element( "/model/compartment/mesh" ) - #moose.connect( mesh, "remesh", solver, "remesh" ) - moose.setClock( 5, 1.0 ) # clock for the solver - moose.useClock( 5, '/model/compartment/gsolve', 'process' ) - - moose.reinit() - moose.start( 100.0 ) # Run the model for 100 seconds. - - a = moose.element( '/model/compartment/a' ) - b = moose.element( '/model/compartment/b' ) - - # move most molecules over to bgsolve - b.conc = b.conc + a.conc * 0.9 - a.conc = a.conc * 0.1 - moose.start( 100.0 ) # Run the model for 100 seconds. - - # move most molecules back to a - a.conc = a.conc + b.conc * 0.99 - b.conc = b.conc * 0.01 - moose.start( 100.0 ) # Run the model for 100 seconds. - - # Iterate through all plots, dump their contents to data.plot. - displayPlots() - - quit() + makeModel() + gsolve = moose.Gsolve( '/model/compartment/gsolve' ) + stoich = moose.Stoich( '/model/compartment/stoich' ) + stoich.compartment = moose.element( '/model/compartment' ) + stoich.ksolve = gsolve + stoich.path = "/model/compartment/##" + #solver.method = "rk5" + #mesh = moose.element( "/model/compartment/mesh" ) + #moose.connect( mesh, "remesh", solver, "remesh" ) + moose.setClock( 5, 1.0 ) # clock for the solver + moose.useClock( 5, '/model/compartment/gsolve', 'process' ) + + moose.reinit() + moose.start( 100.0 ) # Run the model for 100 seconds. + + a = moose.element( '/model/compartment/a' ) + b = moose.element( '/model/compartment/b' ) + + # move most molecules over to bgsolve + b.conc = b.conc + a.conc * 0.9 + a.conc = a.conc * 0.1 + moose.start( 100.0 ) # Run the model for 100 seconds. + + # move most molecules back to a + a.conc = a.conc + b.conc * 0.99 + b.conc = b.conc * 0.01 + moose.start( 100.0 ) # Run the model for 100 seconds. + + # Iterate through all plots, dump their contents to data.plot. + displayPlots() + + quit() # Run the 'main' if this script is executed standalone. if __name__ == '__main__': - main() + main() diff --git a/moose-examples/snippets/scriptKineticModel.py b/moose-examples/snippets/scriptKineticModel.py index 453e446ff6a66342212495aa688fdc05e22123a4..392027155e7ebc37730c4364b4a14844493534a9 100644 --- a/moose-examples/snippets/scriptKineticModel.py +++ b/moose-examples/snippets/scriptKineticModel.py @@ -6,115 +6,112 @@ ## GNU Lesser General Public License version 2.1 ## See the file COPYING.LIB for the full notice. ######################################################################### - -""" -This example illustrates how to define a kinetic model using the -scripting interface. Normally one uses standard model formats like -SBML or kkit to concisely define kinetic models, but in some cases one -would like to modify the model through the script. -This example creates a bistable model having two enzymes and a reaction. -One of the enzymes is autocatalytic. -The model is set up to run using default Exponential Euler integration. -The snippet scriptKineticSolver.py uses the much better GSL -Runge-Kutta-Fehlberg integration scheme on this same model. -""" - import math import pylab import numpy import moose def makeModel(): - # create container for model - model = moose.Neutral( 'model' ) - compartment = moose.CubeMesh( '/model/compartment' ) - compartment.volume = 1e-15 - # the mesh is created automatically by the compartment - moose.le( '/model/compartment' ) - mesh = moose.element( '/model/compartment/mesh' ) - - # create molecules and reactions - a = moose.Pool( '/model/compartment/a' ) - b = moose.Pool( '/model/compartment/b' ) - c = moose.Pool( '/model/compartment/c' ) - enz1 = moose.Enz( '/model/compartment/b/enz1' ) - enz2 = moose.Enz( '/model/compartment/c/enz2' ) - cplx1 = moose.Pool( '/model/compartment/b/enz1/cplx' ) - cplx2 = moose.Pool( '/model/compartment/c/enz2/cplx' ) - reac = moose.Reac( '/model/compartment/reac' ) - - # connect them up for reactions - moose.connect( enz1, 'sub', a, 'reac' ) - moose.connect( enz1, 'prd', b, 'reac' ) - moose.connect( enz1, 'enz', b, 'reac' ) - moose.connect( enz1, 'cplx', cplx1, 'reac' ) - - moose.connect( enz2, 'sub', b, 'reac' ) - moose.connect( enz2, 'prd', a, 'reac' ) - moose.connect( enz2, 'enz', c, 'reac' ) - moose.connect( enz2, 'cplx', cplx2, 'reac' ) - - moose.connect( reac, 'sub', a, 'reac' ) - moose.connect( reac, 'prd', b, 'reac' ) - - # connect them up to the compartment for volumes - #for x in ( a, b, c, cplx1, cplx2 ): - # moose.connect( x, 'mesh', mesh, 'mesh' ) - - # Assign parameters - a.concInit = 1 - b.concInit = 0 - c.concInit = 0.01 - enz1.kcat = 0.4 - enz1.Km = 4 - enz2.kcat = 0.6 - enz2.Km = 0.01 - reac.Kf = 0.001 - reac.Kb = 0.01 - - # Create the output tables - graphs = moose.Neutral( '/model/graphs' ) - outputA = moose.Table2 ( '/model/graphs/concA' ) - outputB = moose.Table2 ( '/model/graphs/concB' ) - - # connect up the tables - moose.connect( outputA, 'requestOut', a, 'getConc' ); - moose.connect( outputB, 'requestOut', b, 'getConc' ); - - # We need a finer timestep than the default 0.1 seconds, - # in order to get numerical accuracy. - for i in range (11, 15 ): - moose.setClock( i, 0.001 ) # for computational objects + # create container for model + model = moose.Neutral( 'model' ) + compartment = moose.CubeMesh( '/model/compartment' ) + compartment.volume = 1e-15 + # the mesh is created automatically by the compartment + moose.le( '/model/compartment' ) + mesh = moose.element( '/model/compartment/mesh' ) + + # create molecules and reactions + a = moose.Pool( '/model/compartment/a' ) + b = moose.Pool( '/model/compartment/b' ) + c = moose.Pool( '/model/compartment/c' ) + enz1 = moose.Enz( '/model/compartment/b/enz1' ) + enz2 = moose.Enz( '/model/compartment/c/enz2' ) + cplx1 = moose.Pool( '/model/compartment/b/enz1/cplx' ) + cplx2 = moose.Pool( '/model/compartment/c/enz2/cplx' ) + reac = moose.Reac( '/model/compartment/reac' ) + + # connect them up for reactions + moose.connect( enz1, 'sub', a, 'reac' ) + moose.connect( enz1, 'prd', b, 'reac' ) + moose.connect( enz1, 'enz', b, 'reac' ) + moose.connect( enz1, 'cplx', cplx1, 'reac' ) + + moose.connect( enz2, 'sub', b, 'reac' ) + moose.connect( enz2, 'prd', a, 'reac' ) + moose.connect( enz2, 'enz', c, 'reac' ) + moose.connect( enz2, 'cplx', cplx2, 'reac' ) + + moose.connect( reac, 'sub', a, 'reac' ) + moose.connect( reac, 'prd', b, 'reac' ) + + # connect them up to the compartment for volumes + #for x in ( a, b, c, cplx1, cplx2 ): + # moose.connect( x, 'mesh', mesh, 'mesh' ) + + # Assign parameters + a.concInit = 1 + b.concInit = 0 + c.concInit = 0.01 + enz1.kcat = 0.4 + enz1.Km = 4 + enz2.kcat = 0.6 + enz2.Km = 0.01 + reac.Kf = 0.001 + reac.Kb = 0.01 + + # Create the output tables + graphs = moose.Neutral( '/model/graphs' ) + outputA = moose.Table2 ( '/model/graphs/concA' ) + outputB = moose.Table2 ( '/model/graphs/concB' ) + + # connect up the tables + moose.connect( outputA, 'requestOut', a, 'getConc' ); + moose.connect( outputB, 'requestOut', b, 'getConc' ); + + # We need a finer timestep than the default 0.1 seconds, + # in order to get numerical accuracy. + for i in range (11, 15 ): + moose.setClock( i, 0.001 ) # for computational objects def main(): - makeModel() - - moose.reinit() - moose.start( 100.0 ) # Run the model for 100 seconds. - - a = moose.element( '/model/compartment/a' ) - b = moose.element( '/model/compartment/b' ) - - # move most molecules over to b - b.conc = b.conc + a.conc * 0.9 - a.conc = a.conc * 0.1 - moose.start( 100.0 ) # Run the model for 100 seconds. - - # move most molecules back to a - a.conc = a.conc + b.conc * 0.99 - b.conc = b.conc * 0.01 - moose.start( 100.0 ) # Run the model for 100 seconds. - - # Iterate through all plots, dump their contents to data.plot. - for x in moose.wildcardFind( '/model/graphs/conc#' ): - #x.xplot( 'scriptKineticModel.plot', x.name ) - t = numpy.arange( 0, x.vector.size, 1 ) # sec - pylab.plot( t, x.vector, label=x.name ) - pylab.legend() - pylab.show() - - quit() + """ + This example illustrates how to define a kinetic model using the + scripting interface. Normally one uses standard model formats like + SBML or kkit to concisely define kinetic models, but in some cases one + would like to modify the model through the script. + This example creates a bistable model having two enzymes and a reaction. + One of the enzymes is autocatalytic. + The model is set up to run using default Exponential Euler integration. + The snippet scriptKineticSolver.py uses the much better GSL + Runge-Kutta-Fehlberg integration scheme on this same model. + """ + makeModel() + moose.reinit() + moose.start( 100.0 ) # Run the model for 100 seconds. + + a = moose.element( '/model/compartment/a' ) + b = moose.element( '/model/compartment/b' ) + + # move most molecules over to b + b.conc = b.conc + a.conc * 0.9 + a.conc = a.conc * 0.1 + moose.start( 100.0 ) # Run the model for 100 seconds. + + # move most molecules back to a + a.conc = a.conc + b.conc * 0.99 + b.conc = b.conc * 0.01 + moose.start( 100.0 ) # Run the model for 100 seconds. + + # Iterate through all plots, dump their contents to data.plot. + for x in moose.wildcardFind( '/model/graphs/conc#' ): + #x.xplot( 'scriptKineticModel.plot', x.name ) + t = numpy.arange( 0, x.vector.size, 1 ) # sec + pylab.plot( t, x.vector, label=x.name ) + pylab.legend() + pylab.show() + + quit() # Run the 'main' if this script is executed standalone. if __name__ == '__main__': - main() + main() diff --git a/moose-examples/snippets/scriptKineticSolver.py b/moose-examples/snippets/scriptKineticSolver.py index 977a099fb359c00df20b2b83d54c656dcf5446f0..3660afea87cad8e11b62ec4c53ad19ad70fca89b 100644 --- a/moose-examples/snippets/scriptKineticSolver.py +++ b/moose-examples/snippets/scriptKineticSolver.py @@ -21,104 +21,104 @@ import numpy import moose def makeModel(): - # create container for model - model = moose.Neutral( 'model' ) - compartment = moose.CubeMesh( '/model/compartment' ) - compartment.volume = 1e-15 - # the mesh is created automatically by the compartment - mesh = moose.element( '/model/compartment/mesh' ) - - # create molecules and reactions - a = moose.Pool( '/model/compartment/a' ) - b = moose.Pool( '/model/compartment/b' ) - c = moose.Pool( '/model/compartment/c' ) - enz1 = moose.Enz( '/model/compartment/b/enz1' ) - enz2 = moose.Enz( '/model/compartment/c/enz2' ) - cplx1 = moose.Pool( '/model/compartment/b/enz1/cplx' ) - cplx2 = moose.Pool( '/model/compartment/c/enz2/cplx' ) - reac = moose.Reac( '/model/compartment/reac' ) - - # connect them up for reactions - moose.connect( enz1, 'sub', a, 'reac' ) - moose.connect( enz1, 'prd', b, 'reac' ) - moose.connect( enz1, 'enz', b, 'reac' ) - moose.connect( enz1, 'cplx', cplx1, 'reac' ) - - moose.connect( enz2, 'sub', b, 'reac' ) - moose.connect( enz2, 'prd', a, 'reac' ) - moose.connect( enz2, 'enz', c, 'reac' ) - moose.connect( enz2, 'cplx', cplx2, 'reac' ) - - moose.connect( reac, 'sub', a, 'reac' ) - moose.connect( reac, 'prd', b, 'reac' ) - - # connect them up to the compartment for volumes - #for x in ( a, b, c, cplx1, cplx2 ): - # moose.connect( x, 'mesh', mesh, 'mesh' ) - - # Assign parameters - a.concInit = 1 - b.concInit = 0 - c.concInit = 0.01 - enz1.kcat = 0.4 - enz1.Km = 4 - enz2.kcat = 0.6 - enz2.Km = 0.01 - reac.Kf = 0.001 - reac.Kb = 0.01 - - # Create the output tables - graphs = moose.Neutral( '/model/graphs' ) - outputA = moose.Table2 ( '/model/graphs/concA' ) - outputB = moose.Table2 ( '/model/graphs/concB' ) - - # connect up the tables - moose.connect( outputA, 'requestOut', a, 'getConc' ); - moose.connect( outputB, 'requestOut', b, 'getConc' ); + # create container for model + model = moose.Neutral( 'model' ) + compartment = moose.CubeMesh( '/model/compartment' ) + compartment.volume = 1e-15 + # the mesh is created automatically by the compartment + mesh = moose.element( '/model/compartment/mesh' ) + + # create molecules and reactions + a = moose.Pool( '/model/compartment/a' ) + b = moose.Pool( '/model/compartment/b' ) + c = moose.Pool( '/model/compartment/c' ) + enz1 = moose.Enz( '/model/compartment/b/enz1' ) + enz2 = moose.Enz( '/model/compartment/c/enz2' ) + cplx1 = moose.Pool( '/model/compartment/b/enz1/cplx' ) + cplx2 = moose.Pool( '/model/compartment/c/enz2/cplx' ) + reac = moose.Reac( '/model/compartment/reac' ) + + # connect them up for reactions + moose.connect( enz1, 'sub', a, 'reac' ) + moose.connect( enz1, 'prd', b, 'reac' ) + moose.connect( enz1, 'enz', b, 'reac' ) + moose.connect( enz1, 'cplx', cplx1, 'reac' ) + + moose.connect( enz2, 'sub', b, 'reac' ) + moose.connect( enz2, 'prd', a, 'reac' ) + moose.connect( enz2, 'enz', c, 'reac' ) + moose.connect( enz2, 'cplx', cplx2, 'reac' ) + + moose.connect( reac, 'sub', a, 'reac' ) + moose.connect( reac, 'prd', b, 'reac' ) + + # connect them up to the compartment for volumes + #for x in ( a, b, c, cplx1, cplx2 ): + # moose.connect( x, 'mesh', mesh, 'mesh' ) + + # Assign parameters + a.concInit = 1 + b.concInit = 0 + c.concInit = 0.01 + enz1.kcat = 0.4 + enz1.Km = 4 + enz2.kcat = 0.6 + enz2.Km = 0.01 + reac.Kf = 0.001 + reac.Kb = 0.01 + + # Create the output tables + graphs = moose.Neutral( '/model/graphs' ) + outputA = moose.Table2 ( '/model/graphs/concA' ) + outputB = moose.Table2 ( '/model/graphs/concB' ) + + # connect up the tables + moose.connect( outputA, 'requestOut', a, 'getConc' ); + moose.connect( outputB, 'requestOut', b, 'getConc' ); def displayPlots(): - for x in moose.wildcardFind( '/model/graphs/conc#' ): - t = numpy.arange( 0, x.vector.size, 1 ) #sec - pylab.plot( t, x.vector, label=x.name ) - pylab.legend() - pylab.show() + for x in moose.wildcardFind( '/model/graphs/conc#' ): + t = numpy.arange( 0, x.vector.size, 1 ) #sec + pylab.plot( t, x.vector, label=x.name ) + pylab.legend() + pylab.show() def main(): - makeModel() - ksolve = moose.Ksolve( '/model/compartment/ksolve' ) - stoich = moose.Stoich( '/model/compartment/stoich' ) - stoich.compartment = moose.element( '/model/compartment' ) - stoich.ksolve = ksolve - stoich.path = "/model/compartment/##" - #solver.method = "rk5" - #mesh = moose.element( "/model/compartment/mesh" ) - #moose.connect( mesh, "remesh", solver, "remesh" ) + makeModel() + ksolve = moose.Ksolve( '/model/compartment/ksolve' ) + stoich = moose.Stoich( '/model/compartment/stoich' ) + stoich.compartment = moose.element( '/model/compartment' ) + stoich.ksolve = ksolve + stoich.path = "/model/compartment/##" + #solver.method = "rk5" + #mesh = moose.element( "/model/compartment/mesh" ) + #moose.connect( mesh, "remesh", solver, "remesh" ) ''' - moose.setClock( 5, 1.0 ) # clock for the solver - moose.useClock( 5, '/model/compartment/ksolve', 'process' ) + moose.setClock( 5, 1.0 ) # clock for the solver + moose.useClock( 5, '/model/compartment/ksolve', 'process' ) ''' - moose.reinit() - moose.start( 100.0 ) # Run the model for 100 seconds. + moose.reinit() + moose.start( 100.0 ) # Run the model for 100 seconds. - a = moose.element( '/model/compartment/a' ) - b = moose.element( '/model/compartment/b' ) + a = moose.element( '/model/compartment/a' ) + b = moose.element( '/model/compartment/b' ) - # move most molecules over to b - b.conc = b.conc + a.conc * 0.9 - a.conc = a.conc * 0.1 - moose.start( 100.0 ) # Run the model for 100 seconds. + # move most molecules over to b + b.conc = b.conc + a.conc * 0.9 + a.conc = a.conc * 0.1 + moose.start( 100.0 ) # Run the model for 100 seconds. - # move most molecules back to a - a.conc = a.conc + b.conc * 0.99 - b.conc = b.conc * 0.01 - moose.start( 100.0 ) # Run the model for 100 seconds. + # move most molecules back to a + a.conc = a.conc + b.conc * 0.99 + b.conc = b.conc * 0.01 + moose.start( 100.0 ) # Run the model for 100 seconds. - # Iterate through all plots, dump their contents to data.plot. - displayPlots() + # Iterate through all plots, dump their contents to data.plot. + displayPlots() - quit() + quit() # Run the 'main' if this script is executed standalone. if __name__ == '__main__': - main() + main() diff --git a/moose-examples/snippets/showclocks.py b/moose-examples/snippets/showclocks.py index 3ebb3f7cfe860fb6d2139112fe71cbcfa55319ab..1bcd23ee77622767621f836ff562df790406d7e3 100644 --- a/moose-examples/snippets/showclocks.py +++ b/moose-examples/snippets/showclocks.py @@ -35,37 +35,37 @@ moose.useClock(0, '/##[ISA=Compartment]', 'init') moose.useClock(1, '/##[ISA=Compartment]', 'process') # List the ticks connected to an element. -print 'Ticks connected to `process` method of', comp.path +print(('Ticks connected to `process` method of', comp.path)) for tick in comp.neighbors['process']: - print ' ->',tick.path + print((' ->',tick.path)) # Different ticks can be connected to different fields. -print 'Ticks connected to `init` method of', comp.path +print(('Ticks connected to `init` method of', comp.path)) for tick in comp.neighbors['init']: - print ' ->',tick.path + print((' ->',tick.path)) # View the scheduled elements using the tick nos. t = moose.element('/clock') -print 'Elements on tick 0' +print('Elements on tick 0') for e in t.neighbors['proc0']: - print ' ->', e.path -print 'Elements on tick 1' + print((' ->', e.path)) +print('Elements on tick 1') for e in t.neighbors['proc1']: - print ' ->', e.path + print((' ->', e.path)) ch = moose.HHChannel('/comp/chan') moose.useClock(1, ch.path, 'process') -print ch.path, 'has been scheduled' -print 'Elements on tick 1' +print((ch.path, 'has been scheduled')) +print('Elements on tick 1') for e in t.neighbors['proc1']: - print ' ->', e.path + print((' ->', e.path)) # Go through elements by wildcard search and list the ticks connected. # This can be slow when the model is too big. for el in moose.wildcardFind('/##[ISA=Compartment]'): - print 'Ticks connected to `process` method of', el.path + print(('Ticks connected to `process` method of', el.path)) for t in moose.element(el).neighbors['process']: - print ' ->', t.path + print((' ->', t.path)) # <codecell> diff --git a/moose-examples/snippets/showmsg.py b/moose-examples/snippets/showmsg.py index 38535e69d499f8bcf0c3ffa088571258332e6a44..f981956acf360eeca4f73fbdaeb45561f640323f 100644 --- a/moose-examples/snippets/showmsg.py +++ b/moose-examples/snippets/showmsg.py @@ -14,9 +14,9 @@ mid = moose.connect(net, 'spikeOut', synapse, 'addSpike', 'Sparse') # This creat msg = moose.element(mid) msg.setRandomConnectivity(connectionProbability, 5) for n in net.vec: - print 'Messages from %s.spikeOut' % (n.path) + print(('Messages from %s.spikeOut' % (n.path))) node = moose.element(n) for dest, df in zip(node.msgDests['spikeOut'], node.msgDestFunctions['spikeOut']): - print '\t--> %s.%s' % (dest.path, df) + print(('\t--> %s.%s' % (dest.path, df))) diff --git a/moose-examples/snippets/singlemsgcross.py b/moose-examples/snippets/singlemsgcross.py index 7a589294f13c28c6f36afa6fc44da15593c34dfd..ee0a67a1795fdefe4b75fa7ab62b672b45168691 100644 --- a/moose-examples/snippets/singlemsgcross.py +++ b/moose-examples/snippets/singlemsgcross.py @@ -74,17 +74,17 @@ def test_crossing_single(): tab = moose.Table('table', size) moose.connect(tab.vec[0], 'requestOut', pg.vec[1], 'getOutputValue', 'Single') moose.connect(tab.vec[1], 'requestOut', pg.vec[0], 'getOutputValue', 'Single') - print 'Neighbors:' + print('Neighbors:') for t in tab.vec: - print t.path + print((t.path)) for n in moose.element(t).neighbors['requestOut']: - print 'requestOut <-', n.path + print(('requestOut <-', n.path)) moose.setClock(0, 0.1) moose.useClock(0, '/##', 'process') moose.start(5) for ii in tab.vec: t = moose.Table(ii).vector - print len(t) + print((len(t))) pylab.plot(t) pylab.show() diff --git a/moose-examples/snippets/startstop.py b/moose-examples/snippets/startstop.py index 11d98ea2d5cb00af3bead961e3a055f01106619a..fd66b4f904fedbb07dd357b94a1c020bc8f1b76f 100644 --- a/moose-examples/snippets/startstop.py +++ b/moose-examples/snippets/startstop.py @@ -77,11 +77,11 @@ def main(): moose.setClock( table.tick, dt ) moose.reinit() clock = moose.element('/clock') - print dt - print 'dt = ', dt, ', Total simulation time = ', simtime - print 'Running simulation for', simtime, 'seconds' + print(dt) + print(('dt = ', dt, ', Total simulation time = ', simtime)) + print(('Running simulation for', simtime, 'seconds')) moose.start( simtime ) - print 'Simulator time:', clock.currentTime + print(('Simulator time:', clock.currentTime)) # Here we change the pulse delay and then run again. pulse.delay[0] = 1.0 moose.start( simtime ) @@ -93,13 +93,13 @@ def main(): # Here is yet another way to change clocks used by the table moose.useClock( 9, '/model/pulse/tab', 'process' ) - print table.tick + print((table.tick)) moose.setClock( 9, dt / 2.0 ) moose.start( simtime ) # Finally, here we change the pulse delay to 1 second and run again. - print 'Simulator time at end of simulation', clock.currentTime + print(('Simulator time at end of simulation', clock.currentTime)) pylab.plot(pylab.linspace(0, clock.currentTime, len(table.vector)), table.vector) pylab.show() diff --git a/moose-examples/snippets/stochasticLotkaVolterra.py b/moose-examples/snippets/stochasticLotkaVolterra.py index 59864005e6ff7720bd514d6e7fb14ebdab97fc35..e7bec53bea2a818ca8fa3571956026ee1a9b44fc 100644 --- a/moose-examples/snippets/stochasticLotkaVolterra.py +++ b/moose-examples/snippets/stochasticLotkaVolterra.py @@ -15,21 +15,21 @@ import moose runtime = 138.0 def makeModel(): - # create container for model - model = moose.Neutral( 'model' ) - harmonic = moose.CubeMesh( '/model/harmonic' ) - harmonic.volume = 1e-15 - lotka = moose.CubeMesh( '/model/lotka' ) - lotka.volume = 1e-15 - - # create molecules and reactions - x = moose.Pool( '/model/lotka/x' ) - y = moose.Pool( '/model/lotka/y' ) + # create container for model + model = moose.Neutral( 'model' ) + harmonic = moose.CubeMesh( '/model/harmonic' ) + harmonic.volume = 1e-15 + lotka = moose.CubeMesh( '/model/lotka' ) + lotka.volume = 1e-15 + + # create molecules and reactions + x = moose.Pool( '/model/lotka/x' ) + y = moose.Pool( '/model/lotka/y' ) z = moose.BufPool( '/model/lotka/z' ) # Dummy molecule. xreac = moose.Reac( '/model/lotka/xreac' ) yreac = moose.Reac( '/model/lotka/yreac' ) - xrate = moose.Function( '/model/lotka/xreac/func' ) - yrate = moose.Function( '/model/lotka/yreac/func' ) + xrate = moose.Function( '/model/lotka/xreac/func' ) + yrate = moose.Function( '/model/lotka/yreac/func' ) # Parameters alpha = 1.0 @@ -49,9 +49,9 @@ def makeModel(): xreac.Kb = 0 yreac.Kb = 0 - # connect them up for reactions - moose.connect( y, 'nOut', xrate.x[0], 'input' ) - moose.connect( x, 'nOut', yrate.x[0], 'input' ) + # connect them up for reactions + moose.connect( y, 'nOut', xrate.x[0], 'input' ) + moose.connect( x, 'nOut', yrate.x[0], 'input' ) moose.connect( xrate, 'valueOut', xreac, 'setNumKf' ) moose.connect( yrate, 'valueOut', yreac, 'setNumKf' ) moose.connect( xreac, 'sub', x, 'reac' ) @@ -59,14 +59,14 @@ def makeModel(): moose.connect( yreac, 'sub', y, 'reac' ) moose.connect( yreac, 'prd', z, 'reac' ) - # Create the output tables - graphs = moose.Neutral( '/model/graphs' ) - xplot = moose.Table2 ( '/model/graphs/x' ) - yplot = moose.Table2 ( '/model/graphs/y' ) + # Create the output tables + graphs = moose.Neutral( '/model/graphs' ) + xplot = moose.Table2 ( '/model/graphs/x' ) + yplot = moose.Table2 ( '/model/graphs/y' ) - # connect up the tables - moose.connect( xplot, 'requestOut', x, 'getN' ); - moose.connect( yplot, 'requestOut', y, 'getN' ); + # connect up the tables + moose.connect( xplot, 'requestOut', x, 'getN' ); + moose.connect( yplot, 'requestOut', y, 'getN' ); def main(): """ diff --git a/moose-examples/snippets/switchKineticSolvers.py b/moose-examples/snippets/switchKineticSolvers.py index 5ef2c1d217e9db6984908853ff36d5ad5c33a6a4..4859293457e6bf6dbfda7e48620ff6bd939448ea 100644 --- a/moose-examples/snippets/switchKineticSolvers.py +++ b/moose-examples/snippets/switchKineticSolvers.py @@ -134,4 +134,4 @@ def main(): # Run the 'main' if this script is executed standalone. if __name__ == '__main__': - main() + main() diff --git a/moose-examples/snippets/synapse.py b/moose-examples/snippets/synapse.py index aea6f372b2c2c8b19bdd7270ec60ad50cdb60a45..fb061e7e9b401c03335f337cd01f38cbcb74c156 100644 --- a/moose-examples/snippets/synapse.py +++ b/moose-examples/snippets/synapse.py @@ -43,6 +43,10 @@ # # Code: + +from __future__ import print_function + + import moose def many_ematrix_to_one_element(): @@ -73,9 +77,9 @@ def many_ematrix_to_one_element(): # synchan.synapse[ii].delay = ii * 1e-3 # synchan.synapse[ii].weight = (ii+1) * 0.1 for sg in spikegens: - print sg.path, '-->', + print(sg.path, '-->', end=' ') for m in sg.msgOut: - print moose.element(m).adjacent[sg].path + print(moose.element(m).adjacent[sg].path) if __name__ == '__main__': many_ematrix_to_one_element() diff --git a/moose-examples/snippets/synapse_tutorial.py b/moose-examples/snippets/synapse_tutorial.py index 98b6c02d15aefae0586e5996611f8fa75e6bb10e..b6e574b8c2687215d7f79575dd657587f56dd175 100644 --- a/moose-examples/snippets/synapse_tutorial.py +++ b/moose-examples/snippets/synapse_tutorial.py @@ -108,7 +108,7 @@ net.vec.Vm = [thresh / 2.0] * size -print net.vec[1].Vm +print((net.vec[1].Vm)) @@ -116,7 +116,7 @@ print net.vec[1].Vm -print len(synh.synapse) +print((len(synh.synapse))) @@ -125,12 +125,12 @@ print len(synh.synapse) synh.numSynapses = 3 -print len(synh.synapse) +print((len(synh.synapse))) synh.synapse.num = 4 -print len(synh.synapse) +print((len(synh.synapse))) @@ -138,9 +138,9 @@ print len(synh.synapse) -print 'Before:', synh.synapse[0].delay +print(('Before:', synh.synapse[0].delay)) synh.synapse[0].delay = 1.0 -print 'After:', synh.synapse[0].delay +print(('After:', synh.synapse[0].delay)) @@ -149,7 +149,7 @@ print 'After:', synh.synapse[0].delay synh.synapse.weight = [0.2] * len(synh.synapse) -print synh.synapse.weight +print((synh.synapse.weight)) @@ -177,8 +177,8 @@ for syn in synh.vec: for syn in synh.vec[:5]: - print 'Delays for synapses on ', syn.path, ':', syn.synapse.delay - print 'Weights for synapses on ', syn.path, ':', syn.synapse.weight + print(('Delays for synapses on ', syn.path, ':', syn.synapse.delay)) + print(('Weights for synapses on ', syn.path, ':', syn.synapse.weight)) diff --git a/moose-examples/snippets/testHsolve.py b/moose-examples/snippets/testHsolve.py index 7eba6625d1073df02a960ccea335a1bfff8b6ec3..9f06c4cd75785f4d717741c90baa90f72d6a387b 100644 --- a/moose-examples/snippets/testHsolve.py +++ b/moose-examples/snippets/testHsolve.py @@ -103,7 +103,7 @@ def create_squid(): nachan.Xpower = 3 xGate = moose.HHGate(nachan.path + '/gateX') xGate.setupAlpha(Na_m_params + [VDIVS, VMIN, VMAX]) - #This is important: one can run without it but the output will diverge. + #This is important: one can run without it but the output will diverge. xGate.useInterpolation = 1 nachan.Ypower = 1 yGate = moose.HHGate(nachan.path + '/gateY') @@ -295,7 +295,7 @@ def test_elec_alone(): hsolve.target = '/n/compt' moose.le( '/n' ) for dt in ( 20e-6, 50e-6, 100e-6 ): - print 'running at dt =', dt + print(('running at dt =', dt)) moose.setClock( 0, dt ) moose.setClock( 1, dt ) moose.setClock( 2, dt ) diff --git a/moose-examples/snippets/testRdesigneur.py b/moose-examples/snippets/testRdesigneur.py index c77648137e1b4c552f2db70d656ead50986173b0..b38e0ccdaec6ab97c9747065b81d65ff6f280d7c 100644 --- a/moose-examples/snippets/testRdesigneur.py +++ b/moose-examples/snippets/testRdesigneur.py @@ -40,7 +40,7 @@ spineAngleDistrib = 2*numpy.pi # Here we define a function that is used to make a cell prototype. Normally # it would load in a model from a file. def makeCellProto( name ): - print 'IN: makeCellProto( ', name, ')' + print(('IN: makeCellProto( ', name, ')')) elec = moose.Neuron( '/library/' + name ) ecompt = [] for i in range( numDendSegments ): @@ -63,7 +63,7 @@ rd.makeCellProto = makeCellProto def makeChemProto( name ): chem = moose.Neutral( '/library/' + name ) for i in ( 'dend', 'spine', 'psd' ): - print 'making ', i + print(('making ', i)) compt = moose.CubeMesh( chem.path + '/' + i ) compt.volume = 1e-18 ca = moose.Pool( compt.path + '/Ca' ) @@ -109,7 +109,7 @@ def addPlot( objpath, field, plot, tick ): tab.tick = tick return tab else: - print "failed in addPlot(", objpath, field, plot, tick, ")" + print(("failed in addPlot(", objpath, field, plot, tick, ")")) return 0 def plotVm( plot, name ): @@ -202,4 +202,4 @@ def getMidpts( compt ): # Run the 'main' if this script is executed standalone. if __name__ == '__main__': - main() + main() diff --git a/moose-examples/snippets/testSigNeur.py b/moose-examples/snippets/testSigNeur.py index 679bb3123702c3d1869a3d25afad8967b2c6690e..b6695b7550ac3cdd7e85e430775c0144274a4a5c 100644 --- a/moose-examples/snippets/testSigNeur.py +++ b/moose-examples/snippets/testSigNeur.py @@ -404,8 +404,8 @@ def makeNeuroMeshModel(): assert( pdc == 5 ) # # We need to use the spine solver as the master for the purposes of - # these calculations. This will handle the diffusion calculations - # between head and dendrite, and between head and PSD. + # these calculations. This will handle the diffusion calculations + # between head and dendrite, and between head and PSD. smksolve.addJunction( nmksolve ) #print "spine: nv=", smksolve.numLocalVoxels, ", nav=", smksolve.numAllVoxels, smksolve.numVarPools, smksolve.numAllPools smksolve.addJunction( pmksolve ) @@ -442,7 +442,7 @@ def makeNeuroMeshModel(): elecR = moose.element( path ) moose.connect( adaptGluR[i], 'outputSrc', elecR, 'setGbar', 'Single' ) #moose.connect( chemR, 'nOut', adaptGluR, 'input', 'OneToOne' ) - # Ksolve isn't sending nOut. Not good. So have to use requestOut. + # Ksolve isn't sending nOut. Not good. So have to use requestOut. moose.connect( adaptGluR, 'requestOut', chemR, 'getN', 'OneToOne' ) adaptGluR.outputOffset = 1e-7 # pS adaptGluR.scale = 1e-6 / 100 # from n to pS diff --git a/moose-examples/snippets/testWigglySpines.py b/moose-examples/snippets/testWigglySpines.py index 36a8294c14fb882e05b8553c3c9b9b643132c796..5adb7746ce5a1df5c76b23d11bde06026616139a 100644 --- a/moose-examples/snippets/testWigglySpines.py +++ b/moose-examples/snippets/testWigglySpines.py @@ -10,17 +10,22 @@ ## a molecule that diffuses. ################################################################## +from __future__ import print_function + import math import pylab import numpy import matplotlib.pyplot as plt import moose import sys -sys.path.append( '../util' ) import rdesigneur as rd from PyQt4 import QtGui import moogli +import os +scriptDir = os.path.dirname( os.path.realpath( __file__ ) ) +sys.path.append( os.path.join( scriptDir, '../util' ) ) + PI = 3.141592653 ScalingForTesting = 10 RM = 1.0 / ScalingForTesting @@ -46,7 +51,7 @@ def makeCellProto( name ): def makeChemProto( name ): chem = moose.Neutral( '/library/' + name ) for i in ( ['dend', 1e-18], ['spine', 1e-19], ['psd', 1e-20] ): - print 'making ', i + print('making ', i) compt = moose.CubeMesh( chem.path + '/' + i[0] ) compt.volume = i[1] Ca = moose.Pool( compt.path + '/Ca' ) @@ -93,12 +98,12 @@ def p2(x): ''' Print to 2 sig fig ''' - print round(x, 1-int(numpy.floor(numpy.log10(x)))), + print(round(x, 1-int(numpy.floor(numpy.log10(x)))), end=' ') def assertEq( a, b ): - print '.', + print('.', end=' ') if not( numpy.fabs( a-b) / (a+b) < 1e-10 ): - print 'a!=b:', a, b + print('a!=b:', a, b) assert(False) def main(): @@ -151,8 +156,8 @@ def main(): head2 = moose.element( '/model/elec/head2' ) # Here we scale the spine head length while keeping all vols constt. - print "Spine 0: longer head, same vol\nSpine 1: longer shaft" - print "Spine 2: Bigger head, same diffScale\n" + print("Spine 0: longer head, same vol\nSpine 1: longer shaft") + print("Spine 2: Bigger head, same diffScale\n") elecParms = [ (i.Rm, i.Cm, i.Ra) for i in ( head0, shaft1, head2) ] chemParms = [ i.volume for i in ( caHead[0], caPsd[0], caHead[1], caPsd[1], caHead[2], caPsd[2] ) ] @@ -170,7 +175,7 @@ def main(): elec.spine[2].headDiameter *= numpy.sqrt(2) # sqrt(2) x dia hdia = elec.spine[2].headDiameter - print "Checking scaling assertions: " + print("Checking scaling assertions: ") assertEq( elecParms[0][0] * 0.5 , head0.Rm ) assertEq( elecParms[0][1] * 2 , head0.Cm ) assertEq( elecParms[0][2] * 16 , head0.Ra ) @@ -189,7 +194,7 @@ def main(): assertEq( elecParms[2][2] , head2.Ra ) assertEq( chemParms[4] * 4 , caHead[2].volume ) assertEq( chemParms[5] * 2 , caPsd[2].volume ) - print "\nAll assertions cleared" + print("\nAll assertions cleared") moose.start( 2 ) for i in range( len( psdTab ) ): @@ -220,4 +225,4 @@ def main(): # Run the 'main' if this script is executed standalone. if __name__ == '__main__': - main() + main() diff --git a/moose-examples/snippets/threading_demo.py b/moose-examples/snippets/threading_demo.py index a9fd15caf417a49a6df2b09f5be8bf8300e9792c..ca04091109021ac602e44d259b5456a19dfd534b 100644 --- a/moose-examples/snippets/threading_demo.py +++ b/moose-examples/snippets/threading_demo.py @@ -30,15 +30,20 @@ # Code: import sys -from datetime import datetime import threading -import Queue -import time +# Python3 and python2. +try: + import queue +except ImportError as e: + import Queue as queue + +import time +from datetime import datetime import moose -worker_queue = Queue.Queue() -status_queue = Queue.Queue() +worker_queue = queue.Queue() +status_queue = queue.Queue() class WorkerThread(threading.Thread): """This thread initializes the simulation (reinit) and then runs @@ -49,16 +54,16 @@ class WorkerThread(threading.Thread): def __init__(self, runtime): threading.Thread.__init__(self) self.runtime = runtime - print 'Created WorkerThread of name', self.name + print(('Created WorkerThread of name', self.name)) def run(self): - print self.name, 'Starting run for', self.runtime, ' seconds' + print((self.name, 'Starting run for', self.runtime, ' seconds')) moose.reinit() moose.start(self.runtime) while moose.isRunning(): time.sleep(1.0) - print self.name, 'Table length', len(moose.Table('/tab').vector) - print self.name, 'Finishing simulation' + print((self.name, 'Table length', len(moose.Table('/tab').vector))) + print((self.name, 'Finishing simulation')) worker_queue.put(self.name) class StatusThread(threading.Thread): @@ -71,18 +76,23 @@ class StatusThread(threading.Thread): def __init__(self, tab): threading.Thread.__init__(self) self.table = tab - print 'Created StatusThread of name', self.name + print(('Created StatusThread of name', self.name)) def run(self): while True: try: value = worker_queue.get(False) - print self.name, 'Received queue entry: ', value, '. Final table length:', len(self.table.vector), ' ... now Finishing' + print((self.name, 'Received queue entry: ', value + , '. Final table length:', len(self.table.vector) + , ' ... now Finishing' + )) status_queue.put(self.name) return - except Queue.Empty: + except queue.Empty: time.sleep(1.0) - print self.name, 'Queue is empty. Current table length:', len(self.table.vector) + print((self.name, 'Queue is empty. Current table length:' + , len(self.table.vector) + )) if __name__ == '__main__': pg = moose.PulseGen('pg') @@ -99,7 +109,7 @@ if __name__ == '__main__': t1.start() status_queue.get(True) tab.xplot('threading_demo.dat', 'pulsegen_output') - print 'Ending threading_demo: final length of table', len(tab.vector) + print(('Ending threading_demo: final length of table', len(tab.vector))) # # threading_demo.py ends here diff --git a/moose-examples/snippets/transportBranchingNeuron.py b/moose-examples/snippets/transportBranchingNeuron.py index b8616b5885bbddaba30df7dff6695e140f2a241e..c15ab0d126a52786b244c8cbd3837649afad7cb7 100644 --- a/moose-examples/snippets/transportBranchingNeuron.py +++ b/moose-examples/snippets/transportBranchingNeuron.py @@ -73,7 +73,7 @@ def makeModel(): moose.element( '/model/chem/compt0/a[0]' ).concInit = aConcInit twigs = findTwigs( compt0 ) - print 'twigs = ', twigs + print(('twigs = ', twigs)) for i in twigs: e = moose.element( '/model/chem/compt0/b[' + str(i) + ']' ) e.concInit = bConcInit @@ -126,8 +126,8 @@ def makeDisplay(): return ( timeSeries, fig, aline, bline, timeLabel, yp ) def updateDisplay( plotlist ): - a = moose.vec( '/model/chem/compt0/a' ) - b = moose.vec( '/model/chem/compt0/b' ) + a = moose.vec( '/model/chem/compt0/a' ) + b = moose.vec( '/model/chem/compt0/b' ) plotlist[2].set_ydata( a.conc * plotScale + plotlist[5] ) plotlist[3].set_ydata( b.conc * plotScale + plotlist[5] ) plotlist[1].canvas.draw() @@ -140,7 +140,7 @@ def finalizeDisplay( plotlist, cPlotDt ): plt.legend() plotlist[1].canvas.draw() print( "Hit 'enter' to exit" ) - raw_input() + eval(input()) def makeChemModel( compt ): @@ -208,10 +208,10 @@ def main(): plotlist[4].set_text( "time = %d" % i ) updateDisplay( plotlist ) - print 'mass consv a = ', a0, sum( a.n ), ', b = ', b0, sum( b.n ) + print(('mass consv a = ', a0, sum( a.n ), ', b = ', b0, sum( b.n ))) finalizeDisplay( plotlist, plotdt ) # Run the 'main' if this script is executed standalone. if __name__ == '__main__': - main() + main() diff --git a/moose-examples/snippets/traub_naf.py b/moose-examples/snippets/traub_naf.py index cb124e4456eae73dfeebbce68887049ce7dd28c6..db83c41f20233a3e85d4c1a3f117a4e0b99e6dc5 100644 --- a/moose-examples/snippets/traub_naf.py +++ b/moose-examples/snippets/traub_naf.py @@ -254,7 +254,7 @@ def run_clamp(model_dict, clamp, levels, holding=0.0, simtime=100e-3): for level in levels: model_dict['command'].level[0] = level model_dict['command'].baseLevel = holding - print 'Running %s with holding=%g, level=%g' % (clamp, holding, model_dict['command'].level[0]) + print(('Running %s with holding=%g, level=%g' % (clamp, holding, model_dict['command'].level[0]))) run_sim(model_dict['model'], model_dict['data'], simtime) ivec.append(np.asarray(model_dict['inject_tab'].vector)) cvec.append(np.asarray(model_dict['command_tab'].vector)) diff --git a/moose-examples/snippets/tweakingParameters.py b/moose-examples/snippets/tweakingParameters.py index 2f7a2a58f70e7a1cfa8e5e11e2f5fcfc8fa299e2..7c962ea1315bf66f9cffa56d0ec67c7f2a42098c 100644 --- a/moose-examples/snippets/tweakingParameters.py +++ b/moose-examples/snippets/tweakingParameters.py @@ -72,4 +72,4 @@ def main(): # Run the 'main' if this script is executed standalone. if __name__ == '__main__': - main() + main() diff --git a/moose-examples/snippets/vclamp.py b/moose-examples/snippets/vclamp.py index 71f6067955469686bb55f1722fb5695c88449e9d..edad646021020ea1b6c2fa986232bde914759c9f 100644 --- a/moose-examples/snippets/vclamp.py +++ b/moose-examples/snippets/vclamp.py @@ -101,10 +101,10 @@ def vclamp_demo(simtime=50.0, dt=1e-2): moose.useClock(2, '%s/##[TYPE=VClamp]' % (container.path), 'process') moose.useClock(3, '%s/##[TYPE=Table]' % (container.path), 'process') moose.reinit() - print 'RC filter in VClamp:: tau:', clamp.tau - print 'PID controller in VClamp:: ti:', clamp.ti, 'td:', clamp.td, 'gain:', clamp.gain + print(('RC filter in VClamp:: tau:', clamp.tau)) + print(('PID controller in VClamp:: ti:', clamp.ti, 'td:', clamp.td, 'gain:', clamp.gain)) moose.start(simtime) - print 'Finished simulation for %g seconds' % (simtime) + print(('Finished simulation for %g seconds' % (simtime))) tseries = linspace(0, simtime, len(vmtab.vector)) subplot(211) title('Membrane potential and clamp voltage') diff --git a/moose-examples/snippets/wildcard.py b/moose-examples/snippets/wildcard.py index 6db9225cd81d7c8a96d5cfe7f367c8326ca3bee2..97cf2dacfcb4374c02392e769b1e1d73472157ec 100644 --- a/moose-examples/snippets/wildcard.py +++ b/moose-examples/snippets/wildcard.py @@ -71,84 +71,84 @@ def wildcard_setup(): def wildcard_test(): # TYPE matches the type of the object wildcard = '/alfa/bravo/#[TYPE=HHChannel2D]' - print '\nElements Matching:', wildcard + print(('\nElements Matching:', wildcard)) for element in moose.wildcardFind(wildcard): - print '\t', element.path + print(('\t', element.path)) # ISA matches elements of specified type or its subclasses wildcard = '/alfa/bravo/#[ISA=HHChannel]' - print '\nElements Matching:', wildcard + print(('\nElements Matching:', wildcard)) for element in moose.wildcardFind(wildcard): - print '\t', element.path + print(('\t', element.path)) # HHChannel and HHChannel2D are subclasses of ChanBase wildcard = '/alfa/bravo/#[ISA=ChanBase]' - print '\nElements Matching:', wildcard + print(('\nElements Matching:', wildcard)) for element in moose.wildcardFind(wildcard): - print '\t', element.path + print(('\t', element.path)) # HHChannel and HHChannel2D are subclasses of ChanBase wildcard = '/alfa/bravo/#[TYPE=ChanBase]' - print '\nElements Matching:', wildcard + print(('\nElements Matching:', wildcard)) for element in moose.wildcardFind(wildcard): - print '\t', element.path + print(('\t', element.path)) # `#` can be used only once and matches all subsequent characters in name wildcard = '/alfa/bravo/charl?e' - print '\nElements Matching:', wildcard + print(('\nElements Matching:', wildcard)) for element in moose.wildcardFind(wildcard): - print '\t', element.path + print(('\t', element.path)) # `?` can be used any number of times but substitutes a single character wildcard = '/alfa/bravo/fox#' - print '\nElements Matching:', wildcard + print(('\nElements Matching:', wildcard)) for element in moose.wildcardFind(wildcard): - print '\t', element.path + print(('\t', element.path)) # Specify `##` to search through all levels below the path prefixing it wildcard = '/##[ISA=ChanBase]' - print '\nElements Matching:', wildcard + print(('\nElements Matching:', wildcard)) for element in moose.wildcardFind(wildcard): - print '\t', element.path + print(('\t', element.path)) # You can even select by field - but if the field does not exist, # this will produce a lot of harmless error messages in debug # builds. wildcard = '/##[FIELD(name)=echo]' - print '\nElements Matching:', wildcard + print(('\nElements Matching:', wildcard)) for element in moose.wildcardFind(wildcard): - print '\t', element.path + print(('\t', element.path)) # == and = are same wildcard = '/##[FIELD(name)==echo]' - print '\nElements Matching:', wildcard + print(('\nElements Matching:', wildcard)) for element in moose.wildcardFind(wildcard): - print '\t', element.path + print(('\t', element.path)) # Comparison operators other than == are allowed for floating point number fields wildcard = '/alfa/##[FIELD(Gbar)<1e-6]' - print '\nElements Matching:', wildcard + print(('\nElements Matching:', wildcard)) for element in moose.wildcardFind(wildcard): - print '\t', element.path, moose.element(element).Gbar + print(('\t', element.path, moose.element(element).Gbar)) # Equality is not defined for floating point fields wildcard = '/alfa/##[FIELD(Gbar)=1e-6]' - print '\nElements Matching:', wildcard + print(('\nElements Matching:', wildcard)) for element in moose.wildcardFind(wildcard): - print '\t', element.path, moose.element(element).Gbar + print(('\t', element.path, moose.element(element).Gbar)) # Another operator is != wildcard = '/alfa/bravo/#[TYPE!=HHChannel]' - print '\nElements Matching:', wildcard + print(('\nElements Matching:', wildcard)) for element in moose.wildcardFind(wildcard): - print '\t', element.path, ', class:', element.className + print(('\t', element.path, ', class:', element.className)) # With `##` you can get a listing of all elements under a path if # you don't use a condition wildcard = '/alfa/##' - print '\nElements Matching:', wildcard + print(('\nElements Matching:', wildcard)) for element in moose.wildcardFind(wildcard): - print '\t', element.path, ', class:', element.className + print(('\t', element.path, ', class:', element.className)) if __name__ == '__main__': diff --git a/moose-examples/squid/channeleditor.py b/moose-examples/squid/channeleditor.py index ead90412ff75a4940e8c8bfeb49e77657d21bca7..23f8973e757db4d91aecf3059ef8f4ae7b8fb570 100644 --- a/moose-examples/squid/channeleditor.py +++ b/moose-examples/squid/channeleditor.py @@ -59,17 +59,17 @@ class GateEditor(QtGui.QWidget): self.maxVEdit = QtGui.QLineEdit(self) self.divsVEdit = QtGui.QLineEdit(self) self.equation = '(A + B * V) / (C + exp((V + D)/F))' - self.alphaText = u'Equation for forward rate \u03B1 ' - self.betaText = u'Equation for backward rate \u03B2 ' - self.minfText = u'Equation for m\u221E ' - self.taumText = u'Equation for \u03C4m ' + self.alphaText = 'Equation for forward rate \\u03B1 ' + self.betaText = 'Equation for backward rate \\u03B2 ' + self.minfText = 'Equation for m\\u221E ' + self.taumText = 'Equation for \\u03C4m ' self.alphaLabel = QtGui.QLabel(self.minfText, self) self.betaLabel = QtGui.QLabel(self.taumText, self) self.alphaEdit = QtGui.QLineEdit(self) self.betaEdit = QtGui.QLineEdit(self) self.formCombo = QtGui.QComboBox(self) - self.formCombo.addItem(u'm\u221E - \u03C4m') - self.formCombo.addItem(u'\u03B1 - \u03B2') + self.formCombo.addItem('m\\u221E - \\u03C4m') + self.formCombo.addItem('\\u03B1 - \\u03B2') self.okButton = QtGui.QPushButton('OK', self) layout = QtGui.QGridLayout(self.inputPanel) layout.addWidget(self.minVLabel, 0, 0) @@ -125,10 +125,10 @@ class GateEditor(QtGui.QWidget): a[ii] = %s b[ii] = %s """ % (symbol, a_expr, b_expr) - print code + print(code) tree = compile(code, '<string>', 'exec') exec(tree) - print a, b + print((a, b)) return {'min': vmin, 'max': vmax, 'divs': vdivs, diff --git a/moose-examples/squid/squid.py b/moose-examples/squid/squid.py index b7c2727e57836056696eeab62ecadb8f8baacab0..dae8ff9dc5e83e37bd6249a074965f140900cdc7 100644 --- a/moose-examples/squid/squid.py +++ b/moose-examples/squid/squid.py @@ -303,7 +303,7 @@ class SquidAxon(moose.Compartment): self.temperature = celsius + CELSIUS_TO_KELVIN def use_defaults(self): - for field, value in SquidAxon.defaults.items(): + for field, value in list(SquidAxon.defaults.items()): setattr(self, field, value) class SquidModel(moose.Neutral): @@ -311,13 +311,13 @@ class SquidModel(moose.Neutral): def __init__(self, path): moose.Neutral.__init__(self, path) self.squid_axon = SquidAxon(path+'/squid_axon') - print self.squid_axon.Na_channel.Gbar, self.squid_axon.K_channel.Gbar + print((self.squid_axon.Na_channel.Gbar, self.squid_axon.K_channel.Gbar)) self.current_clamp = moose.PulseGen(path+'/pulsegen') self.current_clamp.firstDelay = 5.0 # ms self.current_clamp.firstWidth = 40 # ms self.current_clamp.firstLevel = 0.1 # uA self.current_clamp.secondDelay = 1e9 - print 'Current clamp connected:', moose.connect(self.current_clamp, 'output', self.squid_axon, 'injectMsg') + print(('Current clamp connected:', moose.connect(self.current_clamp, 'output', self.squid_axon, 'injectMsg'))) self.Vm_table = moose.Table('%s/Vm' % (self.path)) moose.connect(self.Vm_table, 'requestOut', self.squid_axon, 'getVm') @@ -345,19 +345,19 @@ class SquidModel(moose.Neutral): def save_data(self): self.Vm_table.xplot('Vm.dat', 'Vm') - print 'Vm saved to Vm.dat' + print('Vm saved to Vm.dat') if hasattr(self, 'gK_table'): self.gK_table.xplot('gK.dat', 'gK') numpy.savetxt('K_alpha_n.dat', self.squid_axon.K_channel.alpha_m) numpy.savetxt('K_beta_n.dat', self.squid_axon.K_channel.beta_m) - print 'K conductance saved to gK.dat' + print('K conductance saved to gK.dat') if hasattr(self, 'gNa_table'): self.gNa_table.xplot('gNa.dat', 'gNa') numpy.savetxt('Na_alpha_m.dat', self.squid_axon.Na_channel.alpha_m) numpy.savetxt('Na_beta_m.dat', self.squid_axon.Na_channel.beta_m) numpy.savetxt('Na_alpha_h.dat', self.squid_axon.Na_channel.alpha_h) numpy.savetxt('Na_beta_h.dat', self.squid_axon.Na_channel.beta_h) - print 'Na conductance saved to gNa.dat' + print('Na conductance saved to gNa.dat') diff --git a/moose-examples/squid/squid_demo.py b/moose-examples/squid/squid_demo.py index 85a351867a7d0285cbe874e4aa02a86b699f02b4..d243b0f5b03c88b0b84d20029cae8999008702c1 100644 --- a/moose-examples/squid/squid_demo.py +++ b/moose-examples/squid/squid_demo.py @@ -95,7 +95,7 @@ where P<sub>C</sub> is the permeability of the membrane to ion C. """ -tooltip_NaChan = u"""<h3>Na+ channel conductance</h3> +tooltip_NaChan = """<h3>Na+ channel conductance</h3> <p/> The Na<sup>+</sup> channel conductance in squid giant axon is given by: @@ -120,7 +120,7 @@ and time constant for steady state is: and similarly for h. """ -tooltip_KChan = u"""<h3>K+ channel conductance</h3> +tooltip_KChan = """<h3>K+ channel conductance</h3> <p/>The K+ channel conductance in squid giant axon is given by: <p> G<sub>K</sub> = GÌ„<sub>K</sub> * n<sup>4</sup></p> @@ -634,7 +634,7 @@ class SquidGui(QtGui.QMainWindow): def _runSlot(self): if moose.isRunning(): - print 'Stopping simulation in progress ...' + print('Stopping simulation in progress ...') moose.stop() self._runtime = self.getFloatInput(self._runTimeEdit, self._runTimeLabel.text()) self._overlayPlots(self._overlayAction.isChecked()) @@ -892,7 +892,7 @@ if __name__ == '__main__': QtGui.qApp = app squid_gui = SquidGui() squid_gui.show() - print squid_gui.size() + print((squid_gui.size())) sys.exit(app.exec_()) # diff --git a/moose-examples/traub_2005/py/cell_test_util.py b/moose-examples/traub_2005/py/cell_test_util.py index d0ba68e43263fec3b64ca4406f50d71bac9b4f4e..6e7d29c45154644a890382e2996ee5871b3683c1 100644 --- a/moose-examples/traub_2005/py/cell_test_util.py +++ b/moose-examples/traub_2005/py/cell_test_util.py @@ -28,7 +28,7 @@ # # Code: -from __future__ import print_function + from datetime import datetime import time diff --git a/moose-examples/traub_2005/py/cells.py b/moose-examples/traub_2005/py/cells.py index 530029c8007334e8d4719e3462879bb86e544480..ab10380b714b2b8e3617dc1d3036372553afdf7f 100644 --- a/moose-examples/traub_2005/py/cells.py +++ b/moose-examples/traub_2005/py/cells.py @@ -28,7 +28,7 @@ # # Code: -from __future__ import print_function + import csv import numpy as np from collections import defaultdict @@ -101,7 +101,7 @@ def adjust_chanlib(cdict): """Update the revarsal potentials for channels. Set the initial X value for AR channel. Set the tau for Ca pool.""" channel_dict = init_chanlib() - for ch in channel_dict.values(): + for ch in list(channel_dict.values()): config.logger.info('adjusting properties of %s' % (ch.path)) if isinstance(ch, kchans.KChannel): ch.Ek = cdict['EK'] @@ -142,7 +142,7 @@ def read_prototype(celltype, cdict): leveldict = read_keyvals('%s/%s.levels' % (config.modelSettings.protodir, celltype)) depths = read_keyvals('%s/%s.depths' % (config.modelSettings.protodir, celltype)) depthdict = {} - for level, depthset in depths.items(): + for level, depthset in list(depths.items()): if len(depthset) != 1: raise Exception('Depth set must have only one entry.') depthdict[level] = depthset.pop() @@ -165,7 +165,7 @@ def assign_depths(cell, depthdict, leveldict): """ if not depthdict: return - for level, depth in depthdict.items(): + for level, depth in list(depthdict.items()): z = float(depth) complist = leveldict[level] for comp_number in complist: @@ -187,15 +187,14 @@ class CellMeta(type): break if annotation is not None: info = moose.Annotator('%s/info' % (proto.path)) - info.notes = '\n'.join('"%s": "%s"' % kv for kv in annotation.items()) + info.notes = '\n'.join('"%s": "%s"' % kv for kv in list(annotation.items())) if 'soma_tauCa' in cdict: moose.element(proto.path + '/comp_1/CaPool').tau = cdict['soma_tauCa'] cdict['prototype'] = proto return type.__new__(cls, name, bases, cdict) -class CellBase(moose.Neuron): - __metaclass__ = CellMeta +class CellBase(moose.Neuron, CellMeta): annotation = {'cno': 'cno_0000020'} def __init__(self, path): if not moose.exists(path): diff --git a/moose-examples/traub_2005/py/channel_test_util.py b/moose-examples/traub_2005/py/channel_test_util.py index 29f70c383b0869b3f60241345fae687a29cd0350..95a0049b6ad46db0cb1333055d7cb0bc0d24f8de 100644 --- a/moose-examples/traub_2005/py/channel_test_util.py +++ b/moose-examples/traub_2005/py/channel_test_util.py @@ -27,7 +27,7 @@ # # Code: -from __future__ import print_function + import uuid import unittest @@ -57,15 +57,15 @@ def run_single_channel(channelname, Gbar, simtime, simdt=testutils.SIMDT, plotdt vm_file = 'data/%s_Vm.dat' % (channelname) gk_file = 'data/%s_Gk.dat' % (channelname) ik_file = 'data/%s_Ik.dat' % (channelname) - tseries = np.array(range(len(vm_data.vector))) * simdt - print('Vm:', len(vm_data.vector), 'Gk', len(gk_data.vector), 'Ik', len(ik_data.vector)) + tseries = np.array(list(range(len(vm_data.vector)))) * simdt + print(('Vm:', len(vm_data.vector), 'Gk', len(gk_data.vector), 'Ik', len(ik_data.vector))) data = np.c_[tseries, vm_data.vector] np.savetxt(vm_file, data) - print('Saved Vm in', vm_file) - print(len(gk_data.vector), len(vm_data.vector)) + print(('Saved Vm in', vm_file)) + print((len(gk_data.vector), len(vm_data.vector))) data = np.c_[tseries, gk_data.vector] np.savetxt(gk_file, data) - print('Saved Gk in', gk_file) + print(('Saved Gk in', gk_file)) data = np.c_[tseries, ik_data.vector] np.savetxt(ik_file, data) print('Saved Gk in', ik_file) @@ -80,7 +80,7 @@ def compare_channel_data(series, channelname, param, simulator, x_range=None, pl raise ValueError('Unrecognised simulator: %s' % (simulator)) try: ref_series = np.loadtxt(ref_file) - except IOError, e: + except IOError as e: print(e) return -1.0 if plot: diff --git a/moose-examples/traub_2005/py/channelbase.py b/moose-examples/traub_2005/py/channelbase.py index a013558a7657b9bea9e1b4254ebcc25c184c4d6a..20ba21c5b8276830bc45f08668830ffed6614dde 100644 --- a/moose-examples/traub_2005/py/channelbase.py +++ b/moose-examples/traub_2005/py/channelbase.py @@ -154,7 +154,7 @@ class ChannelMeta(type): mstring.value = mstring_field[1] if 'annotation' in cdict: info = moose.Annotator('%s/info' % (proto.path)) - info.notes = '\n'.join('%s: %s' % kv for kv in cdict['annotation'].items()) + info.notes = '\n'.join('%s: %s' % kv for kv in list(cdict['annotation'].items())) # print proto.path, info.notes cdict['prototype'] = proto prototypes[name] = proto @@ -162,10 +162,9 @@ class ChannelMeta(type): return type.__new__(cls, name, bases, cdict) -class ChannelBase(moose.HHChannel): +class ChannelBase(moose.HHChannel, ChannelMeta): annotation = {'cno': 'cno_0000047'} abstract = True - __metaclass__ = ChannelMeta def __init__(self, path, xpower=1, ypower=0, Ek=0.0): moose.HHChannel.__init__(self, path) diff --git a/moose-examples/traub_2005/py/config.py b/moose-examples/traub_2005/py/config.py index 7569af2d3e61545d38f5ac6edb9682df3eec4377..02fd52b975adbc76c489ab4b4ac7e986032d1f6a 100644 --- a/moose-examples/traub_2005/py/config.py +++ b/moose-examples/traub_2005/py/config.py @@ -29,7 +29,7 @@ # Code: -from __future__ import print_function + import settings import os diff --git a/moose-examples/traub_2005/py/deadlock_bug.py b/moose-examples/traub_2005/py/deadlock_bug.py index d876cd7da438208f490f2c6fed70495d24970b95..760a6cefbda9aa18ddda0cc0e1f4d1dd555f68cc 100644 --- a/moose-examples/traub_2005/py/deadlock_bug.py +++ b/moose-examples/traub_2005/py/deadlock_bug.py @@ -28,7 +28,7 @@ # # Code: -from __future__ import print_function + from collections import defaultdict import moose @@ -68,7 +68,7 @@ def adjust_chanlib(cdict): """Update the revarsal potentials for channels. Set the initial X value for AR channel. Set the tau for Ca pool.""" channel_dict = init_chanlib() - for ch in channel_dict.values(): + for ch in list(channel_dict.values()): if isinstance(ch, kchans.KChannel): ch.Ek = cdict['EK'] elif isinstance(ch, nachans.NaChannel): @@ -106,7 +106,7 @@ def read_prototype(celltype, cdict): leveldict = read_keyvals('%s/%s.levels' % (config.modelSettings.protodir, celltype)) depths = read_keyvals('%s/%s.depths' % (config.modelSettings.protodir, celltype)) depthdict = {} - for level, depthset in depths.items(): + for level, depthset in list(depths.items()): if len(depthset) != 1: raise Exception('Depth set must have only one entry.') depthdict[level] = depthset.pop() @@ -128,7 +128,7 @@ def assign_depths(cell, depthdict, leveldict): """ if not depthdict: return - for level, depth in depthdict.items(): + for level, depth in list(depthdict.items()): z = float(depth) complist = leveldict[level] for comp_number in complist: @@ -146,8 +146,7 @@ class CellMeta(type): return type.__new__(cls, name, bases, cdict) -class CellBase(moose.Neutral): - __metaclass__ = CellMeta +class CellBase(moose.Neutral, CellMeta): def __init__(self, path): if not moose.exists(path): path_tokens = path.rpartition('/') diff --git a/moose-examples/traub_2005/py/display_morphology.py b/moose-examples/traub_2005/py/display_morphology.py index 7722b23f563a00f02d2d1bed637be4822a5d0e7c..72cdbbbbd893c16e56966277739138041c27e505 100644 --- a/moose-examples/traub_2005/py/display_morphology.py +++ b/moose-examples/traub_2005/py/display_morphology.py @@ -28,19 +28,24 @@ # # Code: -from __future__ import print_function + """ + Display/save the topology of one or all cells in traub_2005 demo. command line options (all are optional): --c celltype : display topology of cell type 'celltype'. If unspecified, all cell types are displayed --p filename : save output to fiel specified by 'filename' --l : show labels of the compartments --h,--help : show this help + + -c celltype : display topology of cell type 'celltype'. If unspecified, + all cell types are displayed + -p filename : save output to fiel specified by 'filename' + -l : show labels of the compartments + -h,--help : show this help + """ +from __future__ import print_function + import sys -sys.path.append('../../../python') import os import numpy as np import matplotlib.pyplot as plt @@ -117,7 +122,7 @@ def plot_cell_topology(cell, label=False): nx.draw_networkx_edges(g, pos, width=10*weights/max(weights), edge_color='gray', alpha=0.8) nx.draw_networkx_nodes(g, pos, with_labels=False, nnode_size=node_size * 500, - node_color=map(lambda x: 'k' if x in axon else 'gray', g.nodes()), + node_color=['k' if x in axon else 'gray' for x in g.nodes()], linewidths=[1 if n.endswith('comp_1') else 0 for n in g.nodes()], alpha=0.8) if label: @@ -131,6 +136,7 @@ import sys from getopt import getopt if __name__ == '__main__': + print(sys.argv) optlist, args = getopt(sys.argv[1:], 'lhp:c:', ['help']) celltype = '' pdf = '' @@ -151,6 +157,7 @@ if __name__ == '__main__': print('-p filename (optional) save outputin a pdf file named "filename".') print('-h,--help print this help') sys.exit(0) + print('args', optlist, args) figures = [] if len(celltype) > 0: try: @@ -160,12 +167,13 @@ if __name__ == '__main__': # print 'Label', label plot_cell_topology(cell, label=label) except KeyError: - print( '%s: no such cell type. Available are:' % (celltype)) - for ii in cells.init_prototypes().keys(): - print( ii) + print('%s: no such cell type. Available are:' % (celltype)) + for ii in list(cells.init_prototypes().keys()): + print(ii, end=' ') + print() sys.exit(1) else: - for cell, proto in cells.init_prototypes().items(): + for cell, proto in list(cells.init_prototypes().items()): figures.append(plt.figure()) plot_cell_topology(proto, label=label) plt.axis('off') diff --git a/moose-examples/traub_2005/py/dump_f_i_curves.py b/moose-examples/traub_2005/py/dump_f_i_curves.py index 7135a4d871b7a8cdce3d621eabc2416270f2f103..bc9e77e3005f2978b77d6dcae764b4b2fe645d9e 100644 --- a/moose-examples/traub_2005/py/dump_f_i_curves.py +++ b/moose-examples/traub_2005/py/dump_f_i_curves.py @@ -1,112 +1,112 @@ -# dump_f_i_curves.py --- -# -# Filename: dump_f_i_curves.py -# Description: -# Author: Subhasis Ray -# Maintainer: -# Created: Tue Dec 8 13:11:01 2015 (-0500) -# Version: -# Package-Requires: () -# Last-Updated: Wed Dec 9 12:28:06 2015 (-0500) -# By: Subhasis Ray -# Update #: 79 -# URL: -# Doc URL: -# Keywords: -# Compatibility: -# -# - -# Commentary: -# -# -# -# - -# Change Log: -# -# -# -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or (at -# your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. -# -# - -# Code: - -"""Do a series of current steps on each celltype""" -from __future__ import print_function -import numpy as np -import h5py as h5 -from collections import defaultdict - -import moose -from moose import utils as mutils - -from cells import SpinyStellate -from cells import DeepBasket -from cells import DeepLTS - - -simdt = 2.5e-6 -plotdt = 1e-4 - -amps = np.array([-0.1, 0.1, 0.5, 1.0, 1.5])*1e-9 - -def run_current_pulse(amps, delay=100e-3, dur=100e-3, trail=100e-3, outfile='f_i_curves_data.h5'): - models = [] - model = moose.Neutral('/model') - data = moose.Neutral('/data') - ddict = defaultdict(list) - for ii, amp in enumerate(amps): - mc = moose.Neutral('{}/mc_{}'.format(model.path, ii)) - models.append(mc) - stim = moose.PulseGen('{}/stim_{}'.format(mc.path, ii)) - stim.delay[0] = delay - stim.width[0] = dur - stim.level[0] = amp - stim.delay[1] = 1e9 # make delay so large that it does not activate again - for celltype in [SpinyStellate, DeepBasket, DeepLTS]: - cell = celltype('{}/{}_{}'.format(mc.path, celltype.__name__, ii)) - solver = moose.HSolve('{}/solver'.format(cell.path)) - solver.dt = simdt - solver.target = cell.path - stim.connect('output', cell.soma, 'injectMsg') - tab = moose.Table('/data/Vm_{}'.format(cell.name)) - ddict[ii].append(tab) - tab.connect('requestOut', cell.soma, 'getVm') - mutils.setDefaultDt(elecdt=simdt, plotdt2=plotdt) - mutils.assignDefaultTicks(modelRoot='/model', dataRoot='/data', solver='hsolve') - moose.reinit() - print('Finished scheduling') - moose.start(delay + dur + trail) - print('Finished simulation') - # Save data - fd = h5.File(outfile, 'w') - for ii, tabs in ddict.items(): - for tab in tabs: - print('Table', tab.name) - node = fd.create_dataset(tab.name, data=tab.vector) - node.attrs['current'] = amps[ii] - node.attrs['delay'] = delay - node.attrs['width'] = dur - fd.close() - print('Finished saving data in file', outfile) - - -if __name__ == '__main__': - run_current_pulse(amps) - -# -# dump_f_i_curves.py ends here +# dump_f_i_curves.py --- +# +# Filename: dump_f_i_curves.py +# Description: +# Author: Subhasis Ray +# Maintainer: +# Created: Tue Dec 8 13:11:01 2015 (-0500) +# Version: +# Package-Requires: () +# Last-Updated: Wed Dec 9 12:28:06 2015 (-0500) +# By: Subhasis Ray +# Update #: 79 +# URL: +# Doc URL: +# Keywords: +# Compatibility: +# +# + +# Commentary: +# +# +# +# + +# Change Log: +# +# +# +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or (at +# your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. +# +# + +# Code: + +"""Do a series of current steps on each celltype""" + +import numpy as np +import h5py as h5 +from collections import defaultdict + +import moose +from moose import utils as mutils + +from cells import SpinyStellate +from cells import DeepBasket +from cells import DeepLTS + + +simdt = 2.5e-6 +plotdt = 1e-4 + +amps = np.array([-0.1, 0.1, 0.5, 1.0, 1.5])*1e-9 + +def run_current_pulse(amps, delay=100e-3, dur=100e-3, trail=100e-3, outfile='f_i_curves_data.h5'): + models = [] + model = moose.Neutral('/model') + data = moose.Neutral('/data') + ddict = defaultdict(list) + for ii, amp in enumerate(amps): + mc = moose.Neutral('{}/mc_{}'.format(model.path, ii)) + models.append(mc) + stim = moose.PulseGen('{}/stim_{}'.format(mc.path, ii)) + stim.delay[0] = delay + stim.width[0] = dur + stim.level[0] = amp + stim.delay[1] = 1e9 # make delay so large that it does not activate again + for celltype in [SpinyStellate, DeepBasket, DeepLTS]: + cell = celltype('{}/{}_{}'.format(mc.path, celltype.__name__, ii)) + solver = moose.HSolve('{}/solver'.format(cell.path)) + solver.dt = simdt + solver.target = cell.path + stim.connect('output', cell.soma, 'injectMsg') + tab = moose.Table('/data/Vm_{}'.format(cell.name)) + ddict[ii].append(tab) + tab.connect('requestOut', cell.soma, 'getVm') + mutils.setDefaultDt(elecdt=simdt, plotdt2=plotdt) + mutils.assignDefaultTicks(modelRoot='/model', dataRoot='/data', solver='hsolve') + moose.reinit() + print('Finished scheduling') + moose.start(delay + dur + trail) + print('Finished simulation') + # Save data + fd = h5.File(outfile, 'w') + for ii, tabs in list(ddict.items()): + for tab in tabs: + print(('Table', tab.name)) + node = fd.create_dataset(tab.name, data=tab.vector) + node.attrs['current'] = amps[ii] + node.attrs['delay'] = delay + node.attrs['width'] = dur + fd.close() + print(('Finished saving data in file', outfile)) + + +if __name__ == '__main__': + run_current_pulse(amps) + +# +# dump_f_i_curves.py ends here diff --git a/moose-examples/traub_2005/py/fig_a2_fs.py b/moose-examples/traub_2005/py/fig_a2_fs.py index 625a6228b2be9f3407aa335dacbd75aa1ce4ae0f..db7bd2223baceced6698e141ef514b2239fb9178 100644 --- a/moose-examples/traub_2005/py/fig_a2_fs.py +++ b/moose-examples/traub_2005/py/fig_a2_fs.py @@ -49,7 +49,7 @@ Reproduce the experiment for Fig A2 in Traub et al 2005. FS (deep basket cell) with 0.5 nA current pusle simulated for 1 s """ -from __future__ import print_function + import numpy as np import pylab diff --git a/moose-examples/traub_2005/py/fig_a3.py b/moose-examples/traub_2005/py/fig_a3.py index 393ecaf1fd77a86305cc47d1a36bb411b647657b..dfeecea8f793f25d8372b53a2ebb6c7a501e59b7 100644 --- a/moose-examples/traub_2005/py/fig_a3.py +++ b/moose-examples/traub_2005/py/fig_a3.py @@ -105,7 +105,7 @@ def main(): np.vstack((t, inject, vm)).transpose()) msg = 'Saved data for %g A current pulse in %s' % (a, fname) config.logger.info(msg) - print( msg) + print(msg) pylab.subplot(3,1,ii+1) pylab.title('%g nA' % (a*1e9)) pylab.plot(t, vm, label='soma-Vm (mV)') diff --git a/moose-examples/traub_2005/py/gui.py b/moose-examples/traub_2005/py/gui.py index c77e68007780b82204cfe308a1185eab910b2cac..9241c11f3c36615885459b81d1160e4c93bcd2e0 100644 --- a/moose-examples/traub_2005/py/gui.py +++ b/moose-examples/traub_2005/py/gui.py @@ -48,7 +48,7 @@ """ Display channel properties graphically """ -from __future__ import print_function + from datetime import datetime from PyQt4 import QtCore, QtGui from matplotlib import mlab @@ -115,7 +115,7 @@ class HHChanView(QtGui.QWidget): self.channelListWidget = QtGui.QListWidget(self) self.channelListWidget.setSelectionMode( QtGui.QAbstractItemView.ExtendedSelection) root = str(self.rootEdit.text()) - for chan in self.getChannels(root).values(): + for chan in list(self.getChannels(root).values()): self.channelListWidget.addItem(chan.name) self.update() return self.channelListWidget @@ -154,7 +154,9 @@ class HHChanView(QtGui.QWidget): self.mhaxes.set_title('Activation/Inactivation') self.tauaxes = self.figure.add_subplot(2, 1, 2) self.tauaxes.set_title('Tau') + print((self.channels)) for item in self.getChannelListWidget().selectedItems(): + print((item.text())) chan = self.channels[str(item.text())] if chan.Xpower > 0: path = '{}/gateX'.format(chan.path) @@ -194,6 +196,19 @@ class NetworkXWidget(QtGui.QWidget): if len(sizes) == 0: print('Empty graph for cell. Make sure proto file has `*asymmetric` on top. I cannot handle symmetric compartmental connections') return + weights = np.array([g.edge[e[0]][e[1]]['weight'] for e in g.edges()]) + pos = nx.graphviz_layout(g, prog='twopi') + xmin, ymin, xmax, ymax = 1e9, 1e9, -1e9, -1e9 + for p in list(pos.values()): + if xmin > p[0]: + xmin = p[0] + if xmax < p[0]: + xmax = p[0] + if ymin > p[1]: + ymin = p[1] + if ymax < p[1]: + ymax = p[1] + edge_widths = 10.0 * weights / max(weights) node_colors = ['k' if x in axon else 'gray' for x in g.nodes()] lw = [1 if n.endswith('comp_1') else 0 for n in g.nodes()] self.axes.clear() @@ -300,6 +315,7 @@ class CellView(QtGui.QWidget): def displayCellMorphology(self, cellpath): cell = moose.element(cellpath) + print('HERE') graph = cell_to_graph(cell) self.getCellMorphologyWidget().displayGraph(graph) @@ -319,8 +335,11 @@ class CellView(QtGui.QWidget): [1e9, 0, 0]]) # moose.le(model_container) # moose.le(data_container) + print('11111') + print((model_container.path, data_container.path)) params['modelRoot'] = model_container.path params['dataRoot'] = data_container.path + print('here') return params def displaySelected(self): @@ -386,7 +405,7 @@ class CellView(QtGui.QWidget): self.vmAxes.legend() self.plotCanvas.draw() td = np.mean(tdlist) - print('Simulating %g s took %g s of computer time' % (simtime, td)) + print(('Simulating %g s took %g s of computer time' % (simtime, td))) # self.plotFigure.tight_layout() def getPlotWidget(self): diff --git a/moose-examples/traub_2005/py/test_capool.py b/moose-examples/traub_2005/py/test_capool.py index eee8ce6cce0d16ee9e0a03e2ab99a3c377f7d5ef..672b243f248d7122005866bb80c84356281fec91 100644 --- a/moose-examples/traub_2005/py/test_capool.py +++ b/moose-examples/traub_2005/py/test_capool.py @@ -28,7 +28,7 @@ # # Code: -from __future__ import print_function + import uuid import numpy as np @@ -78,21 +78,21 @@ def run_capool(poolname, Gbar, simtime): gk_file = 'data/%s_Gk.dat' % (poolname) ik_file = 'data/%s_Ik.dat' % (poolname) ca_file = 'data/%s_Ca.dat' % (poolname) - tseries = np.array(range(len(vm_data.vector))) * simdt - print('Vm:', len(vm_data.vector), 'Gk', len(gk_data.vector), 'Ik', len(ik_data.vector)) + tseries = np.array(list(range(len(vm_data.vector)))) * simdt + print(('Vm:', len(vm_data.vector), 'Gk', len(gk_data.vector), 'Ik', len(ik_data.vector))) data = np.c_[tseries, vm_data.vector] np.savetxt(vm_file, data) - print('Saved Vm in', vm_file) + print(('Saved Vm in', vm_file)) data = np.c_[tseries, gk_data.vector] np.savetxt(gk_file, data) - print('Saved Gk in', gk_file) + print(('Saved Gk in', gk_file)) data = np.c_[tseries, ik_data.vector] np.savetxt(ik_file, data) - print('Saved Ik in', ik_file) - print('>>', len(ca_data.vector)) + print(('Saved Ik in', ik_file)) + print(('>>', len(ca_data.vector))) data = np.c_[tseries, ca_data.vector] np.savetxt(ca_file, data) - print('Saved [Ca2+] in', ca_file) + print(('Saved [Ca2+] in', ca_file)) return params @@ -103,7 +103,7 @@ class TestCaPool(ChannelTestBase): vm = np.array(params['Vm'].vector) gk = np.array(params['Gk'].vector) ca = np.array(params['Ca'].vector) - print(len(ca)) + print(le(ca)) tseries = np.arange(0, len(vm), 1.0) * simdt def testCaPool_Vm_Neuron(self): diff --git a/moose-examples/traub_2005/py/test_kchans.py b/moose-examples/traub_2005/py/test_kchans.py index 0eb5eddb456f8185dff97ec08269196ddbe2b6f4..416e4a83961b3914fa9adbb8fd42e7a48981f0e2 100644 --- a/moose-examples/traub_2005/py/test_kchans.py +++ b/moose-examples/traub_2005/py/test_kchans.py @@ -27,7 +27,7 @@ # # Code: -from __future__ import print_function + import uuid import unittest @@ -196,19 +196,19 @@ def run_cadep_channel(channelname, Gbar, simtime): gk_file = 'data/%s_Gk.dat' % (channelname) ik_file = 'data/%s_Ik.dat' % (channelname) ca_file = 'data/%s_Ca.dat' % (channelname) - tseries = np.array(range(len(vm_data.vector))) * simdt - print('Vm:', len(vm_data.vector), 'Gk', len(gk_data.vector), 'Ik', len(ik_data.vector)) + tseries = np.array(list(range(len(vm_data.vector)))) * simdt + print(('Vm:', len(vm_data.vector), 'Gk', len(gk_data.vector), 'Ik', len(ik_data.vector))) data = np.c_[tseries, vm_data.vector] np.savetxt(vm_file, data) - print('Saved Vm in', vm_file) + print(('Saved Vm in', vm_file)) data = np.c_[tseries, gk_data.vector] np.savetxt(gk_file, data) - print('Saved Gk in', gk_file) + print(('Saved Gk in', gk_file)) data = np.c_[tseries, ik_data.vector] np.savetxt(ik_file, data) - print('Saved Ik in', ik_file) + print(('Saved Ik in', ik_file)) np.savetxt(ca_file, data) - print('Saved [Ca2+] in', ca_file) + print(('Saved [Ca2+] in', ca_file)) return params diff --git a/moose-examples/traub_2005/py/test_nachans.py b/moose-examples/traub_2005/py/test_nachans.py index b96eb1b652e7d47e1e1d0faaf73f4a742ee0b113..e2c91e50e87460820ba96926ada2c66c5a571cec 100644 --- a/moose-examples/traub_2005/py/test_nachans.py +++ b/moose-examples/traub_2005/py/test_nachans.py @@ -28,12 +28,12 @@ # # Code: + from __future__ import print_function import os os.environ['NUMPTHREADS'] = '1' import sys -sys.path.append('../../../python') import numpy as np import testutils from testutils import * @@ -50,7 +50,7 @@ class TestNaF(ChannelTestBase): params = run_single_channel(channelname, 1e-9, simtime) vm = np.asarray(params['Vm'].vector) gk = np.asarray(params['Gk'].vector) - tseries = np.array(range(0, len(params['Vm'].vector))) * simdt + tseries = np.array(list(range(0, len(params['Vm'].vector)))) * simdt def testNaF_Vm_Moose(self): print('Testing MOOSE Vm ...',) @@ -65,7 +65,7 @@ class TestNaF(ChannelTestBase): print('OK') def testNaF_Vm_Neuron(self): - print('Testing NEURON Vm ...', end='') + print('Testing NEURON Vm ...', end=' ') data = np.c_[self.tseries, self.vm] err = compare_channel_data(data, self.channelname, 'Vm', 'neuron', x_range=(simtime/10.0, simtime)) self.assertLess(err, 0.01) @@ -83,7 +83,7 @@ class TestNaF_TCR(ChannelTestBase): params = run_single_channel(channelname, 1e-9, simtime) vm = np.asarray(params['Vm'].vector) gk = np.asarray(params['Gk'].vector) - tseries = np.array(range(0, len(params['Vm'].vector))) * simdt + tseries = np.array(list(range(0, len(params['Vm'].vector)))) * simdt def testNaF_TCR_Vm_Moose(self): print('Testing MOOSE Vm ...', end='') err = compare_channel_data(self.vm, TestNaF_TCR.channelname, 'Vm', 'moose', x_range=(simtime/10.0, simtime)) @@ -116,15 +116,15 @@ class TestNaF2(ChannelTestBase): params = run_single_channel(channelname, 1e-9, simtime) vm = np.asarray(params['Vm'].vector) gk = np.asarray(params['Gk'].vector) - tseries = np.array(range(0, len(params['Vm'].vector))) * simdt + tseries = np.array(list(range(0, len(params['Vm'].vector)))) * simdt def testNaF2_Vm_Moose(self): - print('Testing MOOSE Vm ...', end='') + print('Testing MOOSE Vm ...', end=' ') err = compare_channel_data(self.vm, TestNaF2.channelname, 'Vm', 'moose', x_range=(simtime/10.0, simtime)) self.assertLess(err, 0.01) - print('OK', end='') + print('OK') def testNaF2_Gk_Moose(self): - print('Testing MOOSE Gk ...', end='') + print('Testing MOOSE Gk ...', end=' ') err = compare_channel_data(self.gk, TestNaF2.channelname, 'Gk', 'moose', x_range=(simtime/10.0, simtime)) self.assertLess(err, 0.05) print('OK') @@ -149,7 +149,7 @@ class TestNaF2_nRT(ChannelTestBase): params = run_single_channel(channelname, 1e-9, simtime) vm = np.asarray(params['Vm'].vector) gk = np.asarray(params['Gk'].vector) - tseries = np.array(range(0, len(params['Vm'].vector))) * simdt + tseries = np.array(list(range(0, len(params['Vm'].vector)))) * simdt def testNaF2_nRT_Vm_Moose(self): print('Testing MOOSE Vm ...', end='') err = compare_channel_data(self.vm, TestNaF2_nRT.channelname, 'Vm', 'moose', x_range=(simtime/10.0, simtime)) @@ -181,7 +181,7 @@ class TestNaP(ChannelTestBase): params = run_single_channel(channelname, 1e-9, simtime) vm = np.asarray(params['Vm'].vector) gk = np.asarray(params['Gk'].vector) - tseries = np.array(range(0, len(params['Vm'].vector))) * simdt + tseries = np.array(list(range(0, len(params['Vm'].vector)))) * simdt def testNaP_Vm_Moose(self): print('Testing MOOSE Vm ...', end='') err = compare_channel_data(self.vm, TestNaP.channelname, 'Vm', 'moose', x_range=(simtime/10.0, simtime)) @@ -214,7 +214,7 @@ class TestNaPF(ChannelTestBase): params = run_single_channel(channelname, 1e-9, simtime) vm = np.asarray(params['Vm'].vector) gk = np.asarray(params['Gk'].vector) - tseries = np.array(range(0, len(params['Vm'].vector))) * simdt + tseries = np.array(list(range(0, len(params['Vm'].vector)))) * simdt def testNaPF_Vm_Moose(self): print('Testing MOOSE Vm ...', end='') err = compare_channel_data(self.vm, TestNaPF.channelname, 'Vm', 'moose', x_range=(simtime/10.0, simtime)) @@ -247,7 +247,7 @@ class TestNaPF_SS(ChannelTestBase): params = run_single_channel(channelname, 1e-9, simtime) vm = np.asarray(params['Vm'].vector) gk = np.asarray(params['Gk'].vector) - tseries = np.array(range(0, len(params['Vm'].vector))) * simdt + tseries = np.array(list(range(0, len(params['Vm'].vector)))) * simdt def testNaPF_SS_Vm_Moose(self): print('Testing MOOSE Vm ...', end='') err = compare_channel_data(self.vm, TestNaPF_SS.channelname, 'Vm', 'moose', x_range=(simtime/10.0, simtime)) @@ -280,7 +280,7 @@ class TestNaPF_TCR(ChannelTestBase): params = run_single_channel(channelname, 1e-9, simtime) vm = np.asarray(params['Vm'].vector) gk = np.asarray(params['Gk'].vector) - tseries = np.array(range(0, len(params['Vm'].vector))) * simdt + tseries = np.array(list(range(0, len(params['Vm'].vector)))) * simdt def testNaPF_TCR_Vm_Moose(self): print('Testing MOOSE Vm ...', end='') err = compare_channel_data(self.vm, TestNaPF_TCR.channelname, 'Vm', 'moose', x_range=(simtime/10.0, simtime)) @@ -288,7 +288,7 @@ class TestNaPF_TCR(ChannelTestBase): print('OK') def testNaPF_TCR_Gk_Moose(self): - print('Testing MOOSE Gk ...', end='') + print('Testing MOOSE Gk ...', end=' ') err = compare_channel_data(self.gk, TestNaPF_TCR.channelname, 'Gk', 'moose', x_range=(simtime/10.0, simtime)) self.assertLess(err, 0.05) print('OK') diff --git a/moose-examples/traub_2005/py/test_singlecomp.py b/moose-examples/traub_2005/py/test_singlecomp.py index decd56dd20c7eb8a614389f7c7521ab649fd9999..3412806ced9ff7f67154fae3e6e0befcb703f1ed 100644 --- a/moose-examples/traub_2005/py/test_singlecomp.py +++ b/moose-examples/traub_2005/py/test_singlecomp.py @@ -29,7 +29,7 @@ # # Code: -from __future__ import print_function + import os os.environ['NUMPTHREADS'] = '1' @@ -142,7 +142,7 @@ class TestSingleComp(unittest.TestCase): tab = moose.Table('%s/Vm' % (self.data.path)) self.tables['Vm'] = tab moose.connect(tab, 'requestOut', self.soma, 'getVm') - for channelname, conductance in channel_density.items(): + for channelname, conductance in list(channel_density.items()): chanclass = eval(channelname) channel = insert_channel(self.soma, chanclass, conductance, density=True) if issubclass(chanclass, KChannel): @@ -189,8 +189,8 @@ class TestSingleComp(unittest.TestCase): nrndata = np.loadtxt('../nrn/data/singlecomp_Vm.dat') vm_axis.plot(nrndata[:,0], nrndata[:,1], label='Vm (mV) - nrn') ca_axis.plot(nrndata[:,0], nrndata[:,2], label='Ca (mM) - nrn') - except IOError, e: - print( e) + except IOError as e: + print(e) tseries = np.linspace(0, simtime, len(self.tables['Vm'].vector)) * 1e3 # plotcount = len(channel_density) + 1 # rows = int(np.sqrt(plotcount) + 0.5) diff --git a/moose-examples/traub_2005/py/test_tcr.py b/moose-examples/traub_2005/py/test_tcr.py index b148bf69dfc563a4fb112fd3bba0a6b5d1f15902..c6d1c4999b93e0b7bf9bd2799520e4e0ad5d98d7 100644 --- a/moose-examples/traub_2005/py/test_tcr.py +++ b/moose-examples/traub_2005/py/test_tcr.py @@ -28,7 +28,7 @@ # # Code: -from __future__ import print_function + import unittest from cell_test_util import setup_current_step_model, SingleCellCurrentStepTest import testutils @@ -80,9 +80,9 @@ class TestTCR(SingleCellCurrentStepTest): tab = moose.Table('%s/command' % (self.data_container.path)) moose.connect(tab, 'requestOut', clamp, 'getCommand') for ii in moose.wildcardFind('/##[TYPE=VClamp]'): - print(ii.path) + print((ii.path)) self.runsim(simtime) - print(tab, len(tab.vector)) + print((tab, len(tab.vector))) pylab.plot(pylab.linspace(0, simtime, len(tab.vector)), tab.vector, 'kx') self.plot_vm() diff --git a/moose-examples/traub_2005/py/testutils.py b/moose-examples/traub_2005/py/testutils.py index b3d6b68e2622687fad31a046cbce826f527c015f..d6dff4546cb3b8cbac5e1c2582eac9e2a9431947 100644 --- a/moose-examples/traub_2005/py/testutils.py +++ b/moose-examples/traub_2005/py/testutils.py @@ -28,7 +28,7 @@ # # Code: -from __future__ import print_function + import os os.environ['NUMPTHREADS'] = '1' @@ -335,11 +335,11 @@ def compare_cell_dump(left, right, rtol=1e-3, atol=1e-8, row_header=True, col_he right_end = False while True: try: - left_row = left_reader.next() + left_row = next(left_reader) except StopIteration: left_end = True try: - right_row = right_reader.next() + right_row = next(right_reader) except StopIteration: right_end = True if left_end and not right_end: @@ -359,11 +359,11 @@ def compare_cell_dump(left, right, rtol=1e-3, atol=1e-8, row_header=True, col_he left = float(left_row[key]) right = float(right_row[key]) if not np.allclose(float(left), float(right), rtol=rtol, atol=atol): - print( 'Mismatch in row:%s, column:%s. Values: %g <> %g' % (index, key, left, right)) + print(('Mismatch in row:%s, column:%s. Values: %g <> %g' % (index, key, left, right))) ret = False - except ValueError, e: - print( e) - print( 'Row:', index, 'Key:', key, left_row[key], right_row[key]) + except ValueError as e: + print(e) + print(('Row:', index, 'Key:', key, left_row[key], right_row[key])) index = index + 1 return ret diff --git a/moose-examples/traub_2005/py/trbconfig.py b/moose-examples/traub_2005/py/trbconfig.py index 63814c316debdb3f2e379f09870f4b786804f29c..134537e7ed6c0b9e4426c1058445ad10c6ab6f69 100644 --- a/moose-examples/traub_2005/py/trbconfig.py +++ b/moose-examples/traub_2005/py/trbconfig.py @@ -29,7 +29,7 @@ # Code: from datetime import datetime -import ConfigParser as configparser +import configparser as configparser import logging import numpy import os diff --git a/moose-examples/tutorials/ChemicalBistables/findSteadyState.py b/moose-examples/tutorials/ChemicalBistables/findSteadyState.py index b53c94bd9cf8277670bb7c74d95642af1bd3355f..21c545cee6cbe641fad0e2cc30dbc8ba65c1ed2f 100644 --- a/moose-examples/tutorials/ChemicalBistables/findSteadyState.py +++ b/moose-examples/tutorials/ChemicalBistables/findSteadyState.py @@ -50,73 +50,74 @@ import numpy import moose def displayPlots(): - for x in moose.wildcardFind( '/model/graphs/conc#/#' ): - t = numpy.arange( 0, x.vector.size, 1 ) #sec - pylab.plot( t, x.vector, label=x.name ) - pylab.legend() - pylab.show() + for x in moose.wildcardFind( '/model/graphs/conc#/#' ): + t = numpy.arange( 0, x.vector.size, 1 ) #sec + pylab.plot( t, x.vector, label=x.name ) + pylab.legend() + pylab.show() def getState( ksolve, state ): - state.randomInit() - moose.start( 0.1 ) # Run the model for 2 seconds. - state.settle() - ''' - scale = 1.0 / ( 1e-15 * 6.022e23 ) - for x in ksolve.nVec[0]: - print x * scale, - # print ksolve.nVec[0] - print state.nIter, state.status, state.stateType, state.nNegEigenvalues, state.nPosEigenvalues, state.solutionStatus - ''' - moose.start( 20.0 ) # Run model for 10 seconds, just for display + state.randomInit() + moose.start( 0.1 ) # Run the model for 2 seconds. + state.settle() + + ''' + scale = 1.0 / ( 1e-15 * 6.022e23 ) + for x in ksolve.nVec[0]: + print x * scale, + # print ksolve.nVec[0] + print state.nIter, state.status, state.stateType, state.nNegEigenvalues, state.nPosEigenvalues, state.solutionStatus + ''' + moose.start( 20.0 ) # Run model for 10 seconds, just for display def main(): - # Schedule the whole lot - moose.setClock( 4, 0.1 ) # for the computational objects - moose.setClock( 5, 0.2 ) # clock for the solver - moose.setClock( 8, 1.0 ) # for the plots - # The wildcard uses # for single level, and ## for recursive. - #compartment = makeModel() - moose.loadModel( '../../genesis/M1719.g', '/model', 'ee' ) - compartment = moose.element( 'model/kinetics' ) - compartment.name = 'compartment' - ksolve = moose.Ksolve( '/model/compartment/ksolve' ) - stoich = moose.Stoich( '/model/compartment/stoich' ) - stoich.compartment = compartment - stoich.ksolve = ksolve - #ksolve.stoich = stoich - stoich.path = "/model/compartment/##" - state = moose.SteadyState( '/model/compartment/state' ) - moose.useClock( 5, '/model/compartment/ksolve', 'process' ) - moose.useClock( 8, '/model/graphs/#', 'process' ) + # Schedule the whole lot + moose.setClock( 4, 0.1 ) # for the computational objects + moose.setClock( 5, 0.2 ) # clock for the solver + moose.setClock( 8, 1.0 ) # for the plots + # The wildcard uses # for single level, and ## for recursive. + #compartment = makeModel() + moose.loadModel( '../../genesis/M1719.g', '/model', 'ee' ) + compartment = moose.element( 'model/kinetics' ) + compartment.name = 'compartment' + ksolve = moose.Ksolve( '/model/compartment/ksolve' ) + stoich = moose.Stoich( '/model/compartment/stoich' ) + stoich.compartment = compartment + stoich.ksolve = ksolve + #ksolve.stoich = stoich + stoich.path = "/model/compartment/##" + state = moose.SteadyState( '/model/compartment/state' ) + moose.useClock( 5, '/model/compartment/ksolve', 'process' ) + moose.useClock( 8, '/model/graphs/#', 'process' ) - moose.reinit() - state.stoich = stoich - #state.showMatrices() - state.convergenceCriterion = 1e-7 + moose.reinit() + state.stoich = stoich + #state.showMatrices() + state.convergenceCriterion = 1e-7 - for i in range( 0, 50 ): - getState( ksolve, state ) - - moose.start( 100.0 ) # Run the model for 100 seconds. + for i in range( 0, 50 ): + getState( ksolve, state ) + + moose.start( 100.0 ) # Run the model for 100 seconds. - b = moose.element( '/model/compartment/b' ) - c = moose.element( '/model/compartment/c' ) + b = moose.element( '/model/compartment/b' ) + c = moose.element( '/model/compartment/c' ) - # move most molecules over to b - b.conc = b.conc + c.conc * 0.95 - c.conc = c.conc * 0.05 - moose.start( 100.0 ) # Run the model for 100 seconds. + # move most molecules over to b + b.conc = b.conc + c.conc * 0.95 + c.conc = c.conc * 0.05 + moose.start( 100.0 ) # Run the model for 100 seconds. - # move most molecules back to a - c.conc = c.conc + b.conc * 0.95 - b.conc = b.conc * 0.05 - moose.start( 100.0 ) # Run the model for 100 seconds. + # move most molecules back to a + c.conc = c.conc + b.conc * 0.95 + b.conc = b.conc * 0.05 + moose.start( 100.0 ) # Run the model for 100 seconds. - # Iterate through all plots, dump their contents to data.plot. - displayPlots() + # Iterate through all plots, dump their contents to data.plot. + displayPlots() - quit() + quit() # Run the 'main' if this script is executed standalone. if __name__ == '__main__': diff --git a/moose-examples/tutorials/ChemicalBistables/mapkFB.py b/moose-examples/tutorials/ChemicalBistables/mapkFB.py index 7770f407a7743337c739246f4287909c9677b741..36c3d0d485af70f791fc354cda01e8c15176c1eb 100644 --- a/moose-examples/tutorials/ChemicalBistables/mapkFB.py +++ b/moose-examples/tutorials/ChemicalBistables/mapkFB.py @@ -13,6 +13,9 @@ import matplotlib.image as mpimg import pylab import numpy import sys +import os + +scriptDir = os.path.dirname( os.path.realpath( __file__ ) ) def main(): """ @@ -34,37 +37,39 @@ def main(): 'turn off' by setting the system calcium levels to zero for a while. This is a somewhat unphysiological manipulation! + """ + solver = "gsl" # Pick any of gsl, gssa, ee.. #solver = "gssa" # Pick any of gsl, gssa, ee.. - mfile = '../../genesis/acc35.g' - runtime = 2000.0 - if ( len( sys.argv ) == 2 ): - solver = sys.argv[1] - modelId = moose.loadModel( mfile, 'model', solver ) + mfile = os.path.join( scriptDir, '..', '..', 'genesis' , 'acc35.g' ) + runtime = 2000.0 + if ( len( sys.argv ) == 2 ): + solver = sys.argv[1] + modelId = moose.loadModel( mfile, 'model', solver ) # Increase volume so that the stochastic solver gssa # gives an interesting output compt = moose.element( '/model/kinetics' ) compt.volume = 5e-19 - moose.reinit() - moose.start( 500 ) + moose.reinit() + moose.start( 500 ) moose.element( '/model/kinetics/PDGFR/PDGF' ).concInit = 0.0001 - moose.start( 400 ) + moose.start( 400 ) moose.element( '/model/kinetics/PDGFR/PDGF' ).concInit = 0.0 - moose.start( 2000 ) + moose.start( 2000 ) moose.element( '/model/kinetics/Ca' ).concInit = 0.0 - moose.start( 500 ) + moose.start( 500 ) moose.element( '/model/kinetics/Ca' ).concInit = 0.00008 - moose.start( 2000 ) + moose.start( 2000 ) - # Display all plots. + # Display all plots. img = mpimg.imread( 'mapkFB.png' ) fig = plt.figure( figsize=(12, 10 ) ) png = fig.add_subplot( 211 ) imgplot = plt.imshow( img ) ax = fig.add_subplot( 212 ) - x = moose.wildcardFind( '/model/#graphs/conc#/#' ) + x = moose.wildcardFind( '/model/#graphs/conc#/#' ) t = numpy.arange( 0, x[0].vector.size, 1 ) * x[0].dt ax.plot( t, x[0].vector, 'b-', label=x[0].name ) ax.plot( t, x[1].vector, 'c-', label=x[1].name ) @@ -77,4 +82,4 @@ def main(): # Run the 'main' if this script is executed standalone. if __name__ == '__main__': - main() + main() diff --git a/moose-examples/tutorials/ChemicalBistables/propagationBis.py b/moose-examples/tutorials/ChemicalBistables/propagationBis.py index a4a5f9c67df13a0be87fed7bd1c961b7edee14a3..add79df3e7f84303055ecbb9ec778b3514e625ef 100644 --- a/moose-examples/tutorials/ChemicalBistables/propagationBis.py +++ b/moose-examples/tutorials/ChemicalBistables/propagationBis.py @@ -50,70 +50,70 @@ import matplotlib.image as mpimg import moose def makeModel(): - # create container for model - r0 = 1e-6 # m - r1 = 0.5e-6 # m. Note taper. - num = 200 - diffLength = 1e-6 # m - comptLength = num * diffLength # m - diffConst = 20e-12 # m^2/sec - concA = 1 # millimolar - diffDt = 0.02 # for the diffusion - chemDt = 0.2 # for the reaction + # create container for model + r0 = 1e-6 # m + r1 = 0.5e-6 # m. Note taper. + num = 200 + diffLength = 1e-6 # m + comptLength = num * diffLength # m + diffConst = 20e-12 # m^2/sec + concA = 1 # millimolar + diffDt = 0.02 # for the diffusion + chemDt = 0.2 # for the reaction mfile = '../../genesis/M1719.g' - model = moose.Neutral( 'model' ) - compartment = moose.CylMesh( '/model/kinetics' ) + model = moose.Neutral( 'model' ) + compartment = moose.CylMesh( '/model/kinetics' ) - # load in model + # load in model modelId = moose.loadModel( mfile, '/model', 'ee' ) - a = moose.element( '/model/kinetics/a' ) - b = moose.element( '/model/kinetics/b' ) - c = moose.element( '/model/kinetics/c' ) + a = moose.element( '/model/kinetics/a' ) + b = moose.element( '/model/kinetics/b' ) + c = moose.element( '/model/kinetics/c' ) ac = a.concInit bc = b.concInit cc = c.concInit - compartment.r0 = r0 - compartment.r1 = r1 - compartment.x0 = 0 - compartment.x1 = comptLength - compartment.diffLength = diffLength - assert( compartment.numDiffCompts == num ) + compartment.r0 = r0 + compartment.r1 = r1 + compartment.x0 = 0 + compartment.x1 = comptLength + compartment.diffLength = diffLength + assert( compartment.numDiffCompts == num ) - # Assign parameters + # Assign parameters for x in moose.wildcardFind( '/model/kinetics/##[ISA=PoolBase]' ): #print 'pools: ', x, x.name x.diffConst = diffConst - # Make solvers - ksolve = moose.Ksolve( '/model/kinetics/ksolve' ) - dsolve = moose.Dsolve( '/model/dsolve' ) + # Make solvers + ksolve = moose.Ksolve( '/model/kinetics/ksolve' ) + dsolve = moose.Dsolve( '/model/dsolve' ) # Set up clocks. - moose.setClock( 10, diffDt ) + moose.setClock( 10, diffDt ) for i in range( 11, 17 ): - moose.setClock( i, chemDt ) - - stoich = moose.Stoich( '/model/kinetics/stoich' ) - stoich.compartment = compartment - stoich.ksolve = ksolve - stoich.dsolve = dsolve - stoich.path = "/model/kinetics/##" - print 'dsolve.numPools, num = ', dsolve.numPools, num + moose.setClock( i, chemDt ) + + stoich = moose.Stoich( '/model/kinetics/stoich' ) + stoich.compartment = compartment + stoich.ksolve = ksolve + stoich.dsolve = dsolve + stoich.path = "/model/kinetics/##" + print(('dsolve.numPools, num = ', dsolve.numPools, num)) b.vec[num-1].concInit *= 1.01 # Break symmetry. def main(): runtime = 100 displayInterval = 2 - makeModel() - dsolve = moose.element( '/model/dsolve' ) - moose.reinit() - #moose.start( runtime ) # Run the model for 10 seconds. + makeModel() + dsolve = moose.element( '/model/dsolve' ) + moose.reinit() + #moose.start( runtime ) # Run the model for 10 seconds. - a = moose.element( '/model/kinetics/a' ) - b = moose.element( '/model/kinetics/b' ) - c = moose.element( '/model/kinetics/c' ) + a = moose.element( '/model/kinetics/a' ) + b = moose.element( '/model/kinetics/b' ) + c = moose.element( '/model/kinetics/c' ) img = mpimg.imread( 'propBis.png' ) #imgplot = plt.imshow( img ) @@ -143,7 +143,7 @@ def main(): timeLabel.set_text( "time = %d" % t ) fig.canvas.draw() - print 'Swapping concs of b and c in half the cylinder' + print('Swapping concs of b and c in half the cylinder') for i in range( b.numData/2 ): temp = b.vec[i].conc b.vec[i].conc = c.vec[i].conc @@ -159,10 +159,10 @@ def main(): fig.canvas.draw() print( "Hit 'enter' to exit" ) - raw_input() + eval(input()) # Run the 'main' if this script is executed standalone. if __name__ == '__main__': - main() + main() diff --git a/moose-examples/tutorials/ChemicalBistables/scaleVolumes.py b/moose-examples/tutorials/ChemicalBistables/scaleVolumes.py index dec2124712267cbaed24413008e7c9ed2079e357..ca9e8ce6b6ebe492c0a026f26797d19bd5757fb4 100644 --- a/moose-examples/tutorials/ChemicalBistables/scaleVolumes.py +++ b/moose-examples/tutorials/ChemicalBistables/scaleVolumes.py @@ -126,7 +126,7 @@ def main(): for vol in ( 1e-19, 1e-20, 1e-21, 3e-22, 1e-22, 3e-23, 1e-23 ): # Set the volume compt.volume = vol - print 'vol = ', vol, ', a.concInit = ', a.concInit, ', a.nInit = ', a.nInit + print(('vol = ', vol, ', a.concInit = ', a.concInit, ', a.nInit = ', a.nInit)) moose.reinit() moose.start( 100.0 ) # Run the model for 100 seconds. @@ -147,8 +147,8 @@ def main(): # Iterate through all plots, dump their contents to data.plot. displayPlots() pylab.show( block=False ) - print 'vol = ', vol, 'hit enter to go to next plot' - raw_input() + print(('vol = ', vol, 'hit enter to go to next plot')) + eval(input()) quit() diff --git a/moose-examples/tutorials/ChemicalBistables/simpleBis.py b/moose-examples/tutorials/ChemicalBistables/simpleBis.py index 346f0a4bc230c396eb42f03236d8b7909b7fc847..34e2510a463b894925ff8a0799b9c0d1814f7bc8 100644 --- a/moose-examples/tutorials/ChemicalBistables/simpleBis.py +++ b/moose-examples/tutorials/ChemicalBistables/simpleBis.py @@ -25,116 +25,116 @@ import moose import sys def makeModel(): - # create container for model - model = moose.Neutral( 'model' ) - compartment = moose.CubeMesh( '/model/compartment' ) - compartment.volume = 1e-21 - # the mesh is created automatically by the compartment - mesh = moose.element( '/model/compartment/mesh' ) - - # create molecules and reactions - a = moose.Pool( '/model/compartment/a' ) - b = moose.Pool( '/model/compartment/b' ) - c = moose.Pool( '/model/compartment/c' ) - enz1 = moose.Enz( '/model/compartment/b/enz1' ) - enz2 = moose.Enz( '/model/compartment/c/enz2' ) - cplx1 = moose.Pool( '/model/compartment/b/enz1/cplx' ) - cplx2 = moose.Pool( '/model/compartment/c/enz2/cplx' ) - reac = moose.Reac( '/model/compartment/reac' ) - - # connect them up for reactions - moose.connect( enz1, 'sub', a, 'reac' ) - moose.connect( enz1, 'prd', b, 'reac' ) - moose.connect( enz1, 'enz', b, 'reac' ) - moose.connect( enz1, 'cplx', cplx1, 'reac' ) - - moose.connect( enz2, 'sub', b, 'reac' ) - moose.connect( enz2, 'prd', a, 'reac' ) - moose.connect( enz2, 'enz', c, 'reac' ) - moose.connect( enz2, 'cplx', cplx2, 'reac' ) - - moose.connect( reac, 'sub', a, 'reac' ) - moose.connect( reac, 'prd', b, 'reac' ) - - # connect them up to the compartment for volumes - #for x in ( a, b, c, cplx1, cplx2 ): - # moose.connect( x, 'mesh', mesh, 'mesh' ) - - # Assign parameters - a.concInit = 1 - b.concInit = 0 - c.concInit = 0.01 - enz1.kcat = 0.4 - enz1.Km = 4 - enz2.kcat = 0.6 - enz2.Km = 0.01 - reac.Kf = 0.001 - reac.Kb = 0.01 - - # Create the output tables - graphs = moose.Neutral( '/model/graphs' ) - outputA = moose.Table ( '/model/graphs/concA' ) - outputB = moose.Table ( '/model/graphs/concB' ) - - # connect up the tables - moose.connect( outputA, 'requestOut', a, 'getConc' ); - moose.connect( outputB, 'requestOut', b, 'getConc' ); - - # Schedule the whole lot - moose.setClock( 4, 0.01 ) # for the computational objects - moose.setClock( 8, 1.0 ) # for the plots - # The wildcard uses # for single level, and ## for recursive. - moose.useClock( 4, '/model/compartment/##', 'process' ) - moose.useClock( 8, '/model/graphs/#', 'process' ) + # create container for model + model = moose.Neutral( 'model' ) + compartment = moose.CubeMesh( '/model/compartment' ) + compartment.volume = 1e-21 + # the mesh is created automatically by the compartment + mesh = moose.element( '/model/compartment/mesh' ) + + # create molecules and reactions + a = moose.Pool( '/model/compartment/a' ) + b = moose.Pool( '/model/compartment/b' ) + c = moose.Pool( '/model/compartment/c' ) + enz1 = moose.Enz( '/model/compartment/b/enz1' ) + enz2 = moose.Enz( '/model/compartment/c/enz2' ) + cplx1 = moose.Pool( '/model/compartment/b/enz1/cplx' ) + cplx2 = moose.Pool( '/model/compartment/c/enz2/cplx' ) + reac = moose.Reac( '/model/compartment/reac' ) + + # connect them up for reactions + moose.connect( enz1, 'sub', a, 'reac' ) + moose.connect( enz1, 'prd', b, 'reac' ) + moose.connect( enz1, 'enz', b, 'reac' ) + moose.connect( enz1, 'cplx', cplx1, 'reac' ) + + moose.connect( enz2, 'sub', b, 'reac' ) + moose.connect( enz2, 'prd', a, 'reac' ) + moose.connect( enz2, 'enz', c, 'reac' ) + moose.connect( enz2, 'cplx', cplx2, 'reac' ) + + moose.connect( reac, 'sub', a, 'reac' ) + moose.connect( reac, 'prd', b, 'reac' ) + + # connect them up to the compartment for volumes + #for x in ( a, b, c, cplx1, cplx2 ): + # moose.connect( x, 'mesh', mesh, 'mesh' ) + + # Assign parameters + a.concInit = 1 + b.concInit = 0 + c.concInit = 0.01 + enz1.kcat = 0.4 + enz1.Km = 4 + enz2.kcat = 0.6 + enz2.Km = 0.01 + reac.Kf = 0.001 + reac.Kb = 0.01 + + # Create the output tables + graphs = moose.Neutral( '/model/graphs' ) + outputA = moose.Table ( '/model/graphs/concA' ) + outputB = moose.Table ( '/model/graphs/concB' ) + + # connect up the tables + moose.connect( outputA, 'requestOut', a, 'getConc' ); + moose.connect( outputB, 'requestOut', b, 'getConc' ); + + # Schedule the whole lot + moose.setClock( 4, 0.01 ) # for the computational objects + moose.setClock( 8, 1.0 ) # for the plots + # The wildcard uses # for single level, and ## for recursive. + moose.useClock( 4, '/model/compartment/##', 'process' ) + moose.useClock( 8, '/model/graphs/#', 'process' ) def displayPlots(): - for x in moose.wildcardFind( '/model/graphs/conc#' ): - t = numpy.arange( 0, x.vector.size, 1 ) #sec - pylab.plot( t, x.vector, label=x.name ) - pylab.legend() - pylab.show() + for x in moose.wildcardFind( '/model/graphs/conc#' ): + t = numpy.arange( 0, x.vector.size, 1 ) #sec + pylab.plot( t, x.vector, label=x.name ) + pylab.legend() + pylab.show() def main(): solver = "gsl" - makeModel() + makeModel() if ( len ( sys.argv ) == 2 ): solver = sys.argv[1] - stoich = moose.Stoich( '/model/compartment/stoich' ) - stoich.compartment = moose.element( '/model/compartment' ) + stoich = moose.Stoich( '/model/compartment/stoich' ) + stoich.compartment = moose.element( '/model/compartment' ) if ( solver == 'gssa' ): - gsolve = moose.Gsolve( '/model/compartment/ksolve' ) - stoich.ksolve = gsolve + gsolve = moose.Gsolve( '/model/compartment/ksolve' ) + stoich.ksolve = gsolve else: - ksolve = moose.Ksolve( '/model/compartment/ksolve' ) - stoich.ksolve = ksolve - stoich.path = "/model/compartment/##" - #solver.method = "rk5" - #mesh = moose.element( "/model/compartment/mesh" ) - #moose.connect( mesh, "remesh", solver, "remesh" ) - moose.setClock( 5, 1.0 ) # clock for the solver - moose.useClock( 5, '/model/compartment/ksolve', 'process' ) + ksolve = moose.Ksolve( '/model/compartment/ksolve' ) + stoich.ksolve = ksolve + stoich.path = "/model/compartment/##" + #solver.method = "rk5" + #mesh = moose.element( "/model/compartment/mesh" ) + #moose.connect( mesh, "remesh", solver, "remesh" ) + moose.setClock( 5, 1.0 ) # clock for the solver + moose.useClock( 5, '/model/compartment/ksolve', 'process' ) - moose.reinit() - moose.start( 100.0 ) # Run the model for 100 seconds. + moose.reinit() + moose.start( 100.0 ) # Run the model for 100 seconds. - a = moose.element( '/model/compartment/a' ) - b = moose.element( '/model/compartment/b' ) + a = moose.element( '/model/compartment/a' ) + b = moose.element( '/model/compartment/b' ) - # move most molecules over to b - b.conc = b.conc + a.conc * 0.9 - a.conc = a.conc * 0.1 - moose.start( 100.0 ) # Run the model for 100 seconds. + # move most molecules over to b + b.conc = b.conc + a.conc * 0.9 + a.conc = a.conc * 0.1 + moose.start( 100.0 ) # Run the model for 100 seconds. - # move most molecules back to a - a.conc = a.conc + b.conc * 0.99 - b.conc = b.conc * 0.01 - moose.start( 100.0 ) # Run the model for 100 seconds. + # move most molecules back to a + a.conc = a.conc + b.conc * 0.99 + b.conc = b.conc * 0.01 + moose.start( 100.0 ) # Run the model for 100 seconds. - # Iterate through all plots, dump their contents to data.plot. - displayPlots() + # Iterate through all plots, dump their contents to data.plot. + displayPlots() - quit() + quit() # Run the 'main' if this script is executed standalone. if __name__ == '__main__': - main() + main() diff --git a/moose-examples/tutorials/ChemicalBistables/strongBis.py b/moose-examples/tutorials/ChemicalBistables/strongBis.py index db7299f764d1e740743a30e9f893cf482957564d..04d234bb8f49ba47ccd6287c24319423c92e49b7 100644 --- a/moose-examples/tutorials/ChemicalBistables/strongBis.py +++ b/moose-examples/tutorials/ChemicalBistables/strongBis.py @@ -15,66 +15,66 @@ import numpy import sys def main(): - """ - This example illustrates loading, and running a kinetic model - for a bistable system, defined in kkit format. - Defaults to the deterministic gsl method, you can pick the - stochastic one by + """ + This example illustrates loading, and running a kinetic model + for a bistable system, defined in kkit format. + Defaults to the deterministic gsl method, you can pick the + stochastic one by - ``python filename gssa`` + ``python filename gssa`` - The model starts out equally poised between sides **b** and **c**. - Then there is a small molecular 'tap' to push it over to **b**. - Then we apply a moderate push to show that it is now very stably in - this state. it takes a strong push to take it over to **c**. - Then it takes a strong push to take it back to **b**. - This is a good model to use as the basis for running stochastically - and examining how state stability is affected by changing volume. - """ + The model starts out equally poised between sides **b** and **c**. + Then there is a small molecular 'tap' to push it over to **b**. + Then we apply a moderate push to show that it is now very stably in + this state. it takes a strong push to take it over to **c**. + Then it takes a strong push to take it back to **b**. + This is a good model to use as the basis for running stochastically + and examining how state stability is affected by changing volume. + """ - solver = "gsl" # Pick any of gsl, gssa, ee.. - #solver = "gssa" # Pick any of gsl, gssa, ee.. - #moose.seed( 1234 ) # Needed if stochastic. - mfile = '../../genesis/M1719.g' - runtime = 100.0 - if ( len( sys.argv ) >= 2 ): + solver = "gsl" # Pick any of gsl, gssa, ee.. + #solver = "gssa" # Pick any of gsl, gssa, ee.. + #moose.seed( 1234 ) # Needed if stochastic. + mfile = '../../genesis/M1719.g' + runtime = 100.0 + if ( len( sys.argv ) >= 2 ): solver = sys.argv[1] - modelId = moose.loadModel( mfile, 'model', solver ) + modelId = moose.loadModel( mfile, 'model', solver ) # Increase volume so that the stochastic solver gssa # gives an interesting output compt = moose.element( '/model/kinetics' ) compt.volume = 0.2e-19 r = moose.element( '/model/kinetics/equil' ) - moose.reinit() - moose.start( runtime ) + moose.reinit() + moose.start( runtime ) r.Kf *= 1.1 # small tap to break symmetry - moose.start( runtime/10 ) + moose.start( runtime/10 ) r.Kf = r.Kb - moose.start( runtime ) + moose.start( runtime ) r.Kb *= 2.0 # Moderate push does not tip it back. - moose.start( runtime/10 ) + moose.start( runtime/10 ) r.Kb = r.Kf - moose.start( runtime ) + moose.start( runtime ) r.Kb *= 5.0 # Strong push does tip it over - moose.start( runtime/10 ) + moose.start( runtime/10 ) r.Kb = r.Kf - moose.start( runtime ) + moose.start( runtime ) r.Kf *= 5.0 # Strong push tips it back. - moose.start( runtime/10 ) + moose.start( runtime/10 ) r.Kf = r.Kb - moose.start( runtime ) + moose.start( runtime ) - # Display all plots. + # Display all plots. img = mpimg.imread( 'strongBis.png' ) fig = plt.figure( figsize=(12, 10 ) ) png = fig.add_subplot( 211 ) imgplot = plt.imshow( img ) ax = fig.add_subplot( 212 ) - x = moose.wildcardFind( '/model/#graphs/conc#/#' ) + x = moose.wildcardFind( '/model/#graphs/conc#/#' ) dt = moose.element( '/clock' ).tickDt[18] t = numpy.arange( 0, x[0].vector.size, 1 ) * dt ax.plot( t, x[0].vector, 'r-', label=x[0].name ) @@ -87,4 +87,4 @@ def main(): # Run the 'main' if this script is executed standalone. if __name__ == '__main__': - main() + main() diff --git a/moose-examples/tutorials/ChemicalOscillators/TuringOneDim.py b/moose-examples/tutorials/ChemicalOscillators/TuringOneDim.py index 1860ceea32ee61e89b659f0359285c436032c006..4a202a639b7559e62af661627c3bbb1b3c46487f 100644 --- a/moose-examples/tutorials/ChemicalOscillators/TuringOneDim.py +++ b/moose-examples/tutorials/ChemicalOscillators/TuringOneDim.py @@ -160,7 +160,7 @@ def main(): fig.canvas.draw() print( "Hit 'enter' to exit" ) - raw_input() + eval(input()) diff --git a/moose-examples/tutorials/ExcInhNet/ExcInhNet_Ostojic2014_Brunel2000.py b/moose-examples/tutorials/ExcInhNet/ExcInhNet_Ostojic2014_Brunel2000.py index aa35d46965f8163d2866fdaaf758c067e8b6862b..14a205589352511411a89f10e9b14652f532fa08 100644 --- a/moose-examples/tutorials/ExcInhNet/ExcInhNet_Ostojic2014_Brunel2000.py +++ b/moose-examples/tutorials/ExcInhNet/ExcInhNet_Ostojic2014_Brunel2000.py @@ -159,11 +159,11 @@ class ExcInhNetBase: t1 = time.time() print('reinit MOOSE') moose.reinit() - print('reinit time t = ', time.time() - t1) + print(('reinit time t = ', time.time() - t1)) t1 = time.time() print('starting') moose.start(self.simtime) - print('runtime, t = ', time.time() - t1) + print(('runtime, t = ', time.time() - t1)) if plotif: self._plot() diff --git a/moose-examples/tutorials/ExcInhNet/ExcInhNet_Ostojic2014_Brunel2000_brian.py b/moose-examples/tutorials/ExcInhNet/ExcInhNet_Ostojic2014_Brunel2000_brian.py index 2c9859b3d3f4dd0c6e95a49a2d1aa8e95e7d454d..c67de7b37732cc84dad5799ef8f98810a34333d3 100644 --- a/moose-examples/tutorials/ExcInhNet/ExcInhNet_Ostojic2014_Brunel2000_brian.py +++ b/moose-examples/tutorials/ExcInhNet/ExcInhNet_Ostojic2014_Brunel2000_brian.py @@ -107,12 +107,12 @@ con_i = Synapses(Pi,neurons,'',pre='v_post+=-g*J',clock=clocksyn) random.seed(100) # set seed for reproducibility of simulations for i in range(0,N): ## draw excC number of neuron indices out of NmaxExc neurons - preIdxs = random.sample(range(NE),excC) + preIdxs = random.sample(list(range(NE)),excC) ## connect these presynaptically to i-th post-synaptic neuron for synnum,preIdx in enumerate(preIdxs): con_e[preIdx,i]=True ## draw inhC=C-excC number of neuron indices out of inhibitory neurons - preIdxs = random.sample(range(N-NE),C-excC) + preIdxs = random.sample(list(range(N-NE)),C-excC) ## connect these presynaptically to i-th post-synaptic neuron for synnum,preIdx in enumerate(preIdxs): con_i[preIdx,i]=True @@ -135,21 +135,21 @@ popm_e = PopulationRateMonitor(Pe,bin=1.*ms) popm_i = PopulationRateMonitor(Pi,bin=1.*ms) # voltage monitor -sm_e_vm = StateMonitor(Pe,'v',record=range(10),clock=clocknrn) +sm_e_vm = StateMonitor(Pe,'v',record=list(range(10)),clock=clocknrn) # ########################################### # Simulate # ########################################### -print "Setup complete, running for",simtime,"at dt =",dt,"s." +print(("Setup complete, running for",simtime,"at dt =",dt,"s.")) t1 = time.time() run(simtime,report='text') -print 'inittime + runtime, t = ', time.time() - t1 +print(('inittime + runtime, t = ', time.time() - t1)) -print "For g,J =",g,J,"mean exc rate =",\ - sm_e.nspikes/float(Nmon_exc)/(simtime/second),'Hz.' -print "For g,J =",g,J,"mean inh rate =",\ - sm_i.nspikes/float(Nmon-Nmon_exc)/(simtime/second),'Hz.' +print(("For g,J =",g,J,"mean exc rate =",\ + sm_e.nspikes/float(Nmon_exc)/(simtime/second),'Hz.')) +print(("For g,J =",g,J,"mean inh rate =",\ + sm_i.nspikes/float(Nmon-Nmon_exc)/(simtime/second),'Hz.')) # ########################################### # Analysis functions diff --git a/moose-examples/tutorials/ExcInhNet/ExcInhNet_Ostojic2014_Brunel2000_brian2.py b/moose-examples/tutorials/ExcInhNet/ExcInhNet_Ostojic2014_Brunel2000_brian2.py index c4c777014ad8b966e5ff57a9c3754b68c809441c..8f854a6d746f9e42e394fd83ae86adb96da72204 100644 --- a/moose-examples/tutorials/ExcInhNet/ExcInhNet_Ostojic2014_Brunel2000_brian2.py +++ b/moose-examples/tutorials/ExcInhNet/ExcInhNet_Ostojic2014_Brunel2000_brian2.py @@ -107,9 +107,9 @@ conn_i = [] conn_j = [] for j in range(0,N): ## draw excC number of neuron indices out of NmaxExc neurons - preIdxsE = random.sample(range(NE),excC) + preIdxsE = random.sample(list(range(NE)),excC) ## draw inhC=C-excC number of neuron indices out of inhibitory neurons - preIdxsI = random.sample(range(NE,N),C-excC) + preIdxsI = random.sample(list(range(NE,N)),C-excC) ## connect these presynaptically to i-th post-synaptic neuron ## choose the synapses object based on whether post-syn nrn is exc or inh conn_i += preIdxsE @@ -132,17 +132,17 @@ sm = SpikeMonitor(P) popm = PopulationRateMonitor(P) # voltage monitor -sm_vm = StateMonitor(P,'v',record=range(10)+range(NE,NE+10)) +sm_vm = StateMonitor(P,'v',record=list(range(10))+list(range(NE,NE+10))) # ########################################### # Simulate # ########################################### -print "Setup complete, running for",simtime,"at dt =",dt,"s." +print(("Setup complete, running for",simtime,"at dt =",dt,"s.")) t1 = time.time() run(simtime,report='text') device.build(directory='output', compile=True, run=True, debug=False) -print 'inittime + runtime, t = ', time.time() - t1 +print(('inittime + runtime, t = ', time.time() - t1)) #print "For g,J =",g,J,"mean exc rate =",\ # sm_e.num_spikes/float(NE)/(simtime/second),'Hz.' @@ -201,7 +201,7 @@ title(str(N)+" exc & inh neurons") xlim([0,simtime/second]) xlabel("") -print "plotting firing rates" +print("plotting firing rates") subplot(232) # firing rates timeseries = arange(0,simtime/second+dt,dt) @@ -227,7 +227,7 @@ ylim(0,300) xlabel("Time (s)") ylabel("Hz") -print "plotting pop firing rates" +print("plotting pop firing rates") # Population firing rates subplot(233) timeseries = arange(0,simtime/second,dt) diff --git a/moose-examples/tutorials/ExcInhNet/ExcInhNet_Ostojic2014_Brunel2000_brian2_slow_2pops_4syns.py b/moose-examples/tutorials/ExcInhNet/ExcInhNet_Ostojic2014_Brunel2000_brian2_slow_2pops_4syns.py index 92b8f12230f9cad88e38809d3431f4d621b98411..dccfd6f51a594981566dd6a51ee5a6dc6fc51bea 100644 --- a/moose-examples/tutorials/ExcInhNet/ExcInhNet_Ostojic2014_Brunel2000_brian2_slow_2pops_4syns.py +++ b/moose-examples/tutorials/ExcInhNet/ExcInhNet_Ostojic2014_Brunel2000_brian2_slow_2pops_4syns.py @@ -108,13 +108,13 @@ con_ii = Synapses(Pi,Pi,'',pre='v_post+=-g*J') #con_i.connect_random(sparseness=sparseness_i) ## Connections from some Exc/Inh neurons to each neuron random.seed(100) # set seed for reproducibility of simulations -print "Creating connections (very slow, use the optimized script)" +print("Creating connections (very slow, use the optimized script)") for i in range(0,N): - if i%100==0: print "Connecting post syn nrn",i + if i%100==0: print(("Connecting post syn nrn",i)) ## draw excC number of neuron indices out of NmaxExc neurons - preIdxsE = random.sample(range(NE),excC) + preIdxsE = random.sample(list(range(NE)),excC) ## draw inhC=C-excC number of neuron indices out of inhibitory neurons - preIdxsI = random.sample(range(N-NE),C-excC) + preIdxsI = random.sample(list(range(N-NE)),C-excC) ## connect these presynaptically to i-th post-synaptic neuron ## choose the synapses object based on whether post-syn nrn is exc or inh if i<NE: @@ -141,21 +141,21 @@ popm_e = PopulationRateMonitor(Pe) popm_i = PopulationRateMonitor(Pi) # voltage monitor -sm_e_vm = StateMonitor(Pe,'v',record=range(10)) +sm_e_vm = StateMonitor(Pe,'v',record=list(range(10))) # ########################################### # Simulate # ########################################### -print "Setup complete, running for",simtime,"at dt =",dt,"s." +print(("Setup complete, running for",simtime,"at dt =",dt,"s.")) t1 = time.time() run(simtime,report='text') -print 'inittime + runtime, t = ', time.time() - t1 +print(('inittime + runtime, t = ', time.time() - t1)) -print "For g,J =",g,J,"mean exc rate =",\ - sm_e.num_spikes/float(NE)/(simtime/second),'Hz.' -print "For g,J =",g,J,"mean inh rate =",\ - sm_i.num_spikes/float(NI)/(simtime/second),'Hz.' +print(("For g,J =",g,J,"mean exc rate =",\ + sm_e.num_spikes/float(NE)/(simtime/second),'Hz.')) +print(("For g,J =",g,J,"mean inh rate =",\ + sm_i.num_spikes/float(NI)/(simtime/second),'Hz.')) # ########################################### # Analysis functions @@ -214,7 +214,7 @@ xlim([0,simtime/second]) title(str(NI)+" inh neurons") subplot(232) -print "plotting firing rates" +print("plotting firing rates") # firing rates timeseries = arange(0,simtime/second+dt,dt) num_to_plot = 10 @@ -239,7 +239,7 @@ ylim(0,300) xlabel("Time (s)") ylabel("Hz") -print "plotting pop firing rates" +print("plotting pop firing rates") # Population firing rates subplot(233) timeseries = arange(0,simtime/second,dt) diff --git a/moose-examples/tutorials/ExcInhNetCaPlasticity/ExcInhNet_HigginsGraupnerBrunel2014.py b/moose-examples/tutorials/ExcInhNetCaPlasticity/ExcInhNet_HigginsGraupnerBrunel2014.py index 28f7cac23bafba27e0ec18d39dbc0d59d424ffa6..1340067d89d02122cc3d333469cdb6fbbaabc5c4 100644 --- a/moose-examples/tutorials/ExcInhNetCaPlasticity/ExcInhNet_HigginsGraupnerBrunel2014.py +++ b/moose-examples/tutorials/ExcInhNetCaPlasticity/ExcInhNet_HigginsGraupnerBrunel2014.py @@ -241,11 +241,11 @@ class ExcInhNetBase: t1 = time.time() print('reinit MOOSE -- takes a while ~20s.') moose.reinit() - print('reinit time t = ', time.time() - t1) + print(('reinit time t = ', time.time() - t1)) t1 = time.time() print('starting run ...') moose.start(self.simtime) - print('runtime, t = ', time.time() - t1) + print(('runtime, t = ', time.time() - t1)) if plotif: self._plot() diff --git a/moose-examples/tutorials/Rdesigneur/rdes_ex3.2.py b/moose-examples/tutorials/Rdesigneur/rdes_ex3.2.py index fc453ebdbbc876ca1d00253b8dfccbf9a76e6e95..e91f7898249c78688016dcb98c0e547b7101b430 100644 --- a/moose-examples/tutorials/Rdesigneur/rdes_ex3.2.py +++ b/moose-examples/tutorials/Rdesigneur/rdes_ex3.2.py @@ -62,7 +62,7 @@ rdes = rd.rdesigneur( rdes.buildModel() for i in moose.wildcardFind( "/model/elec/#/Na" ): - print i.parent.name, i.Gbar + print(i.parent.name, i.Gbar) moose.reinit() diff --git a/moose-examples/unsorted/ksolve_with_heavy_load.py b/moose-examples/unsorted/ksolve_with_heavy_load.py index f7bbd62cfcf3c47c32aedbb28e21189a4081ac39..5eff870ecfa2b0101517e130666d41e586a6a3d7 100644 --- a/moose-examples/unsorted/ksolve_with_heavy_load.py +++ b/moose-examples/unsorted/ksolve_with_heavy_load.py @@ -35,7 +35,7 @@ def add_table(elem): def plot( numPlots ): global records_ - toPlots = records_.keys()[0:numPlots] + toPlots = list(records_.keys())[0:numPlots] newPlots = {} for i in toPlots: newPlots[i] = records_[i] diff --git a/moose-examples/util/moogli_viewer.py b/moose-examples/util/moogli_viewer.py index f48330c8746c84372641de5998d3b9c071f1fb99..ec1b71ccf7e77abb9e7920d2b4542d445098d5f9 100644 --- a/moose-examples/util/moogli_viewer.py +++ b/moose-examples/util/moogli_viewer.py @@ -38,12 +38,12 @@ class MorphologyEditor(moogli.MorphologyViewer): self._timer = QtCore.QTimer(self) def start(self): - self._timer.timeout.connect(self.next) + self._timer.timeout.connect(self.__next__) self._timer.start(0) @QtCore.pyqtSlot() def show(self): - self._timer.timeout.connect(self.next) + self._timer.timeout.connect(self.__next__) super(MorphologyEditor, self).show() self._timer.start(0) @@ -52,7 +52,7 @@ class MorphologyEditor(moogli.MorphologyViewer): self._timer.stop() super(MorphologyEditor, self).hide() - def next(self): + def __next__(self): self.frame() info_id = self.select_info.get_id() info_event = self.select_info.get_event_type() @@ -175,7 +175,7 @@ class MoogliViewer(QWidget): self.morphology = self.createMorphology(self.geometry) self.morphology.set_compartment_order( - map(lambda x : x.path, self.compartmentOrder) + [x.path for x in self.compartmentOrder] ) self.vms = np.empty(len(self.compartmentOrder), dtype=np.float, order='C') diff --git a/moose-examples/util/pymoose.py b/moose-examples/util/pymoose.py index bea52516c96b6c182cab23989b1beb8db0830823..735883f388657e019553eb66d4014c6cbe0ac93d 100644 --- a/moose-examples/util/pymoose.py +++ b/moose-examples/util/pymoose.py @@ -34,12 +34,12 @@ def listmsg(pymoose_object): """Print a list of the messages on this object. """ - print 'Incoming messages:' + print('Incoming messages:') for msg in pymoose_object.inMessages(): - print msg - print 'Outgoing messages:' + print(msg) + print('Outgoing messages:') for msg in pymoose_object.outMessages(): - print msg + print(msg) # # pymoose.py ends here