File: build_network.py

package info (click to toggle)
bmtk 1.1.1%2Bds-4
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 204,040 kB
  • sloc: python: 37,064; javascript: 1,998; makefile: 42; sh: 33
file content (90 lines) | stat: -rw-r--r-- 2,526 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import os, sys

from bmtk.builder import NetworkBuilder
from bmtk.utils.reports.spike_trains import PoissonSpikeGenerator


def build_network():
    # target cells recieve inputs with plastic synapses
    net_sources = NetworkBuilder('targets')
    net_sources.add_nodes(
        N=3,
        model_type='point_neuron',
        model_template='nest:iaf_psc_delta',
        dynamics_params='iaf_psc_delta_exc.json'
    )
    net_sources.build()
    net_sources.save(output_dir='network')
    
    # source cells that synapse onto targets
    net_feedforward = NetworkBuilder('sources')
    net_feedforward.add_nodes(
        N=2,
        model_type='point_neuron',
        model_template='nest:iaf_psc_delta',
        dynamics_params='iaf_psc_delta_exc.json'
    )

    # connection 1: cells 0 --> 0
    net_feedforward.add_edges(
        source=net_feedforward.nodes(node_id=0),
        target=net_sources.nodes(node_id=0),
        connection_rule=1,
        syn_weight=15.0,
        delay=1.0,
        dynamics_params='stdp_exc_1.json',
        model_template='stdp_synapse'
    )

    # connection: cells 1 --> 1
    net_feedforward.add_edges(
        source=net_feedforward.nodes(node_id=1),
        target=net_sources.nodes(node_id=1),
        connection_rule=1,
        syn_weight=15.0,
        delay=1.0,
        dynamics_params='stdp_exc_2.json',
        model_template='stdp_synapse'
    )

    # connection: cells [0, 1] --> 2
    net_feedforward.add_edges(
        source=net_feedforward.nodes(),
        target=net_sources.nodes(node_id=2),
        connection_rule=1,
        syn_weight=15.0,
        delay=1.0,
        dynamics_params='stdp_exc_3.json',
        model_template='stdp_synapse'
    )

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

    # virtual inputs into feedforward cells
    net_virts = NetworkBuilder('virtual')
    net_virts.add_nodes(
        N=10,
        model_type='virtual'
    )
    net_virts.add_edges(
        target=net_feedforward.nodes(),
        connection_rule=1,
        syn_weight=4.2,
        delay=1.5,
        dynamics_params='static_exc.json',
        model_template='static_synapse'
    )
    net_virts.build()
    net_virts.save(output_dir='network')


def generate_virt_spikes():
    psg = PoissonSpikeGenerator()
    psg.add(node_ids='network/virtual_nodes.h5', firing_rate=20.0, times=(0.0, 5.0), population='virtual')
    psg.to_sonata('inputs/virtual_spikes.h5')


if __name__ == '__main__':
    build_network()
    generate_virt_spikes()