if simConfigName.find('(') >= 0: simConfigName = simConfigName[0:simConfigName. find('(')] for dataStore in simData.getAllLoadedDataStores(): ds = simData.getDataSet( dataStore.getCellSegRef(), dataStore.getVariable(), False) if not plotVoltageOnly or dataStore.getVariable( ) == SimPlot.VOLTAGE: if not plotSomaOnly or dataStore.getAssumedSegmentId( ) == 0: plotFrame = PlotManager.getPlotterFrame("Behaviour of "+dataStore.getVariable() \ +" on: %s for sim config: %s"%(str(simulators), simConfigName)) plotFrame.addDataSet(ds) except: print "Error analysing simulation data from: %s" % simDir.getCanonicalPath( ) print sys.exc_info() for simConfigName in simConfigs: frame = PlotManager.getPlotterFrame("Times of " + simConfigName) frame.setKeepDataSetColours(True) for dsRef in allSpikeTimeDataSets.keys(): if simConfigName in dsRef:
def testAll(argv=None): if argv is None: argv = sys.argv print "Loading project from "+ projFile.getCanonicalPath() simManager = nc.SimulationManager(projFile, numConcurrentSims = numConcurrentSims, verbose = verbose) ### Change num in each cell group simManager.project.cellGroupsInfo.getCellPackingAdapter("lg1").setMaxNumberCells(numCells1) simManager.project.cellGroupsInfo.getCellPackingAdapter("lg2").setMaxNumberCells(numCells2) allSims = simManager.runMultipleSims(simConfigs = simConfigs, simDt = simDt, simDuration = simDuration, simulators = simulators, runInBackground = runInBackground, varTimestepNeuron = varTimestepNeuron, mpiConfigs = mpiConfigs, suggestedRemoteRunTime = suggestedRemoteRunTime, simRefGlobalPrefix = simAllPrefix, runSims = runSims, maxElecLens = multipleRuns, saveAsHdf5 = saveAsHdf5, saveOnlySpikes = saveOnlySpikes, runMode = runMode) while (len(simManager.allRunningSims)>0): print "Waiting for the following sims to finish: "+str(simManager.allRunningSims) time.sleep(5) # wait a while... simManager.updateSimsRunning() times = [] procNums = [] for sim in allSims: simDir = File(projFile.getParentFile(), "/simulations/"+sim) try: simData = SimulationData(simDir) simData.initialise() simTime = simData.getSimulationProperties().getProperty("RealSimulationTime") print "Simulation: %s took %s seconds"%(sim, simTime) times.append(float(simTime)) paraConfig = simData.getSimulationProperties().getProperty("Parallel configuration") print paraConfig numProc = int(paraConfig[max(paraConfig.find(" host, ")+7, paraConfig.find(" hosts, ")+8):paraConfig.find(" processor")]) procNums.append(numProc) except: print "Error analysing simulation data from: %s"%simDir.getCanonicalPath() print sys.exc_info() print times print procNums ''' import matplotlib.pyplot as plt lines = plt.loglog(times, procNums, 'r:') plt.ylabel('Simulation time') plt.xlabel('Number of processors') plt.show()''' from ucl.physiol.neuroconstruct.gui.plotter import PlotManager from ucl.physiol.neuroconstruct.gui.plotter import PlotCanvas from ucl.physiol.neuroconstruct.dataset import DataSet plotFrame = PlotManager.getPlotterFrame("Time for simulation run on different numbers of processors", 0, 1) plotFrame.setViewMode(PlotCanvas.INCLUDE_ORIGIN_VIEW) info = "Simulation times for: "+str(procNums) dataSet = DataSet(info, info, "#", "s", "Number of processors", "Simulation time") dataSet.setGraphFormat(PlotCanvas.USE_CIRCLES_FOR_PLOT) for i in range(len(times)): #dataSet.addPoint(procNums[i],times[i]*procNums[i]) dataSet.addPoint(procNums[i],times[i]) plotFrame.addDataSet(dataSet)
if plotSims: simConfigName = simData.getSimulationProperties().getProperty("Sim Config") if simConfigName.find('(')>=0: simConfigName = simConfigName[0:simConfigName.find('(')] for dataStore in simData.getAllLoadedDataStores(): ds = simData.getDataSet(dataStore.getCellSegRef(), dataStore.getVariable(), False) if not plotVoltageOnly or dataStore.getVariable() == SimPlot.VOLTAGE: if not plotSomaOnly or dataStore.getAssumedSegmentId() == 0: plotFrame = PlotManager.getPlotterFrame("Behaviour of "+dataStore.getVariable() \ +" on: %s for sim config: %s"%(str(simulators), simConfigName)) plotFrame.addDataSet(ds) except: print "Error analysing simulation data from: %s"%simDir.getCanonicalPath() print sys.exc_info() for simConfigName in simConfigs: frame = PlotManager.getPlotterFrame("Times of "+simConfigName) frame.setKeepDataSetColours(True)
def testAll(argv=None): if argv is None: argv = sys.argv print "Loading project from "+ projFile.getCanonicalPath() simManager = nc.SimulationManager(projFile, numConcurrentSims = numConcurrentSims, verbose = verbose) ### Change num in each cell group densityGrC = 1.90e6 densityMF = 6.6e5 densityGoC = 4607 totDens = densityGrC + densityMF + densityGoC numMF = int(targetNum * densityMF/totDens) numGoC = int(targetNum * densityGoC/totDens) numGrC = targetNum - numMF - numGoC vol = targetNum/(totDens*1e-9) height = 150 side = math.sqrt(vol/height) info = "Number in %fx%fx%i box (vol: %f mm^3): GrC: %i, MF: %i, GoC: %i, Total: %i"%(side, side, height, vol*1e-9,numGrC, numMF,numGoC, (numGrC +numMF +numGoC)) print info SimulationsInfo.addExtraSimProperty("summary", info) region3D = simManager.project.regionsInfo.getRegionObject("TestGranCellVolume") region3D.setParameter(region3D.WIDTH_PARAM, side) region3D.setParameter(region3D.HEIGHT_PARAM, height) region3D.setParameter(region3D.DEPTH_PARAM, side) simManager.project.cellGroupsInfo.getCellPackingAdapter("TestScalingGrC").setMaxNumberCells(numGrC) simManager.project.cellGroupsInfo.getCellPackingAdapter("TestScalingGoC").setMaxNumberCells(numGoC) simManager.project.cellGroupsInfo.getCellPackingAdapter("TestScalingMF").setMaxNumberCells(numMF) ######simManager.project.cellGroupsInfo.getCellPackingAdapter("lg2").setMaxNumberCells(numCells2) allSims = simManager.runMultipleSims(simConfigs = simConfigs, simDt = simDt, simDuration = simDuration, simulators = simulators, runInBackground = runInBackground, varTimestepNeuron = varTimestepNeuron, mpiConfigs = mpiConfigs, suggestedRemoteRunTime = suggestedRemoteRunTime, simRefGlobalPrefix = simAllPrefix, runSims = runSims, maxElecLens = multipleRuns, saveAsHdf5 = saveAsHdf5, saveOnlySpikes = saveOnlySpikes, runMode = runMode) while (len(simManager.allRunningSims)>0): print "Waiting for the following sims to finish: "+str(simManager.allRunningSims) time.sleep(5) # wait a while... simManager.updateSimsRunning() times = [] procNums = [] for sim in allSims: simDir = File(projFile.getParentFile(), "/simulations/"+sim) try: simData = SimulationData(simDir) simData.initialise() simTime = simData.getSimulationProperties().getProperty("RealSimulationTime") print "Simulation: %s took %s seconds"%(sim, simTime) times.append(float(simTime)) paraConfig = simData.getSimulationProperties().getProperty("Parallel configuration") print paraConfig numProc = int(paraConfig[max(paraConfig.find(" host, ")+7, paraConfig.find(" hosts, ")+8):paraConfig.find(" processor")]) procNums.append(numProc) except: print "Error analysing simulation data from: %s"%simDir.getCanonicalPath() print sys.exc_info() print times print procNums ''' import matplotlib.pyplot as plt lines = plt.loglog(times, procNums, 'r:') plt.ylabel('Simulation time') plt.xlabel('Number of processors') plt.show()''' from ucl.physiol.neuroconstruct.gui.plotter import PlotManager from ucl.physiol.neuroconstruct.gui.plotter import PlotCanvas from ucl.physiol.neuroconstruct.dataset import DataSet plotFrame = PlotManager.getPlotterFrame("Time for simulation run on different numbers of processors", 0, 1) plotFrame.setViewMode(PlotCanvas.INCLUDE_ORIGIN_VIEW) info = "Simulation times for: "+str(procNums) dataSet = DataSet(info, info, "#", "s", "Number of processors", "Simulation time") dataSet.setGraphFormat(PlotCanvas.USE_CIRCLES_FOR_PLOT) for i in range(len(times)): dataSet.addPoint(procNums[i],times[i]*procNums[i]) #dataSet.addPoint(procNums[i],times[i]) plotFrame.addDataSet(dataSet)
################################################# from ucl.physiol.neuroconstruct.project import ProjectManager print 'Loading project file: ', projFile.getAbsolutePath() pm = ProjectManager() project = pm.loadProject(projFile) print 'Successfully loaded project: ', project.getProjectName() simDir = File(projFile.getParentFile(), "/simulations/"+simRef) print print "--- Reloading data from simulation in directory: %s"%simDir.getCanonicalPath() plotFrame = PlotManager.getPlotterFrame("All voltage traces from simulation: "+simRef, False) try: simData = SimulationData(simDir) simData.initialise() volt_traces = simData.getCellSegRefs(True) for trace in volt_traces: ds = simData.getDataSet(trace, SimPlot.VOLTAGE, False) plotFrame.addDataSet(ds) except: print "Error analysing simulation data from: %s"%simDir.getCanonicalPath() print exc_info() plotFrame.setVisible(True)
if plotSims: for dataStore in simData.getAllLoadedDataStores(): ds = simData.getDataSet(dataStore.getCellSegRef(), dataStore.getVariable(), False) print dataStore.getCellSegRef() if cellsegRefs.has_key(dataStore.getCellSegRef()): ds.setGraphColour(cellsegRefs[dataStore.getCellSegRef()]) plotFrame = PlotManager.getPlotterFrame("Behaviour of "+dataStore.getVariable() \ +" on: %s for simulation ref: %s"%(sim, simRef)) plotFrame.setKeepDataSetColours(True) plotFrame.addDataSet(ds) except: print "Error analysing simulation data from: %s"%simDir.getCanonicalPath() print sys.exc_info()
def generateF_ICurve(self, projFile, simulator, simConfig, preStimAmp, preStimDel, preStimDur, stimAmpLow, stimAmpInc, stimAmpHigh, stimDel, stimDur, simDuration, analyseStartTime, analyseStopTime, analyseThreshold, maxNumSimultaneousSims = 4): # Load neuroConstruct project print "Loading project from file: " + projFile.getAbsolutePath()+", exists: "+ str(projFile.exists()) pm = ProjectManager() self.myProject = pm.loadProject(projFile) self.simulator = simulator simConfig = self.myProject.simConfigInfo.getSimConfig(simConfig) simConfig.setSimDuration(simDuration) pm.doGenerate(simConfig.getName(), self.neuroConstructSeed) while pm.isGenerating(): print "Waiting for the project to be generated with Simulation Configuration: "+str(simConfig) time.sleep(2) numGenerated = self.myProject.generatedCellPositions.getNumberInAllCellGroups() print "Number of cells generated: " + str(numGenerated) simReferences = {} if numGenerated > 0: print "Generating scripts for simulator: %s..."%simulator if simulator == 'NEURON': self.myProject.neuronFileManager.setQuitAfterRun(1) # Remove this line to leave the NEURON sim windows open after finishing self.myProject.neuronSettings.setCopySimFiles(1) # 1 copies hoc/mod files to PySim_0 etc. and will allow multiple sims to run at once self.myProject.neuronSettings.setGraphicsMode(0) # 0 hides graphs during execution if simulator == 'GENESIS': self.myProject.genesisFileManager.setQuitAfterRun(1) # Remove this line to leave the NEURON sim windows open after finishing self.myProject.genesisSettings.setCopySimFiles(1) # 1 copies hoc/mod files to PySim_0 etc. and will allow multiple sims to run at once self.myProject.genesisSettings.setGraphicsMode(0) # 0 hides graphs during execution stimAmp = stimAmpLow while stimAmp <= stimAmpHigh: while (len(self.simsRunning)>=maxNumSimultaneousSims): print "Sims currently running: "+str(self.simsRunning) print "Waiting..." time.sleep(3) # wait a while... self.updateSimsRunning() simRef = "PySim_"+str(float(stimAmp)) print "Going to run simulation: "+simRef ######## Adjusting the amplitude of the current clamp ############### # preStim = self.myProject.elecInputInfo.getStim(simConfig.getInputs().get(0)) preStim = self.myProject.elecInputInfo.getStim("Input_3") preStim.setAmp(NumberGenerator(preStimAmp)) preStim.setDel(NumberGenerator(preStimDel)) preStim.setDur(NumberGenerator(preStimDur)) self.myProject.elecInputInfo.updateStim(preStim) # stim = self.myProject.elecInputInfo.getStim(simConfig.getInputs().get(1)) stim = self.myProject.elecInputInfo.getStim("Input_4") stim.setAmp(NumberGenerator(stimAmp)) stim.setDel(NumberGenerator(stimDel)) stim.setDur(NumberGenerator(stimDur)) self.myProject.elecInputInfo.updateStim(stim) print "Next stim: "+ str(stim) self.myProject.simulationParameters.setReference(simRef) if simulator == "NEURON": self.myProject.neuronFileManager.generateTheNeuronFiles(simConfig, None, NeuronFileManager.RUN_HOC, self.simulatorSeed) print "Generated NEURON files for: "+simRef compileProcess = ProcessManager(self.myProject.neuronFileManager.getMainHocFile()) compileSuccess = compileProcess.compileFileWithNeuron(0,0) print "Compiled NEURON files for: "+simRef if compileSuccess: pm.doRunNeuron(simConfig) print "Set running simulation: "+simRef self.simsRunning.append(simRef) if simulator == "GENESIS": compartmentalisation = GenesisCompartmentalisation() self.myProject.genesisFileManager.generateTheGenesisFiles(simConfig, None, compartmentalisation, self.simulatorSeed) print "Generated GENESIS files for: "+simRef pm.doRunGenesis(simConfig) print "Set running simulation: "+simRef self.simsRunning.append(simRef) time.sleep(1) # Wait for sim to be kicked off simReferences[simRef] = stimAmp stimAmp = stimAmp +stimAmpInc print print "Finished running "+str(len(simReferences))+" simulations for project "+ projFile.getAbsolutePath() print "These can be loaded and replayed in the previous simulation browser in the GUI" print while (len(self.simsRunning)>0): print "Sims currently running: "+str(self.simsRunning) print "Waiting..." time.sleep(4) # wait a while... self.updateSimsRunning() #simReferences = {'PySim_0.3':0.3,'PySim_0.4':0.4,'PySim_0.5':0.5} plotFrameFI = PlotManager.getPlotterFrame("F-I curve from project: "+str(self.myProject.getProjectFile())+" on "+simulator , 1, 1) plotFrameVolts = PlotManager.getPlotterFrame("VoltageTraces from project: "+str(self.myProject.getProjectFile())+" on "+simulator , 1, 1) plotFrameFI.setViewMode(PlotCanvas.INCLUDE_ORIGIN_VIEW) info = "F-I curve for Simulation Configuration: "+str(simConfig) dataSet = DataSet(info, info, "nA", "Hz", "Current injected", "Firing frequency") dataSet.setGraphFormat(PlotCanvas.USE_CIRCLES_FOR_PLOT) simList = simReferences.keys() simList.sort() for sim in simList: simDir = File(projFile.getParentFile(), "/neuroConstruct/models/Dan_GranCell/simulations/"+sim) print print "--- Reloading data from simulation in directory: %s"%simDir.getCanonicalPath() try: simData = SimulationData(simDir) simData.initialise() print "Data loaded: " print simData.getAllLoadedDataStores() times = simData.getAllTimes() cellSegmentRef = simConfig.getCellGroups().get(0)+"_0" volts = simData.getVoltageAtAllTimes(cellSegmentRef) traceInfo = "Voltage at: %s in simulation: %s"%(cellSegmentRef, sim) dataSetV = DataSet(traceInfo, traceInfo, "mV", "ms", "Membrane potential", "Time") for i in range(len(times)): dataSetV.addPoint(times[i], volts[i]) plotFrameVolts.addDataSet(dataSetV) spikeTimes = SpikeAnalyser.getSpikeTimes(volts, times, analyseThreshold, analyseStartTime, analyseStopTime) stimAmp = simReferences[sim] print "Number of spikes at %f nA in sim %s: %i"%(stimAmp, sim, len(spikeTimes)) avgFreq = 0 if len(spikeTimes)>1: avgFreq = len(spikeTimes)/ ((analyseStopTime - analyseStartTime)/1000.0) dataSet.addPoint(stimAmp,avgFreq) except: print "Error analysing simulation data from: %s"%simDir.getCanonicalPath() print sys.exc_info()[0] plotFrameFI.addDataSet(dataSet)
if compileSuccess: pm.doRunNeuron(simConfig) print "Set running simulation: "+simRef simsRunning.append(simRef) time.sleep(1) # Wait for sim to be kicked off print print "Finished running "+str(numSimulationsToRun)+" simulations for project "+ projFile.getAbsolutePath() print "These can be loaded and replayed in the previous simulation browser in the GUI" print ######## Generating a current versus firing rate plot ####### plotFrameFI = PlotManager.getPlotterFrame("F-I curve from project: "+str(myProject.getProjectFile()) , 1, 1) plotFrameFI.setViewMode(PlotCanvas.INCLUDE_ORIGIN_VIEW) info = "F-I curve for Simulation Configuration: "+str(simConfig) dataSet = DataSet(info, info, "nA", "Hz", "Current injected", "Firing frequency") dataSet.setGraphFormat(PlotCanvas.USE_CIRCLES_FOR_PLOT) simList = simReferences.keys() simList.sort() for sim in simList: simDir = File(projFile.getParentFile(), "/simulations/"+sim) print
mpiConfig = mpiConfig, suggestedRemoteRunTime = suggestedRemoteRunTime, curveType = curveType) finish = "Simulations finished at: %s\n"%datetime.datetime.now() print start print finish else: print 'Running in DEBUG mode, no simulation run, argLookup["DEBUG"] :',DEBUG # quit() # creating simManager and simConfig for later access to project details simManager = nc.SimulationManager(projFile, numConcurrentSims) simConfig = simManager.project.simConfigInfo.getSimConfig(simConfigName) plotFrame = PlotManager.getPlotterFrame("Plot for "+curveType, 0, setVisible) plotFrameAlltraces = PlotManager.getPlotterFrame("Plot All Traces", 0, setVisible) plotFrame.setViewMode(PlotCanvas.INCLUDE_ORIGIN_VIEW) plotFrameAlltraces.setViewMode(PlotCanvas.INCLUDE_ORIGIN_VIEW) simList = getSimList(simConfigName, simRefGlobalPrefix, stimAmpLow, stimAmpHigh, stimAmpInc, simulator[0]) print simList #simList = [u'FI_Cell6-spinstell-FigA3-333__N_0.0',u'FI_Cell6-spinstell-FigA3-333__N_0.5', u'FI_Cell6-spinstell-FigA3-333__N_1.0'] #simList = ['SS-I_Cell6-spinstell-FigA3-333__N_-1.0', 'SS-I_Cell6-spinstell-FigA3-333__N_-2.0', 'SS-I_Cell6-spinstell-FigA3-333__N_0.0']
print 'Loading project file: ', projFile.getAbsolutePath() pm = ProjectManager() project = pm.loadProject(projFile) print 'Successfully loaded project: ', project.getProjectName() innerRadius = 0 outerRadius = radiusRing*2.5 #most inner compartment while innerRadius < maxRadius: plotFrame = PlotManager.getPlotterFrame("Analysis of synchrony in ring %f -> %f"%(innerRadius,outerRadius), False) plotFrame2 = PlotManager.getPlotterFrame("Peak times in ring %f -> %f"%(innerRadius,outerRadius), False) peaks_wave = {} cellsToUse = [] centre = None for simRef in simRefs: info = "Peaks of synchrony for sim: "+simRef peaks_wave[simRef] = DataSet(info, info, "Time", "Peak", "ms", "") try:
def generateV_ICurve(self, projFile, simulator, simConfig, stimAmpLow, stimAmpInc, stimAmpHigh, stimDur, simDuration, maxNumSimultaneousSims = 4): # Load neuroConstruct project print "Loading project from file: " + projFile.getAbsolutePath()+", exists: "+ str(projFile.exists()) pm = ProjectManager() self.myProject = pm.loadProject(projFile) self.simulator = simulator simConfig = self.myProject.simConfigInfo.getSimConfig(simConfig) simConfig.setSimDuration(simDuration) pm.doGenerate(simConfig.getName(), self.neuroConstructSeed) while pm.isGenerating(): print "Waiting for the project to be generated with Simulation Configuration: "+str(simConfig) time.sleep(2) numGenerated = self.myProject.generatedCellPositions.getNumberInAllCellGroups() print "Number of cells generated: " + str(numGenerated) simReferences = {} if numGenerated > 0: print "Generating scripts for simulator: %s..."%simulator if simulator == 'NEURON': self.myProject.neuronFileManager.setQuitAfterRun(1) # Remove this line to leave the NEURON sim windows open after finishing self.myProject.neuronSettings.setCopySimFiles(1) # 1 copies hoc/mod files to PySim_0 etc. and will allow multiple sims to run at once self.myProject.neuronSettings.setGraphicsMode(0) # 0 hides graphs during execution if simulator == 'GENESIS': self.myProject.genesisFileManager.setQuitAfterRun(1) # Remove this line to leave the NEURON sim windows open after finishing self.myProject.genesisSettings.setCopySimFiles(1) # 1 copies hoc/mod files to PySim_0 etc. and will allow multiple sims to run at once self.myProject.genesisSettings.setGraphicsMode(0) # 0 hides graphs during execution stimAmp = stimAmpLow ADD_TO_BEFORE_INIT = self.myProject.neuronSettings.getNativeBlock(NativeCodeLocation.BEFORE_INITIAL) ADD_TO_RECORD_I = self.myProject.neuronSettings.getNativeBlock(NativeCodeLocation.AFTER_SIMULATION) ADD_TO_START_FINITIALIZE = self.myProject.neuronSettings.getNativeBlock(NativeCodeLocation.START_FINITIALIZE) while stimAmp <= stimAmpHigh: while (len(self.simsRunning)>=maxNumSimultaneousSims): print "Sims currently running: "+str(self.simsRunning) print "Waiting..." time.sleep(3) # wait a while... self.updateSimsRunning() simRef = "PySim_"+str(float(stimAmp)) print "Going to run simulation: "+simRef ######## Adjusting the amplitude of the Voltage clamp ############### TEXT_BEFORE_CREATION = "objref clampobj" + "\n" + "objref record_current" + "\n" + "objref data_save" + "\n" # TEXT_BEFORE_INIT = "GranuleCell_mod_tonic[0].Soma {\n" + "clampobj = new SEClamp(0.5)\n" + "clampobj.dur1 = 150.0" + "\n" + "clampobj.amp1 = -100.0" + "\n" + "clampobj.dur2 = " + str(stimDur) + "\n" + "clampobj.amp2 = " + str(stimAmp) + "\n" + "clampobj.dur3 = 150.0" + "\n" + "clampobj.amp3 = -100.0" + "\n" + "clampobj.rs = 0.00001\n " + "}\n" # This should do the trick # TEXT_BEFORE_INIT = TEXT_BEFORE_INIT + ADD_TO_BEFORE_INIT TEXT_START_FINITIALIZE = "GranuleCell_mod_tonic[0].Soma {\n" + "clampobj = new SEClamp(0.5)\n" + "clampobj.dur1 = 150.0" + "\n" + "clampobj.amp1 = -100.0" + "\n" + "clampobj.dur2 = " + str(stimDur) + "\n" + "clampobj.amp2 = " + str(stimAmp) + "\n" + "clampobj.dur3 = 150.0" + "\n" + "clampobj.amp3 = -40.0" + "\n" + "clampobj.rs = 0.00001\n" + "record_current = new Vector()" + "\n" + "record_current.record(&clampobj.i)" + "\n" + "}\n" #This should do the trick TEXT_START_FINITIALIZE = TEXT_START_FINITIALIZE + ADD_TO_START_FINITIALIZE TEXT_TO_RECORD_I = """data_save = new File() \n""" + """strdef filename \n""" + """sprint(filename, """" + self.myProject.getProjectMainDirectory().getAbsolutePath() + """/simulations/current%.3f.txt", clampobj.amp2) \n""" + """data_save.wopen(filename) \n""" + """record_current.printf(data_save) \n""" + """data_save.close() \n""" TEXT_TO_RECORD_I = TEXT_TO_RECORD_I + ADD_TO_RECORD_I self.myProject.neuronSettings.setNativeBlock(NativeCodeLocation.BEFORE_CELL_CREATION, TEXT_BEFORE_CREATION) # self.myProject.neuronSettings.setNativeBlock(NativeCodeLocation.BEFORE_INITIAL, TEXT_BEFORE_INIT) self.myProject.neuronSettings.setNativeBlock(NativeCodeLocation.START_FINITIALIZE, TEXT_START_FINITIALIZE) self.myProject.neuronSettings.setNativeBlock(NativeCodeLocation.AFTER_SIMULATION, TEXT_TO_RECORD_I) print "Next stim: "+ str(stimAmp) self.myProject.simulationParameters.setReference(simRef) if simulator == "NEURON": self.myProject.neuronFileManager.generateTheNeuronFiles(simConfig, None, NeuronFileManager.RUN_HOC, self.simulatorSeed) print "Generated NEURON files for: "+simRef compileProcess = ProcessManager(self.myProject.neuronFileManager.getMainHocFile()) compileSuccess = compileProcess.compileFileWithNeuron(0,0) print "Compiled NEURON files for: "+simRef if compileSuccess: pm.doRunNeuron(simConfig) print "Set running simulation: "+simRef self.simsRunning.append(simRef) if simulator == "GENESIS": compartmentalisation = GenesisCompartmentalisation() self.myProject.genesisFileManager.generateTheGenesisFiles(simConfig, None, compartmentalisation, self.simulatorSeed) print "Generated GENESIS files for: "+simRef pm.doRunGenesis(simConfig) print "Set running simulation: "+simRef self.simsRunning.append(simRef) time.sleep(1) # Wait for sim to be kicked off simReferences[simRef] = stimAmp stimAmp = stimAmp +stimAmpInc print print "Finished running "+str(len(simReferences))+" simulations for project "+ projFile.getAbsolutePath() print "These can be loaded and replayed in the previous simulation browser in the GUI" print while (len(self.simsRunning)>0): print "Sims currently running: "+str(self.simsRunning) print "Waiting..." time.sleep(4) # wait a while... self.updateSimsRunning() #simReferences = {'PySim_0.3':0.3,'PySim_0.4':0.4,'PySim_0.5':0.5} plotFrameVI = PlotManager.getPlotterFrame("V-I curve from project: "+str(self.myProject.getProjectFile())+" on "+simulator , 1, 1) plotFrameVI.setViewMode(PlotCanvas.INCLUDE_ORIGIN_VIEW) info = "V-I curve for Simulation Configuration: "+str(simConfig) dataSet = DataSet(info, info, "mV", "nA", "Voltage", "Current") dataSet.setGraphFormat(PlotCanvas.USE_CIRCLES_FOR_PLOT) simList = simReferences.keys() simList.sort() for sim in simList: simDir = File(projFile.getParentFile(), "/neuroConstruct/models/Dan_GranCell/simulations/"+sim) print print "--- Reloading data from simulation in directory: %s"%simDir.getCanonicalPath() try: simData = SimulationData(simDir) simData.initialise() print "Data loaded: " print simData.getAllLoadedDataStores() times = simData.getAllTimes() cellSegmentRef = simConfig.getCellGroups().get(0)+"_0" cfilename = "E:/neuroConstruct/models/Dan_GranCell/simulations/" + sim + "/current.txt" trace = "E:/neuroConstruct/models/Dan_GranCell/simulations/" + sim + ".txt" # cFILE = open(cfilename, "r") strom = 0.0 volts = simData.getVoltageAtAllTimes(cellSegmentRef) traceInfo = "Voltage at: %s in simulation: %s"%(cellSegmentRef, sim) stimAmp = simReferences[sim] print "Current at %f mV in sim %s: %f"%(stimAmp, sim, float(strom)) dataSet.addPoint(stimAmp,float(strom)) except: print "Error analysing simulation data from: %s"%simDir.getCanonicalPath() print sys.exc_info()[0] plotFrameVI.addDataSet(dataSet)
def testAll(argv=None): if argv is None: argv = sys.argv print "Loading project from " + projFile.getCanonicalPath() simManager = nc.SimulationManager(projFile, numConcurrentSims=numConcurrentSims, verbose=verbose) allSims = simManager.runMultipleSims( simConfigs=simConfigs, simDt=simDt, simDuration=simDuration, simulators=simulators, runInBackground=runInBackground, varTimestepNeuron=varTimestepNeuron, mpiConfigs=mpiConfigs, suggestedRemoteRunTime=suggestedRemoteRunTime, simRefGlobalPrefix=simAllPrefix, runSims=runSims, maxElecLens=multipleRuns, saveAsHdf5=saveAsHdf5, saveOnlySpikes=saveOnlySpikes) while (len(simManager.allRunningSims) > 0): print "Waiting for the following sims to finish: " + str( simManager.allRunningSims) time.sleep(5) # wait a while... simManager.updateSimsRunning() times = [] procNums = [] for sim in allSims: simDir = File(projFile.getParentFile(), "/simulations/" + sim) try: simData = SimulationData(simDir) simData.initialise() simTime = simData.getSimulationProperties().getProperty( "RealSimulationTime") print "Simulation: %s took %s seconds" % (sim, simTime) times.append(float(simTime)) paraConfig = simData.getSimulationProperties().getProperty( "Parallel configuration") print paraConfig numProc = int(paraConfig[max( paraConfig.find(" host, ") + 7, paraConfig.find(" hosts, ") + 8):paraConfig.find(" processor")]) procNums.append(numProc) except: print "Error analysing simulation data from: %s" % simDir.getCanonicalPath( ) print sys.exc_info() print times print procNums ''' import matplotlib.pyplot as plt lines = plt.loglog(times, procNums, 'r:') plt.ylabel('Simulation time') plt.xlabel('Number of processors') plt.show()''' from ucl.physiol.neuroconstruct.gui.plotter import PlotManager from ucl.physiol.neuroconstruct.gui.plotter import PlotCanvas from ucl.physiol.neuroconstruct.dataset import DataSet plotFrame = PlotManager.getPlotterFrame( "Time for simulation run on different numbers of processors", 0, 1) plotFrame.setViewMode(PlotCanvas.INCLUDE_ORIGIN_VIEW) info = "Simulation times for: " + str(procNums) dataSet = DataSet(info, info, "#", "s", "Number of processors", "Simulation time") dataSet.setGraphFormat(PlotCanvas.USE_CIRCLES_FOR_PLOT) for i in range(len(times)): dataSet.addPoint(procNums[i], times[i] * procNums[i]) plotFrame.addDataSet(dataSet)
verboseSims=verboseSims, mpiConfig=mpiConfig, suggestedRemoteRunTime=suggestedRemoteRunTime, curveType=curveType) finish = "Simulations finished at: %s\n" % datetime.datetime.now() print start print finish else: print 'Running in DEBUG mode, no simulation run, argLookup["DEBUG"] :', DEBUG # quit() # creating simManager and simConfig for later access to project details simManager = nc.SimulationManager(projFile, numConcurrentSims) simConfig = simManager.project.simConfigInfo.getSimConfig(simConfigName) plotFrame = PlotManager.getPlotterFrame("Plot for " + curveType, 0, setVisible) plotFrameAlltraces = PlotManager.getPlotterFrame("Plot All Traces", 0, setVisible) plotFrame.setViewMode(PlotCanvas.INCLUDE_ORIGIN_VIEW) plotFrameAlltraces.setViewMode(PlotCanvas.INCLUDE_ORIGIN_VIEW) simList = getSimList(simConfigName, simRefGlobalPrefix, stimAmpLow, stimAmpHigh, stimAmpInc, simulator[0]) print simList #simList = [u'FI_Cell6-spinstell-FigA3-333__N_0.0',u'FI_Cell6-spinstell-FigA3-333__N_0.5', u'FI_Cell6-spinstell-FigA3-333__N_1.0'] #simList = ['SS-I_Cell6-spinstell-FigA3-333__N_-1.0', 'SS-I_Cell6-spinstell-FigA3-333__N_-2.0', 'SS-I_Cell6-spinstell-FigA3-333__N_0.0'] # initialize vars dataSet = "" i00 = 0
print "plot and compare spike times" print "============================" analyseStartTime = 0 # ms analyseStopTime = 600 analyseThreshold = -20 # mV spikeTimes_nC = SpikeAnalyser.getSpikeTimes(voltages_nC, times_nC, analyseThreshold, analyseStartTime, analyseStopTime) print "neuroConcsturct spike times:" print spikeTimes_nC spikeTimes_original = SpikeAnalyser.getSpikeTimes(voltages_original, times_original, analyseThreshold, analyseStartTime, analyseStopTime) print "modelDB spike times:" print spikeTimes_original plotFrame = PlotManager.getPlotterFrame("test model: "+str(myProject.getProjectFile()) , 1, 1) plotFrame.setViewMode(PlotCanvas.INCLUDE_ORIGIN_VIEW) info = "modelDB vs nC: "+str(simConfig) dataSet_nC = DataSet(info, info, "ms", "nC", "time", "nC") dataSet_nC.setGraphFormat(PlotCanvas.USE_CIRCLES_FOR_PLOT) for t1 in spikeTimes_nC: dataSet_nC.addPoint(t1,1) dataSet_original = DataSet(info, info, "ms", "modelDB", "time", "modelDB") dataSet_original.setGraphFormat(PlotCanvas.USE_CIRCLES_FOR_PLOT) for t2 in spikeTimes_original: dataSet_original.addPoint(t2,1) plotFrame.addDataSet(dataSet_nC) plotFrame.addDataSet(dataSet_original)
def reloadSims(waitForSimsToFinish): print "Trying to reload sims: "+str(allFinishedSims) plottedSims = [] for simRef in allFinishedSims: simDir = File(projFile.getParentFile(), "/simulations/"+simRef) timeFile = File(simDir, "time.dat") timeFile2 = File(simDir,"time.txt") # for PSICS... if timeFile.exists() or timeFile2.exists(): if verbose: print "--- Reloading data from simulation in directory: %s"%simDir.getCanonicalPath() time.sleep(1) # wait a while... try: simData = SimulationData(simDir) simData.initialise() times = simData.getAllTimes() if analyseSims: ''' volts = simData.getVoltageAtAllTimes(cellSegmentRef) if verbose: print "Got "+str(len(volts))+" data points on cell seg ref: "+cellSegmentRef analyseStartTime = 0 analyseStopTime = simConfig.getSimDuration() analyseThreshold = -20 # mV spikeTimes = SpikeAnalyser.getSpikeTimes(volts, times, analyseThreshold, analyseStartTime, analyseStopTime) print "Spike times in %s for sim %s: %s"%(cellSegmentRef, simRef, str(spikeTimes)) ''' if plotSims: simConfigName = simData.getSimulationProperties().getProperty("Sim Config") if simConfigName.find('(')>=0: simConfigName = simConfigName[0:simConfigName.find('(')] for dataStore in simData.getAllLoadedDataStores(): ds = simData.getDataSet(dataStore.getCellSegRef(), dataStore.getVariable(), False) if not plotVoltageOnly or dataStore.getVariable() == SimPlot.VOLTAGE: plotFrame = PlotManager.getPlotterFrame("Behaviour of "+dataStore.getVariable() \ +" on: %s for sim config: %s"%(str(simulators), simConfigName)) plotFrame.addDataSet(ds) plottedSims.append(simRef) except: print "Error analysing simulation data from: %s"%simDir.getCanonicalPath() print sys.exc_info() for simRef in plottedSims: allFinishedSims.remove(simRef) if waitForSimsToFinish and len(allRunningSims)>0: if verbose: print "Waiting for sims: %s to finish..."%str(allRunningSims) time.sleep(2) # wait a while... updateSimsRunning() reloadSims(True)
def make_fF_Curve(self, projFile, simulator, simConfig, nTrains, simDuration, analyseStartTime, analyseStopTime, analyseThreshold, maxNumSimultaneousSims = 4): # Load neuroConstruct project print "Loading project from file: " + projFile.getAbsolutePath()+", exists: "+ str(projFile.exists()) pm = ProjectManager() self.myProject = pm.loadProject(projFile) self.simulator = simulator simConfig = self.myProject.simConfigInfo.getSimConfig(simConfig) simConfig.setSimDuration(simDuration) pm.doGenerate(simConfig.getName(), self.neuroConstructSeed) while pm.isGenerating(): print "Waiting for the project to be generated with Simulation Configuration: "+str(simConfig) time.sleep(2) numGenerated = self.myProject.generatedCellPositions.getNumberInAllCellGroups() print "Number of cells generated: " + str(numGenerated) simReferences = {} if numGenerated > 0: print "Generating scripts for simulator: %s..."%simulator if simulator == 'NEURON': self.myProject.neuronFileManager.setQuitAfterRun(1) # Remove this line to leave the NEURON sim windows open after finishing self.myProject.neuronSettings.setCopySimFiles(1) # 1 copies hoc/mod files to PySim_0 etc. and will allow multiple sims to run at once self.myProject.neuronSettings.setGraphicsMode(0) # 0 hides graphs during execution if simulator == 'GENESIS': self.myProject.genesisFileManager.setQuitAfterRun(1) # Remove this line to leave the NEURON sim windows open after finishing self.myProject.genesisSettings.setCopySimFiles(1) # 1 copies hoc/mod files to PySim_0 etc. and will allow multiple sims to run at once self.myProject.genesisSettings.setGraphicsMode(0) # 0 hides graphs during execution currentTrain = 0 ADD_TO_START_FINITIALIZE = self.myProject.neuronSettings.getNativeBlock(NativeCodeLocation.START_FINITIALIZE) ADD_TO_RECORD_I = self.myProject.neuronSettings.getNativeBlock(NativeCodeLocation.AFTER_SIMULATION) while currentTrain <= nTrains: while (len(self.simsRunning)>=maxNumSimultaneousSims): print "Sims currently running: "+str(self.simsRunning) print "Waiting..." time.sleep(3) # wait a while... self.updateSimsRunning() simRef = "PySim_"+str(currentTrain) print "Going to run simulation: "+simRef ######## Adjusting the amplitude of the Voltage clamp ############### TEXT_BEFORE_CREATION = """objref vector, gTrainFile\n""" + "objectvar clamp\n" ### TEXT_BEFORE_INIT = "GranuleCell_mod_tonic[0].Soma {\n" + "clampobj = new VClamp(0.5)\n" + "clampobj.dur[0] = " + str(stimDur) + "\n" + "clampobj.amp[0] = " + str(stimAmp) + "\n" + "}\n" # This should do the trick TEXT_START_FINITIALIZE = "\n" + "gTrainFile = new File() \n" + "vector = new Vector(100000) \n" + "access GranuleCell_mod_tonic[0].Soma \n" + "clamp = new SEClamp(0.5) \n" + "clamp.amp1 = 0 \n" + "clamp.dur1 = 1e9 \n" + """gTrainFile.ropen("E:/neuroConstruct/models/Dan_GranCell/gTrains_nS/gAMPA_""" + str(currentTrain) + """.txt") \n""" + "vector.scanf(gTrainFile) \n" + "gTrainFile.close \n" + "for i = 0, vector.size() -1 { \n" + " if (vector.x[i] <= 0) { \n" + " vector.x[i] = 1e-20 \n" + " } \n" + " } \n" + "for i = 0, vector.size() -1 { \n" + " vector.x[i] = ( 1 / vector.x[i] ) * 1000 \n" + " } \n" + "vector.play(&clamp.rs, 0.03) \n" # This TEXT_START_FINITIALIZE = TEXT_START_FINITIALIZE + ADD_TO_START_FINITIALIZE TEXT_TO_RECORD_I = """// currently not used \n""" TEXT_TO_RECORD_I = TEXT_TO_RECORD_I + ADD_TO_RECORD_I self.myProject.neuronSettings.setNativeBlock(NativeCodeLocation.BEFORE_CELL_CREATION, TEXT_BEFORE_CREATION) self.myProject.neuronSettings.setNativeBlock(NativeCodeLocation.START_FINITIALIZE, TEXT_START_FINITIALIZE) self.myProject.neuronSettings.setNativeBlock(NativeCodeLocation.AFTER_SIMULATION, TEXT_TO_RECORD_I) print "Next Train: "+ str(currentTrain) self.myProject.simulationParameters.setReference(simRef) if simulator == "NEURON": self.myProject.neuronFileManager.generateTheNeuronFiles(simConfig, None, NeuronFileManager.RUN_HOC, self.simulatorSeed) print "Generated NEURON files for: "+simRef compileProcess = ProcessManager(self.myProject.neuronFileManager.getMainHocFile()) compileSuccess = compileProcess.compileFileWithNeuron(0,0) print "Compiled NEURON files for: "+simRef if compileSuccess: pm.doRunNeuron(simConfig) print "Set running simulation: "+simRef self.simsRunning.append(simRef) if simulator == "GENESIS": compartmentalisation = GenesisCompartmentalisation() self.myProject.genesisFileManager.generateTheGenesisFiles(simConfig, None, compartmentalisation, self.simulatorSeed) print "Generated GENESIS files for: "+simRef pm.doRunGenesis(simConfig) print "Set running simulation: "+simRef self.simsRunning.append(simRef) time.sleep(1) # Wait for sim to be kicked off simReferences[simRef] = currentTrain currentTrain = currentTrain + 1 print print "Finished running "+str(len(simReferences))+" simulations for project "+ projFile.getAbsolutePath() print "These can be loaded and replayed in the previous simulation browser in the GUI" print while (len(self.simsRunning)>0): print "Sims currently running: "+str(self.simsRunning) print "Waiting..." time.sleep(4) # wait a while... self.updateSimsRunning() #simReferences = {'PySim_0.3':0.3,'PySim_0.4':0.4,'PySim_0.5':0.5} plotFrameFf = PlotManager.getPlotterFrame("F-f curve from project: "+str(self.myProject.getProjectFile())+" on "+simulator , 1, 1) plotFrameVolts = PlotManager.getPlotterFrame("VoltageTraces from project: "+str(self.myProject.getProjectFile())+" on "+simulator , 1, 1) plotFrameFf.setViewMode(PlotCanvas.INCLUDE_ORIGIN_VIEW) info = "F-f curve for Simulation Configuration: "+str(simConfig) dataSet = DataSet(info, info, "Hz", "Hz", "Input_Freq", "Output_Freq") dataSet.setGraphFormat(PlotCanvas.USE_CIRCLES_FOR_PLOT) simList = simReferences.keys() simList.sort() traininfos = open("E:/neuroConstruct/models/Dan_GranCell/gAMPA_traininfo.txt") train_info_list = traininfos.readlines() currentTrain = 0 for sim in simList: simDir = File(projFile.getParentFile(), "E:/neuroConstruct/models/Dan_GranCell/simulations/"+sim) print print "--- Reloading data from simulation in directory: %s"%simDir.getCanonicalPath() try: simData = SimulationData(simDir) simData.initialise() print "Data loaded: " print simData.getAllLoadedDataStores() times = simData.getAllTimes() cellSegmentRef = simConfig.getCellGroups().get(0)+"_0" volts = simData.getVoltageAtAllTimes(cellSegmentRef) time.sleep(2) traceInfo = "Voltage at: %s in simulation: %s"%(cellSegmentRef, sim) dataSetV = DataSet(traceInfo, traceInfo, "ms", "mV", "Time", "Membrane Potential") Spike_List = [] Spike_List.append(0.00) for i in range(len(times)): dataSetV.addPoint(times[i], volts[i]) for i in range(len(times)): if (volts[i] > 0.0): if (times[i] - Spike_List[len(Spike_List)-1] > 0.50): Spike_List.append(times[i]) Spike_List.remove(0.00) plotFrameVolts.addDataSet(dataSetV) spikeTimes = SpikeAnalyser.getSpikeTimes(volts, times, analyseThreshold, analyseStartTime, analyseStopTime) currentTrain_Freq = float(train_info_list[currentTrain-1]) print "Number of spikes in sim %s: %i"%(sim, len(spikeTimes)) avgFreq = 0 if len(Spike_List)>0: avgFreq = 1000.0 / ((Spike_List[len(Spike_List)-1] - Spike_List[0]) / (len(Spike_List) -1)) dataSet.addPoint(currentTrain_Freq,avgFreq) currentTrain = currentTrain + 1 except: print "Error analysing simulation data from: %s"%simDir.getCanonicalPath() print sys.exc_info()[0] plotFrameFf.addDataSet(dataSet)
pm.doRunNeuron(simConfig) print "Set running simulation: " + simRef simsRunning.append(simRef) time.sleep(1) # Wait for sim to be kicked off print print "Finished running " + str( numSimulationsToRun ) + " simulations for project " + projFile.getAbsolutePath() print "These can be loaded and replayed in the previous simulation browser in the GUI" print ######## Generating a current versus firing rate plot ####### plotFrameFI = PlotManager.getPlotterFrame( "F-I curve from project: " + str(myProject.getProjectFile()), 1, 1) plotFrameFI.setViewMode(PlotCanvas.INCLUDE_ORIGIN_VIEW) info = "F-I curve for Simulation Configuration: " + str(simConfig) dataSet = DataSet(info, info, "nA", "Hz", "Current injected", "Firing frequency") dataSet.setGraphFormat(PlotCanvas.USE_CIRCLES_FOR_PLOT) simList = simReferences.keys() simList.sort() for sim in simList: simDir = File(projFile.getParentFile(), "/simulations/" + sim)