totNumSpikes): spikeTimeTrace = "Times_" + sim + "_" + simConfigName + "_" + str( spikeIndex) if not allSpikeTimeDataSets.has_key(spikeTimeTrace): ds = DataSet(spikeTimeTrace, spikeTimeTrace, "", "ms", "Number of compartments", "Spike time") allSpikeTimeDataSets[spikeTimeTrace] = ds spikeTrace = allSpikeTimeDataSets[spikeTimeTrace] print "Adding point to " + spikeTimeTrace #pointNum = spikeTrace.addPoint(1/maxElecLen, spikeTimes[-1]) ##pointNum = spikeTrace.addPoint(1/maxElecLen, spikeTimes[spikeIndex]) morphProp = simData.getSimulationProperties( ).getProperty("Morph summary nRT") comps = morphProp.split(":")[-1] pointNum = spikeTrace.addPoint(float(comps), spikeTimes[spikeIndex]) #spikeTrace.setCommentOnPoint(pointNum, "Point for electrotonic len: "+str(maxElecLen)) spikeTrace.setCommentOnPoint(pointNum, morphProp) if plotSims: simConfigName = simData.getSimulationProperties( ).getProperty("Sim Config") if simConfigName.find('(') >= 0: simConfigName = simConfigName[0:simConfigName. find('(')]
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 totNumSpikes <0: totNumSpikes = len(spikeTimes) for spikeIndex in range(max(totNumSpikes-numSpikes, 0), totNumSpikes): spikeTimeTrace = "Times_"+sim+"_"+simConfigName+"_"+str(spikeIndex) if not allSpikeTimeDataSets.has_key(spikeTimeTrace): ds = DataSet(spikeTimeTrace, spikeTimeTrace, "", "ms", "Number of compartments", "Spike time") allSpikeTimeDataSets[spikeTimeTrace] = ds spikeTrace = allSpikeTimeDataSets[spikeTimeTrace] print "Adding point to "+spikeTimeTrace #pointNum = spikeTrace.addPoint(1/maxElecLen, spikeTimes[-1]) ##pointNum = spikeTrace.addPoint(1/maxElecLen, spikeTimes[spikeIndex]) morphProp = simData.getSimulationProperties().getProperty("Morph summary nRT") comps = morphProp.split(":")[-1] pointNum = spikeTrace.addPoint(float(comps), spikeTimes[spikeIndex]) #spikeTrace.setCommentOnPoint(pointNum, "Point for electrotonic len: "+str(maxElecLen)) spikeTrace.setCommentOnPoint(pointNum, morphProp) if plotSims: simConfigName = simData.getSimulationProperties().getProperty("Sim Config") if simConfigName.find('(')>=0: simConfigName = simConfigName[0:simConfigName.find('(')] for dataStore in simData.getAllLoadedDataStores():
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)
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 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 for conf in confs.keys(): numb = conf mpiConfigs = [confs[conf]] perProc = 5000 targetNum = perProc*numb simAllPrefix = "NZ_%i_%i_"%(perProc, numb) # Adds a prefix to simulation reference print "Simulation pref: "+simAllPrefix 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) if wait: while (len(simManager.allRunningSims)>0): print "Waiting for the following sims to finish: "+str(simManager.allRunningSims) time.sleep(30) # 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()
if totNumSpikes <0: totNumSpikes = len(spikeTimes) for spikeIndex in range(max(totNumSpikes-numSpikes, 0), totNumSpikes): spikeTimeTrace = "Times_"+sim+"_"+simConfigName+"_"+str(spikeIndex) if not allSpikeTimeDataSets.has_key(spikeTimeTrace): ds = DataSet(spikeTimeTrace, spikeTimeTrace, "", "ms", "Number of compartments", "Spike time") allSpikeTimeDataSets[spikeTimeTrace] = ds spikeTrace = allSpikeTimeDataSets[spikeTimeTrace] print "Adding point to "+spikeTimeTrace dtUsed = simData.getSimulationProperties().getProperty("dt") pointNum = spikeTrace.addPoint(float(dtUsed), spikeTimes[spikeIndex]) 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)
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("ExcCells").setMaxNumberCells(numExcCells) simManager.project.cellGroupsInfo.getCellPackingAdapter("INCells").setMaxNumberCells(numINCells) ### Change weights in synapses/gap junctions simConfig = simManager.project.simConfigInfo.getSimConfig(simConfigName) for netConnName in simConfig.getNetConns(): print "Changing synaptic delay in %s to %f"%(netConnName, defaultSynapticDelay) delayGen = NumberGenerator(defaultSynapticDelay) for synProps in simManager.project.morphNetworkConnectionsInfo.getSynapseList(netConnName): synProps.setDelayGenerator(delayGen) # defaultSynapticDelay will be recorded in simulation.props and listed in SimulationBrowser GUI SimulationsInfo.addExtraSimProperty("defaultSynapticDelay", str(defaultSynapticDelay)) allSims = simManager.runMultipleSims(simConfigs = [simConfigName], simDt = simDt, simDuration = simDuration, simulators = simulators, runInBackground = runInBackground, varTimestepNeuron = varTimestepNeuron, mpiConfigs = mpiConfigs, suggestedRemoteRunTime = suggestedRemoteRunTime, simRefGlobalPrefix = simAllPrefix, runSims = runSims, neuroConstructSeed = neuroConstructSeed, simulatorSeed = simulatorSeed) while (len(simManager.allRunningSims)>0): print "Waiting for the following sims to finish: "+str(simManager.allRunningSims) time.sleep(5) # wait a while... simManager.updateSimsRunning() 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) except: print "Error analysing simulation data from: %s"%simDir.getCanonicalPath() if mpiConfigs == [MpiSettings.LOCAL_SERIAL] or mpiConfigs == [MpiSettings.MATLEM_1PROC]: simManager.reloadSims(plotVoltageOnly = True, plotSims = plotSims, analyseSims = analyseSims)
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)