Пример #1
0
def build_injective_inputs(target_net):
    print('Building External Network')

    input_network_model = {
        'external': {
            'N': len(target_net.nodes()
                     ),  # Need one virtual node for every LIF_network node
            'ei': 'e',
            'pop_name': 'input_network',
            'model_type': 'virtual'
        }
    }

    inputNetwork = NetworkBuilder("external")
    inputNetwork.add_nodes(**input_network_model['external'])

    inputNetwork.add_edges(
        target=target_net.nodes(pop_name='LIF_exc'),
        connection_rule=injective_connections,
        iterator='all_to_one',  # will make building a little faster
        syn_weight=200,
        delay=D,
        dynamics_params='ExcToExc.json',
        model_template='static_synapse')

    inputNetwork.add_edges(target=target_net.nodes(pop_name='LIF_inh'),
                           connection_rule=injective_connections,
                           iterator='all_to_one',
                           syn_weight=100,
                           delay=D,
                           dynamics_params='ExcToExc.json',
                           model_template='static_synapse')

    inputNetwork.build()
    inputNetwork.save(output_dir='network')
              model_template='exp2syn')

net.add_edges(source=backgroundPV.nodes(),
              target=net.nodes(pop_name='PV'),
              connection_rule=BG_to_PV,
              syn_weight=1,
              target_sections=['somatic'],
              delay=0.1,
              distance_range=[0.0, 300.0],
              dynamics_params='AMPA_ExcToInh.json',
              model_template='exp2syn')

# Build and save our networks

net.build()
net.save(output_dir='network')

tone.build()
tone.save_nodes(output_dir='network')

shock.build()
shock.save_nodes(output_dir='network')

backgroundPN.build()
backgroundPN.save_nodes(output_dir='network')

backgroundPV.build()
backgroundPV.save_nodes(output_dir='network')

backgroundOLM.build()
backgroundOLM.save_nodes(output_dir='network')
Пример #3
0
    return sec_ids, sec_xs, coords[0][0], coords[0][1], coords[0][2], dist[0], swctype[0]

# Feedfoward excitatory virtual cells
exc_net = NetworkBuilder('excvirt')
exc_net.add_nodes(N=10, model_type='virtual', ei='e')
cm = exc_net.add_edges(target=cortex.nodes(), source=exc_net.nodes(ei='e'),
                       connection_rule=lambda *_: np.random.randint(4, 12),
                       dynamics_params='AMPA_ExcToExc.json',
                       model_template='Exp2Syn',
                       delay=2.0)
cm.add_properties('syn_weight', rule=3.4e-4, dtypes=np.float)
cm.add_properties(['sec_id', 'sec_x', 'pos_x', 'pos_y', 'pos_z', 'dist', 'type'],
                  rule=build_edges,
                  dtypes=[np.int32, np.float, np.float, np.float, np.float, np.float, np.uint8])
exc_net.build()
exc_net.save(output_dir='network')

if not os.path.exists('inputs/exc_spike_trains.h5'):
    # Build spike-trains for excitatory virtual cells
    if not os.path.exists('inputs'):
        os.mkdir('inputs')
    psg = PoissonSpikesGenerator(range(10), 10.0, tstop=3000.0)
    psg.to_hdf5('inputs/exc_spike_trains.h5')


# Inhibitory connections, build this as a separate network so we can test simulation with only excitatory input and
# with mixed excitatory/inhibitory input.
inh_net = NetworkBuilder('inhvirt')
inh_net.add_nodes(N=10, model_type='virtual', ei='i')
cm = inh_net.add_edges(target=cortex.nodes(), source=inh_net.nodes(ei='i'),
                       connection_rule=np.random.randint(0, 8),
Пример #4
0
                   model_template='static_synapse',
                   syn_weight=3.0,
                   delay=2.0)

internal.add_edges(source={'ei': 'i'},
                   target={'orig_model': 'intfire'},
                   connection_rule=n_connections,
                   dynamics_params='instanteneousInh.json',
                   model_template='static_synapse',
                   syn_weight=-4.0,
                   delay=2.0)

# Build and save internal network
internal.build()
print('Saving internal network')
internal.save(output_dir='network')

# Build a network of 100 virtual cells that will connect to and drive the simulation of the internal network
print('Building external connections')
external = NetworkBuilder("external")

external.add_nodes(N=100, model_type='virtual', ei='e')

# Targets all glif excitatory cells
external.add_edges(target=internal.nodes(ei='e', orig_model='glif'),
                   source=external.nodes(),
                   connection_rule=lambda *_: np.random.randint(0, 5),
                   dynamics_params='LGN_to_GLIF.json',
                   model_template='static_synapse',
                   delay=2.0,
                   syn_weight=11.0)
