Esempio n. 1
0
            simRef = simRefPrefix + "_" + sim + recompSuffix

            simDir = File(projFile.getParentFile(), "/simulations/" + simRef)
            timeFile = File(simDir, "time.dat")

            if not timeFile.exists():
                print "\n-------     Error loading data from simulation in directory: %s\n" % simDir.getCanonicalPath(
                )
            else:
                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()

                    cellSegmentRef = simData.getAllLoadedDataStores().get(
                        0).getCellGroupName() + "_0"
                    print "Looking for voltages of " + cellSegmentRef
                    volts = simData.getVoltageAtAllTimes(cellSegmentRef)

                    if verbose:
                        print "Got " + str(
                            len(volts)
                        ) + " data points on cell seg ref: " + cellSegmentRef

                    analyseStartTime = 0
                    analyseStopTime = 2000
        simRefPrefix = (simAllPrefix+simConfigName+"_").replace(' ', '')

        simRef = simRefPrefix+"_"+sim+recompSuffix

        simDir = File(projFile.getParentFile(), "/simulations/"+simRef)
        timeFile = File(simDir, "time.dat")


        if not timeFile.exists():
            print "\n-------     Error loading data from simulation in directory: %s\n"%simDir.getCanonicalPath()
        else:
            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()


                cellSegmentRef = simData.getAllLoadedDataStores().get(0).getCellGroupName()+"_0"
                print "Looking for voltages of "+cellSegmentRef
                volts = simData.getVoltageAtAllTimes(cellSegmentRef)

                if verbose: print "Got "+str(len(volts))+" data points on cell seg ref: "+cellSegmentRef

                analyseStartTime = 0
                analyseStopTime = 2000
                analyseThreshold = -20 # mV

                spikeTimes = SpikeAnalyser.getSpikeTimes(volts, times, analyseThreshold, analyseStartTime, analyseStopTime)
Esempio n. 3
0
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)
Esempio n. 4
0
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) 


Esempio n. 5
0
for sim in simulators:

    for simRefPart in allSims:

        simRef = simRefPart + sim

        simDir = File(projFile.getParentFile(), "/simulations/"+simRef)
        timeFile = File(simDir, "time.dat")


        if timeFile.exists():
            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 plotSims:


                    for dataStore in simData.getAllLoadedDataStores():

                        ds = simData.getDataSet(dataStore.getCellSegRef(), dataStore.getVariable(), False)

                        print dataStore.getCellSegRef()

                        if cellsegRefs.has_key(dataStore.getCellSegRef()):
Esempio n. 6
0
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)
Esempio n. 7
0
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)
projectFileName = os.environ["NC_HOME"]+argLookup["ProjectFile"]
slashparts = projectFileName.split('/')
basefolder = '/'.join(slashparts[:-1]) + '/'
print basefolder
for sim in simList:
    projectFullDir = basefolder+"/simulations/"+sim
    if not os.path.exists(projectFullDir):
        print("--- project not found, directory missing %s ---"%projectFullDir)
        quit()

    simDir = File(basefolder, "/simulations/"+sim)
    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()
        # simConfig was just grabbed for use here, it was CGspinstell_0
        cellSegmentRef = simConfig.getCellGroups().get(0)+"_0"

        volts = simData.getVoltageAtAllTimes(cellSegmentRef)

        traceInfo = "Voltage at: %s in simulation: %s"%(cellSegmentRef, sim)

        dataSetV = DataSet(traceInfo, traceInfo, "ms", "mV", "Time", "Membrane potential")
        for i in range(len(times)):
            dataSetV.addPoint(times[i], volts[i])
