예제 #1
0
 def load_project(self, fname):
     file = File(fname)
     print 'Loading project file: ', file.getAbsolutePath()
     pm = ProjectManager()
     project = pm.loadProject(file)
     print pm.status()
     return project
예제 #2
0
def testAll(argv=None):
    if argv is None:
        argv = sys.argv

    print "Loading project from " + projFile.getCanonicalPath()

    projectManager = ProjectManager()
    project = projectManager.loadProject(projFile)

    assert (len(project.getProjectDescription()) > 0)

    assert (len(project.cellManager.getAllCells()) >= 6)

    #assert(project.proj3Dproperties.getDisplayOption() == Display3DProperties.DISPLAY_SOMA_SOLID_NEURITE_LINE)

    assert (abs(project.simulationParameters.getDt() - 0.01) <= 1e-9)

    assert (abs(project.simulationParameters.getTemperature() - 6.3) < 1e-6)

    assert (not project.neuronSettings.isVarTimeStep())

    assert (project.neuronSettings.getDataSaveFormat().equals(
        NeuronSettings.DataSaveFormat.TEXT_NC))

    assert (project.genesisSettings.isSymmetricCompartments())

    assert (project.genesisSettings.isSIUnits())

    defSimConfig = project.simConfigInfo.getSimConfig(
        "Default Simulation Configuration")
    assert (str(defSimConfig.getCellGroups()) == '[baskets, pyramidals]')

    smallNetSimConfig = project.simConfigInfo.getSimConfig("SmallNetwork")

    assert (smallNetSimConfig.getCellGroups().size() == 2)
    assert (smallNetSimConfig.getNetConns().size() == 4)
    assert (smallNetSimConfig.getInputs().size() == 1)
    assert (project.cellGroupsInfo.getCellPackingAdapter(
        "pyramidals_48").getMaxNumberCells() == 48)
    assert (project.cellGroupsInfo.getCellPackingAdapter(
        "baskets_12").getMaxNumberCells() == 12)

    print "\n**************************************"
    print "    All tests passed!"
    print "**************************************\n"
예제 #3
0
def testAll(argv=None):
    if argv is None:
        argv = sys.argv

    print "Loading project from " + projFile.getCanonicalPath()

    projectManager = ProjectManager()
    project = projectManager.loadProject(projFile)

    assert (len(project.getProjectDescription()) > 0)

    assert (len(project.cellManager.getAllCells()) >= 7)

    assert (len(project.cellGroupsInfo.getAllCellGroupNames()) >= 4)

    assert (project.simulationParameters.getDt() - 0.0125 <= 1e-6)

    assert (project.neuronSettings.isVarTimeStep())

    assert (project.neuronSettings.getDataSaveFormat().equals(
        NeuronSettings.DataSaveFormat.TEXT_NC))

    assert (project.simulationParameters.getTemperature() == 34)
    '''
    sci = project.simConfigInfo
    cgi = project.cellGroupsInfo

    assert(cgi.getCellType("Channeltestgroup") == "Channeltest_Cell")
    assert(cgi.getCellType("CMLtestGroup") == "CMLtest_Cell")
    assert(cgi.getCellType("pyr_group") == "LarkumPyr")
    assert(cgi.getCellType("pyrCML_group") == "LarkumPyr_NML")

    arrayListsIdentical(sci.getSimConfig("Default Simulation Configuration").getCellGroups(), ["Channeltestgroup", "CMLtestGroup"])
    arrayListsIdentical(sci.getSimConfig("test_IClamp").getCellGroups(), ["pyr_group", "pyrCML_group"])
    arrayListsIdentical(sci.getSimConfig("background activity").getCellGroups(), ["pyr_group"])
    '''

    print "\n**************************************"
    print "    All tests passed!"
    print "**************************************\n"
예제 #4
0
def testAll(argv=None):
    if argv is None:
        argv = sys.argv

    print "Loading project from " + projFile.getCanonicalPath()

    projectManager = ProjectManager()
    project = projectManager.loadProject(projFile)

    assert (len(project.getProjectDescription()) > 0)

    assert (len(project.cellManager.getAllCells()) >= 1)

    #assert(project.proj3Dproperties.getDisplayOption() == Display3DProperties.DISPLAY_SOMA_SOLID_NEURITE_LINE)

    assert (abs(project.simulationParameters.getDt() - 0.02) <= 1e-9)

    assert (abs(project.simulationParameters.getTemperature() - 6.3) < 1e-6)

    assert (not project.neuronSettings.isVarTimeStep())

    assert (project.neuronSettings.getDataSaveFormat().equals(
        NeuronSettings.DataSaveFormat.TEXT_NC))

    assert (project.genesisSettings.isSIUnits())

    defSimConfig = project.simConfigInfo.getSimConfig(
        "Default Simulation Configuration")
    assert (str(defSimConfig.getCellGroups()) == '[SampleCellGroup]')

    assert (defSimConfig.getCellGroups().size() == 1)

    assert (defSimConfig.getInputs().size() == 1)

    print "\n**************************************"
    print "    All tests passed!"
    print "**************************************\n"