Пример #5
0
    ycoords += [p[1] for p in positions]

    # Get spatial filter size of cells
    filter_sizes = get_filter_spatial_size(params['N'], X_grids, Y_grids,
                                           params['size_range'])

    LGN.add_nodes(
        N=total_N,
        ei=params['ei'],
        model_type=params['model_type'],
        model_template=params['model_template'],
        x=positions[:, 0],
        y=positions[:, 1],
        dynamics_params=params['dynamics_params'],

        # TODO: Come up with better name than non-dominate parameters (spatial-params?)
        non_dom_params=params.get('non_dom_params', None),

        # TODO: See if it's possible to calculate spatial sizes during simulation.
        spatial_size=filter_sizes,

        # NOTE: If tuning angle is not defined, then it will be randomly generated during the simulation. But
        #  when evaluating a large network many times it will be more efficent to store it in the nodes file.
        tuning_angle=np.random.uniform(0.0, 360.0, total_N),

        # TODO: Can sf-sperator be stored in the params json file.
        sf_sep=params.get('sf_sep', None))

LGN.build()
LGN.save(output_dir='network')
Пример #6
0
              x=pos_x, y=pos_y,
              dynamics_params='472363762_point.json')
              
              
def recurrent_connections(src_cells, trg_cell, n_syns):
    
    # Increasing numbers of synapses per target cell...
    #print(trg_cell)
    #print(dir(trg_cell))
    #print('--- %s'%trg_cell._node_params)
    synapses = [20 * n_syns* (trg_cell.node_id-per_pop)] *len(src_cells)
    return synapses


net.add_edges(source={'ei': 'e'}, target={'ei': 'i', 'model_type': 'point_process'},
              iterator='all_to_one',
              connection_rule=recurrent_connections,
              connection_params={'n_syns': 1},
              syn_weight=10,
              weight_function='wmax',
              delay=2.0,
              dynamics_params='ExcToInh.json',
              model_template='static_synapse')


net.build()
net.save(output_dir='../input/network')

print 'Built: %s'%net.name

Пример #7
0
    positions = [(radius*np.cos(i*dx), radius*np.sin(i*dx), 0.0)]  # place cells in wheel around origin

    bio_net.add_nodes(model_type='biophysical', model_processing='aibs_perisomatic', positions=positions,
                      **model_props)

bio_net.build()
bio_net.save_nodes(output_dir='network')


if build_virtual_net:
    # Build a separate network of virtual cells to synapse onto the biophysical network
    virt_net = NetworkBuilder('virt')
    virt_net.add_nodes(N=10, model_type='virtual', ei='e')  # 10 excitatory virtual cells
    virt_net.add_edges(target=bio_net.nodes(),  # Connect every virt cells onto every bio cell
                       connection_rule=lambda *_: np.random.randint(4, 12),  # 4 to 12 synapses per source/target
                       dynamics_params='AMPA_ExcToExc.json',
                       model_template='Exp2Syn',
                       syn_weight=3.4e-4,
                       delay=2.0,
                       target_sections=['soma', 'basal', 'apical'],  # target soma and all dendritic sections
                       distance_range=[0.0, 1.0e20])

    virt_net.build()
    virt_net.save(output_dir='network')

    # Create spike trains to use for our virtual cells
    if not os.path.exists('inputs'):
        os.mkdir('inputs')
    psg = PoissonSpikesGenerator(range(10), 10.0, tstop=4000.0)
    psg.to_hdf5('inputs/exc_spike_trains.h5')
