Example #1
0
def generate(reference = "SimpleNet",
             scale=1,
             format='xml'):

    population_size = scale_pop_size(3,scale)

    nml_doc, network = oc.generate_network(reference)

    oc.add_cell_and_channels(nml_doc, 'izhikevich/RS.cell.nml','RS')

    pop = oc.add_population_in_rectangular_region(network,
                                                  'RS_pop',
                                                  'RS',
                                                  population_size,
                                                  0,0,0,
                                                  100,100,100)

    syn = oc.add_exp_two_syn(nml_doc, 
                             id="syn0", 
                             gbase="2nS",
                             erev="0mV",
                             tau_rise="0.5ms",
                             tau_decay="10ms")

    pfs = oc.add_poisson_firing_synapse(nml_doc,
                                       id="poissonFiringSyn",
                                       average_rate="50 Hz",
                                       synapse_id=syn.id)

    oc.add_inputs_to_population(network,
                                "Stim0",
                                pop,
                                pfs.id,
                                all_cells=True)

    nml_file_name = '%s.net.nml'%network.id
    oc.save_network(nml_doc, 
                    nml_file_name,
                    validate=(format=='xml'),
                    format = format)

    if format=='xml':
        oc.generate_lems_simulation(nml_doc, 
                                    network, 
                                    nml_file_name, 
                                    duration =      500, 
                                    dt =            0.025)
Example #2
0
def generate(reference="SimpleNet", scale=1, format='xml'):

    population_size = scale_pop_size(3, scale)

    nml_doc, network = oc.generate_network(reference)

    oc.add_cell_and_channels(nml_doc, 'izhikevich/RS.cell.nml', 'RS')

    pop = oc.add_population_in_rectangular_region(network, 'RS_pop', 'RS',
                                                  population_size, 0, 0, 0,
                                                  100, 100, 100)

    syn = oc.add_exp_two_syn(nml_doc,
                             id="syn0",
                             gbase="2nS",
                             erev="0mV",
                             tau_rise="0.5ms",
                             tau_decay="10ms")

    pfs = oc.add_poisson_firing_synapse(nml_doc,
                                        id="poissonFiringSyn",
                                        average_rate="50 Hz",
                                        synapse_id=syn.id)

    oc.add_inputs_to_population(network, "Stim0", pop, pfs.id, all_cells=True)

    nml_file_name = '%s.net.nml' % network.id
    oc.save_network(nml_doc,
                    nml_file_name,
                    validate=(format == 'xml'),
                    format=format)

    if format == 'xml':
        oc.generate_lems_simulation(nml_doc,
                                    network,
                                    nml_file_name,
                                    duration=500,
                                    dt=0.025)
Example #3
0
'''
Generates a NeuroML 2 file with a LEMS file recording many details of the network
'''

import opencortex.build as oc


nml_doc, network = oc.generate_network("Recording")


#####   Cells

oc.add_cell_and_channels(nml_doc, 'izhikevich/RS.cell.nml','RS')
oc.add_cell_and_channels(nml_doc, 'iaf/iaf.cell.nml','iaf')
oc.add_cell_and_channels(nml_doc, 'acnet2/pyr_4_sym_soma.cell.nml','pyr_4_sym_soma')
oc.add_cell_and_channels(nml_doc, 'acnet2/pyr_4_sym.cell.nml','pyr_4_sym')

xDim = 500
yDim = 100
zDim = 500
offset = 0


#####   Synapses

synAmpa1 = oc.add_exp_two_syn(nml_doc, id="synAmpa1", gbase="1nS",
                         erev="0mV", tau_rise="0.5ms", tau_decay="10ms")
                         
synAmpa2 = oc.add_exp_two_syn(nml_doc, id="synAmpa2", gbase="0.5nS",
                         erev="0mV", tau_rise="0.5ms", tau_decay="5ms")
t6=-300.0

boundaries={}

boundaries['L1']=[0,t1]
boundaries['L23']=[t1,t1+t2+t3]
boundaries['L4']=[t1+t2+t3,t1+t2+t3+t4]
boundaries['L5']=[t1+t2+t3+t4,t1+t2+t3+t4+t5]
boundaries['L6']=[t1+t2+t3+t4+t5,t1+t2+t3+t4+t5+t6]

xs = [0,500]
zs = [0,500] 

nml_doc, network = oc.generate_network("TestTraubBuild")

oc.add_cell_and_channels(nml_doc, '../NeuroML2/prototypes/Thalamocortical/L23PyrRS.cell.nml','L23PyrRS')
oc.add_cell_and_channels(nml_doc, '../NeuroML2/prototypes/Thalamocortical/SupBasket.cell.nml','SupBasket')


popObjs=oc.add_populations_in_layers(network,boundaries,popDict,xs,zs)


extra_params=[{'pre':'L23PyrRS','post':'SupBasket','weights':[0.05],'delays':[5],'synComps':['NMDA']}]


synapseList,projArray=oc.build_connectivity(network,popObjs,"Traub_conn_data.json","../NeuroML2/prototypes/Thalamocortical/",extra_params)                  

oc.add_synapses(nml_doc,'../NeuroML2/prototypes/Thalamocortical/',synapseList)

