-
Notifications
You must be signed in to change notification settings - Fork 0
/
mainmodel.cfg
507 lines (479 loc) · 20.1 KB
/
mainmodel.cfg
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
[GENERAL]
#prefix for all directories
prefix = './'
#Directories which will be add before importing python modules
pyextrapath = (@GENERAL:prefix@+'/lib',@GENERAL:prefix@+'/cells')
# sets name of network file
networkfilename = @GENERAL:prefix@+'/network.pkl'
[AUDITORY NERVE]
# auditory nerve configuration
# it is a list or tuple with two sublists of sub-tuples for
# left and right ears correspondingly. Each sublist should have
# at least one element.
# The first element of each sublist is a friequecy of hair cell, all
# others are types of fibers.
# EXAMPLE:
# two hair cells at both sides with three fibers type I, II and III for
# left ear and type III for right
# anconfig=[
# #Left ear
# [
# [230, 1, 2, 3],
# [250, 1, 2, 3]
# ],
# [
# [230, 3, 3, 3],
# [250, 3, 3, 3]
# ]
# ]
# if option anconfig equal to the None, other options in AUDITORY NERVE section will be used.
# if option anconfig is string, it should be a file name with configuration.
# script tries to read this file first and if fail int uses AUDITORY NERVE section
# to regenerate auditory nervous configuration.
anconfig = "auditory_nerve.pkl"
# number of hair cells
nhcell = 3
# 'cell distribution' should be a function from one variable
# which is go from 0 to nhcell. 'cell distribution' must
# returns frequency in Hertz.
# Example
# uniformly distributed hair cells in range 5800,6400 Hz
# cell distribution = lambda x: x/@AUDITORY NURVOUS:nhcell@*(6400-5800)+5800
# Example :
# log10 distributed hair cells in range 5800,6400 Hz
cell distribution = lambda x: np.logspace(np.log10(5800),np.log10(6400),$AUDITORY NERVE:nhcell$)[x]
# number of fibber per one hair cell
nfibperhcell = 4
# XXX
fiber distribution = lambda x,y: np.random.choice([1,2,3])
# if option file is set, script tries to read this file first and if fail
# regenerate auditory nerve 'geometry'.
# if option wasn't set, script will regenerate geometry every time
file = @AUDITORY NERVE:anconfig@
[STIMULI]
# stimulus parameters
# SHOULD HAVE OPTIONS:
# prog - program name to generate pkl/spkl files with stimulus
# EXAMPLE: prog = './an-response-generator'
# stimuli - list or tuple of option names which correspond to stimulation.
# EXAMPLE: stimuli = ['click-itd-100us','click-itd-000us','click-itd+100us']
# directory for saving spkl files
stimdir = @GENERAL:prefix@+'/Dataset/'
outputdir = @GENERAL:prefix@+'/Results/'
# list of stimulus which will be used in this experiment
stimuli = ['click-itd-100us','click-itd-000us','click-itd+100us']
namebody = '-20hc-fr58_62kHz_unif-20fphc'
# Every stimulus is a list
# 1st item is a stimulus filaname
# 2nd is dictionary with parameters for @STIMULI:prog@ to generate
# stimulus. Note that for each name first -- will be added, except
# 'stimtype' and inputfile. 4 parameters will be ignored and
# substituted by parameters by values in configuration: --frequency-range
# --number-hair-cells, --fiber-per-hcell, --portion-types. Key -s
# added to command automatically.
# 3rd is tuple of population names and function name, which should be call to
# load file with stimulus.
# 4th is a name of model output.
click-itd-100us = [
@STIMULI:stimdir@+'/click-itd-100us'+@STIMULI:namebody@+'.spkl',
{
'stimtype' : 'click',
'interaural time difference' : -0.1e-3,
},
(('left-input','readfile'),('right-input','readfile')),
@STIMULI:outputdir@+'/click-itd-100us'+@STIMULI:namebody@+'.pkl'
]
click-itd-000us = [
'$STIMULI:stimdir$/click-itd-000us$STIMULI:namebody$.spkl',
{
'stimtype' :'tone',#: 'click',
'interaural time difference' : 0.0,
'stimulus frequency' : 1500,
},
(('left-input','readfile'),('right-input','readfile')),
'$STIMULI:outputdir$/click-itd-000us$STIMULI:namebody$.pkl'
]
click-itd+100us = [
'$STIMULI:stimdir$/click-itd+100us$STIMULI:namebody$.spkl',
{
'stimtype' : 'click',
'interaural time difference' : 0.1e-3,
# 'interaural time difference' : 0.1,
},
(('left-input','readfile'),('right-input','readfile')),
'$STIMULI:outputdir$/click-itd+100us$STIMULI:namebody$.pkl'
]
#an other way to define the stimuli list is make a reference on stimulus objects.
#However don't forget that option with stimulus MUST exist at this point,
# so you should move this list down after all stimulus objects.
#stimuli = [@STIMULI:click-itd-100us@ ,@STIMULI:click-itd-000us@ ,@STIMULI:click-itd+100us@]
[CELLS]
# Cell dictionary with cell-type name and importing command.
CellClasses = ('AN','VCN','LSO')
AN :'from spklin import spklin'
VCN :'from RaM03 import vcnRaMbase'
LSO :'from LSO import LSOcell'
# List of directories which will be scanned for *.mod files
# and mod file will be copy to current directory.
ModsCopy = @GENERAL:pyextrapath@
[POPULATIONS]
# First item in a list is range of nodes
# if it is None: this population is distributed over
# all nodes (same as @GENERAL:NODERANGE@[:]),
# if int. number: it works only on one node with given ID
# if list or tuple: list of nodes where this cell will be hosted
# Variable @GENERAL:NODERANGE@ can be used to set list of nodes, for
# example @GENERAL:NODERANGE@[4::2] - will run this type of cell
# on all odd nodes start from the 4. Variables @GENERAL:NODERANGE@ and
# @GENERAL:NODEID@ are set by MPI environment.
# Second item is a number of cells in populastion. It may be a lambda function
# without arguments for random number of neuron in population, for example.
#
# Third item is a list of subpopulations of cells in population. Should BE THE LIST!
# Every subpopulation is a LIST:
# Cell type object (see keys in CellImport option if CELLS section)
# number of gid per one cell - how many gid will be assigned for one cell
# Cell marker. It may be a string, int, float. In this case all cell
# will have same marker. It maybe a tuple or list by length of number of gid.
# in this case each option in list will be mark for individual cell.
# dictionary of parameters, parameter may be a lambda function
# function of cell probability - how number of this cell type depends on
# position in population. Function of cell probability should be lambda
# from one variable or just a number. Function should return one number
# which is a portion of this cell in population at given position x.
# The position is in a range[0:1]. Position 0 is a cell with minimal gid
# Position 1 is a cell with maximal gid in population
# EXAMPLE: [ None, 20, ['A', 'A', {}, 1], ['B', 'B', {}, 1] ]
# Total number of cell in population will be 20 with uniform
# mixture of cells 'A' and 'B' with 50/50 procent probability
# EXAMPLE: [ None, 20, ['A', 'A', {}, lambda(x):x], ['B', 'B', {}, lambda(x):1.-x] ]
# Total number of cell in population will be 20. At beginning of
# the population (x=0) the probability to find cell 'A' will be
# zero, cell 'B' one. At the end of population (x=1), the
# the probability to find cell 'A' is one, and cell 'B' is zero.
# In both examples cells 'A' has mark 'A', cells 'B' has the mark 'B'
#
left-input = [ 0, 1,
[ 'AN',
@AUDITORY NERVE:nhcell@ * @AUDITORY NERVE:nfibperhcell@,
[ (f[0],t) for f in @AUDITORY NERVE:anconfig@[0] for t in f[1:] ],
{
'anconfig':@AUDITORY NERVE:anconfig@[0],
'isright':False
},
1
]
]
right-input = [ 1, 1,
[ 'AN',
@AUDITORY NERVE:nhcell@ * @AUDITORY NERVE:nfibperhcell@,
[ (f[0],t) for f in @AUDITORY NERVE:anconfig@[1] for t in f[1:] ],
{
'anconfig':@AUDITORY NERVE:anconfig@[1],
'isright':True
},
1
]
]
#left-sbc = [ None,
left-sbc = [@GENERAL:NODERANGE@[2:], 120,
[ 'VCN', 1, 'TypeII',
{
'Type':'"Type II"'
},
lambda x: 1. - x,
],
[ 'VCN', 1, 'Type I-c',
{
'Type':'"Type I-c"'
},
lambda x: x,
]
]
right-gbc = [ @GENERAL:NODERANGE@[2:], 120,
[ 'VCN', 1, 'Type I-c mod',
{
'Type':'"Type I-c"',
'Param':{
'vcnklt.gkltbar':lambda x: float(1.-x)*1.67e-2,
'vcnih.ghbar' :lambda x: float(1.-x)*(1.67e-3-4.2e-5)+4.2e-5
}
},
1
]
]
left-lso = [ None, 120,
[ 'LSO', 1, 'LSO cell',
{},
1
]
]
[SYNAPSES]
# This section is needed if you have similar synapses between a cells.
# Using this objects from this section will increases computational efficacy.
# Every synapses has an ID and list of parameters. If cell has many of synapses
# with same ID only one module will be inserted in compartment.
# WARNING: all functions in SYNAPSES section will be disabled!
# EVERY synapses is a dictionary with one obligatory parameter module.
# all other names is parameters for this module.
# EXAMPLE: {'module':'h.Exp2Syn', 'tua1':0.2, 'tua2':1.0, 'e':0.0}
# Creates Exp2Syn synapses with tau rising 0.2, tau falling 1.0
# and reversal potential zero mV
ampa={ 'module': 'h.Exp2Syn',
'tau1':0.1, 'tau2':0.8, 'e':0.0
}
glyc={ 'module': 'h.Exp2Syn',
'tau1':0.1, 'tau2':1.2, 'e':-70.0
}
[CONNECTIONS]
# Every connection is a list
# First and Second items are names of source and destination
# populations. If it list it looks like @POPULATIONS:name-of-population@
# 3rd is a boolean. If it's False 5th parameter is a number o connection per source neuron.
# If 3rd parameter is True, the 5th is a number a number o connection per destination neuron.
# 4th is boolean. If it True a multiple connections between two cells are allowed.
# 5th is a integer number of connection per source/destination cell.
# It may be an lambda function from two variables. First variable
# goes from 0 - minimal gid in population to 1 - maximal gid in population.
# If number of connection is positive stochastic algorithm is used, if it's negative
# a deterministic algorithm is used for defined connection.
# Thw second variable is a neuron marker.
# EXAMPLE: lambda x,xm: int(10 * np.sin(np.pi*x) )
# will set zero connections on the sides and 10 connections per neuron in center.
# EXAMPLE: lambda x,xm: np.random.randint(2,high=10)
# neuron will have random number of connections form 2 to 9 uniformly distributed cross
# population.
# EXAMPLE: lambda x,xm: int(100. + 10. * np.random.randn() )
# neurons will have 100 connections on average with +-10 SD.
# EXAMPLE: lambda x,xm: int(100. + 10. * np.random.randn() )*int(xm == "Type I-c")
# Same at in previous example, but this connections work only for Type I-c neurons.
# 6th is a lambda function from 5 variables: offset in source population, mark of a source cell
# offset in destination population, mark of cell of destination cell and number os synapse.
# It should return boolean value.If returned value is True connection will be made.
# EXAMPLE: lambda x,xm,y,ym,z: bool(np.random.rand() < 0.5)
# Randomly sparsely connected network with 50% probability of connection.
# EXAMPLE: lambda x,xm,y,ym: bool(np.random.rand() < np.exp(-(x-y)**2/0.2**2) )
# Probability to get two cells connected decreases by normal low with distance
# EXAMPLE: lambda x,xm,y,ym,z: bool(np.random.rand() < np.exp(-(x-y)**2/0.2**2) ) and xm[1] == 1 and ym = "Type I-c"
# Same as previous example but only connect specific subpopulations of cells.
# 7th is maximal synaptic conductance in uS It may be a lambda function same from 5
# parameters or just an number.
# EXAMPLE: 0.003
# Synaptic conductance is constant
# EXAMPLE: lambda x,xm,y,ym,z: np.exp(-(x-y)**2/0.2**2)*0.02
# Synaptic weight decrease with distance between two neurons
# 8th is a delay. Delay may be an float number or lambda function from
# 5 variables.
# EXAMPLE: 0.3
# 0.3 ms delay
# EXAMPLE: lambda x,xm,y,ym,z: np.abs(x-y)*2.5+0.1
# Delay increases with distance between neurons. Min delay 0.1
# 9th is a synapses position. position is a tuple. First is compartment
# name second is float from 0 to 1 - compartment offset
# WARNING! You can easily overload memory if you will use float random number
# for compartment offset. To avoid this use this idiom
# float(np.random.randint(number_of_segments_in_compartment)/number_of_segments_in_compartment
# 10th name of synapse in SYNAPSES section or synaptic parameters (same as synapses description).
# Please note that is you would like to vary synaptic parameters
# you should specify synapses here directly.
left-input2left-sbc=['left-input','left-sbc',
True, False,
lambda x,xm: np.random.randint(2,high=5),
lambda x,xm,y,ym,z: bool( np.random.rand() < np.exp(-(x-y)**2/0.4**2) ),
3e-3,
lambda x,xm,y,ym,z: np.abs(x-y)*0.5+0.1,
('soma',0.5),
'ampa'
]
right-input2right-gbc=['right-input','right-gbc',
False,False,
lambda x,xm: np.random.randint(10,high=50),
lambda x,xm,y,ym,z: bool( np.random.rand() < np.exp(-(x-y)**2/0.2**2) ),
5e-3,
lambda x,xm,y,ym,z: np.abs(x-y)*0.5+0.1,
('soma',0.5),
'ampa'
]
left-sbc2left-lso=['left-sbc','left-lso',
True,False,
lambda x,xm: np.random.randint(5,high=11),
lambda x,xm,y,ym,z: bool( np.random.rand() < np.exp(-(x-y)**2/0.4**2) ),
6e-3,
lambda x,xm,y,ym,z: np.abs(x-y)*0.5+0.1,
([ 'dends[0]', 'dends[1]'][np.random.randint(2)],lambda x,xm,y,ym,z:float(np.random.randint(10))/10.),
'ampa'
]
right-gbc2left-lso=['right-gbc','left-lso',
True,False,
lambda x,xm: np.random.randint(1,high=4),
lambda x,xm,y,ym,z: bool( np.random.rand() < np.exp(-(x-y)**2/0.4**2) ),
1e-3,
lambda x,xm,y,ym,z: np.abs(x-y)*0.5+0.1,
('soma',0.5),
'glyc'
]
[RECORD]
# Record section define additional variables which will be recorded during
# simulation.
# To record cells add recorders to cells option
cells = ['left-sbc','right-gbc','right-gbc-ih','left-lso-soma', 'left-lso-axon']
# Recorder for cells is a list.
# 1st parameter is population name or link to population
# 2nd int, tuple, list or None. If 2nd parameter is :
# int - record cell with id inside the population
# list is a set of ids
# tuple is start id, stop id and step
# None - record all cells within population
# 3rd compartment name
# 4th compartment offset
# 5th module name or None
# 6th is recorded variable name
left-sbc = [ 'left-sbc', (0,None,10),'soma',0.5,None,'v' ]
right-gbc-ih= [ 'right-gbc', (0,None,10),'soma',0.5,'vcnih','i']
right-gbc = [ @POPULATIONS:right-gbc@, [0,@POPULATIONS:right-gbc@[1]/4,@POPULATIONS:right-gbc@[1]/2,@POPULATIONS:right-gbc@[1]*3/4,@POPULATIONS:right-gbc@[1]-1],'soma',0.5,None,'v' ]
left-lso-soma = [ 'left-lso', (0,None,10),'soma',0.5,None,'v' ]
left-lso-axon = [ 'left-lso', (0,None,10),'axon',0.5,None,'v' ]
##### DOESN'T WORK YET!!!! #########
# To synaptic activity add recorders to synapses option.
#synapses = ['left-input2left-sbc','right-input2right-gbc']
[SIMULATION]
#threads option is ignored ignored if MPI parallelization is active.
#if MPI clustering is disabled script will run multithread parallelization.
#To disable threading set threads at zero or any negative number or call script
#with --no-threads flag. Flag will alter this option.
threads = 4
#all options started with h. will by set in NEURON
h.dt = 0.01
h.celsius = 22.
#h.tstop option sets the time when simulation is terminanted
#regardless of stimulus duration. If h.tstop isn't set the dulation
#of simulation depends on duration of each stimulus. (in ms)
#h.tstop = 300
[GRAPHS]
import = [
'import matplotlib.pyplot as plt'
]
Figures = ['VCN-LSO-traces','AN-VCN-LSO-rasters','show']
#, 'Figure-2', 'Figure-3']
# Filename
VCN-LSO-traces = [
'plt.figure(1,figsize=(18,8))',
'p1=plt.subplot(5,3,1)',
'plot_stimwave(\'click-itd-100us\',False)',#left stimulus waveform
'plot_stimwave(\'click-itd-100us\',True)', #right stimulus waveform
'plt.ylabel(\'left/right wave\')',
'p2=plt.subplot(5,3,2)',
'plot_stimwave(\'click-itd-000us\',False)',#left stimulus waveform
'plot_stimwave(\'click-itd-000us\',True)', #right stimulus waveform
'p3=plt.subplot(5,3,3)',
'plot_stimwave(\'click-itd+100us\',False)',#left stimulus waveform
'plot_stimwave(\'click-itd+100us\',True)', #right stimulus waveform
#Second row all recorded cell left-sbc
'plt.subplot(5,3,4,sharex=p1)',
'plot_traces(\'click-itd-100us\',\'left-sbc\')',
'plt.ylabel(\'SBS voltage(mV)\')',
'plt.subplot(5,3,5,sharex=p2)',
'plot_traces(\'click-itd-000us\',\'left-sbc\')',
'plt.subplot(5,3,6,sharex=p3)',
'plot_traces(\'click-itd+100us\',\'right-gbc\')',
#Third row all rec for right-gbc
'plt.subplot(5,3,7,sharex=p1)',
'plot_traces(\'click-itd-100us\',\'right-gbc\')',
'plt.ylabel(\'GBS voltage (mV)\')',
'plt.subplot(5,3,8,sharex=p2)',
'plot_traces(\'click-itd-000us\',\'right-gbc\')',
'plt.subplot(5,3,9,sharex=p3)',
'plot_traces(\'click-itd+100us\',\'right-gbc\')',
#4th row all rec for left-lso-soma
'plt.subplot(5,3,10,sharex=p1)',
'plot_traces(\'click-itd-100us\',\'left-lso-soma\')',
'plt.ylabel(\'LSO soma voltage (mV)\')',
'plt.subplot(5,3,11,sharex=p2)',
'plot_traces(\'click-itd-000us\',\'left-lso-soma\')',
'plt.subplot(5,3,12,sharex=p3)',
'plot_traces(\'click-itd+100us\',\'left-lso-soma\')',
#5th row all rec for left-lso-axon
'plt.subplot(5,3,13,sharex=p1)',
'plot_traces(\'click-itd-100us\',\'left-lso-axon\')',
'plt.ylabel(\'LSO axon voltage (mV)\')',
'plt.subplot(5,3,14,sharex=p2)',
'plot_traces(\'click-itd-000us\',\'left-lso-axon\')',
'plt.subplot(5,3,15,sharex=p3)',
'plot_traces(\'click-itd+100us\',\'left-lso-axon\')',
]
AN-VCN-LSO-rasters = [
'plt.figure(2,figsize=(18,8))',
'p1=plt.subplot(5,3,1)',
'plot_stimwave(\'click-itd-100us\',False)',#left stimulus waveform
'plot_stimwave(\'click-itd-100us\',True)', #right stimulus waveform
'p2=plt.subplot(5,3,2)',
'plot_stimwave(\'click-itd-000us\',False)',#left stimulus waveform
'plot_stimwave(\'click-itd-000us\',True)', #right stimulus waveform
'p3=plt.subplot(5,3,3)',
'plot_stimwave(\'click-itd+100us\',False)',#left stimulus waveform
'plot_stimwave(\'click-itd+100us\',True)', #right stimulus waveform
#2nd row all rasters of AN
'plt.subplot(5,3,4,sharex=p1)',
'plot_raster(\'click-itd-100us\',[\'left-input\',\'right-input\'])',
'plt.ylabel(\'Left and right input\')',
'plt.subplot(5,3,5,sharex=p2)',
'plot_raster(\'click-itd-000us\',[\'left-input\',\'right-input\'])',
'plt.subplot(5,3,6,sharex=p3)',
'plot_raster(\'click-itd+100us\',[\'left-input\',\'right-input\'])',
#Third row all rasters cell left-sbc
'plt.subplot(5,3,7,sharex=p1)',
'plot_raster(\'click-itd-100us\',\'left-sbc\')',
'plt.ylabel(\'SBS raster\')',
'plt.subplot(5,3,8,sharex=p2)',
'plot_raster(\'click-itd-000us\',\'left-sbc\')',
'plt.subplot(5,3,9,sharex=p3)',
'plot_raster(\'click-itd+100us\',\'right-gbc\')',
#4th row rasters for right-gbc
'plt.subplot(5,3,10,sharex=p1)',
'plot_raster(\'click-itd-100us\',\'right-gbc\')',
'plt.ylabel(\'GBS raster\')',
'plt.subplot(5,3,11,sharex=p2)',
'plot_raster(\'click-itd-000us\',\'right-gbc\')',
'plt.subplot(5,3,12,sharex=p3)',
'plot_raster(\'click-itd+100us\',\'right-gbc\')',
#5th row all rasters for left-lso
'plt.subplot(5,3,13,sharex=p1)',
'plot_raster(\'click-itd-100us\',\'left-lso\')',
'plt.ylabel(\'LSO raster\')',
'plt.subplot(5,3,14,sharex=p2)',
'plot_raster(\'click-itd-000us\',\'left-lso\')',
'plt.subplot(5,3,15,sharex=p3)',
'plot_raster(\'click-itd+100us\',\'left-lso\')',
]
show = [ 'plt.show()' ]
[VIEW]
[STAT]
#Stat section allows collect statistics
# Results will be save in coma separated value (CSV) file.
# CSV file name defined by file option
file = 'stat.csv'
# The delimiter in CVS may be altered by delimiter option
# You can make tcv or dat file separated by space
delimiter = ','
# Every row in the file is a result of one simulation.
# Each column in a row defines a test.
# records option defines all options which will be collected for each simulation.
records = ['total-click-itd-100us left-lso','total-click-itd+100us right-gbc', 'total-topne-itd-000us both']
total-click-itd-100us left-lso = 'stat_total(\'click-itd-100us\',\'left-lso\')'
total-click-itd+100us right-gbc = 'stat_total(\'click-itd+100us\',\'right-gbc\')'
total-topne-itd-000us both = 'stat_total(\'click-itd-000us\',[\'left-lso\',\'right-gbc\'])'
[SCRIPTS]
# You can run arbitrary script at different stages of simulation process.
# preloading, preparation, simulations, analysis are option which are read
# and executed in a different stage of model preparation and simulations running.
# Each section is a list of system commands which should be run.
#Extra command should be defined first
git commit = "git commit -a &"
#scripts which are run before any manipulations
preloading = []
#scripts which are run before preset
preparation = []
#scripts which are run before simulation
simulations = []
#scripts which are run before any analysis
analysis = [ @SCRIPTS:git commit@ ]