The Simulation
object¶
Let’s familiarize ourselves with the Simulation
object.
In this tutorial we:
- Initialize an empty ``Simulation`` object
- Initialize the NEST kernel (
Simulation.init__kernel
) - Create a network (
Simulation.create__network
) - Create sessions:
- Build session models (
Simulation.build__session__models
) - Build the list of sessions from session models (
Simulation.build__sessions
)
- Build session models (
- Run the simulation
- Replicate the simulation
NB: Usually we’d perform all the steps at once by providing the full simulation tree to the Simulation
object during initialization
[1]:
import nest
import yaml
from pathlib import Path
from pprint import pprint
from denest import *
import denest
[2]:
PARAMS_DIR = Path('./data/params')
DATA_DIR = Path('./data/outputs')
OUTPUT_DIR = DATA_DIR/'output'
Initialize an empty Simulation object¶
Empty network, no kernel initialization, etc…
[3]:
sim = Simulation(output_dir=OUTPUT_DIR)
2020-06-30 13:52:43,106 [denest.utils.validation] INFO: 'None' tree: adding empty child kernel
2020-06-30 13:52:43,107 [denest.utils.validation] INFO: 'None' tree: adding empty child simulation
2020-06-30 13:52:43,108 [denest.utils.validation] INFO: 'None' tree: adding empty child session_models
2020-06-30 13:52:43,109 [denest.utils.validation] INFO: 'None' tree: adding empty child network
2020-06-30 13:52:43,111 [denest.utils.validation] INFO: Object `simulation`: params: using default value for optional parameters:
{'input_dir': 'input', 'output_dir': 'output', 'sessions': []}
2020-06-30 13:52:43,116 [denest.utils.validation] INFO: Object `kernel`: params: using default value for optional parameters:
{'extension_modules': [], 'nest_seed': 1}
2020-06-30 13:52:43,118 [denest.simulation] INFO: Initializing NEST kernel and seeds...
2020-06-30 13:52:43,119 [denest.simulation] INFO: Resetting NEST kernel...
2020-06-30 13:52:43,142 [denest.simulation] INFO: Setting NEST kernel status...
2020-06-30 13:52:43,146 [denest.simulation] INFO: Calling `nest.SetKernelStatus({})`
2020-06-30 13:52:43,153 [denest.simulation] INFO: Calling `nest.SetKernelStatus({'data_path': 'data/outputs/output/data', 'grng_seed': 2, 'rng_seeds': range(3, 4)})
2020-06-30 13:52:43,168 [denest.simulation] INFO: Finished setting NEST kernel status
2020-06-30 13:52:43,173 [denest.simulation] INFO: Installing external modules...
2020-06-30 13:52:43,179 [denest.simulation] INFO: Finished installing external modules
2020-06-30 13:52:43,189 [denest.simulation] INFO: Finished initializing kernel
2020-06-30 13:52:43,193 [denest.simulation] INFO: Build N=0 session models
2020-06-30 13:52:43,197 [denest.simulation] INFO: Build N=0 sessions
2020-06-30 13:52:43,210 [denest.simulation] INFO: Sessions: []
2020-06-30 13:52:43,212 [denest.simulation] INFO: Building network.
2020-06-30 13:52:43,219 [denest.utils.validation] INFO: 'None' tree: adding empty child neuron_models
2020-06-30 13:52:43,233 [denest.utils.validation] INFO: 'None' tree: adding empty child synapse_models
2020-06-30 13:52:43,254 [denest.utils.validation] INFO: 'None' tree: adding empty child layers
2020-06-30 13:52:43,272 [denest.utils.validation] INFO: 'None' tree: adding empty child projection_models
2020-06-30 13:52:43,285 [denest.utils.validation] INFO: 'None' tree: adding empty child topology
2020-06-30 13:52:43,297 [denest.utils.validation] INFO: 'None' tree: adding empty child recorder_models
2020-06-30 13:52:43,302 [denest.utils.validation] INFO: 'None' tree: adding empty child recorders
2020-06-30 13:52:43,305 [denest.network] INFO: Build N=0 ``Model`` objects
2020-06-30 13:52:43,308 [denest.network] INFO: Build N=0 ``SynapseModel`` objects
2020-06-30 13:52:43,310 [denest.network] INFO: Build N=0 ``Model`` objects
2020-06-30 13:52:43,315 [denest.network] INFO: Build N=0 ``Layer`` or ``InputLayer`` objects.
2020-06-30 13:52:43,318 [denest.network] INFO: Build N=0 ``ProjectionModel`` objects
2020-06-30 13:52:43,322 [denest.utils.validation] INFO: Object `topology`: params: using default value for optional parameters:
{'projections': []}
2020-06-30 13:52:43,326 [denest.network] INFO: Build N=0 ``TopoProjection`` objects
2020-06-30 13:52:43,329 [denest.utils.validation] INFO: Object `recorders`: params: using default value for optional parameters:
{'population_recorders': [], 'projection_recorders': []}
2020-06-30 13:52:43,335 [denest.network] INFO: Build N=0 population recorders.
2020-06-30 13:52:43,337 [denest.network] INFO: Build N=0 projection recorders.
2020-06-30 13:52:43,338 [denest.simulation] INFO: Creating network.
2020-06-30 13:52:43,341 [denest.network] INFO: Creating neuron models...
0it [00:00, ?it/s]
2020-06-30 13:52:43,365 [denest.network] INFO: Creating synapse models...
0it [00:00, ?it/s]
2020-06-30 13:52:43,378 [denest.network] INFO: Creating recorder models...
0it [00:00, ?it/s]
2020-06-30 13:52:43,396 [denest.network] INFO: Creating layers...
0it [00:00, ?it/s]
2020-06-30 13:52:43,404 [denest.network] INFO: Creating population recorders...
0it [00:00, ?it/s]
2020-06-30 13:52:43,419 [denest.network] INFO: Creating projection recorders...
0it [00:00, ?it/s]
2020-06-30 13:52:43,426 [denest.network] INFO: Connecting layers...
0it [00:00, ?it/s]
2020-06-30 13:52:43,442 [denest.network] INFO: Network size (including recorders and parrot neurons):
Number of nodes: 1
Number of projections: 0
2020-06-30 13:52:43,446 [denest.simulation] INFO: Finished creating network
2020-06-30 13:52:43,449 [denest.simulation] INFO: Saving simulation metadata...
2020-06-30 13:52:43,455 [denest.simulation] INFO: Creating output directory: data/outputs/output
2020-06-30 13:52:43,459 [denest.io.save] INFO: Clearing directory: data/outputs/output
2020-06-30 13:52:43,475 [denest.io.save] INFO: Clearing directory: data/outputs/output
2020-06-30 13:52:43,486 [denest.io.save] INFO: Clearing directory: data/outputs/output/data
2020-06-30 13:52:43,494 [denest.io.save] INFO: Clearing directory: data/outputs/output/data
2020-06-30 13:52:43,500 [denest.io.save] INFO: Clearing directory: data/outputs/output/data
2020-06-30 13:52:43,503 [denest.io.save] INFO: Clearing directory: data/outputs/output
2020-06-30 13:52:43,532 [denest.simulation] INFO: Finished saving simulation metadata
Initialize the NEST kernel¶
Simulation.init_kernel??
for doc
[4]:
kernel_tree = {
'params':
{
'nest_seed': 10,
'extension_modules': [],
},
'nest_params':
{
'resolution': 0.5,
'overwrite_files': True
},
}
[5]:
sim.init_kernel(kernel_tree)
2020-06-30 13:52:43,715 [denest.simulation] INFO: Initializing NEST kernel and seeds...
2020-06-30 13:52:43,720 [denest.simulation] INFO: Resetting NEST kernel...
2020-06-30 13:52:43,740 [denest.simulation] INFO: Setting NEST kernel status...
2020-06-30 13:52:43,743 [denest.simulation] INFO: Calling `nest.SetKernelStatus({'resolution': 0.5, 'overwrite_files': True})`
2020-06-30 13:52:43,746 [denest.simulation] INFO: Calling `nest.SetKernelStatus({'data_path': 'data/outputs/output/data', 'grng_seed': 11, 'rng_seeds': range(12, 13)})
2020-06-30 13:52:43,750 [denest.simulation] INFO: Finished setting NEST kernel status
2020-06-30 13:52:43,756 [denest.simulation] INFO: Installing external modules...
2020-06-30 13:52:43,784 [denest.simulation] INFO: Finished installing external modules
2020-06-30 13:52:43,785 [denest.simulation] INFO: Finished initializing kernel
[6]:
# nest_params have been passed to nest.SetKernelStatus
print(nest.GetKernelStatus('resolution'))
print(nest.GetKernelStatus('time'))
0.5
0.0
[7]:
# The raw data will be saved in the output directory
nest.GetKernelStatus('data_path')
[7]:
'data/outputs/output/data'
[8]:
# The kernel params are saved in the simulation's tree
sim.tree
[8]:
ParamsTree(name='None', parent=None)
params: {}
nest_params: {}
kernel:
params:
nest_seed: 10
extension_modules: []
nest_params:
resolution: 0.5
overwrite_files: true
simulation:
params:
output_dir: data/outputs/output
sessions: []
nest_params: {}
session_models:
params: {}
nest_params: {}
network:
params: {}
nest_params: {}
Create a network¶
We build and create the same network by passing the network tree, using the Simulation.create_network
method
[9]:
net_tree = ParamsTree.read(PARAMS_DIR/'network/network_tree.yml')
[10]:
sim.create_network(net_tree)
2020-06-30 13:52:44,151 [denest.simulation] INFO: Building network.
2020-06-30 13:52:44,167 [denest.network] INFO: Build N=2 ``Model`` objects
2020-06-30 13:52:44,169 [denest.network] INFO: Build N=2 ``SynapseModel`` objects
2020-06-30 13:52:44,174 [denest.network] INFO: Build N=3 ``Model`` objects
2020-06-30 13:52:44,180 [denest.network] INFO: Build N=2 ``Layer`` or ``InputLayer`` objects.
2020-06-30 13:52:44,183 [denest.utils.validation] INFO: Object `proj_1_AMPA`: params: using default value for optional parameters:
{'type': 'topological'}
2020-06-30 13:52:44,192 [denest.utils.validation] INFO: Object `proj_2_GABAA`: params: using default value for optional parameters:
{'type': 'topological'}
2020-06-30 13:52:44,198 [denest.network] INFO: Build N=2 ``ProjectionModel`` objects
2020-06-30 13:52:44,214 [denest.network] INFO: Build N=3 ``TopoProjection`` objects
2020-06-30 13:52:44,232 [denest.network] INFO: Build N=2 population recorders.
2020-06-30 13:52:44,239 [denest.network] INFO: Build N=1 projection recorders.
2020-06-30 13:52:44,254 [denest.simulation] INFO: Creating network.
2020-06-30 13:52:44,272 [denest.network] INFO: Creating neuron models...
100%|██████████| 2/2 [00:00<00:00, 299.85it/s]
2020-06-30 13:52:44,291 [denest.network] INFO: Creating synapse models...
100%|██████████| 2/2 [00:00<00:00, 702.21it/s]
2020-06-30 13:52:44,310 [denest.network] INFO: Creating recorder models...
100%|██████████| 3/3 [00:00<00:00, 811.28it/s]
2020-06-30 13:52:44,322 [denest.network] INFO: Creating layers...
0%| | 0/2 [00:00<?, ?it/s]/Users/tom/nest/nest-simulator-2.20.0/lib/python3.7/site-packages/nest/lib/hl_api_helper.py:127: UserWarning:
GetNodes is deprecated and will be removed in NEST 3.0. Use GIDCollection instead.
100%|██████████| 2/2 [00:00<00:00, 8.14it/s]
2020-06-30 13:52:44,577 [denest.network] INFO: Creating population recorders...
100%|██████████| 2/2 [00:00<00:00, 42.15it/s]
2020-06-30 13:52:44,631 [denest.network] INFO: Creating projection recorders...
100%|██████████| 1/1 [00:00<00:00, 74.23it/s]
2020-06-30 13:52:44,679 [denest.network] INFO: Connecting layers...
100%|██████████| 3/3 [00:00<00:00, 145.55it/s]
2020-06-30 13:52:44,736 [denest.network] INFO: Network size (including recorders and parrot neurons):
Number of nodes: 206
Number of projections: 6650
2020-06-30 13:52:44,739 [denest.simulation] INFO: Finished creating network
[11]:
# Network object was created and can be accessed as we learnt
sim.network.layers['l1'].gid
[11]:
(52,)
[12]:
# network tree was saved and can be re-used
sim.tree
[12]:
ParamsTree(name='None', parent=None)
params: {}
nest_params: {}
kernel:
params:
nest_seed: 10
extension_modules: []
nest_params:
resolution: 0.5
overwrite_files: true
simulation:
params:
output_dir: data/outputs/output
sessions: []
nest_params: {}
session_models:
... [135 lines] ...
- layers:
- input_layer
populations: null
model: my_spike_detector
projection_recorders:
- source_layers:
- l1
source_population: l1_exc
target_layers:
- l1
target_population: l1_inh
projection_model: proj_1_AMPA
model: weight_recorder
nest_params: {}
Create some sessions¶
Sessions allow us to run the network in specific conditions.
Session parameters:
simulation_time
(float): Duration of the session in ms. (mandatory)reset_network
(bool): If true,nest.ResetNetwork()
is called during session initialization (defaultFalse
)record
(bool): If false, thestart_time
field of recorder nodes in NEST is set to the end time of the session, so that no data is recorded during the session (defaultTrue
)shift_origin
(bool): If True, theorigin
flag of the stimulation devices of all the network’sInputLayer
layers is set to the start of the session during initialization. Useful to repeat sessions when the stimulators are eg spike generators.unit_changes
(list): List describing the changes applied to certain units before the start of the session. Passed toNetwork.set_state
.synapse_changes
(list): List describing the changes applied to certain synapses before the start of the session. Passed toNetwork.set_state
. Refer to that method for a description of howsynapse_changes
is formatted and interpreted. No changes happen if empty. (default [])
Build session models from a tree¶
[13]:
# Notice the hierarchical inheritance as before
session_models_tree = ParamsTree.read(PARAMS_DIR/'session_models.yml').children['session_models']
print(session_models_tree)
params:
record: true
shift_origin: true
simulation_time: 100.0
nest_params: {}
warmup:
params:
record: false
nest_params: {}
2_spikes:
params:
unit_changes:
- layers:
- input_layer
population_name: spike_generator
nest_params:
spike_times:
- 1.0
- 10.0
nest_params: {}
3_spikes:
params:
unit_changes:
- layers:
- input_layer
population_name: spike_generator
nest_params:
spike_times:
- 1.0
- 10.0
- 20.0
nest_params: {}
[14]:
sim.build_session_models(session_models_tree)
2020-06-30 13:52:44,980 [denest.simulation] INFO: Build N=3 session models
[15]:
sim.tree.children['session_models']
[15]:
ParamsTree(name='session_models', parent='None')
params:
record: true
shift_origin: true
simulation_time: 100.0
nest_params: {}
warmup:
params:
record: false
nest_params: {}
2_spikes:
params:
unit_changes:
- layers:
- input_layer
population_name: spike_generator
... [3 lines] ...
- 10.0
nest_params: {}
3_spikes:
params:
unit_changes:
- layers:
- input_layer
population_name: spike_generator
nest_params:
spike_times:
- 1.0
- 10.0
- 20.0
nest_params: {}
Build a list of sessions from the session_models
templates¶
[16]:
sessions_order = ['warmup', '3_spikes', '2_spikes', '3_spikes']
[17]:
sim.build_sessions(sessions_order)
2020-06-30 13:52:45,205 [denest.simulation] INFO: Build N=4 sessions
2020-06-30 13:52:45,206 [denest.session] INFO: Creating session "00_warmup"
2020-06-30 13:52:45,208 [denest.utils.validation] INFO: Object `00_warmup`: params: using default value for optional parameters:
{'reset_network': False, 'synapse_changes': [], 'unit_changes': []}
2020-06-30 13:52:45,212 [denest.session] INFO: Creating session "01_3_spikes"
2020-06-30 13:52:45,219 [denest.utils.validation] INFO: Object `01_3_spikes`: params: using default value for optional parameters:
{'reset_network': False, 'synapse_changes': []}
2020-06-30 13:52:45,221 [denest.session] INFO: Creating session "02_2_spikes"
2020-06-30 13:52:45,223 [denest.utils.validation] INFO: Object `02_2_spikes`: params: using default value for optional parameters:
{'reset_network': False, 'synapse_changes': []}
2020-06-30 13:52:45,225 [denest.session] INFO: Creating session "03_3_spikes"
2020-06-30 13:52:45,234 [denest.utils.validation] INFO: Object `03_3_spikes`: params: using default value for optional parameters:
{'reset_network': False, 'synapse_changes': []}
2020-06-30 13:52:45,239 [denest.simulation] INFO: Sessions: ['00_warmup', '01_3_spikes', '02_2_spikes', '03_3_spikes']
[18]:
# Notice the session names
sim.sessions
[18]:
[Session(00_warmup, {'record': False,
'reset_network': False,
'shift_origin': True,
'simulation_time': 100.0,
'synapse_changes': [],
'unit_changes': []}),
Session(01_3_spikes, {'record': True,
'reset_network': False,
'shift_origin': True,
'simulation_time': 100.0,
'synapse_changes': [],
'unit_changes': [{'layers': ['input_layer'],
'nest_params': {'spike_times': [1.0, 10.0, 20.0]},
'population_name': 'spike_generator'}]}),
Session(02_2_spikes, {'record': True,
'reset_network': False,
'shift_origin': True,
'simulation_time': 100.0,
'synapse_changes': [],
'unit_changes': [{'layers': ['input_layer'],
'nest_params': {'spike_times': [1.0, 10.0]},
'population_name': 'spike_generator'}]}),
Session(03_3_spikes, {'record': True,
'reset_network': False,
'shift_origin': True,
'simulation_time': 100.0,
'synapse_changes': [],
'unit_changes': [{'layers': ['input_layer'],
'nest_params': {'spike_times': [1.0, 10.0, 20.0]},
'population_name': 'spike_generator'}]})]
[19]:
# The session order is saved in the simulation parameters
sim.tree.children['simulation']
[19]:
ParamsTree(name='simulation', parent='None')
params:
output_dir: data/outputs/output
sessions:
- warmup
- 3_spikes
- 2_spikes
- 3_spikes
nest_params: {}
Run the simulation¶
[20]:
print('kernel time: ', nest.GetKernelStatus('time'))
kernel time: 0.0
[21]:
sim.run()
2020-06-30 13:52:45,497 [denest.simulation] INFO: Running 4 sessions...
2020-06-30 13:52:45,497 [denest.simulation] INFO: Running session: '00_warmup'...
2020-06-30 13:52:45,499 [denest.session] INFO: Initializing session...
2020-06-30 13:52:45,501 [denest.network.recorders] INFO: Setting status for recorder my_multimeter_l1_l1_exc: {'start': 100.0}
2020-06-30 13:52:45,504 [denest.network.recorders] INFO: Setting status for recorder my_spike_detector_input_layer_parrot_neuron: {'start': 100.0}
2020-06-30 13:52:45,505 [denest.network.recorders] INFO: Setting status for recorder weight_recorder_proj_1_AMPA-l1-l1_exc-l1-l1_inh: {'start': 100.0}
2020-06-30 13:52:45,507 [denest.session] INFO: Setting `origin` flag to `0.0` for all stimulation devices in ``InputLayers`` for session `00_warmup`
2020-06-30 13:52:45,523 [denest.session] INFO: Finished initializing session
2020-06-30 13:52:45,524 [denest.session] INFO: Running session '00_warmup' for 100 ms
2020-06-30 13:52:45,749 [denest.session] INFO: Finished running session
2020-06-30 13:52:45,750 [denest.session] INFO: Session '00_warmup' virtual running time: 100 ms
2020-06-30 13:52:45,751 [denest.session] INFO: Session '00_warmup' real running time: 0h:00m:00s
2020-06-30 13:52:45,806 [denest.simulation] INFO: Done running session '00_warmup'
2020-06-30 13:52:45,807 [denest.simulation] INFO: Running session: '01_3_spikes'...
2020-06-30 13:52:45,823 [denest.session] INFO: Initializing session...
2020-06-30 13:52:45,824 [denest.session] INFO: Setting `origin` flag to `100.0` for all stimulation devices in ``InputLayers`` for session `01_3_spikes`
2020-06-30 13:52:45,879 [denest.utils.validation] INFO: Object `Unit changes dictionary`: params: using default value for optional parameters:
{'change_type': 'constant', 'from_array': False}
2020-06-30 13:52:45,887 [denest.network.layers] INFO: Layer='input_layer', pop='spike_generator': Applying 'constant' change, param='spike_times', from single value')
2020-06-30 13:52:46,004 [denest.session] INFO: Finished initializing session
2020-06-30 13:52:46,005 [denest.session] INFO: Running session '01_3_spikes' for 100 ms
2020-06-30 13:52:46,213 [denest.session] INFO: Finished running session
2020-06-30 13:52:46,215 [denest.session] INFO: Session '01_3_spikes' virtual running time: 100 ms
2020-06-30 13:52:46,216 [denest.session] INFO: Session '01_3_spikes' real running time: 0h:00m:00s
2020-06-30 13:52:46,218 [denest.simulation] INFO: Done running session '01_3_spikes'
2020-06-30 13:52:46,219 [denest.simulation] INFO: Running session: '02_2_spikes'...
2020-06-30 13:52:46,221 [denest.session] INFO: Initializing session...
2020-06-30 13:52:46,222 [denest.session] INFO: Setting `origin` flag to `200.0` for all stimulation devices in ``InputLayers`` for session `02_2_spikes`
2020-06-30 13:52:46,226 [denest.utils.validation] INFO: Object `Unit changes dictionary`: params: using default value for optional parameters:
{'change_type': 'constant', 'from_array': False}
2020-06-30 13:52:46,246 [denest.network.layers] INFO: Layer='input_layer', pop='spike_generator': Applying 'constant' change, param='spike_times', from single value')
2020-06-30 13:52:46,371 [denest.session] INFO: Finished initializing session
2020-06-30 13:52:46,371 [denest.session] INFO: Running session '02_2_spikes' for 100 ms
2020-06-30 13:52:46,653 [denest.session] INFO: Finished running session
2020-06-30 13:52:46,654 [denest.session] INFO: Session '02_2_spikes' virtual running time: 100 ms
2020-06-30 13:52:46,658 [denest.session] INFO: Session '02_2_spikes' real running time: 0h:00m:00s
2020-06-30 13:52:46,660 [denest.simulation] INFO: Done running session '02_2_spikes'
2020-06-30 13:52:46,671 [denest.simulation] INFO: Running session: '03_3_spikes'...
2020-06-30 13:52:46,673 [denest.session] INFO: Initializing session...
2020-06-30 13:52:46,688 [denest.session] INFO: Setting `origin` flag to `300.0` for all stimulation devices in ``InputLayers`` for session `03_3_spikes`
2020-06-30 13:52:46,741 [denest.utils.validation] INFO: Object `Unit changes dictionary`: params: using default value for optional parameters:
{'change_type': 'constant', 'from_array': False}
2020-06-30 13:52:46,745 [denest.network.layers] INFO: Layer='input_layer', pop='spike_generator': Applying 'constant' change, param='spike_times', from single value')
2020-06-30 13:52:46,876 [denest.session] INFO: Finished initializing session
2020-06-30 13:52:46,877 [denest.session] INFO: Running session '03_3_spikes' for 100 ms
2020-06-30 13:52:47,122 [denest.session] INFO: Finished running session
2020-06-30 13:52:47,193 [denest.session] INFO: Session '03_3_spikes' virtual running time: 100 ms
2020-06-30 13:52:47,227 [denest.session] INFO: Session '03_3_spikes' real running time: 0h:00m:00s
2020-06-30 13:52:47,244 [denest.simulation] INFO: Done running session '03_3_spikes'
2020-06-30 13:52:47,253 [denest.simulation] INFO: Finished running simulation
[22]:
nest.GetKernelStatus('time')
[22]:
400.0
Since the initialized Simulation object was empty, we need to save the metadata¶
[23]:
sim.save_metadata()
2020-06-30 13:52:47,378 [denest.simulation] INFO: Saving simulation metadata...
2020-06-30 13:52:47,379 [denest.simulation] INFO: Creating output directory: data/outputs/output
2020-06-30 13:52:47,545 [denest.simulation] INFO: Finished saving simulation metadata
[24]:
!ls {OUTPUT_DIR}
data parameter_tree.yml session_times.yml versions.txt
[25]:
!cat {OUTPUT_DIR/'session_times.yml'}
00_warmup: !!python/tuple
- 0.0
- 100.0
01_3_spikes: !!python/tuple
- 100.0
- 200.0
02_2_spikes: !!python/tuple
- 200.0
- 300.0
03_3_spikes: !!python/tuple
- 300.0
- 400.0
[26]:
!ls {OUTPUT_DIR/'data'}
my_multimeter_l1_l1_exc-203-0.dat
my_multimeter_l1_l1_exc.yml
my_spike_detector_input_layer_parrot_neuron-204-0.gdf
my_spike_detector_input_layer_parrot_neuron.yml
weight_recorder_proj_1_AMPA-l1-l1_exc-l1-l1_inh-205-0.csv
weight_recorder_proj_1_AMPA-l1-l1_exc-l1-l1_inh.yml
Replicate the simulation¶
[27]:
params = ParamsTree.read(OUTPUT_DIR/'parameter_tree.yml')
params
[27]:
ParamsTree(name='None', parent=None)
params: {}
nest_params: {}
kernel:
params:
nest_seed: 10
extension_modules: []
nest_params:
resolution: 0.5
overwrite_files: true
simulation:
params:
output_dir: data/outputs/output
sessions:
- warmup
- 3_spikes
... [169 lines] ...
- layers:
- input_layer
populations: null
model: my_spike_detector
projection_recorders:
- source_layers:
- l1
source_population: l1_exc
target_layers:
- l1
target_population: l1_inh
projection_model: proj_1_AMPA
model: weight_recorder
nest_params: {}
[28]:
sim = denest.Simulation(params, output_dir=DATA_DIR/'output_replicate')
sim.run()
2020-06-30 13:52:48,433 [denest.utils.validation] INFO: Object `simulation`: params: using default value for optional parameters:
{'input_dir': 'input'}
2020-06-30 13:52:48,435 [denest.simulation] INFO: Initializing NEST kernel and seeds...
2020-06-30 13:52:48,437 [denest.simulation] INFO: Resetting NEST kernel...
2020-06-30 13:52:48,544 [denest.simulation] INFO: Setting NEST kernel status...
2020-06-30 13:52:48,546 [denest.simulation] INFO: Calling `nest.SetKernelStatus({'resolution': 0.5, 'overwrite_files': True})`
2020-06-30 13:52:48,565 [denest.simulation] INFO: Calling `nest.SetKernelStatus({'data_path': 'data/outputs/output_replicate/data', 'grng_seed': 11, 'rng_seeds': range(12, 13)})
2020-06-30 13:52:48,619 [denest.simulation] INFO: Finished setting NEST kernel status
2020-06-30 13:52:48,630 [denest.simulation] INFO: Installing external modules...
2020-06-30 13:52:48,647 [denest.simulation] INFO: Finished installing external modules
2020-06-30 13:52:48,648 [denest.simulation] INFO: Finished initializing kernel
2020-06-30 13:52:48,651 [denest.simulation] INFO: Build N=3 session models
2020-06-30 13:52:48,653 [denest.simulation] INFO: Build N=4 sessions
2020-06-30 13:52:48,655 [denest.session] INFO: Creating session "00_warmup"
2020-06-30 13:52:48,656 [denest.utils.validation] INFO: Object `00_warmup`: params: using default value for optional parameters:
{'reset_network': False, 'synapse_changes': [], 'unit_changes': []}
2020-06-30 13:52:48,658 [denest.session] INFO: Creating session "01_3_spikes"
2020-06-30 13:52:48,660 [denest.utils.validation] INFO: Object `01_3_spikes`: params: using default value for optional parameters:
{'reset_network': False, 'synapse_changes': []}
2020-06-30 13:52:48,662 [denest.session] INFO: Creating session "02_2_spikes"
2020-06-30 13:52:48,665 [denest.utils.validation] INFO: Object `02_2_spikes`: params: using default value for optional parameters:
{'reset_network': False, 'synapse_changes': []}
2020-06-30 13:52:48,668 [denest.session] INFO: Creating session "03_3_spikes"
2020-06-30 13:52:48,671 [denest.utils.validation] INFO: Object `03_3_spikes`: params: using default value for optional parameters:
{'reset_network': False, 'synapse_changes': []}
2020-06-30 13:52:48,675 [denest.simulation] INFO: Sessions: ['00_warmup', '01_3_spikes', '02_2_spikes', '03_3_spikes']
2020-06-30 13:52:48,680 [denest.simulation] INFO: Building network.
2020-06-30 13:52:48,711 [denest.network] INFO: Build N=2 ``Model`` objects
2020-06-30 13:52:48,715 [denest.network] INFO: Build N=2 ``SynapseModel`` objects
2020-06-30 13:52:48,720 [denest.network] INFO: Build N=3 ``Model`` objects
2020-06-30 13:52:48,724 [denest.network] INFO: Build N=2 ``Layer`` or ``InputLayer`` objects.
2020-06-30 13:52:48,728 [denest.utils.validation] INFO: Object `proj_1_AMPA`: params: using default value for optional parameters:
{'type': 'topological'}
2020-06-30 13:52:48,730 [denest.utils.validation] INFO: Object `proj_2_GABAA`: params: using default value for optional parameters:
{'type': 'topological'}
2020-06-30 13:52:48,735 [denest.network] INFO: Build N=2 ``ProjectionModel`` objects
2020-06-30 13:52:48,742 [denest.network] INFO: Build N=3 ``TopoProjection`` objects
2020-06-30 13:52:48,751 [denest.network] INFO: Build N=2 population recorders.
2020-06-30 13:52:48,757 [denest.network] INFO: Build N=1 projection recorders.
2020-06-30 13:52:48,759 [denest.simulation] INFO: Creating network.
2020-06-30 13:52:48,763 [denest.network] INFO: Creating neuron models...
100%|██████████| 2/2 [00:00<00:00, 197.59it/s]
2020-06-30 13:52:48,784 [denest.network] INFO: Creating synapse models...
100%|██████████| 2/2 [00:00<00:00, 409.50it/s]
2020-06-30 13:52:48,802 [denest.network] INFO: Creating recorder models...
100%|██████████| 3/3 [00:00<00:00, 1972.24it/s]
2020-06-30 13:52:48,823 [denest.network] INFO: Creating layers...
100%|██████████| 2/2 [00:00<00:00, 9.01it/s]
2020-06-30 13:52:49,080 [denest.network] INFO: Creating population recorders...
100%|██████████| 2/2 [00:00<00:00, 63.84it/s]
2020-06-30 13:52:49,120 [denest.network] INFO: Creating projection recorders...
100%|██████████| 1/1 [00:00<00:00, 349.44it/s]
2020-06-30 13:52:49,130 [denest.network] INFO: Connecting layers...
100%|██████████| 3/3 [00:00<00:00, 130.74it/s]
2020-06-30 13:52:49,160 [denest.network] INFO: Network size (including recorders and parrot neurons):
Number of nodes: 206
Number of projections: 6650
2020-06-30 13:52:49,164 [denest.simulation] INFO: Finished creating network
2020-06-30 13:52:49,166 [denest.simulation] INFO: Saving simulation metadata...
2020-06-30 13:52:49,167 [denest.simulation] INFO: Creating output directory: data/outputs/output_replicate
2020-06-30 13:52:49,169 [denest.io.save] INFO: Clearing directory: data/outputs/output_replicate
2020-06-30 13:52:49,179 [denest.io.save] INFO: Clearing directory: data/outputs/output_replicate
2020-06-30 13:52:49,186 [denest.io.save] INFO: Clearing directory: data/outputs/output_replicate/data
2020-06-30 13:52:49,189 [denest.io.save] INFO: Clearing directory: data/outputs/output_replicate/data
2020-06-30 13:52:49,191 [denest.io.save] INFO: Clearing directory: data/outputs/output_replicate/data
2020-06-30 13:52:49,209 [denest.io.save] INFO: Clearing directory: data/outputs/output_replicate
2020-06-30 13:52:49,346 [denest.simulation] INFO: Finished saving simulation metadata
2020-06-30 13:52:49,347 [denest.simulation] INFO: Running 4 sessions...
2020-06-30 13:52:49,350 [denest.simulation] INFO: Running session: '00_warmup'...
2020-06-30 13:52:49,352 [denest.session] INFO: Initializing session...
2020-06-30 13:52:49,359 [denest.network.recorders] INFO: Setting status for recorder my_multimeter_l1_l1_exc: {'start': 100.0}
2020-06-30 13:52:49,375 [denest.network.recorders] INFO: Setting status for recorder my_spike_detector_input_layer_parrot_neuron: {'start': 100.0}
2020-06-30 13:52:49,379 [denest.network.recorders] INFO: Setting status for recorder weight_recorder_proj_1_AMPA-l1-l1_exc-l1-l1_inh: {'start': 100.0}
2020-06-30 13:52:49,381 [denest.session] INFO: Setting `origin` flag to `0.0` for all stimulation devices in ``InputLayers`` for session `00_warmup`
2020-06-30 13:52:49,391 [denest.session] INFO: Finished initializing session
2020-06-30 13:52:49,394 [denest.session] INFO: Running session '00_warmup' for 100 ms
2020-06-30 13:52:49,737 [denest.session] INFO: Finished running session
2020-06-30 13:52:49,738 [denest.session] INFO: Session '00_warmup' virtual running time: 100 ms
2020-06-30 13:52:49,739 [denest.session] INFO: Session '00_warmup' real running time: 0h:00m:00s
2020-06-30 13:52:49,757 [denest.simulation] INFO: Done running session '00_warmup'
2020-06-30 13:52:49,763 [denest.simulation] INFO: Running session: '01_3_spikes'...
2020-06-30 13:52:49,784 [denest.session] INFO: Initializing session...
2020-06-30 13:52:49,795 [denest.session] INFO: Setting `origin` flag to `100.0` for all stimulation devices in ``InputLayers`` for session `01_3_spikes`
2020-06-30 13:52:49,824 [denest.utils.validation] INFO: Object `Unit changes dictionary`: params: using default value for optional parameters:
{'change_type': 'constant', 'from_array': False}
2020-06-30 13:52:49,831 [denest.network.layers] INFO: Layer='input_layer', pop='spike_generator': Applying 'constant' change, param='spike_times', from single value')
2020-06-30 13:52:49,938 [denest.session] INFO: Finished initializing session
2020-06-30 13:52:49,939 [denest.session] INFO: Running session '01_3_spikes' for 100 ms
2020-06-30 13:52:50,128 [denest.session] INFO: Finished running session
2020-06-30 13:52:50,129 [denest.session] INFO: Session '01_3_spikes' virtual running time: 100 ms
2020-06-30 13:52:50,130 [denest.session] INFO: Session '01_3_spikes' real running time: 0h:00m:00s
2020-06-30 13:52:50,131 [denest.simulation] INFO: Done running session '01_3_spikes'
2020-06-30 13:52:50,159 [denest.simulation] INFO: Running session: '02_2_spikes'...
2020-06-30 13:52:50,179 [denest.session] INFO: Initializing session...
2020-06-30 13:52:50,202 [denest.session] INFO: Setting `origin` flag to `200.0` for all stimulation devices in ``InputLayers`` for session `02_2_spikes`
2020-06-30 13:52:50,230 [denest.utils.validation] INFO: Object `Unit changes dictionary`: params: using default value for optional parameters:
{'change_type': 'constant', 'from_array': False}
2020-06-30 13:52:50,231 [denest.network.layers] INFO: Layer='input_layer', pop='spike_generator': Applying 'constant' change, param='spike_times', from single value')
2020-06-30 13:52:50,321 [denest.session] INFO: Finished initializing session
2020-06-30 13:52:50,321 [denest.session] INFO: Running session '02_2_spikes' for 100 ms
2020-06-30 13:52:50,620 [denest.session] INFO: Finished running session
2020-06-30 13:52:50,622 [denest.session] INFO: Session '02_2_spikes' virtual running time: 100 ms
2020-06-30 13:52:50,622 [denest.session] INFO: Session '02_2_spikes' real running time: 0h:00m:00s
2020-06-30 13:52:50,623 [denest.simulation] INFO: Done running session '02_2_spikes'
2020-06-30 13:52:50,627 [denest.simulation] INFO: Running session: '03_3_spikes'...
2020-06-30 13:52:50,629 [denest.session] INFO: Initializing session...
2020-06-30 13:52:50,644 [denest.session] INFO: Setting `origin` flag to `300.0` for all stimulation devices in ``InputLayers`` for session `03_3_spikes`
2020-06-30 13:52:50,673 [denest.utils.validation] INFO: Object `Unit changes dictionary`: params: using default value for optional parameters:
{'change_type': 'constant', 'from_array': False}
2020-06-30 13:52:50,674 [denest.network.layers] INFO: Layer='input_layer', pop='spike_generator': Applying 'constant' change, param='spike_times', from single value')
2020-06-30 13:52:50,770 [denest.session] INFO: Finished initializing session
2020-06-30 13:52:50,771 [denest.session] INFO: Running session '03_3_spikes' for 100 ms
2020-06-30 13:52:50,940 [denest.session] INFO: Finished running session
2020-06-30 13:52:50,941 [denest.session] INFO: Session '03_3_spikes' virtual running time: 100 ms
2020-06-30 13:52:50,943 [denest.session] INFO: Session '03_3_spikes' real running time: 0h:00m:00s
2020-06-30 13:52:50,946 [denest.simulation] INFO: Done running session '03_3_spikes'
2020-06-30 13:52:50,989 [denest.simulation] INFO: Finished running simulation
[29]:
!ls {str(DATA_DIR/'output_replicate')}
data parameter_tree.yml session_times.yml versions.txt