nml_file_name = '%s.net.nml'%network.id
oc.save_network(nml_doc, nml_file_name, validate=True)
def RunColumnSimulation(
    net_id="TestRunColumn",
    nml2_source_dir="../../../neuroConstruct/generatedNeuroML2/",
    sim_config="TempSimConfig",
    scale_cortex=0.1,
    scale_thalamus=0.1,
    cell_bodies_overlap=True,
    cylindrical=True,
    default_synaptic_delay=0.05,
    gaba_scaling=1.0,
    l4ss_ampa_scaling=1.0,
    l5pyr_gap_scaling=1.0,
    in_nrt_tcr_nmda_scaling=1.0,
    pyr_ss_nmda_scaling=1.0,
    deep_bias_current=-1,
    include_gap_junctions=True,
    which_models="all",
    dir_nml2="../../",
    duration=300,
    dt=0.025,
    max_memory="1000M",
    seed=1234,
    simulator=None,
    num_of_cylinder_sides=None,
):

    popDictFull = {}

    ##############   Full model ##################################

    popDictFull["CG3D_L23PyrRS"] = (1000, "L23", "L23PyrRS", "multi")
    popDictFull["CG3D_SupBask"] = (90, "L23", "SupBasket", "multi")
    popDictFull["CG3D_SupAxAx"] = (90, "L23", "SupAxAx", "multi")
    popDictFull["CG3D_L5TuftIB"] = (800, "L5", "L5TuftedPyrIB", "multi")
    popDictFull["CG3D_L5TuftRS"] = (200, "L5", "L5TuftedPyrRS", "multi")
    popDictFull["CG3D_L4SpinStell"] = (240, "L4", "L4SpinyStellate", "multi")
    popDictFull["CG3D_L23PyrFRB"] = (50, "L23", "L23PyrFRB_varInit", "multi")
    popDictFull["CG3D_L6NonTuftRS"] = (500, "L6", "L6NonTuftedPyrRS", "multi")
    popDictFull["CG3D_DeepAxAx"] = (100, "L6", "DeepAxAx", "multi")
    popDictFull["CG3D_DeepBask"] = (100, "L6", "DeepBasket", "multi")
    popDictFull["CG3D_DeepLTS"] = (100, "L6", "DeepLTSInter", "multi")
    popDictFull["CG3D_SupLTS"] = (90, "L23", "SupLTSInter", "multi")
    popDictFull["CG3D_nRT"] = (100, "Thalamus", "nRT", "multi")
    popDictFull["CG3D_TCR"] = (100, "Thalamus", "TCR", "multi")

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

    dir_to_cells = os.path.join(dir_nml2, "cells")

    dir_to_synapses = os.path.join(dir_nml2, "synapses")

    dir_to_gap_junctions = os.path.join(dir_nml2, "gapJunctions")

    popDict = {}

    cell_model_list = []

    cell_diameter_dict = {}

    nml_doc, network = oc.generate_network(net_id, seed)

    for cell_population in popDictFull.keys():

        include_cell_population = False

        cell_model = popDictFull[cell_population][2]

        if which_models == "all" or cell_model in which_models:

            popDict[cell_population] = ()

            if popDictFull[cell_population][1] != "Thalamus":

                popDict[cell_population] = (
                    int(round(scale_cortex * popDictFull[cell_population][0])),
                    popDictFull[cell_population][1],
                    popDictFull[cell_population][2],
                    popDictFull[cell_population][3],
                )

                cell_count = int(round(scale_cortex * popDictFull[cell_population][0]))

            else:

                popDict[cell_population] = (
                    int(round(scale_thalamus * popDictFull[cell_population][0])),
                    popDictFull[cell_population][1],
                    popDictFull[cell_population][2],
                    popDictFull[cell_population][3],
                )

                cell_count = int(round(scale_thalamus * popDictFull[cell_population][0]))

            if cell_count != 0:

                include_cell_population = True

        if include_cell_population:

            cell_model_list.append(popDictFull[cell_population][2])

            cell_diameter = oc.get_soma_diameter(popDictFull[cell_population][2], dir_to_cell=dir_to_cells)

            if popDictFull[cell_population][2] not in cell_diameter_dict.keys():

                cell_diameter_dict[popDictFull[cell_population][2]] = cell_diameter

    cell_model_list_final = list(set(cell_model_list))

    opencortex.print_comment_v("This is a final list of cell model ids: %s" % cell_model_list_final)

    copy_nml2_from_source = False

    for cell_model in cell_model_list_final:

        if not os.path.exists(os.path.join(dir_to_cells, "%s.cell.nml" % cell_model)):

            copy_nml2_from_source = True

            break

    if copy_nml2_from_source:

        oc.copy_nml2_source(
            dir_to_project_nml2=dir_nml2,
            primary_nml2_dir=nml2_source_dir,
            electrical_synapse_tags=["Elect"],
            chemical_synapse_tags=[".synapse."],
            extra_channel_tags=["cad"],
        )

        passed_includes_in_cells = oc_utils.check_includes_in_cells(
            dir_to_cells, cell_model_list_final, extra_channel_tags=["cad"]
        )

        if not passed_includes_in_cells:

            opencortex.print_comment_v("Execution of RunColumn.py will terminate.")

            quit()

    for cell_model in cell_model_list_final:

        oc.add_cell_and_channels(
            nml_doc, os.path.join(dir_to_cells, "%s.cell.nml" % cell_model), cell_model, use_prototypes=False
        )

    t1 = -0
    t2 = -250
    t3 = -250
    t4 = -200.0
    t5 = -300.0
    t6 = -300.0
    t7 = -200.0
    t8 = -200.0

    boundaries = {}

    boundaries["L1"] = [0, t1]
    boundaries["L23"] = [t1, t1 + t2 + t3]
    boundaries["L4"] = [t1 + t2 + t3, t1 + t2 + t3 + t4]
    boundaries["L5"] = [t1 + t2 + t3 + t4, t1 + t2 + t3 + t4 + t5]
    boundaries["L6"] = [t1 + t2 + t3 + t4 + t5, t1 + t2 + t3 + t4 + t5 + t6]
    boundaries["Thalamus"] = [t1 + t2 + t3 + t4 + t5 + t6 + t7, t1 + t2 + t3 + t4 + t5 + t6 + t7 + t8]

    xs = [0, 500]
    zs = [0, 500]

    passed_pops = oc_utils.check_pop_dict_and_layers(pop_dict=popDict, boundary_dict=boundaries)

    if passed_pops:

        opencortex.print_comment_v("Population parameters were specified correctly.")

        if cylindrical:

            pop_params = oc_utils.add_populations_in_cylindrical_layers(
                network,
                boundaries,
                popDict,
                radiusOfCylinder=250,
                cellBodiesOverlap=cell_bodies_overlap,
                cellDiameterArray=cell_diameter_dict,
                numOfSides=num_of_cylinder_sides,
            )

        else:

            pop_params = oc_utils.add_populations_in_rectangular_layers(
                network, boundaries, popDict, xs, zs, cellBodiesOverlap=False, cellDiameterArray=cell_diameter_dict
            )

    else:

        opencortex.print_comment_v(
            "Population parameters were specified incorrectly; execution of RunColumn.py will terminate."
        )

        quit()

    src_files = os.listdir("./")

    if "netConnList" in src_files:

        full_path_to_connectivity = "netConnList"

    else:

        full_path_to_connectivity = "../../../neuroConstruct/pythonScripts/netbuild/netConnList"

    weight_params = [
        {"weight": gaba_scaling, "synComp": "GABAA", "synEndsWith": [], "targetCellGroup": []},
        {"weight": l4ss_ampa_scaling, "synComp": "Syn_AMPA_L4SS_L4SS", "synEndsWith": [], "targetCellGroup": []},
        {
            "weight": l5pyr_gap_scaling,
            "synComp": "Syn_Elect_DeepPyr_DeepPyr",
            "synEndsWith": [],
            "targetCellGroup": ["CG3D_L5"],
        },
        {
            "weight": in_nrt_tcr_nmda_scaling,
            "synComp": "NMDA",
            "synEndsWith": ["_IN", "_DeepIN", "_SupIN", "_SupFS", "_DeepFS", "_SupLTS", "_DeepLTS", "_nRT", "_TCR"],
            "targetCellGroup": [],
        },
        {
            "weight": pyr_ss_nmda_scaling,
            "synComp": "NMDA",
            "synEndsWith": ["_IN", "_DeepIN", "_SupIN", "_SupFS", "_DeepFS", "_SupLTS", "_DeepLTS", "_nRT", "_TCR"],
            "targetCellGroup": [],
        },
    ]

    delay_params = [{"delay": default_synaptic_delay, "synComp": "all"}]

    passed_weight_params = oc_utils.check_weight_params(weight_params)

    passed_delay_params = oc_utils.check_delay_params(delay_params)

    if passed_weight_params and passed_delay_params:

        opencortex.print_comment_v("Synaptic weight and delay parameters were specified correctly.")

        ignore_synapses = []
        if not include_gap_junctions:
            ignore_synapses = [
                "Syn_Elect_SupPyr_SupPyr",
                "Syn_Elect_CortIN_CortIN",
                "Syn_Elect_L4SS_L4SS",
                "Syn_Elect_DeepPyr_DeepPyr",
                "Syn_Elect_nRT_nRT",
            ]

        all_synapse_components, projArray, cached_segment_dicts = oc_utils.build_connectivity(
            net=network,
            pop_objects=pop_params,
            path_to_cells=dir_to_cells,
            full_path_to_conn_summary=full_path_to_connectivity,
            pre_segment_group_info=[{"PreSegGroup": "distal_axon", "ProjType": "Chem"}],
            synaptic_scaling_params=weight_params,
            synaptic_delay_params=delay_params,
            ignore_synapses=ignore_synapses,
        )

    else:

        if not passed_weight_params:

            opencortex.print_comment_v(
                "Synaptic weight parameters were specified incorrectly; execution of RunColumn.py will terminate."
            )

        if not passed_delay_params:

            opencortex.print_comment_v(
                "Synaptic delay parameters were specified incorrectly; execution of RunColumn.py will terminate."
            )

        quit()

    ############ for testing only; will add original specifications later ##############################################################

    if sim_config == "Testing1":

        input_params = {
            "CG3D_L23PyrRS": [
                {
                    "InputType": "GeneratePoissonTrains",
                    "InputName": "Poi_CG3D_L23PyrRS",
                    "TrainType": "transient",
                    "Synapse": "Syn_AMPA_SupPyr_SupPyr",
                    "AverageRateList": [200.0, 150.0],
                    "RateUnits": "Hz",
                    "TimeUnits": "ms",
                    "DurationList": [100.0, 50.0],
                    "DelayList": [50.0, 200.0],
                    "FractionToTarget": 1.0,
                    "LocationSpecific": False,
                    "TargetDict": {"soma_group": 1},
                }
            ]
        }

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

    if sim_config == "Testing2":

        input_params_final = {
            "CG3D_L23PyrRS": [
                {
                    "InputType": "PulseGenerators",
                    "InputName": "DepCurr_L23RS",
                    "Noise": True,
                    "SmallestAmplitudeList": [5.0e-5, 1.0e-5],
                    "LargestAmplitudeList": [1.0e-4, 2.0e-5],
                    "DurationList": [20000.0, 20000.0],
                    "DelayList": [0.0, 20000.0],
                    "TimeUnits": "ms",
                    "AmplitudeUnits": "uA",
                    "FractionToTarget": 1.0,
                    "LocationSpecific": False,
                    "TargetDict": {"dendrite_group": 1},
                }
            ]
        }

    if sim_config == "TempSimConfig":

        input_params = {
            "CG3D_L23PyrRS": [
                {
                    "InputType": "PulseGenerators",
                    "InputName": "DepCurr_L23RS",
                    "Noise": True,
                    "SmallestAmplitudeList": [5.0e-5],
                    "LargestAmplitudeList": [1.0e-4],
                    "DurationList": [20000.0],
                    "DelayList": [0.0],
                    "TimeUnits": "ms",
                    "AmplitudeUnits": "uA",
                    "FractionToTarget": 1.0,
                    "LocationSpecific": False,
                    "UniversalTargetSegmentID": 0,
                    "UniversalFractionAlong": 0.5,
                },
                {
                    "InputType": "GeneratePoissonTrains",
                    "InputName": "BackgroundL23RS",
                    "TrainType": "persistent",
                    "Synapse": "Syn_AMPA_SupPyr_SupPyr",
                    "AverageRateList": [30.0],
                    "RateUnits": "Hz",
                    "FractionToTarget": 1.0,
                    "LocationSpecific": False,
                    "TargetDict": {"dendrite_group": 100},
                },
                {
                    "InputType": "GeneratePoissonTrains",
                    "InputName": "EctopicStimL23RS",
                    "TrainType": "persistent",
                    "Synapse": "SynForEctStim",
                    "AverageRateList": [0.1],
                    "RateUnits": "Hz",
                    "FractionToTarget": 1.0,
                    "LocationSpecific": False,
                    "UniversalTargetSegmentID": 143,
                    "UniversalFractionAlong": 0.5,
                },
            ],
            "CG3D_TCR": [
                {
                    "InputType": "GeneratePoissonTrains",
                    "InputName": "EctopicStimTCR",
                    "TrainType": "persistent",
                    "Synapse": "SynForEctStim",
                    "AverageRateList": [1.0],
                    "RateUnits": "Hz",
                    "FractionToTarget": 1.0,
                    "LocationSpecific": False,
                    "UniversalTargetSegmentID": 269,
                    "UniversalFractionAlong": 0.5,
                },
                {
                    "InputType": "GeneratePoissonTrains",
                    "InputName": "Input_20",
                    "TrainType": "persistent",
                    "Synapse": "Syn_AMPA_L6NT_TCR",
                    "AverageRateList": [50.0],
                    "RateUnits": "Hz",
                    "FractionToTarget": 1.0,
                    "LocationSpecific": False,
                    "TargetDict": {"dendrite_group": 100},
                },
            ],
            "CG3D_L23PyrFRB": [
                {
                    "InputType": "GeneratePoissonTrains",
                    "InputName": "EctopicStimL23FRB",
                    "TrainType": "persistent",
                    "Synapse": "SynForEctStim",
                    "AverageRateList": [0.1],
                    "RateUnits": "Hz",
                    "FractionToTarget": 1.0,
                    "LocationSpecific": False,
                    "UniversalTargetSegmentID": 143,
                    "UniversalFractionAlong": 0.5,
                },
                {
                    "InputType": "PulseGenerators",
                    "InputName": "DepCurr_L23FRB",
                    "Noise": True,
                    "SmallestAmplitudeList": [2.5e-4],
                    "LargestAmplitudeList": [3.5e-4],
                    "DurationList": [20000.0],
                    "DelayList": [0.0],
                    "TimeUnits": "ms",
                    "AmplitudeUnits": "uA",
                    "FractionToTarget": 1.0,
                    "LocationSpecific": False,
                    "UniversalTargetSegmentID": 0,
                    "UniversalFractionAlong": 0.5,
                },
            ],
            "CG3D_L6NonTuftRS": [
                {
                    "InputType": "GeneratePoissonTrains",
                    "InputName": "EctopicStimL6NT",
                    "TrainType": "persistent",
                    "Synapse": "SynForEctStim",
                    "AverageRateList": [1.0],
                    "RateUnits": "Hz",
                    "FractionToTarget": 1.0,
                    "LocationSpecific": False,
                    "UniversalTargetSegmentID": 95,
                    "UniversalFractionAlong": 0.5,
                },
                {
                    "InputType": "PulseGenerators",
                    "InputName": "DepCurr_L6NT",
                    "Noise": True,
                    "SmallestAmplitudeList": [5.0e-5],
                    "LargestAmplitudeList": [1.0e-4],
                    "DurationList": [20000.0],
                    "DelayList": [0.0],
                    "TimeUnits": "ms",
                    "AmplitudeUnits": "uA",
                    "FractionToTarget": 1.0,
                    "LocationSpecific": False,
                    "UniversalTargetSegmentID": 0,
                    "UniversalFractionAlong": 0.5,
                },
            ],
            "CG3D_L4SpinStell": [
                {
                    "InputType": "PulseGenerators",
                    "InputName": "DepCurr_L4SS",
                    "Noise": True,
                    "SmallestAmplitudeList": [5.0e-5],
                    "LargestAmplitudeList": [1.0e-4],
                    "DurationList": [20000.0],
                    "DelayList": [0.0],
                    "TimeUnits": "ms",
                    "AmplitudeUnits": "uA",
                    "FractionToTarget": 1.0,
                    "LocationSpecific": False,
                    "UniversalTargetSegmentID": 0,
                    "UniversalFractionAlong": 0.5,
                }
            ],
            "CG3D_L5TuftIB": [
                {
                    "InputType": "GeneratePoissonTrains",
                    "InputName": "BackgroundL5",
                    "TrainType": "persistent",
                    "Synapse": "Syn_AMPA_L5RS_L5Pyr",
                    "AverageRateList": [30.0],
                    "RateUnits": "Hz",
                    "FractionToTarget": 1.0,
                    "LocationSpecific": False,
                    "TargetDict": {"dendrite_group": 100},
                },
                {
                    "InputType": "GeneratePoissonTrains",
                    "InputName": "EctopicStimL5IB",
                    "TrainType": "persistent",
                    "Synapse": "SynForEctStim",
                    "AverageRateList": [1.0],
                    "RateUnits": "Hz",
                    "FractionToTarget": 1.0,
                    "LocationSpecific": False,
                    "UniversalTargetSegmentID": 119,
                    "UniversalFractionAlong": 0.5,
                },
                {
                    "InputType": "PulseGenerators",
                    "InputName": "DepCurr_L5IB",
                    "Noise": True,
                    "SmallestAmplitudeList": [5.0e-5],
                    "LargestAmplitudeList": [1.0e-4],
                    "DurationList": [20000.0],
                    "DelayList": [0.0],
                    "TimeUnits": "ms",
                    "AmplitudeUnits": "uA",
                    "FractionToTarget": 1.0,
                    "LocationSpecific": False,
                    "UniversalTargetSegmentID": 0,
                    "UniversalFractionAlong": 0.5,
                },
            ],
            "CG3D_L5TuftRS": [
                {
                    "InputType": "GeneratePoissonTrains",
                    "InputName": "EctopicStimL5RS",
                    "TrainType": "persistent",
                    "Synapse": "SynForEctStim",
                    "AverageRateList": [1.0],
                    "RateUnits": "Hz",
                    "FractionToTarget": 1.0,
                    "LocationSpecific": False,
                    "UniversalTargetSegmentID": 119,
                    "UniversalFractionAlong": 0.5,
                },
                {
                    "InputType": "PulseGenerators",
                    "InputName": "DepCurr_L5RS",
                    "Noise": True,
                    "SmallestAmplitudeList": [5.0e-5],
                    "LargestAmplitudeList": [1.0e-4],
                    "DurationList": [20000.0],
                    "DelayList": [0.0],
                    "TimeUnits": "ms",
                    "AmplitudeUnits": "uA",
                    "FractionToTarget": 1.0,
                    "LocationSpecific": False,
                    "UniversalTargetSegmentID": 0,
                    "UniversalFractionAlong": 0.5,
                },
            ],
        }

        input_params_final = {}

        for pop_id in pop_params.keys():

            if pop_id in input_params.keys():

                input_params_final[pop_id] = input_params[pop_id]

        if deep_bias_current >= 0:

            for cell_group in input_params_final.keys():

                for input_group in range(0, len(input_params_final[cell_group])):

                    check_type = input_params_final[cell_group][input_group]["InputType"] == "PulseGenerators"

                    check_group_1 = cell_group == "CG3D_L5TuftIB"

                    check_group_2 = cell_group == "CG3D_L5TuftRS"

                    check_group_3 = cell_group == "CG3D_L6NonTuftRS"

                    if check_type and (check_group_1 or check_group_2 or check_group_3):

                        opencortex.print_comment_v(
                            "Changing offset current in 'PulseGenerators' for %s to %f"
                            % (cell_group, deep_bias_current)
                        )

                        input_params_final[cell_group][input_group]["SmallestAmplitudeList"] = [
                            (deep_bias_current - 0.05) / 1000
                        ]

                        input_params_final[cell_group][input_group]["LargestAmplitudeList"] = [
                            (deep_bias_current + 0.05) / 1000
                        ]

    input_list_array_final, input_synapse_list = oc_utils.build_inputs(
        nml_doc=nml_doc,
        net=network,
        population_params=pop_params,
        input_params=input_params_final,
        cached_dicts=cached_segment_dicts,
        path_to_cells=dir_to_cells,
        path_to_synapses=dir_to_synapses,
    )

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

    for input_synapse in input_synapse_list:

        if input_synapse not in all_synapse_components:

            all_synapse_components.append(input_synapse)

    synapse_list = []

    gap_junction_list = []

    for syn_ind in range(0, len(all_synapse_components)):

        if "Elect" not in all_synapse_components[syn_ind]:

            synapse_list.append(all_synapse_components[syn_ind])

            all_synapse_components[syn_ind] = os.path.join(net_id, all_synapse_components[syn_ind] + ".synapse.nml")

        else:

            gap_junction_list.append(all_synapse_components[syn_ind])

            all_synapse_components[syn_ind] = os.path.join(net_id, all_synapse_components[syn_ind] + ".nml")

    oc.add_synapses(nml_doc, dir_to_synapses, synapse_list, synapse_tag=True)

    oc.add_synapses(nml_doc, dir_to_gap_junctions, gap_junction_list, synapse_tag=False)

    nml_file_name = "%s.net.nml" % network.id

    oc.save_network(nml_doc, nml_file_name, validate=True, max_memory=max_memory)

    oc.remove_component_dirs(
        dir_to_project_nml2="%s" % network.id, list_of_cell_ids=cell_model_list_final, extra_channel_tags=["cad"]
    )

    lems_file_name = oc.generate_lems_simulation(
        nml_doc, network, nml_file_name, duration=duration, dt=dt, include_extra_lems_files=all_synapse_components
    )

    if simulator != None:

        opencortex.print_comment_v("Starting simulation of %s.net.nml" % net_id)

        oc.simulate_network(lems_file_name=lems_file_name, simulator=simulator, max_memory=max_memory)