Esempio n. 9
0
                    #centre = Point3f(0,40,0)
                    dist = pos.getPoint().distance(centre)
                    #print "Cell %i at %s is %f away from centre %s"%(pos.cellNumber, str(pos.getPoint()), dist, str(centre))

                    if dist >= innerRadius and dist < outerRadius:
                        cellsToUse.append(pos.cellNumber)

    
            GeneralUtils.timeCheck("After load sim", True)
            spikeLists = ArrayList()
    
            times = simData.getAllTimes()
    
    
            for cellNum in cellsToUse:
                cellSegRef = SimulationData.getCellRef(cellGroupName, cellNum)
                volts = simData.getVoltageAtAllTimes(cellSegRef)
    
                spikes = SpikeAnalyser.getSpikeTimes(volts,
                                                    times,
                                                    threshold,
                                                    0,
                                                    times[-1])
                spikeLists.add(spikes)
                
    
            ds = SpikeAnalyser.getSlidingSpikeSynchrony(spikeLists,
                                                        times,
                                                        slideSize,
                                                        0,
                                                        times[-1])
                                   simRefGlobalPrefix =      simAllPrefix,
                                   runInBackground =         runInBackground,
                                   simulators =              [sim])

        simDir = File(projFile.getParentFile(), "/simulations/"+simRef)
        timeFile = File(simDir, "time.dat")


        if not timeFile.exists():
            print "\n-------     Error loading data from simulation in directory: %s\n"%simDir.getCanonicalPath()
        else:
            if verbose: print "--- Reloading data from simulation in directory: %s"%simDir.getCanonicalPath()
            time.sleep(1) # wait a while...

            try:
                simData = SimulationData(simDir)
                simData.initialise()
                if not simData.isDataLoaded():
                    print "Waiting while data loads"
                    time.sleep(5)


                times = simData.getAllTimes()


                cellSegmentRef = simData.getAllLoadedDataStores().get(0).getCellGroupName()+"_0"
                print "Looking for voltages of "+cellSegmentRef
                volts = simData.getVoltageAtAllTimes(cellSegmentRef)

                if verbose: print "Got "+str(len(volts))+" data points on cell seg ref: "+cellSegmentRef
Esempio n. 11
0
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()
Esempio n. 12
0
	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)

    ### 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)
if compileSuccess:
    pm.doRunNeuron(simConfig)
    print "Set running simulation: "+simRef
    
simDir = File(projFile.getParentFile(), "/simulations/"+simRef)
timeFile = File(simDir, "time.dat")

while not timeFile.exists():
    print "Waiting for file: %s to be generated..."%timeFile.getCanonicalPath()
    sleep(2) # wait a while...

print "--- Reloading data from simulation in directory: %s"%simDir.getCanonicalPath()
sleep(1) # wait a while...

try:
    simData = SimulationData(simDir)
    simData.initialise()
    times = simData.getAllTimes()
    cellSegmentRef = simConfig.getCellGroups().get(0)+"_0"
    volts = simData.getVoltageAtAllTimes(cellSegmentRef)

    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 "Number of spikes in %s: %i"%(cellSegmentRef, len(spikeTimes))
    avgFreq = 0.
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)
Esempio n. 16
0
	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)
Esempio n. 17
0
	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)
Esempio n. 18
0
slashparts = projectFileName.split('/')
basefolder = '/'.join(slashparts[:-1]) + '/'
print basefolder
for sim in simList:
    projectFullDir = basefolder + "/simulations/" + sim
    if not os.path.exists(projectFullDir):
        print("--- project not found, directory missing %s ---" %
              projectFullDir)
        quit()

    simDir = File(basefolder, "/simulations/" + sim)
    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()
        # simConfig was just grabbed for use here, it was CGspinstell_0
        cellSegmentRef = simConfig.getCellGroups().get(0) + "_0"

        volts = simData.getVoltageAtAllTimes(cellSegmentRef)

        traceInfo = "Voltage at: %s in simulation: %s" % (cellSegmentRef, sim)

        dataSetV = DataSet(traceInfo, traceInfo, "ms", "mV", "Time",
                           "Membrane potential")
        for i in range(len(times)):