Пример #8
0
def build_edges(source_node_id, target_node_id):
    sonata_file = sonata.File(
        data_files=[
            '/data/work_files/V1_network_update/Biophysical_network/network_fixed_synapses/v1_nodes.h5',
            '/data/work_files/V1_network_update/Biophysical_network/network_fixed_synapses/v1_v1_edges.h5'
        ],
        data_type_files=[
            '/data/work_files/V1_network_update/Biophysical_network/network_fixed_synapses/v1_node_types.csv',
            '/data/work_files/V1_network_update/Biophysical_network/network_fixed_synapses/v1_v1_edge_types.csv'
        ])

    v1_edges = sonata_file.edges['v1_to_v1']
    v1_nodes = sonata_file.nodes['v1']

    l4_node = v1_nodes.get_node_id(source_node_id)
    l4_node_morphology_path = os.path.join('biophys_components/morphologies',
                                           l4_node['morphology'])
    l4_node_props = l4_node.node_type_properties
    l4_node_props.update({str(k): [v] for k, v in l4_node.group_props.items()})
    l4_node_props['rotation_angle_zaxis'] *= -1

    l2_node = v1_nodes.get_node_id(target_node_id)
    l2_node_morphology_path = os.path.join('biophys_components/morphologies',
                                           l2_node['morphology'])
    l2_node_props = l2_node.node_type_properties
    l2_node_props.update({str(k): [v] for k, v in l2_node.group_props.items()})
    l2_node_props['rotation_angle_zaxis'] *= -1

    swc_parsers = {
        source_node_id: SWCParser(l4_node_morphology_path),
        target_node_id: SWCParser(l2_node_morphology_path)
    }

    v1 = NetworkBuilder('v1')
    v1.add_nodes(**l4_node_props)
    v1.add_nodes(**l2_node_props)

    def query_str2dict(qry_str):
        qry_dict = {}
        for cond in qry_str.split('&'):
            k, v = cond.split('==')
            v = v.strip("\'")
            try:
                v = int(v)
            except ValueError:
                pass

            qry_dict[k] = v
        return qry_dict

    for src_id, trg_id in permutations([source_node_id, target_node_id]):
        sec_ids = []
        sec_xs = []
        syn_weights = []
        edge_props = {}
        trg_swc = swc_parsers[trg_id]
        trg_swc_ids = []
        trg_swc_dists = []

        for e in v1_edges.get_source(src_id):
            if e.target_node_id == trg_id:
                sec_id = e._group_props['sec_id']
                sec_x = e._group_props['sec_x']
                swc_id, swc_dist = trg_swc.get_swc_id(sec_id, sec_x)

                trg_swc_ids.append(swc_id)
                trg_swc_dists.append(swc_dist)
                edge_props[
                    e._edge_type_props['edge_type_id']] = e._edge_type_props
                sec_ids.append(sec_id)
                sec_xs.append(sec_x)
                syn_weights.append(e._group_props['syn_weight'])

        for edge_type_id, edge_type_props in edge_props.items():
            trg_query = query_str2dict(edge_type_props['target_query'])
            del edge_type_props['target_query']
            src_query = query_str2dict(edge_type_props['source_query'])
            del edge_type_props['source_query']

            cm = v1.add_edges(source=src_query,
                              target=trg_query,
                              connection_rule=len(syn_weights),
                              **edge_type_props)
            # cm.add_properties('syn_weight', rule=lambda *_: np.random.uniform(0.0, 100.0), dtypes=np.float)
            cm.add_properties('afferent_section_id',
                              rule=sec_ids,
                              dtypes=np.int)
            cm.add_properties('afferent_section_pos',
                              rule=sec_xs,
                              dtypes=np.float)
            cm.add_properties('syn_weight', rule=syn_weights, dtypes=np.float)
            cm.add_properties('afferent_swc_id',
                              rule=trg_swc_ids,
                              dtypes=np.int)
            cm.add_properties('afferent_swc_pos',
                              rule=trg_swc_dists,
                              dtypes=np.float)

    v1.build()
    v1.save(output_dir='network')
Пример #9
0
def build_lif_network():
    ### Define all the cell models in a dictionary.
    print('Building Internal Network')

    LIF_models = {
        'LIF_exc': {
            'N': N_LIF_exc,
            'ei': 'e',
            'pop_name': 'LIF_exc',
            'model_type': 'point_process',
            'model_template': 'nest:iaf_psc_exp',
            'dynamics_params': 'excitatory.json'
        },
        'LIF_inh': {
            'N': N_LIF_inh,
            'ei': 'i',
            'pop_name': 'LIF_inh',
            'model_type': 'point_process',
            'model_template': 'nest:iaf_psc_exp',
            'dynamics_params': 'inhibitory.json'
        }
    }
    net = NetworkBuilder('internal')

    for model in LIF_models:
        params = LIF_models[model].copy()
        positions = positions_columinar(N=LIF_models[model]['N'],
                                        center=[0, 10.0, 0],
                                        max_radius=50.0,
                                        height=200.0)
        net.add_nodes(x=positions[:, 0],
                      y=positions[:, 1],
                      z=positions[:, 2],
                      **params)

    net.add_edges(source={'ei': 'e'},
                  target={'ei': 'e'},
                  connection_rule=random_connections,
                  connection_params={'p': eps},
                  syn_weight=200,
                  delay=D,
                  dynamics_params='ExcToExc.json',
                  model_template='static_synapse')

    net.add_edges(source={'ei': 'e'},
                  target={'ei': 'i'},
                  connection_rule=random_connections,
                  connection_params={'p': eps},
                  syn_weight=300,
                  delay=D,
                  dynamics_params='ExcToInh.json',
                  model_template='static_synapse')

    net.add_edges(source={'ei': 'i'},
                  target={'ei': 'e'},
                  connection_rule=random_connections,
                  connection_params={'p': eps},
                  syn_weight=-550,
                  delay=D,
                  dynamics_params='InhToExc.json',
                  model_template='static_synapse')

    net.add_edges(source={'ei': 'i'},
                  target={'ei': 'i'},
                  connection_rule=random_connections,
                  connection_params={'p': eps},
                  syn_weight=-300,
                  delay=D,
                  dynamics_params='InhToInh.json',
                  model_template='static_synapse')

    net.build()
    net.save(output_dir='network')
    # net.save_edges(edges_file_name='edges.h5', edge_types_file_name='edge_types.csv', output_dir='network')
    # net.save_nodes(nodes_file_name='nodes.h5', node_types_file_name='node_types.csv', output_dir='network')
    return net
