-
Notifications
You must be signed in to change notification settings - Fork 2
/
GenerateNetworkOverview.py
114 lines (90 loc) · 4.28 KB
/
GenerateNetworkOverview.py
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
from neuromllite.NetworkGenerator import check_to_generate_or_run
from neuromllite import Simulation
from neuromllite import Network, Population, Projection, Cell, Synapse, InputSource, Input
from neuromllite import RandomConnectivity, RectangularRegion, RelativeLayout
import sys
# This function generates the overview of the network using neuromllite
def internal_connections(pops):
for pre in pops:
for post in pops:
weight = W[pops.index(post)][pops.index(pre)]
print('Connection %s -> %s weight: %s'%(pre.id,
post.id, weight))
if weight!=0:
net.projections.append(Projection(id='proj_%s_%s'%(pre.id,post.id),
presynaptic=pre.id,
postsynaptic=post.id,
synapse=syns[pre.id],
type='continuousProjection',
delay=0,
weight=weight,
random_connectivity=RandomConnectivity(probability=1)))
# Build the network
net = Network(id='WC')
net.notes = 'A simple WC network'
net.parameters = { 'wee': 10,
'wei': 12,
'wie': -8,
'wii': -3}
r1 = RectangularRegion(id='WilsonCowan', x=0,y=0,z=0,width=1000,height=100,depth=1000)
net.regions.append(r1)
exc_cell = Cell(id='Exc', lems_source_file='WC_Parameters.xml')
inh_cell = Cell(id='Inh', lems_source_file='WC_Parameters.xml')
net.cells.append(exc_cell)
net.cells.append(inh_cell)
exc_pop = Population(id='Excitatory',
size=1,
component=exc_cell.id,
properties={'color': '0.8 0 0','radius':10},
relative_layout = RelativeLayout(region=r1.id,x=-20,y=0,z=0))
inh_pop = Population(id='Inhibitory',
size=1,
component=inh_cell.id,
properties={'color': '0 0 0.8','radius':10},
relative_layout = RelativeLayout(region=r1.id,x=20,y=0,z=0))
net.populations.append(exc_pop)
net.populations.append(inh_pop)
exc_syn = Synapse(id='rsExc', lems_source_file='WC_Parameters.xml')
inh_syn = Synapse(id='rsInh', lems_source_file='WC_Parameters.xml')
net.synapses.append(exc_syn)
net.synapses.append(inh_syn)
syns = {exc_pop.id:exc_syn.id, inh_pop.id:inh_syn.id}
W = [['wee', 'wie'],
['wei','wii']]
# Add internal connections
pops = [exc_pop, inh_pop]
internal_connections(pops)
# Add offset inputs
net.parameters['exc_input'] = '0nA'
net.parameters['inh_input'] = '0nA'
net.parameters['input_delay'] = '20ms'
net.parameters['input_duration'] = '60ms'
#net.parameters['scaling'] = '1nA'
input_source_e = InputSource(id='Exc_in',
neuroml2_input='PulseGenerator',
parameters={'amplitude':'exc_input', 'delay':'input_delay', 'duration':'input_duration'})
net.input_sources.append(input_source_e)
net.inputs.append(Input(id='Exc_stim',
input_source=input_source_e.id,
population=exc_pop.id,
percentage=100))
input_source_i = InputSource(id='Inh_in',
neuroml2_input='PulseGenerator',
parameters={'amplitude':'inh_input', 'delay':'input_delay', 'duration':'input_duration'})
net.input_sources.append(input_source_i)
net.inputs.append(Input(id='Inh_stim',
input_source=input_source_i.id,
population=inh_pop.id,
percentage=100))
# Save to JSON format
net.id = 'WC'
new_file = net.to_json_file('WC.json')
sim = Simulation(id='SimWC',
duration='100',
dt='0.005',
network=new_file,
record_rates={'all':'*'},
plots2D={'E-I':{'x_axis':'Excitatory/0/Exc/r',
'y_axis':'Inhibitory/0/Inh/r'}})
sim.to_json_file('SimWC.nmllite.json')
check_to_generate_or_run(sys.argv,sim)