Vervaeke2012.
"""
import os
import random
import time
from java.lang import System
from java.io import File
from java.util import ArrayList

from ucl.physiol.neuroconstruct.project import ProjectManager
from ucl.physiol.neuroconstruct.neuron import NeuronFileManager
from ucl.physiol.neuroconstruct.nmodleditor.processes import ProcessManager
from ucl.physiol.neuroconstruct.cell.utils import CellTopologyHelper

timestamp = str(time.time())
pm = ProjectManager(None, None)
project_path = '../GJGolgi_ReducedMorph.ncx'
project_file = File(project_path)
project = pm.loadProject(project_file)

sim_config_name = 'dendritic_attenuation'

sim_config = project.simConfigInfo.getSimConfig(sim_config_name)
project.neuronSettings.setNoConsole()

n_points = 18
detailed_distance_bounds = range(10.,190.,10.)
rec_segs_reduced = [0,4,5,6]
dendritic_group = 'apical_dend_2'

# switch off Na channels (TTX)
예제 #6
0
    from java.io import File
except ImportError:
    print "Note: this file should be run using ..\\nC.bat -python XXX.py' or './nC.sh -python XXX.py'"
    print "See http://www.neuroconstruct.org/docs/python.html for more details"
    quit()

from ucl.physiol.neuroconstruct.project import ProjectManager
from ucl.physiol.neuroconstruct.cell.converters import MorphMLConverter

# Load an existing neuroConstruct project

projFile = File("TestPython/TestPython.neuro.xml")
print "Loading project from file: " + projFile.getAbsolutePath(
) + ", exists: " + str(projFile.exists())

pm = ProjectManager()
myProject = pm.loadProject(projFile)
print "Loaded project: " + myProject.getProjectName()

morphDir = File(
    "../osb/showcase/neuroConstructShowcase/Ex3_Morphology/importedMorphologies/"
)
morphmlFile = File(morphDir, "SimplePurkinjeCell.morph.xml")

print "Going to load morphology from: " + morphmlFile.getCanonicalPath()

converter = MorphMLConverter()
cell = converter.loadFromMorphologyFile(morphmlFile, "NewCell")

print "Loaded cell: " + cell.getInstanceName() + " with " + str(
    cell.getAllSegments().size()) + " segments"
예제 #7
0
def runColumnSimulation(simConfig="TempSimConfig",
                        simDuration=100,
                        simDt=0.025,
                        neuroConstructSeed=1234,
                        simulatorSeed=1234,
                        simulators=["NEURON"],
                        simRefPrefix="Net_",
                        suggestedRemoteRunTime=120,
                        defaultSynapticDelay=0.05,
                        mpiConf=MpiSettings.LOCAL_SERIAL,
                        scaleCortex=0.1,
                        scaleThalamus=0,
                        gabaScaling=1,
                        l4ssAmpaScaling=1,
                        l5PyrGapScaling=1,
                        inNrtTcrNmdaScaling=1,
                        pyrSsNmdaScaling=1,
                        deepBiasCurrent=-1,
                        maxElecLenFRB=0.01,
                        maxElecLenRS=0.01,
                        maxElecLenIN=0.01,
                        maxElecLenSS=0.01,
                        somaNseg=-1,
                        varTimestepNeuron=False,
                        verbose=True,
                        runInBackground=False):

    print "Running new column simulation..."

    ############################################

    # Full column populations

    numFRB = 50  #   full model: 50
    numRS = 1000  #   full model: 1000
    numSupBask = 90  #   full model: 90
    numSupAxAx = 90  #   full model: 90
    numSupLTS = 90  #   full model: 90
    numL4SpinStell = 240  #   full model: 240
    numL5TuftIB = 800  #   full model: 800
    numL5TuftRS = 200  #   full model: 200
    numDeepBask = 100  #   full model: 100
    numDeepAxAx = 100  #   full model: 100
    numDeepLTS = 100  #   full model: 100
    numL6NonTuftRS = 500  #   full model: 500

    numTCR = 100  #   full model: 100
    numnRT = 100  #   full model: 100

    #######################################

    ### Load neuroConstruct project

    import datetime

    start = datetime.datetime.now()

    print "Loading project %s from at %s " % (projFile.getCanonicalPath(),
                                              start.strftime("%Y-%m-%d %H:%M"))

    pm = ProjectManager()
    project = pm.loadProject(projFile)

    ### Set duration & timestep & simulation configuration

    project.simulationParameters.setDt(simDt)
    simConfig = project.simConfigInfo.getSimConfig(simConfig)
    simConfig.setSimDuration(simDuration)

    ### Set simulation reference

    index = 0
    simRef = "%s%i" % (simRefPrefix, index)

    while File("%s/simulations/%s_N" %
               (project.getProjectMainDirectory().getCanonicalPath(),
                simRef)).exists():
        simRef = "%s%i" % (simRefPrefix, index)
        index = index + 1

    project.simulationParameters.setReference(simRef)

    ### Change num in each cell group

    numFRB = int(scaleCortex * numFRB)
    numRS = int(scaleCortex * numRS)
    numSupBask = int(scaleCortex * numSupBask)
    numSupAxAx = int(scaleCortex * numSupAxAx)
    numSupLTS = int(scaleCortex * numSupLTS)
    numL4SpinStell = int(scaleCortex * numL4SpinStell)
    numL5TuftIB = int(scaleCortex * numL5TuftIB)
    numL5TuftRS = int(scaleCortex * numL5TuftRS)
    numDeepBask = int(scaleCortex * numDeepBask)
    numDeepAxAx = int(scaleCortex * numDeepAxAx)
    numDeepLTS = int(scaleCortex * numDeepLTS)
    numL6NonTuftRS = int(scaleCortex * numL6NonTuftRS)

    numTCR = int(scaleThalamus * numTCR)
    numnRT = int(scaleThalamus * numnRT)

    project.cellGroupsInfo.getCellPackingAdapter(
        "CG3D_L23PyrFRB").setMaxNumberCells(
            numFRB)  # Note only works if RandomCellPackingAdapter
    project.cellGroupsInfo.getCellPackingAdapter(
        "CG3D_L23PyrRS").setMaxNumberCells(numRS)
    project.cellGroupsInfo.getCellPackingAdapter(
        "CG3D_SupBask").setMaxNumberCells(numSupBask)
    project.cellGroupsInfo.getCellPackingAdapter(
        "CG3D_SupAxAx").setMaxNumberCells(numSupAxAx)
    project.cellGroupsInfo.getCellPackingAdapter(
        "CG3D_SupLTS").setMaxNumberCells(numSupLTS)
    project.cellGroupsInfo.getCellPackingAdapter(
        "CG3D_L4SpinStell").setMaxNumberCells(numL4SpinStell)
    project.cellGroupsInfo.getCellPackingAdapter(
        "CG3D_L5TuftIB").setMaxNumberCells(numL5TuftIB)
    project.cellGroupsInfo.getCellPackingAdapter(
        "CG3D_L5TuftRS").setMaxNumberCells(numL5TuftRS)
    project.cellGroupsInfo.getCellPackingAdapter(
        "CG3D_DeepBask").setMaxNumberCells(numDeepBask)
    project.cellGroupsInfo.getCellPackingAdapter(
        "CG3D_DeepAxAx").setMaxNumberCells(numDeepAxAx)
    project.cellGroupsInfo.getCellPackingAdapter(
        "CG3D_DeepLTS").setMaxNumberCells(numDeepLTS)
    project.cellGroupsInfo.getCellPackingAdapter(
        "CG3D_L6NonTuftRS").setMaxNumberCells(numL6NonTuftRS)
    project.cellGroupsInfo.getCellPackingAdapter("CG3D_TCR").setMaxNumberCells(
        numTCR)
    project.cellGroupsInfo.getCellPackingAdapter("CG3D_nRT").setMaxNumberCells(
        numnRT)

    ### Change weights in synapses/gap junctions

    for netConnName in simConfig.getNetConns():

        if gabaScaling != 1:

            SimulationsInfo.addExtraSimProperty("gabaWeightScaling",
                                                str(gabaScaling))
            synList = project.morphNetworkConnectionsInfo.getSynapseList(
                netConnName)

            for index in range(0, len(synList)):
                synName = project.morphNetworkConnectionsInfo.getSynapseList(
                    netConnName).get(index).getSynapseType()
                if synName.count("GABAA") > 0:
                    print "Changing synaptic weight for syn %s in net conn %s by factor %f" % (
                        synName, netConnName, gabaScaling)

                    project.morphNetworkConnectionsInfo.getSynapseList(
                        netConnName).get(index).setWeightsGenerator(
                            NumberGenerator(gabaScaling))

        if l4ssAmpaScaling != 1:

            SimulationsInfo.addExtraSimProperty("l4ssAmpaScaling",
                                                str(l4ssAmpaScaling))
            synList = project.morphNetworkConnectionsInfo.getSynapseList(
                netConnName)

            for index in range(0, len(synList)):
                synName = project.morphNetworkConnectionsInfo.getSynapseList(
                    netConnName).get(index).getSynapseType()
                if synName.count("Syn_AMPA_L4SS_L4SS") > 0:
                    print "Changing synaptic weight for syn %s in net conn %s by factor %f" % (
                        synName, netConnName, l4ssAmpaScaling)

                    project.morphNetworkConnectionsInfo.getSynapseList(
                        netConnName).get(index).setWeightsGenerator(
                            NumberGenerator(l4ssAmpaScaling))

        if l5PyrGapScaling != 1:

            SimulationsInfo.addExtraSimProperty("l5PyrGapScaling",
                                                str(l5PyrGapScaling))
            synList = project.morphNetworkConnectionsInfo.getSynapseList(
                netConnName)

            for index in range(0, len(synList)):
                synName = project.morphNetworkConnectionsInfo.getSynapseList(
                    netConnName).get(index).getSynapseType()
                tgtCG = project.morphNetworkConnectionsInfo.getTargetCellGroup(
                    netConnName)
                if synName.count("Syn_Elect_DeepPyr_DeepPyr"
                                 ) > 0 and tgtCG.count("CG3D_L5") > 0:
                    print "Changing synaptic weight for syn %s in net conn %s by factor %f" % (
                        synName, netConnName, l5PyrGapScaling)

                    project.morphNetworkConnectionsInfo.getSynapseList(
                        netConnName).get(index).setWeightsGenerator(
                            NumberGenerator(l5PyrGapScaling))

        if inNrtTcrNmdaScaling != 1:

            SimulationsInfo.addExtraSimProperty("inNrtTcrNmdaScaling",
                                                str(inNrtTcrNmdaScaling))
            synList = project.morphNetworkConnectionsInfo.getSynapseList(
                netConnName)

            for index in range(0, len(synList)):
                synName = project.morphNetworkConnectionsInfo.getSynapseList(
                    netConnName).get(index).getSynapseType()
                if synName.count("NMDA") > 0 and (
                        synName.endswith("_IN") > 0
                        or synName.endswith("_DeepIN") > 0
                        or synName.endswith("_SupIN") > 0
                        or synName.endswith("_SupFS") > 0
                        or synName.endswith("_DeepFS") > 0
                        or synName.endswith("_SupLTS") > 0
                        or synName.endswith("_DeepLTS") > 0
                        or synName.endswith("_nRT") > 0
                        or synName.endswith("_TCR") > 0):

                    print "Changing synaptic weight for syn %s in net conn %s by factor %f" % (
                        synName, netConnName, inNrtTcrNmdaScaling)

                    project.morphNetworkConnectionsInfo.getSynapseList(
                        netConnName).get(index).setWeightsGenerator(
                            NumberGenerator(inNrtTcrNmdaScaling))

        if pyrSsNmdaScaling != 1:

            SimulationsInfo.addExtraSimProperty("pyrSsNmdaScaling",
                                                str(pyrSsNmdaScaling))
            synList = project.morphNetworkConnectionsInfo.getSynapseList(
                netConnName)

            for index in range(0, len(synList)):
                synName = project.morphNetworkConnectionsInfo.getSynapseList(
                    netConnName).get(index).getSynapseType()
                if synName.count("NMDA") > 0 and (
                        synName.endswith("_SupPyr") > 0
                        or synName.endswith("_DeepPyr") > 0
                        or synName.endswith("_L4SS") > 0
                        or synName.endswith("_L5Pyr") > 0
                        or synName.endswith("_L5RS") > 0
                        or synName.endswith("_L5IB") > 0
                        or synName.endswith("_L6NT") > 0
                        or synName.endswith("_Pyr") > 0):

                    print "Changing synaptic weight for syn %s in net conn %s by factor %f" % (
                        synName, netConnName, pyrSsNmdaScaling)

                    project.morphNetworkConnectionsInfo.getSynapseList(
                        netConnName).get(index).setWeightsGenerator(
                            NumberGenerator(pyrSsNmdaScaling))

    ### Change bias currents

    for inputName in simConfig.getInputs():

        stim = project.elecInputInfo.getStim(inputName)

        if deepBiasCurrent >= 0:

            if stim.getElectricalInput().TYPE == "IClamp" and (
                    stim.getCellGroup() == "CG3D_L5TuftIB"
                    or stim.getCellGroup() == "CG3D_L5TuftRS"
                    or stim.getCellGroup() == "CG3D_L6NonTuftRS"):

                print "Changing offset current in %s to %f" % (
                    stim.getCellGroup(), deepBiasCurrent)

                stim.setAmp(NumberGenerator(deepBiasCurrent))
                project.elecInputInfo.updateStim(stim)

    ### Change spatial discretisation of some cells. This will impact accuracy & simulation speed

    if maxElecLenFRB > 0:
        frbCell = project.cellManager.getCell("L23PyrFRB_varInit")
        info = CellTopologyHelper.recompartmentaliseCell(
            frbCell, maxElecLenFRB, project)
        print "Recompartmentalised FRB cell: " + info
        if somaNseg > 0:
            frbCell.getSegmentWithId(
                0).getSection().setNumberInternalDivisions(somaNseg)

    if maxElecLenRS > 0:
        rsCell = project.cellManager.getCell("L23PyrRS")
        info = CellTopologyHelper.recompartmentaliseCell(
            rsCell, maxElecLenRS, project)
        print "Recompartmentalised RS cell: " + info
        if somaNseg > 0:
            rsCell.getSegmentWithId(0).getSection().setNumberInternalDivisions(
                somaNseg)

    if maxElecLenIN > 0:
        inCells = [
            "SupBasket", "SupAxAx", "SupLTSInter", "DeepBasket", "DeepAxAx",
            "DeepLTSInter"
        ]

        for inCellName in inCells:
            inCell = project.cellManager.getCell(inCellName)
            info = CellTopologyHelper.recompartmentaliseCell(
                inCell, maxElecLenIN, project)
            print "Recompartmentalised " + inCellName + " cell: " + info
            if somaNseg > 0:
                inCell.getSegmentWithId(
                    0).getSection().setNumberInternalDivisions(somaNseg)

    ### Change parallel configuration

    mpiSettings = MpiSettings()
    simConfig.setMpiConf(mpiSettings.getMpiConfiguration(mpiConf))
    print "Parallel configuration: " + str(simConfig.getMpiConf())

    if suggestedRemoteRunTime > 0:
        project.neuronFileManager.setSuggestedRemoteRunTime(
            suggestedRemoteRunTime)
        project.genesisFileManager.setSuggestedRemoteRunTime(
            suggestedRemoteRunTime)

    ### Change synaptic delay associated with each net conn

    for netConnName in simConfig.getNetConns():
        if netConnName.count("gap") == 0:
            print "Changing synaptic delay in %s to %f" % (
                netConnName, defaultSynapticDelay)
            delayGen = NumberGenerator(defaultSynapticDelay)
            for synProps in project.morphNetworkConnectionsInfo.getSynapseList(
                    netConnName):
                synProps.setDelayGenerator(delayGen)

    # defaultSynapticDelay will be recorded in simulation.props and listed in SimulationBrowser GUI
    SimulationsInfo.addExtraSimProperty("defaultSynapticDelay",
                                        str(defaultSynapticDelay))

    ### Generate network structure in neuroConstruct

    pm.doGenerate(simConfig.getName(), neuroConstructSeed)

    while pm.isGenerating():
        print "Waiting for the project to be generated with Simulation Configuration: " + str(
            simConfig)
        sleep(2)

    print "Generated %i cells in %i cell groups" % (
        project.generatedCellPositions.getNumberInAllCellGroups(),
        project.generatedCellPositions.getNumberNonEmptyCellGroups())
    print "Generated %i instances in %i network connections" % (
        project.generatedNetworkConnections.getNumAllSynConns(),
        project.generatedNetworkConnections.getNumNonEmptyNetConns())
    print "Generated %i instances in %i elect inputs" % (
        project.generatedElecInputs.getNumberSingleInputs(),
        project.generatedElecInputs.getNonEmptyInputRefs().size())

    if simulators.count("NEURON") > 0:

        simRefN = simRef + "_N"
        project.simulationParameters.setReference(simRefN)

        nc.generateAndRunNeuron(project,
                                pm,
                                simConfig,
                                simRefN,
                                simulatorSeed,
                                verbose=verbose,
                                runInBackground=runInBackground,
                                varTimestep=varTimestepNeuron)

        sleep(2)  # wait a while before running GENESIS...

    if simulators.count("GENESIS") > 0:

        simRefG = simRef + "_G"
        project.simulationParameters.setReference(simRefG)

        nc.generateAndRunGenesis(project,
                                 pm,
                                 simConfig,
                                 simRefG,
                                 simulatorSeed,
                                 verbose=verbose,
                                 runInBackground=runInBackground)

        sleep(2)  # wait a while before running MOOSE...

    if simulators.count("MOOSE") > 0:

        simRefM = simRef + "_M"
        project.simulationParameters.setReference(simRefM)

        nc.generateAndRunMoose(project,
                               pm,
                               simConfig,
                               simRefM,
                               simulatorSeed,
                               verbose=verbose,
                               runInBackground=runInBackground)

        sleep(2)  # wait a while before running GENESIS...

    print "Finished running all sims, shutting down..."

    stop = datetime.datetime.now()
    print
    print "Started: %s, finished: %s" % (start.strftime("%Y-%m-%d %H:%M"),
                                         stop.strftime("%Y-%m-%d %H:%M"))
    print
예제 #8
0
def testAll(argv=None):
    if argv is None:
        argv = sys.argv

    # Load an existing neuroConstruct project
    projFile = File("../CElegans.ncx")
    print "Loading project from file: " + projFile.getAbsolutePath()+", exists: "+ str(projFile.exists())

    pm = ProjectManager()
    project = pm.loadProject(projFile)
    print "Loaded project: " + project.getProjectName()


    defSimConfig = project.simConfigInfo.getDefaultSimConfig()
    cellsOnlySimConfig = project.simConfigInfo.getSimConfig("CellsOnly")
    pharyngealSimConfig = project.simConfigInfo.getSimConfig("PharyngealNeurons")
    mdl08SimConfig = project.simConfigInfo.getSimConfig("MDL08Connections")

    expectedNumberCells = 302 

    
    ##########################
    
    print "\n----- Test 1: Check number of cells in sim config "+defSimConfig.getName()+"..."


    pm.doGenerate(defSimConfig.getName(), 1234)

    while pm.isGenerating():
            print "Waiting for the project to be generated with Simulation Configuration: "+str(defSimConfig)
            sleep(2)

    numGenerated = project.generatedCellPositions.getNumberInAllCellGroups()

    print "Number of cells generated: " + str(numGenerated)

    assert numGenerated == expectedNumberCells

    print "Correct number of cells generated!"

    ##########################

    print "\n---- Test 2: number of cells in sim config "+cellsOnlySimConfig.getName()+"..."


    pm.doGenerate(cellsOnlySimConfig.getName(), 1234)

    while pm.isGenerating():
            print "Waiting for the project to be generated with Simulation Configuration: "+str(cellsOnlySimConfig)
            sleep(2)

    numGenerated = project.generatedCellPositions.getNumberInAllCellGroups()

    print "Number of cells generated: " + str(numGenerated)

    assert numGenerated == expectedNumberCells

    print "Correct number of cells generated!"
    
    ##########################

    filename = "../../CElegansNeuronTables.xls"
    print "\n---- Test 3: confirm settings in project match those in  "+filename+"..."

    from xlrd import open_workbook
    rb = open_workbook(filename)

    print "Opened Excel file: "+ filename

    confirmed = 0
    prefix = "NCXLS_"

    for row in range(1,rb.sheet_by_index(0).nrows):
      pre = rb.sheet_by_index(0).cell(row,0).value
      post = rb.sheet_by_index(0).cell(row,1).value
      syntype = rb.sheet_by_index(0).cell(row,2).value
      num = int(rb.sheet_by_index(0).cell(row,3).value)
      synclass = rb.sheet_by_index(0).cell(row,4).value

      #print "------------------------------------------\nConnection %i has %i from %s to %s (type: %s, synapse: %s)" %(row, num, pre, post, syntype, synclass)


      netConnName = prefix+pre+"_"+post

      if "GapJunction" in syntype:
            netConnName = netConnName + "_GJ"

      src = project.morphNetworkConnectionsInfo.getSourceCellGroup(netConnName)
      tgt = project.morphNetworkConnectionsInfo.getTargetCellGroup(netConnName)

      synlist = project.morphNetworkConnectionsInfo.getSynapseList(netConnName)

      #print synlist

      assert synclass == synlist[0].getSynapseType()

      if '_GJ' in synclass and synclass != 'Generic_GJ':
        print "Only allowed gap junction synapse is Generic_GJ, not "+synclass
        assert synclass == 'Generic_GJ'
      

      if not (src == pre and tgt == post):
          print "------------------------------------------\nConnection %i has %i from %s to %s (type: %s, synapse: %s)" %(row, num, pre, post, syntype, synclass)
          print "*** Couldn't find connection: %s, src: %s, tgt: %s"%(netConnName, src, tgt)
          assert src == pre
          assert tgt == post

      if src == tgt:
          print "------------------------------------------\nConnection %i has %i from %s to %s (type: %s, synapse: %s)" %(row, num, pre, post, syntype, synclass)
          print "*** This connection is from: %s, src: %s, tgt: %s, synaptic connection on same cell!!"%(netConnName, src, tgt)

      confirmed += 1

    print "Confirmed %i connections in project match spreadsheet"%confirmed

    havePrefix = 0
    allNetConnNames = project.morphNetworkConnectionsInfo.getAllSimpleNetConnNames()
    for name in allNetConnNames:
        if name.startswith(prefix):
            havePrefix +=1

    print "Project contains %i Network connections starting with %s"%(havePrefix, prefix)

    assert havePrefix == confirmed

    ##########################
    

    print "\n---- Test 4: number of cells in sim config "+pharyngealSimConfig.getName()+"..."


    pm.doGenerate(pharyngealSimConfig.getName(), 1234471)

    while pm.isGenerating():
            print "Waiting for the project to be generated with Simulation Configuration: "+str(pharyngealSimConfig)
            sleep(2)

    numCells = project.generatedCellPositions.getNumberInAllCellGroups()
    numConns = project.generatedNetworkConnections.getNumAllSynConns()

    print "Number of cells: %i, number of connections: %i"%(numCells,numConns)

    expectedCells = 20
    expectedNetConns = 269
    assert numCells == expectedCells
    assert numConns == expectedNetConns

    print "Correct number of cells & connections generated!"
    ##########################
    

    print "\n---- Test 5: number of cells in sim config "+mdl08SimConfig.getName()+"..."


    pm.doGenerate(mdl08SimConfig.getName(), 1234471)

    while pm.isGenerating():
            print "Waiting for the project to be generated with Simulation Configuration: "+str(mdl08SimConfig)
            sleep(2)

    numCells = project.generatedCellPositions.getNumberInAllCellGroups()
    numConns = project.generatedNetworkConnections.getNumAllSynConns()

    print "Number of cells: %i, number of connections: %i"%(numCells,numConns)

    expectedCells = 9
    expectedNetConns = 21
    assert numCells == expectedCells
    assert numConns == expectedNetConns

    print "Correct number of cells & connections generated!"

    ##########################

    

    print "\n---- Test 6: General neuroConstruct project settings..."


    assert(project.proj3Dproperties.getDisplayOption() == Display3DProperties.DISPLAY_SOMA_NEURITE_SOLID)

    assert(abs(project.simulationParameters.getDt()-0.025)<=1e-9)

    assert(not project.neuronSettings.isVarTimeStep())

    assert(project.neuronSettings.getDataSaveFormat().equals(NeuronSettings.DataSaveFormat.TEXT_NC))

    assert(abs(project.simulationParameters.getTemperature() - 20.0) < 1e-6)

    ##########################


    print "\n------------------------------------------All tests completed!\n"

    exit()
def SingleCellNML2generator(projString=" ",
                            ConfigDict={},
                            ElecLenList=[],
                            somaNseg=None,
                            savingDir=None):

    projFile = File(os.getcwd(), projString)
    pm = ProjectManager()
    compSummary = {}
    for config in ConfigDict.keys():

        project = pm.loadProject(projFile)

        nmlfm = NeuroMLFileManager(project)

        compSummary[config] = {}
        if " " in config:
            configPath = config.replace(" ", "_")
        else:
            configPath = config

        for maxElecLen in ElecLenList:
            compSummary[config][str(maxElecLen)] = {}
            cell = project.cellManager.getCell(ConfigDict[config])

            if maxElecLen > 0:

                info = CellTopologyHelper.recompartmentaliseCell(
                    cell, maxElecLen, project)
                print "Recompartmentalising cell %s" % ConfigDict[config]
                if somaNseg != None:
                    cell.getSegmentWithId(
                        0).getSection().setNumberInternalDivisions(somaNseg)
                if savingDir != None:
                    cellpath = r'../../NeuroML2/%s/%s/%s_%f' % (
                        savingDir, configPath, configPath, maxElecLen)
                else:
                    cellpath = r'../../NeuroML2/%s/%s_%f' % (
                        configPath, configPath, maxElecLen)

            else:
                if savingDir != None:
                    cellpath = r'../../NeuroML2/%s/%s/%s_default' % (
                        savingDir, configPath, configPath)
                else:
                    cellpath = r'../../NeuroML2/%s/%s_default' % (configPath,
                                                                  configPath)

            summary = str(cell.getMorphSummary())
            summary_string = summary.split("_")
            for feature in summary_string:
                feature_split = feature.split(":")
                compSummary[config][str(maxElecLen)][
                    feature_split[0]] = feature_split[1]

# the format of summary :  Segs:122_Secs:61_IntDivs:1458
            print("Will be printing a cell morphology summary")
            print compSummary[config][str(maxElecLen)]
            ######### it turns out that this does not save recompartmentalized cells - all saved cells have identical spatial discretization;
            ##### generateNeuroML2 receives the parent projFile but not the loaded project which is  modified by the CellTopologyHelper.recompartmentaliseCell()

            ##################### neuroConstruct block #############################################################################

            neuroConstructSeed = 1234
            verbose = True
            pm.doGenerate(config, neuroConstructSeed)

            while pm.isGenerating():
                if verbose:
                    print(
                        "Waiting for the project to be generated with Simulation Configuration: "
                        + config)
                    time.sleep(5)

            simConfig = project.simConfigInfo.getSimConfig(config)

            seed = 1234
            genDir = File(projFile.getParentFile(), "generatedNeuroML2")
            nmlfm.generateNeuroMLFiles(
                simConfig, NeuroMLConstants.NeuroMLVersion.getLatestVersion(),
                LemsConstants.LemsOption.LEMS_WITHOUT_EXECUTE_MODEL,
                OriginalCompartmentalisation(), seed, False, True, genDir,
                "GENESIS Physiological Units", False)

            ########################################################################################################################

            if not os.path.exists(cellpath):
                print("Creating a new directory %s" % cellpath)
                os.makedirs(cellpath)
            else:
                print("A directory %s already exists" % cellpath)

            src_files = os.listdir("../generatedNeuroML2/")

            for file_name in src_files:
                full_file_name = os.path.join("../generatedNeuroML2/",
                                              file_name)
                if (os.path.isfile(full_file_name)):
                    print("Moving generated NeuroML2 to files to %s" %
                          cellpath)
                    shutil.copy(full_file_name, cellpath)

    #with open("compSummary.json",'w') as fout:
    #json.dump(compSummary, fout)

    subprocess.call(["~/neuroConstruct/nC.sh -python RegenerateNml2.py -f"],
                    shell=True)

    #subprocess.call(["cp compSummary.json ~/Thalamocortical/NeuroML2/"],shell=True)

    quit()
예제 #10
0
def testAll(argv=None):
    if argv is None:
        argv = sys.argv

    print "Loading project from " + projFile.getCanonicalPath()

    projectManager = ProjectManager()
    project = projectManager.loadProject(projFile)

    assert (len(project.getProjectDescription()) > 0)

    assert (len(project.cellManager.getAllCells()) >= 22)

    assert (len(project.cellGroupsInfo.getAllCellGroupNames()) >= 36)

    synSetupFile = open("netbuild/makeSyns.sh", 'r')

    for line in synSetupFile:
        line = line.strip()

        if len(line) > 0 and not line.startswith("#"):
            words = line.split()
            if len(words) >= 6 and words[2].startswith("Syn_"):
                synName = words[2]
                syn_dir = "../cellMechanisms/%s" % synName
                if os.path.isdir(syn_dir):
                    cm = project.cellMechanismInfo.getCellMechanism(synName)
                    print "Checked syn %s" % cm.getInstanceName()
                else:
                    print("Problem finding directory: %s!! This is probably due to the synapses not having been generated \n"%syn_dir+ \
                     "from netbuild/makeSyns.sh (they need to be generated loacally; too many to commit to repository)")

    netConnList = open("netbuild/netConnList", 'r')

    for line in netConnList:
        line = line.strip()

        if len(line) > 0 and not line.startswith("#"):

            #print "\n\n---- Deciphering line: "+ line
            words = line.split()
            source = words[0]
            target = words[1]
            syns = words[2].strip("[]").split(",")
            netConnName = "NC3D_" + source[5:] + "_" + target[5:]
            assert (source == project.morphNetworkConnectionsInfo.
                    getSourceCellGroup(netConnName))
            assert (target == project.morphNetworkConnectionsInfo.
                    getTargetCellGroup(netConnName))
            print "Checked %s" % netConnName

    assert (project.proj3Dproperties.getDisplayOption() ==
            Display3DProperties.DISPLAY_SOMA_SOLID_NEURITE_LINE)

    assert (abs(project.simulationParameters.getDt() - 0.025) <= 1e-9)

    assert (not project.neuronSettings.isVarTimeStep())

    assert (project.neuronSettings.isForceCorrectInit())

    assert (project.neuronSettings.getDataSaveFormat().equals(
        NeuronSettings.DataSaveFormat.TEXT_NC))

    assert (not project.genesisSettings.isSymmetricCompartments())

    assert (project.genesisSettings.isPhysiologicalUnits())

    print "\n**************************************"
    print "    All tests passed!"
    print "**************************************\n"