thalamus = NetworkBuilder('mthalamus')
thalamus.add_nodes(N=1, pop_name='tON', potential='exc', model_type='virtual')

thalamus.add_edges(source={'pop_name': 'tON'},
                   target=net.nodes(pop_name=['Int']),
                   connection_rule=1,
                   syn_weight=1,
                   delay=2.0,
                   weight_function=None,
                   target_sections=['somatic'],
                   distance_range=[0.0, 150.0],
                   dynamics_params='AMPA_ExcToExc.json',
                   model_template='exp2syn')

net.build()
net.save(output_dir='network')
thalamus.build()
thalamus.save(output_dir='network')

psg = PoissonSpikeGenerator(population='mthalamus')
psg.add(
    node_ids=1,  # Have 5 nodes to match mthalamus
    firing_rate=8,  # 2 Hz
    times=(0.0, 1))  # time is in seconds for some reason
psg.to_sonata('virtual_spikes.h5')
print('Number of background spikes: {}'.format(psg.n_spikes()))

from bmtk.utils.sim_setup import build_env_bionet
build_env_bionet(
    base_dir='../',
    network_dir='./network',
Пример #11
0
def build_model():
    if os.path.isdir('network'):
        shutil.rmtree('network')
    if os.path.isdir('2_cell_inputs'):
        shutil.rmtree('2_cell_inputs')

    seed = 967
    random.seed(seed)
    np.random.seed(seed)
    load()
    syn = syn_params_dicts()

    # Initialize our network

    net = NetworkBuilder("biophysical")

    num_inh = [1]

    num_exc = [1]

    ##################################################################################
    ###################################BIOPHY#########################################

    # PN
    net.add_nodes(N=1,
                  pop_name='PyrC',
                  mem_potential='e',
                  model_type='biophysical',
                  model_template='hoc:Cell_C',
                  morphology=None)

    # PV
    net.add_nodes(N=1,
                  pop_name="PV",
                  mem_potential='e',
                  model_type='biophysical',
                  model_template='hoc:basket',
                  morphology=None)

    backgroundPN_C = NetworkBuilder('bg_pn_c')
    backgroundPN_C.add_nodes(N=1,
                             pop_name='tON',
                             potential='exc',
                             model_type='virtual')

    backgroundPV = NetworkBuilder('bg_pv')
    backgroundPV.add_nodes(N=2,
                           pop_name='tON',
                           potential='exc',
                           model_type='virtual')

    # if neuron is sufficiently depolorized enough post synaptic calcium then synaptiic weight goes up

    # pyr->pyr & pyr->PV
    # PV->pyr PV->PV
    def one_to_all(source, target):
        sid = source.node_id
        tid = target.node_id
        print("connecting bio cell {} to bio cell {}".format(sid, tid))
        return 1

    def BG_to_PN_C(source, target):
        sid = source.node_id
        tid = target.node_id
        if sid == tid:
            print("connecting BG {} to PN_C{}".format(sid, tid))
            return 1
        else:
            return 0

    def BG_to_PV(source, target):
        sid = source.node_id
        tid = target.node_id
        sid = sid + 1
        if sid == tid:
            print("connecting BG {} to PV{}".format(sid, tid))
            return 1
        else:
            return 0

    conn = net.add_edges(source=net.nodes(pop_name='PyrC'),
                         target=net.nodes(pop_name="PV"),
                         connection_rule=one_to_all,
                         syn_weight=1.0,
                         delay=0.1,
                         distance_range=[-10000, 10000],
                         dynamics_params='PN2PV.json',
                         model_template=syn['PN2PV.json']['level_of_detail'])
    conn.add_properties(['sec_id', 'sec_x'],
                        rule=(1, 0.9),
                        dtypes=[np.int32, np.float])

    conn = net.add_edges(source=net.nodes(pop_name='PV'),
                         target=net.nodes(pop_name="PyrC"),
                         connection_rule=one_to_all,
                         syn_weight=1.0,
                         delay=0.1,
                         distance_range=[-10000, 10000],
                         dynamics_params='PV2PN.json',
                         model_template=syn['PV2PN.json']['level_of_detail'])
    conn.add_properties(['sec_id', 'sec_x'],
                        rule=(1, 0.9),
                        dtypes=[np.int32, np.float])

    conn = net.add_edges(source=backgroundPN_C.nodes(),
                         target=net.nodes(pop_name='PyrC'),
                         connection_rule=BG_to_PN_C,
                         syn_weight=1.0,
                         delay=0.1,
                         distance_range=[-10000, 10000],
                         dynamics_params='BG2PNC.json',
                         model_template=syn['BG2PNC.json']['level_of_detail'])
    conn.add_properties(['sec_id', 'sec_x'],
                        rule=(2, 0.9),
                        dtypes=[np.int32,
                                np.float])  # places syn on apic at 0.9

    conn = net.add_edges(source=backgroundPV.nodes(),
                         target=net.nodes(pop_name='PV'),
                         connection_rule=BG_to_PV,
                         syn_weight=1.0,
                         delay=0.1,
                         distance_range=[-10000, 10000],
                         dynamics_params='BG2PV.json',
                         model_template=syn['BG2PV.json']['level_of_detail'])
    conn.add_properties(['sec_id', 'sec_x'],
                        rule=(1, 0.9),
                        dtypes=[np.int32, np.float])

    backgroundPN_C.build()
    backgroundPN_C.save_nodes(output_dir='network')

    backgroundPV.build()
    backgroundPV.save_nodes(output_dir='network')

    net.build()
    net.save(output_dir='network')
    # SPIKE TRAINS
    t_sim = 40000

    # build_env_bionet(base_dir='./',
    #                 network_dir='./network',
    #                 tstop=t_sim, dt=0.1,
    #                 report_vars=['v'],
    #                 components_dir='biophys_components',
    #                 config_file='config.json',
    #                 spikes_inputs=[('bg_pn_c', '2_cell_inputs/bg_pn_c_spikes.h5'),
    #                                ('bg_pv', '2_cell_inputs/bg_pv_spikes.h5')],
    #                 compile_mechanisms=False)

    psg = PoissonSpikeGenerator(population='bg_pn_c')
    psg.add(
        node_ids=range(1),  # need same number as cells
        firing_rate=6,  # 1 spike every 1 second Hz
        times=(0.0, t_sim / 1000))  # time is in seconds for some reason
    psg.to_sonata('2_cell_inputs/bg_pn_c_spikes.h5')

    print('Number of background spikes for PN_C: {}'.format(psg.n_spikes()))

    psg = PoissonSpikeGenerator(population='bg_pv')
    psg.add(
        node_ids=range(1),  # need same number as cells
        firing_rate=7.7,  # 8 spikes every 1 second Hz
        times=(0.0, t_sim / 1000))  # time is in seconds for some reason
    psg.to_sonata('2_cell_inputs/bg_pv_spikes.h5')

    print('Number of background spikes for PV: {}'.format(psg.n_spikes()))
Пример #12
0
    # connection_params={'prob': 0.2},
    # syn_weight=6.0e-05,
    connection_rule=tunning_angle,
    connection_params={'max_syns': 5},
    syn_weight=3.0e-05,
    delay=2.0,
    dynamics_params='ExcToExc.json',
    model_template='Exp2Syn',
    target_sections=['basal', 'apical'],
    distance_range=[30.0, 150.0],
    weight_function='set_syn_weight')

# Build and save internal network
v1.build()
print('Saving V1')
v1.save(output_dir='network')

# Build a network of 100 virtual cells that will connect to and drive the simulation of the internal network
print('Building external "LGN" connections')
lgn = NetworkBuilder("LGN")

lgn.add_nodes(N=50,
              model_type='virtual',
              ei='e',
              model_template='lgnmodel:sOFF_TF8',
              x=np.random.uniform(0.0, 240.0, 50),
              y=np.random.uniform(0.0, 120.0, 50),
              spatial_size=1.0,
              dynamics_params='sOFF_TF8.json')

lgn.add_nodes(N=50,