for testing purposes
'''

import opencortex.build as oc


nml_doc, network = oc.generate_network("Balanced")

scale = .4
min_pop_size = 3

def scale_pop_size(baseline):
    return max(min_pop_size, int(baseline*scale))


oc.add_cell_and_channels(nml_doc, '../NeuroML2/prototypes/AllenInstituteCellTypesDB_HH/HH_464198958.cell.nml','HH_464198958')
oc.add_cell_and_channels(nml_doc, '../NeuroML2/prototypes/AllenInstituteCellTypesDB_HH/HH_471141261.cell.nml','HH_471141261')
#oc.add_cell_and_channels(nml_doc, '../NeuroML2/prototypes/BlueBrainProject_NMC/cADpyr229_L23_PC_5ecbf9b163_0_0.cell.nml', 'cADpyr229_L23_PC_5ecbf9b163_0_0')


xDim = 400
yDim = 500
zDim = 300

xs = -200
ys = -150
zs = 100

#####   Synapses

synAmpa1 = oc.add_exp_two_syn(nml_doc, id="synAmpa1", gbase="1nS",
    
    for pop_in_layer in range(0,len(popDictFull[cell_model])):
      
        pop_in_layer_tuple=()
        print round(scale*popDictFull[cell_model][pop_in_layer][0])
        pop_in_layer_tuple=( int(round(scale*popDictFull[cell_model][pop_in_layer][0] )), popDictFull[cell_model][pop_in_layer][1] )
        
        popDict[cell_model].append(pop_in_layer_tuple)
        
        if int(round(scale*popDictFull[cell_model][pop_in_layer][0] )) !=0:
    
           include_cell_model=True
       
    if include_cell_model:
    
       oc.add_cell_and_channels(nml_doc, '../NeuroML2/prototypes/Thalamocortical/%s.cell.nml'%cell_model,cell_model)

        
        

t1=-0
t2=-250
t3=-250
t4=-200.0
t5=-300.0
t6=-300.0
t7=-200.0
t8=-200.0

boundaries={}
Example #8
0
def generate(reference = "Balanced",
             num_bbp =1,
             scalePops = 1,
             scalex=1,
             scaley=1,
             scalez=1,
             connections=True,
             duration = 1000,
             global_delay = 0,
             format='xml'):

    num_exc = scale_pop_size(80,scalePops)
    num_inh = scale_pop_size(40,scalePops)
    
    nml_doc, network = oc.generate_network(reference)

    oc.add_cell_and_channels(nml_doc, 'AllenInstituteCellTypesDB_HH/HH_464198958.cell.nml','HH_464198958')
    oc.add_cell_and_channels(nml_doc, 'AllenInstituteCellTypesDB_HH/HH_471141261.cell.nml','HH_471141261')
    
    if num_bbp>0:
        oc.add_cell_and_channels(nml_doc, 'BlueBrainProject_NMC/cADpyr229_L23_PC_5ecbf9b163_0_0.cell.nml', 'cADpyr229_L23_PC_5ecbf9b163_0_0')

    xDim = 400*scalex
    yDim = 500*scaley
    zDim = 300*scalez

    xs = -200
    ys = -150
    zs = 100

    #####   Synapses

    synAmpa1 = oc.add_exp_two_syn(nml_doc, id="synAmpa1", gbase="1nS",
                             erev="0mV", tau_rise="0.5ms", tau_decay="5ms")

    synGaba1 = oc.add_exp_two_syn(nml_doc, id="synGaba1", gbase="2nS",
                             erev="-80mV", tau_rise="1ms", tau_decay="20ms")

    #####   Input types


    pfs1 = oc.add_poisson_firing_synapse(nml_doc,
                                       id="psf1",
                                       average_rate="150 Hz",
                                       synapse_id=synAmpa1.id)


    #####   Populations

    popExc = oc.add_population_in_rectangular_region(network,
                                                  'popExc',
                                                  'HH_464198958',
                                                  num_exc,
                                                  xs,ys,zs,
                                                  xDim,yDim,zDim)

    popInh = oc.add_population_in_rectangular_region(network,
                                                  'popInh',
                                                  'HH_471141261',
                                                  num_inh,
                                                  xs,ys,zs,
                                                  xDim,yDim,zDim)
    if num_bbp == 1:
        popBBP = oc.add_single_cell_population(network,
                                             'popBBP',
                                             'cADpyr229_L23_PC_5ecbf9b163_0_0',
                                             z=200)
    elif num_bbp > 1:

        popBBP = oc.add_population_in_rectangular_region(network,
                                                      'popBBP',
                                                      'cADpyr229_L23_PC_5ecbf9b163_0_0',
                                                      num_bbp,
                                                      xs,ys,zs,
                                                      xDim,yDim,zDim)


    #####   Projections

    total_conns = 0
    if connections:
        proj = oc.add_probabilistic_projection(network, "proj0",
                                        popExc, popExc,
                                        synAmpa1.id, 0.3, delay = global_delay)
        total_conns += len(proj.connection_wds)

        proj = oc.add_probabilistic_projection(network, "proj1",
                                        popExc, popInh,
                                        synAmpa1.id, 0.5, delay = global_delay)
        total_conns += len(proj.connection_wds)

        proj = oc.add_probabilistic_projection(network, "proj3",
                                        popInh, popExc,
                                        synGaba1.id, 0.7, delay = global_delay)
        total_conns += len(proj.connection_wds)

        proj = oc.add_probabilistic_projection(network, "proj4",
                                        popInh, popInh,
                                        synGaba1.id, 0.5, delay = global_delay)
        total_conns += len(proj.connection_wds)



        if num_bbp>0:
            proj = oc.add_probabilistic_projection(network, "proj5",
                                            popExc, popBBP,
                                            synAmpa1.id, 0.5, delay = global_delay)
                                        
        total_conns += len(proj.connection_wds)

    #####   Inputs

    oc.add_inputs_to_population(network, "Stim0",
                                popExc, pfs1.id,
                                all_cells=True)



    #####   Save NeuroML and LEMS Simulation files      
    
    if num_bbp != 1:
        new_reference = 'Balanced_%scells_%sconns'%(num_bbp+num_exc+num_inh,total_conns)
        network.id = new_reference
        nml_doc.id = new_reference

    nml_file_name = '%s.net.%s'%(network.id,'nml.h5' if format == 'hdf5' else 'nml')
    oc.save_network(nml_doc, 
                    nml_file_name, 
                    validate=(format=='xml'),
                    format = format)

    if format=='xml':
        lems_file_name = oc.generate_lems_simulation(nml_doc, network, 
                                nml_file_name, 
                                duration =      duration, 
                                dt =            0.025)
    else:
        lems_file_name = None
                                
    return nml_doc, nml_file_name, lems_file_name
import opencortex.build as oc

population_size = 3

nml_doc, network = oc.generate_network("SimpleNet")

oc.add_cell_and_channels(nml_doc, '../NeuroML2/prototypes/izhikevich/RS.cell.nml','RS')

pop = oc.add_population_in_rectangular_region(network,
                                              'RS_pop',
                                              'RS',
                                              population_size,
                                              0,0,0,
                                              100,100,100)
                                              
syn = oc.add_exp_two_syn(nml_doc, 
                         id="syn0", 
                         gbase="2nS",
                         erev="0mV",
                         tau_rise="0.5ms",
                         tau_decay="10ms")
                             
pfs = oc.add_poisson_firing_synapse(nml_doc,
                                   id="poissonFiringSyn",
                                   average_rate="50 Hz",
                                   synapse_id=syn.id)
                                   
oc.add_inputs_to_population(network,
                            "Stim0",
                            pop,
def generate(reference = "L23TraubDemo",
             num_rs =2,
             num_bask =2,
             scalex=1,
             scaley=1,
             scalez=1,
             connections=True,
             poisson_inputs=True,
             offset_curents=False,
             global_delay = 0,
             duration = 300,
             segments_to_plot_record = {'pop_rs':[0],'pop_bask':[0]},
             format='xml'):


    nml_doc, network = oc.generate_network(reference)

    #oc.add_cell_and_channels(nml_doc, 'acnet2/pyr_4_sym.cell.nml','pyr_4_sym')
    oc.add_cell_and_channels(nml_doc, 'Thalamocortical/L23PyrRS.cell.nml','L23PyrRS')
    oc.add_cell_and_channels(nml_doc, 'Thalamocortical/SupBasket.cell.nml','SupBasket')
    
    xDim = 500*scalex
    yDim = 200*scaley
    zDim = 500*scalez

    pop_rs = oc.add_population_in_rectangular_region(network,
                                                  'pop_rs',
                                                  'L23PyrRS',
                                                  num_rs,
                                                  0,0,0,
                                                  xDim,yDim,zDim)

    pop_bask = oc.add_population_in_rectangular_region(network,
                                                  'pop_bask',
                                                  'SupBasket',
                                                  num_bask,
                                                  0,0,0,
                                                  xDim,yDim,zDim)

    syn0 = oc.add_exp_two_syn(nml_doc, 
                             id="syn0", 
                             gbase="1nS",
                             erev="0mV",
                             tau_rise="0.5ms",
                             tau_decay="10ms")

    syn1 = oc.add_exp_two_syn(nml_doc, 
                             id="syn1", 
                             gbase="2nS",
                             erev="0mV",
                             tau_rise="1ms",
                             tau_decay="15ms")
                             
                            
    if poisson_inputs:

        pfs = oc.add_poisson_firing_synapse(nml_doc,
                                           id="poissonFiringSyn",
                                           average_rate="150 Hz",
                                           synapse_id=syn0.id)

        oc.add_inputs_to_population(network,
                                    "Stim0",
                                    pop_rs,
                                    pfs.id,
                                    all_cells=True)
    if offset_curents:

        pg0 = oc.add_pulse_generator(nml_doc,
                               id="pg0",
                               delay="0ms",
                               duration="%sms"%duration,
                               amplitude="0.5nA")

        oc.add_inputs_to_population(network,
                                    "Stim0",
                                    pop_rs,
                                    pg0.id,
                                    all_cells=True)

        oc.add_inputs_to_population(network,
                                    "Stim0",
                                    pop_bask,
                                    pg0.id,
                                    all_cells=True)
                                
                                
    total_conns = 0
    if connections:

        proj = oc.add_probabilistic_projection(network,
                                        "proj0",
                                        pop_rs,
                                        pop_bask,
                                        syn1.id,
                                        0.3,
                                        weight=0.05,
                                        delay=global_delay)
        if proj:                           
            total_conns += len(proj.connection_wds)
        
        
    if num_rs != 2 or num_bask!=2:
        new_reference = '%s_%scells_%sconns'%(nml_doc.id,num_rs+num_bask,total_conns)
        network.id = new_reference
        nml_doc.id = new_reference

    nml_file_name = '%s.net.%s'%(network.id,'nml.h5' if format == 'hdf5' else 'nml')
    oc.save_network(nml_doc, 
                    nml_file_name, 
                    validate=(format=='xml'),
                    format = format)

    if format=='xml':
        gen_plots_for_quantities = {}   #  Dict with displays vs lists of quantity paths
        gen_saves_for_quantities = {}   #  Dict with file names vs lists of quantity paths
        
        for pop in segments_to_plot_record.keys():
            pop_nml = network.get_by_id(pop)
            if pop_nml is not None and pop_nml.size>0:
                for i in range(int(pop_nml.size)):
                    gen_plots_for_quantities['Display_%s_%i_v'%(pop,i)] = []
                    gen_saves_for_quantities['Sim_%s.%s.%i.v.dat'%(nml_doc.id,pop,i)] = []

                    for seg in segments_to_plot_record[pop]:
                        quantity = '%s/%i/%s/%i/v'%(pop,i,pop_nml.component,seg)
                        gen_plots_for_quantities['Display_%s_%i_v'%(pop,i)].append(quantity)
                        gen_saves_for_quantities['Sim_%s.%s.%i.v.dat'%(nml_doc.id,pop,i)].append(quantity)


            
        lems_file_name = oc.generate_lems_simulation(nml_doc, network, 
                                nml_file_name, 
                                duration =      duration, 
                                dt =            0.025,
                                gen_plots_for_all_v = False,
                                gen_plots_for_quantities = gen_plots_for_quantities,
                                gen_saves_for_all_v = False,
                                gen_saves_for_quantities = gen_saves_for_quantities)
    else:
        lems_file_name = None
                                
    return nml_doc, nml_file_name, lems_file_name
import opencortex.build as oc

nml_doc, network = oc.generate_network("IClamps")

oc.add_cell_and_channels(nml_doc, '../NeuroML2/prototypes/izhikevich/RS.cell.nml', 'RS')
oc.add_cell_and_channels(nml_doc, '../NeuroML2/prototypes/acnet2/pyr_4_sym_soma.cell.nml', 'pyr_4_sym_soma')
#oc.add_cell_and_channels(nml_doc, '../NeuroML2/prototypes/BlueBrainProject_NMC/cADpyr229_L23_PC_5ecbf9b163_0_0.cell.nml', 'cADpyr229_L23_PC_5ecbf9b163_0_0')

popIzh = oc.add_single_cell_population(network,
                                     'popIzh',
                                     'RS')

popHH = oc.add_single_cell_population(network,
                                     'popHH',
                                     'pyr_4_sym_soma',
                                     z=100)
'''
popBBP = oc.add_single_cell_population(network,
                                     'popBBP',
                                     'cADpyr229_L23_PC_5ecbf9b163_0_0',
                                     z=200)'''
                                     
pgIzh = oc.add_pulse_generator(nml_doc,
                       id="pgIzh",
                       delay="100ms",
                       duration="300ms",
                       amplitude="0.7nA")
                                     
pgHH = oc.add_pulse_generator(nml_doc,
                       id="pgHH",
Example #12
0
import opencortex.build as oc

population_size0 = 10
population_size1 = 10

nml_doc, network = oc.generate_network("SpikingNet")

oc.add_cell_and_channels(nml_doc, 'izhikevich/RS.cell.nml','RS')

pop_pre = oc.add_population_in_rectangular_region(network,
                                              'pop_pre',
                                              'RS',
                                              population_size0,
                                              0,0,0,
                                              100,100,100)

pop_post = oc.add_population_in_rectangular_region(network,
                                              'pop_post',
                                              'RS',
                                              population_size1,
                                              0,100,0,
                                              100,200,100)
                                              
syn0 = oc.add_exp_two_syn(nml_doc, 
                         id="syn0", 
                         gbase="1nS",
                         erev="0mV",
                         tau_rise="0.5ms",
                         tau_decay="10ms")
             
Example #13
0
def generate(reference = "ACNet",
             num_pyr = 48,
             num_bask = 12,
             scalex=1,
             scaley=1,
             scalez=1,
             connections=True,
             global_delay = 0,
             duration = 300,
             segments_to_plot_record = {'pop_pyr':[0],'pop_bask':[0]},
             format='xml'):


    nml_doc, network = oc.generate_network(reference)

    oc.add_cell_and_channels(nml_doc, 'acnet2/pyr_4_sym.cell.nml','pyr_4_sym')
    oc.add_cell_and_channels(nml_doc, 'acnet2/bask.cell.nml','bask')
    
    xDim = 500*scalex
    yDim = 50*scaley
    zDim = 500*scalez

    pop_pyr = oc.add_population_in_rectangular_region(network, 'pop_pyr',
                                                  'pyr_4_sym', num_pyr,
                                                  0,0,0, xDim,yDim,zDim)

    pop_bask = oc.add_population_in_rectangular_region(network, 'pop_bask',
                                                  'bask', num_bask,
                                                  0,yDim,0, xDim,yDim+yDim,zDim)

    ampa_syn = oc.add_exp_two_syn(nml_doc, id="AMPA_syn", 
                             gbase="30e-9S", erev="0mV",
                             tau_rise="0.003s", tau_decay="0.0031s")

    ampa_syn_inh = oc.add_exp_two_syn(nml_doc, id="AMPA_syn_inh", 
                             gbase="0.15e-9S", erev="0mV",
                             tau_rise="0.003s", tau_decay="0.0031s")

    gaba_syn = oc.add_exp_two_syn(nml_doc, id="GABA_syn", 
                             gbase="0.6e-9S", erev="-0.080V",
                             tau_rise="0.005s", tau_decay="0.012s")

    gaba_syn_inh = oc.add_exp_two_syn(nml_doc, id="GABA_syn_inh", 
                             gbase="0S", erev="-0.080V",
                             tau_rise="0.003s", tau_decay="0.008s")

    pfs = oc.add_poisson_firing_synapse(nml_doc, id="poissonFiringSyn",
                                       average_rate="30 Hz", synapse_id=ampa_syn.id)

    oc.add_inputs_to_population(network, "Stim0",
                                pop_pyr, pfs.id, all_cells=True)
                                
                                
    total_conns = 0
    if connections:

        this_syn=ampa_syn.id
        proj = oc.add_chem_projection0(nml_doc, 
                                        network,
                                        "Proj_pyr_pyr",
                                        pop_pyr,
                                        pop_pyr,
                                        targeting_mode='convergent',
                                        synapse_list=[this_syn],
                                        pre_segment_group = 'soma_group',
                                        post_segment_group = 'dendrite_group',
                                        number_conns_per_cell=7,
                                        delays_dict = {this_syn:global_delay})
        if proj:                           
            total_conns += len(proj[0].connection_wds)

        this_syn=ampa_syn_inh.id
        proj = oc.add_chem_projection0(nml_doc, 
                                        network,
                                        "Proj_pyr_bask",
                                        pop_pyr,
                                        pop_bask,
                                        targeting_mode='convergent',
                                        synapse_list=[this_syn],
                                        pre_segment_group = 'soma_group',
                                        post_segment_group = 'all',
                                        number_conns_per_cell=21,
                                        delays_dict = {this_syn:global_delay})
        if proj:                           
            total_conns += len(proj[0].connection_wds)

        this_syn=gaba_syn.id
        proj = oc.add_chem_projection0(nml_doc, 
                                        network,
                                        "Proj_bask_pyr",
                                        pop_bask,
                                        pop_pyr,
                                        targeting_mode='convergent',
                                        synapse_list=[this_syn],
                                        pre_segment_group = 'soma_group',
                                        post_segment_group = 'all',
                                        number_conns_per_cell=21,
                                        delays_dict = {this_syn:global_delay})
        if proj:                           
            total_conns += len(proj[0].connection_wds)

        this_syn=gaba_syn_inh.id
        proj = oc.add_chem_projection0(nml_doc, 
                                        network,
                                        "Proj_bask_bask",
                                        pop_bask,
                                        pop_bask,
                                        targeting_mode='convergent',
                                        synapse_list=[this_syn],
                                        pre_segment_group = 'soma_group',
                                        post_segment_group = 'all',
                                        number_conns_per_cell=5,
                                        delays_dict = {this_syn:global_delay})
        if proj:                           
            total_conns += len(proj[0].connection_wds)
        
        
    if num_pyr != 48 or num_bask!=12:
        new_reference = '%s_%scells_%sconns'%(nml_doc.id,num_pyr+num_bask,total_conns)
        network.id = new_reference
        nml_doc.id = new_reference
    nml_file_name = '%s.net.%s'%(network.id,'nml.h5' if format == 'hdf5' else 'nml')
    oc.save_network(nml_doc, 
                    nml_file_name, 
                    validate=(format=='xml'),
                    format = format)

    if format=='xml':
        
        gen_plots_for_quantities = {}   #  Dict with displays vs lists of quantity paths
        gen_saves_for_quantities = {}   #  Dict with file names vs lists of quantity paths
        
        for pop in segments_to_plot_record.keys():
            pop_nml = network.get_by_id(pop)
            if pop_nml is not None and pop_nml.size>0:
                
                group = len(segments_to_plot_record[pop]) == 1
                if group:
                    display = 'Display_%s_v'%(pop)
                    file_ = 'Sim_%s.%s.v.dat'%(nml_doc.id,pop)
                    gen_plots_for_quantities[display] = []
                    gen_saves_for_quantities[file_] = []
                    
                for i in range(int(pop_nml.size)):
                    if not group:
                        display = 'Display_%s_%i_v'%(pop,i)
                        file_ = 'Sim_%s.%s.%i.v.dat'%(nml_doc.id,pop,i)
                        gen_plots_for_quantities[display] = []
                        gen_saves_for_quantities[file_] = []

                    for seg in segments_to_plot_record[pop]:
                        quantity = '%s/%i/%s/%i/v'%(pop,i,pop_nml.component,seg)
                        gen_plots_for_quantities[display].append(quantity)
                        gen_saves_for_quantities[file_].append(quantity)

        lems_file_name = oc.generate_lems_simulation(nml_doc, network, 
                                nml_file_name, 
                                duration =      duration, 
                                dt =            0.025,
                                gen_plots_for_all_v = False,
                                gen_plots_for_quantities = gen_plots_for_quantities,
                                gen_saves_for_all_v = False,
                                gen_saves_for_quantities = gen_saves_for_quantities)
    else:
        lems_file_name = None
                                
    return nml_doc, nml_file_name, lems_file_name
Example #14
0
def RunColumnSimulation(
        net_id="TestRunColumn",
        nml2_source_dir="../../../neuroConstruct/generatedNeuroML2/",
        sim_config="TempSimConfig",
        scale_cortex=0.1,
        scale_thalamus=0.1,
        cell_bodies_overlap=True,
        cylindrical=True,
        default_synaptic_delay=0.05,
        gaba_scaling=1.0,
        l4ss_ampa_scaling=1.0,
        l5pyr_gap_scaling=1.0,
        in_nrt_tcr_nmda_scaling=1.0,
        pyr_ss_nmda_scaling=1.0,
        deep_bias_current=-1,
        include_gap_junctions=True,
        which_models='all',
        dir_nml2="../../",
        duration=300,
        dt=0.025,
        max_memory='1000M',
        seed=1234,
        simulator=None,
        num_of_cylinder_sides=None):

    popDictFull = {}

    ##############   Full model ##################################

    popDictFull['CG3D_L23PyrRS'] = (1000, 'L23', 'L23PyrRS', 'multi')
    popDictFull['CG3D_SupBask'] = (90, 'L23', 'SupBasket', 'multi')
    popDictFull['CG3D_SupAxAx'] = (90, 'L23', 'SupAxAx', 'multi')
    popDictFull['CG3D_L5TuftIB'] = (800, 'L5', 'L5TuftedPyrIB', 'multi')
    popDictFull['CG3D_L5TuftRS'] = (200, 'L5', 'L5TuftedPyrRS', 'multi')
    popDictFull['CG3D_L4SpinStell'] = (240, 'L4', 'L4SpinyStellate', 'multi')
    popDictFull['CG3D_L23PyrFRB'] = (50, 'L23', 'L23PyrFRB_varInit', 'multi')
    popDictFull['CG3D_L6NonTuftRS'] = (500, 'L6', 'L6NonTuftedPyrRS', 'multi')
    popDictFull['CG3D_DeepAxAx'] = (100, 'L6', 'DeepAxAx', 'multi')
    popDictFull['CG3D_DeepBask'] = (100, 'L6', 'DeepBasket', 'multi')
    popDictFull['CG3D_DeepLTS'] = (100, 'L6', 'DeepLTSInter', 'multi')
    popDictFull['CG3D_SupLTS'] = (90, 'L23', 'SupLTSInter', 'multi')
    popDictFull['CG3D_nRT'] = (100, 'Thalamus', 'nRT', 'multi')
    popDictFull['CG3D_TCR'] = (100, 'Thalamus', 'TCR', 'multi')

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

    dir_to_cells = os.path.join(dir_nml2, "cells")

    dir_to_synapses = os.path.join(dir_nml2, "synapses")

    dir_to_gap_junctions = os.path.join(dir_nml2, "gapJunctions")

    popDict = {}

    cell_model_list = []

    cell_diameter_dict = {}

    nml_doc, network = oc.generate_network(net_id, seed)

    for cell_population in popDictFull.keys():

        include_cell_population = False

        cell_model = popDictFull[cell_population][2]

        if which_models == 'all' or cell_model in which_models:

            popDict[cell_population] = ()

            if popDictFull[cell_population][1] != 'Thalamus':

                popDict[cell_population] = (int(
                    round(scale_cortex * popDictFull[cell_population][0])),
                                            popDictFull[cell_population][1],
                                            popDictFull[cell_population][2],
                                            popDictFull[cell_population][3])

                cell_count = int(
                    round(scale_cortex * popDictFull[cell_population][0]))

            else:

                popDict[cell_population] = (int(
                    round(scale_thalamus * popDictFull[cell_population][0])),
                                            popDictFull[cell_population][1],
                                            popDictFull[cell_population][2],
                                            popDictFull[cell_population][3])

                cell_count = int(
                    round(scale_thalamus * popDictFull[cell_population][0]))

            if cell_count != 0:

                include_cell_population = True

        if include_cell_population:

            cell_model_list.append(popDictFull[cell_population][2])

            cell_diameter = oc.get_soma_diameter(
                popDictFull[cell_population][2], dir_to_cell=dir_to_cells)

            if popDictFull[cell_population][2] not in cell_diameter_dict.keys(
            ):

                cell_diameter_dict[popDictFull[cell_population]
                                   [2]] = cell_diameter

    cell_model_list_final = list(set(cell_model_list))

    opencortex.print_comment_v("This is a final list of cell model ids: %s" %
                               cell_model_list_final)

    copy_nml2_from_source = False

    for cell_model in cell_model_list_final:

        if not os.path.exists(
                os.path.join(dir_to_cells, "%s.cell.nml" % cell_model)):

            copy_nml2_from_source = True

            break

    if copy_nml2_from_source:

        oc.copy_nml2_source(dir_to_project_nml2=dir_nml2,
                            primary_nml2_dir=nml2_source_dir,
                            electrical_synapse_tags=['Elect'],
                            chemical_synapse_tags=['.synapse.'],
                            extra_channel_tags=['cad'])

        passed_includes_in_cells = oc_utils.check_includes_in_cells(
            dir_to_cells, cell_model_list_final, extra_channel_tags=['cad'])

        if not passed_includes_in_cells:

            opencortex.print_comment_v(
                "Execution of RunColumn.py will terminate.")

            quit()

    for cell_model in cell_model_list_final:

        oc.add_cell_and_channels(nml_doc,
                                 os.path.join(dir_to_cells,
                                              "%s.cell.nml" % cell_model),
                                 cell_model,
                                 use_prototypes=False)

    t1 = -0
    t2 = -250
    t3 = -250
    t4 = -200.0
    t5 = -300.0
    t6 = -300.0
    t7 = -200.0
    t8 = -200.0

    boundaries = {}

    boundaries['L1'] = [0, t1]
    boundaries['L23'] = [t1, t1 + t2 + t3]
    boundaries['L4'] = [t1 + t2 + t3, t1 + t2 + t3 + t4]
    boundaries['L5'] = [t1 + t2 + t3 + t4, t1 + t2 + t3 + t4 + t5]
    boundaries['L6'] = [t1 + t2 + t3 + t4 + t5, t1 + t2 + t3 + t4 + t5 + t6]
    boundaries['Thalamus'] = [
        t1 + t2 + t3 + t4 + t5 + t6 + t7, t1 + t2 + t3 + t4 + t5 + t6 + t7 + t8
    ]

    xs = [0, 500]
    zs = [0, 500]

    passed_pops = oc_utils.check_pop_dict_and_layers(pop_dict=popDict,
                                                     boundary_dict=boundaries)

    if passed_pops:

        opencortex.print_comment_v(
            "Population parameters were specified correctly.")

        if cylindrical:

            pop_params = oc_utils.add_populations_in_cylindrical_layers(
                network,
                boundaries,
                popDict,
                radiusOfCylinder=250,
                cellBodiesOverlap=cell_bodies_overlap,
                cellDiameterArray=cell_diameter_dict,
                numOfSides=num_of_cylinder_sides)

        else:

            pop_params = oc_utils.add_populations_in_rectangular_layers(
                network,
                boundaries,
                popDict,
                xs,
                zs,
                cellBodiesOverlap=False,
                cellDiameterArray=cell_diameter_dict)

    else:

        opencortex.print_comment_v(
            "Population parameters were specified incorrectly; execution of RunColumn.py will terminate."
        )

        quit()

    src_files = os.listdir("./")

    if 'netConnList' in src_files:

        full_path_to_connectivity = 'netConnList'

    else:

        full_path_to_connectivity = "../../../neuroConstruct/pythonScripts/netbuild/netConnList"

    weight_params = [{
        'weight': gaba_scaling,
        'synComp': 'GABAA',
        'synEndsWith': [],
        'targetCellGroup': []
    }, {
        'weight': l4ss_ampa_scaling,
        'synComp': 'Syn_AMPA_L4SS_L4SS',
        'synEndsWith': [],
        'targetCellGroup': []
    }, {
        'weight': l5pyr_gap_scaling,
        'synComp': 'Syn_Elect_DeepPyr_DeepPyr',
        'synEndsWith': [],
        'targetCellGroup': ['CG3D_L5']
    }, {
        'weight':
        in_nrt_tcr_nmda_scaling,
        'synComp':
        'NMDA',
        'synEndsWith': [
            "_IN", "_DeepIN", "_SupIN", "_SupFS", "_DeepFS", "_SupLTS",
            "_DeepLTS", "_nRT", "_TCR"
        ],
        'targetCellGroup': []
    }, {
        'weight':
        pyr_ss_nmda_scaling,
        'synComp':
        'NMDA',
        'synEndsWith': [
            "_IN", "_DeepIN", "_SupIN", "_SupFS", "_DeepFS", "_SupLTS",
            "_DeepLTS", "_nRT", "_TCR"
        ],
        'targetCellGroup': []
    }]

    delay_params = [{'delay': default_synaptic_delay, 'synComp': 'all'}]

    passed_weight_params = oc_utils.check_weight_params(weight_params)

    passed_delay_params = oc_utils.check_delay_params(delay_params)

    if passed_weight_params and passed_delay_params:

        opencortex.print_comment_v(
            "Synaptic weight and delay parameters were specified correctly.")

        ignore_synapses = []
        if not include_gap_junctions:
            ignore_synapses = [
                'Syn_Elect_SupPyr_SupPyr', 'Syn_Elect_CortIN_CortIN',
                'Syn_Elect_L4SS_L4SS', 'Syn_Elect_DeepPyr_DeepPyr',
                'Syn_Elect_nRT_nRT'
            ]

        all_synapse_components, projArray, cached_segment_dicts = oc_utils.build_connectivity(
            net=network,
            pop_objects=pop_params,
            path_to_cells=dir_to_cells,
            full_path_to_conn_summary=full_path_to_connectivity,
            pre_segment_group_info=[{
                'PreSegGroup': "distal_axon",
                'ProjType': 'Chem'
            }],
            synaptic_scaling_params=weight_params,
            synaptic_delay_params=delay_params,
            ignore_synapses=ignore_synapses)

    else:

        if not passed_weight_params:

            opencortex.print_comment_v(
                "Synaptic weight parameters were specified incorrectly; execution of RunColumn.py will terminate."
            )

        if not passed_delay_params:

            opencortex.print_comment_v(
                "Synaptic delay parameters were specified incorrectly; execution of RunColumn.py will terminate."
            )

        quit()

    ############ for testing only; will add original specifications later ##############################################################

    if sim_config == "Testing1":

        input_params = {
            'CG3D_L23PyrRS': [{
                'InputType': 'GeneratePoissonTrains',
                'InputName': 'Poi_CG3D_L23PyrRS',
                'TrainType': 'transient',
                'Synapse': 'Syn_AMPA_SupPyr_SupPyr',
                'AverageRateList': [200.0, 150.0],
                'RateUnits': 'Hz',
                'TimeUnits': 'ms',
                'DurationList': [100.0, 50.0],
                'DelayList': [50.0, 200.0],
                'FractionToTarget': 1.0,
                'LocationSpecific': False,
                'TargetDict': {
                    'soma_group': 1
                }
            }]
        }

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

    if sim_config == "Testing2":

        input_params_final = {
            'CG3D_L23PyrRS': [{
                'InputType': 'PulseGenerators',
                'InputName': "DepCurr_L23RS",
                'Noise': True,
                'SmallestAmplitudeList': [5.0E-5, 1.0E-5],
                'LargestAmplitudeList': [1.0E-4, 2.0E-5],
                'DurationList': [20000.0, 20000.0],
                'DelayList': [0.0, 20000.0],
                'TimeUnits': 'ms',
                'AmplitudeUnits': 'uA',
                'FractionToTarget': 1.0,
                'LocationSpecific': False,
                'TargetDict': {
                    'dendrite_group': 1
                }
            }]
        }

    if sim_config == "TempSimConfig":

        input_params = {
            'CG3D_L23PyrRS': [{
                'InputType': 'PulseGenerators',
                'InputName': "DepCurr_L23RS",
                'Noise': True,
                'SmallestAmplitudeList': [5.0E-5],
                'LargestAmplitudeList': [1.0E-4],
                'DurationList': [20000.0],
                'DelayList': [0.0],
                'TimeUnits': 'ms',
                'AmplitudeUnits': 'uA',
                'FractionToTarget': 1.0,
                'LocationSpecific': False,
                'UniversalTargetSegmentID': 0,
                'UniversalFractionAlong': 0.5
            }, {
                'InputType': 'GeneratePoissonTrains',
                'InputName': "BackgroundL23RS",
                'TrainType': 'persistent',
                'Synapse': 'Syn_AMPA_SupPyr_SupPyr',
                'AverageRateList': [30.0],
                'RateUnits': 'Hz',
                'FractionToTarget': 1.0,
                'LocationSpecific': False,
                'TargetDict': {
                    'dendrite_group': 100
                }
            }, {
                'InputType': 'GeneratePoissonTrains',
                'InputName': "EctopicStimL23RS",
                'TrainType': 'persistent',
                'Synapse': 'SynForEctStim',
                'AverageRateList': [0.1],
                'RateUnits': 'Hz',
                'FractionToTarget': 1.0,
                'LocationSpecific': False,
                'UniversalTargetSegmentID': 143,
                'UniversalFractionAlong': 0.5
            }],
            'CG3D_TCR': [{
                'InputType': 'GeneratePoissonTrains',
                'InputName': "EctopicStimTCR",
                'TrainType': 'persistent',
                'Synapse': 'SynForEctStim',
                'AverageRateList': [1.0],
                'RateUnits': 'Hz',
                'FractionToTarget': 1.0,
                'LocationSpecific': False,
                'UniversalTargetSegmentID': 269,
                'UniversalFractionAlong': 0.5
            }, {
                'InputType': 'GeneratePoissonTrains',
                'InputName': "Input_20",
                'TrainType': 'persistent',
                'Synapse': 'Syn_AMPA_L6NT_TCR',
                'AverageRateList': [50.0],
                'RateUnits': 'Hz',
                'FractionToTarget': 1.0,
                'LocationSpecific': False,
                'TargetDict': {
                    'dendrite_group': 100
                }
            }],
            'CG3D_L23PyrFRB': [{
                'InputType': 'GeneratePoissonTrains',
                'InputName': "EctopicStimL23FRB",
                'TrainType': 'persistent',
                'Synapse': 'SynForEctStim',
                'AverageRateList': [0.1],
                'RateUnits': 'Hz',
                'FractionToTarget': 1.0,
                'LocationSpecific': False,
                'UniversalTargetSegmentID': 143,
                'UniversalFractionAlong': 0.5
            }, {
                'InputType': 'PulseGenerators',
                'InputName': "DepCurr_L23FRB",
                'Noise': True,
                'SmallestAmplitudeList': [2.5E-4],
                'LargestAmplitudeList': [3.5E-4],
                'DurationList': [20000.0],
                'DelayList': [0.0],
                'TimeUnits': 'ms',
                'AmplitudeUnits': 'uA',
                'FractionToTarget': 1.0,
                'LocationSpecific': False,
                'UniversalTargetSegmentID': 0,
                'UniversalFractionAlong': 0.5
            }],
            'CG3D_L6NonTuftRS': [{
                'InputType': 'GeneratePoissonTrains',
                'InputName': "EctopicStimL6NT",
                'TrainType': 'persistent',
                'Synapse': 'SynForEctStim',
                'AverageRateList': [1.0],
                'RateUnits': 'Hz',
                'FractionToTarget': 1.0,
                'LocationSpecific': False,
                'UniversalTargetSegmentID': 95,
                'UniversalFractionAlong': 0.5
            }, {
                'InputType': 'PulseGenerators',
                'InputName': "DepCurr_L6NT",
                'Noise': True,
                'SmallestAmplitudeList': [5.0E-5],
                'LargestAmplitudeList': [1.0E-4],
                'DurationList': [20000.0],
                'DelayList': [0.0],
                'TimeUnits': 'ms',
                'AmplitudeUnits': 'uA',
                'FractionToTarget': 1.0,
                'LocationSpecific': False,
                'UniversalTargetSegmentID': 0,
                'UniversalFractionAlong': 0.5
            }],
            'CG3D_L4SpinStell': [{
                'InputType': 'PulseGenerators',
                'InputName': "DepCurr_L4SS",
                'Noise': True,
                'SmallestAmplitudeList': [5.0E-5],
                'LargestAmplitudeList': [1.0E-4],
                'DurationList': [20000.0],
                'DelayList': [0.0],
                'TimeUnits': 'ms',
                'AmplitudeUnits': 'uA',
                'FractionToTarget': 1.0,
                'LocationSpecific': False,
                'UniversalTargetSegmentID': 0,
                'UniversalFractionAlong': 0.5
            }],
            'CG3D_L5TuftIB': [{
                'InputType': 'GeneratePoissonTrains',
                'InputName': "BackgroundL5",
                'TrainType': 'persistent',
                'Synapse': 'Syn_AMPA_L5RS_L5Pyr',
                'AverageRateList': [30.0],
                'RateUnits': 'Hz',
                'FractionToTarget': 1.0,
                'LocationSpecific': False,
                'TargetDict': {
                    'dendrite_group': 100
                }
            }, {
                'InputType': 'GeneratePoissonTrains',
                'InputName': "EctopicStimL5IB",
                'TrainType': 'persistent',
                'Synapse': 'SynForEctStim',
                'AverageRateList': [1.0],
                'RateUnits': 'Hz',
                'FractionToTarget': 1.0,
                'LocationSpecific': False,
                'UniversalTargetSegmentID': 119,
                'UniversalFractionAlong': 0.5
            }, {
                'InputType': 'PulseGenerators',
                'InputName': "DepCurr_L5IB",
                'Noise': True,
                'SmallestAmplitudeList': [5.0E-5],
                'LargestAmplitudeList': [1.0E-4],
                'DurationList': [20000.0],
                'DelayList': [0.0],
                'TimeUnits': 'ms',
                'AmplitudeUnits': 'uA',
                'FractionToTarget': 1.0,
                'LocationSpecific': False,
                'UniversalTargetSegmentID': 0,
                'UniversalFractionAlong': 0.5
            }],
            'CG3D_L5TuftRS': [{
                'InputType': 'GeneratePoissonTrains',
                'InputName': "EctopicStimL5RS",
                'TrainType': 'persistent',
                'Synapse': 'SynForEctStim',
                'AverageRateList': [1.0],
                'RateUnits': 'Hz',
                'FractionToTarget': 1.0,
                'LocationSpecific': False,
                'UniversalTargetSegmentID': 119,
                'UniversalFractionAlong': 0.5
            }, {
                'InputType': 'PulseGenerators',
                'InputName': "DepCurr_L5RS",
                'Noise': True,
                'SmallestAmplitudeList': [5.0E-5],
                'LargestAmplitudeList': [1.0E-4],
                'DurationList': [20000.0],
                'DelayList': [0.0],
                'TimeUnits': 'ms',
                'AmplitudeUnits': 'uA',
                'FractionToTarget': 1.0,
                'LocationSpecific': False,
                'UniversalTargetSegmentID': 0,
                'UniversalFractionAlong': 0.5
            }]
        }

        input_params_final = {}

        for pop_id in pop_params.keys():

            if pop_id in input_params.keys():

                input_params_final[pop_id] = input_params[pop_id]

        if deep_bias_current >= 0:

            for cell_group in input_params_final.keys():

                for input_group in range(0,
                                         len(input_params_final[cell_group])):

                    check_type = input_params_final[cell_group][input_group][
                        'InputType'] == "PulseGenerators"

                    check_group_1 = cell_group == "CG3D_L5TuftIB"

                    check_group_2 = cell_group == "CG3D_L5TuftRS"

                    check_group_3 = cell_group == "CG3D_L6NonTuftRS"

                    if check_type and (check_group_1 or check_group_2
                                       or check_group_3):

                        opencortex.print_comment_v(
                            "Changing offset current in 'PulseGenerators' for %s to %f"
                            % (cell_group, deep_bias_current))

                        input_params_final[cell_group][input_group][
                            'SmallestAmplitudeList'] = [
                                (deep_bias_current - 0.05) / 1000
                            ]

                        input_params_final[cell_group][input_group][
                            'LargestAmplitudeList'] = [
                                (deep_bias_current + 0.05) / 1000
                            ]

    input_list_array_final, input_synapse_list = oc_utils.build_inputs(
        nml_doc=nml_doc,
        net=network,
        population_params=pop_params,
        input_params=input_params_final,
        cached_dicts=cached_segment_dicts,
        path_to_cells=dir_to_cells,
        path_to_synapses=dir_to_synapses)

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

    for input_synapse in input_synapse_list:

        if input_synapse not in all_synapse_components:

            all_synapse_components.append(input_synapse)

    synapse_list = []

    gap_junction_list = []

    for syn_ind in range(0, len(all_synapse_components)):

        if 'Elect' not in all_synapse_components[syn_ind]:

            synapse_list.append(all_synapse_components[syn_ind])

            all_synapse_components[syn_ind] = os.path.join(
                net_id, all_synapse_components[syn_ind] + ".synapse.nml")

        else:

            gap_junction_list.append(all_synapse_components[syn_ind])

            all_synapse_components[syn_ind] = os.path.join(
                net_id, all_synapse_components[syn_ind] + ".nml")

    oc.add_synapses(nml_doc, dir_to_synapses, synapse_list, synapse_tag=True)

    oc.add_synapses(nml_doc,
                    dir_to_gap_junctions,
                    gap_junction_list,
                    synapse_tag=False)

    nml_file_name = '%s.net.nml' % network.id

    oc.save_network(nml_doc,
                    nml_file_name,
                    validate=True,
                    max_memory=max_memory)

    oc.remove_component_dirs(dir_to_project_nml2="%s" % network.id,
                             list_of_cell_ids=cell_model_list_final,
                             extra_channel_tags=['cad'])

    lems_file_name = oc.generate_lems_simulation(
        nml_doc,
        network,
        nml_file_name,
        duration=duration,
        dt=dt,
        include_extra_lems_files=all_synapse_components)

    if simulator != None:

        opencortex.print_comment_v("Starting simulation of %s.net.nml" %
                                   net_id)

        oc.simulate_network(lems_file_name=lems_file_name,
                            simulator=simulator,
                            max_memory=max_memory)