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-29 12:31:45,749 [denest.utils.validation] INFO: 'None' tree: adding empty child kernel
2020-06-29 12:31:45,751 [denest.utils.validation] INFO: 'None' tree: adding empty child simulation
2020-06-29 12:31:45,752 [denest.utils.validation] INFO: 'None' tree: adding empty child session_models
2020-06-29 12:31:45,752 [denest.utils.validation] INFO: 'None' tree: adding empty child network
2020-06-29 12:31:45,754 [denest.utils.validation] INFO: Object `simulation`: params: using default value for optional parameters:
{'input_dir': 'input', 'output_dir': 'output', 'sessions': []}
2020-06-29 12:31:45,757 [denest.utils.validation] INFO: Object `kernel`: params: using default value for optional parameters:
{'extension_modules': [], 'nest_seed': 1}
2020-06-29 12:31:45,759 [denest.simulation] INFO: Initializing NEST kernel and seeds...
2020-06-29 12:31:45,762 [denest.simulation] INFO: Resetting NEST kernel...
2020-06-29 12:31:45,774 [denest.simulation] INFO: Setting NEST kernel status...
2020-06-29 12:31:45,776 [denest.simulation] INFO: Calling `nest.SetKernelStatus({})`
2020-06-29 12:31:45,782 [denest.simulation] INFO: Calling `nest.SetKernelStatus({'data_path': 'data/outputs/output/data', 'grng_seed': 2, 'rng_seeds': range(3, 4)})
2020-06-29 12:31:45,785 [denest.simulation] INFO: Finished setting NEST kernel status
2020-06-29 12:31:45,787 [denest.simulation] INFO: Installing external modules...
2020-06-29 12:31:45,792 [denest.simulation] INFO: Finished installing external modules
2020-06-29 12:31:45,794 [denest.simulation] INFO: Finished initializing kernel
2020-06-29 12:31:45,797 [denest.simulation] INFO: Build N=0 session models
2020-06-29 12:31:45,799 [denest.simulation] INFO: Build N=0 sessions
2020-06-29 12:31:45,801 [denest.simulation] INFO: Sessions: []
2020-06-29 12:31:45,811 [denest.simulation] INFO: Building network.
2020-06-29 12:31:45,815 [denest.utils.validation] INFO: 'None' tree: adding empty child neuron_models
2020-06-29 12:31:45,817 [denest.utils.validation] INFO: 'None' tree: adding empty child synapse_models
2020-06-29 12:31:45,818 [denest.utils.validation] INFO: 'None' tree: adding empty child layers
2020-06-29 12:31:45,819 [denest.utils.validation] INFO: 'None' tree: adding empty child projection_models
2020-06-29 12:31:45,821 [denest.utils.validation] INFO: 'None' tree: adding empty child topology
2020-06-29 12:31:45,822 [denest.utils.validation] INFO: 'None' tree: adding empty child recorder_models
2020-06-29 12:31:45,824 [denest.utils.validation] INFO: 'None' tree: adding empty child recorders
2020-06-29 12:31:45,825 [denest.network] INFO: Build N=0 ``Model`` objects
2020-06-29 12:31:45,827 [denest.network] INFO: Build N=0 ``SynapseModel`` objects
2020-06-29 12:31:45,828 [denest.network] INFO: Build N=0 ``Model`` objects
2020-06-29 12:31:45,830 [denest.network] INFO: Build N=0 ``Layer`` or ``InputLayer`` objects.
2020-06-29 12:31:45,831 [denest.network] INFO: Build N=0 ``ProjectionModel`` objects
2020-06-29 12:31:45,834 [denest.utils.validation] INFO: Object `topology`: params: using default value for optional parameters:
{'projections': []}
2020-06-29 12:31:45,835 [denest.network] INFO: Build N=0 ``TopoProjection`` objects
2020-06-29 12:31:45,837 [denest.utils.validation] INFO: Object `recorders`: params: using default value for optional parameters:
{'population_recorders': [], 'projection_recorders': []}
2020-06-29 12:31:45,839 [denest.network] INFO: Build N=0 population recorders.
2020-06-29 12:31:45,840 [denest.network] INFO: Build N=0 projection recorders.
2020-06-29 12:31:45,840 [denest.simulation] INFO: Creating network.
2020-06-29 12:31:45,841 [denest.network] INFO: Creating neuron models...
0it [00:00, ?it/s]
2020-06-29 12:31:45,858 [denest.network] INFO: Creating synapse models...
0it [00:00, ?it/s]
2020-06-29 12:31:45,865 [denest.network] INFO: Creating recorder models...
0it [00:00, ?it/s]
2020-06-29 12:31:45,868 [denest.network] INFO: Creating layers...
0it [00:00, ?it/s]
2020-06-29 12:31:45,873 [denest.network] INFO: Creating population recorders...
0it [00:00, ?it/s]
2020-06-29 12:31:45,878 [denest.network] INFO: Creating projection recorders...
0it [00:00, ?it/s]
2020-06-29 12:31:45,884 [denest.network] INFO: Connecting layers...
0it [00:00, ?it/s]
2020-06-29 12:31:45,890 [denest.network] INFO: Network size (including recorders and parrot neurons):
Number of nodes: 1
Number of projections: 0
2020-06-29 12:31:45,891 [denest.simulation] INFO: Finished creating network
2020-06-29 12:31:45,892 [denest.simulation] INFO: Saving simulation metadata...
2020-06-29 12:31:45,892 [denest.simulation] INFO: Creating output directory: data/outputs/output
2020-06-29 12:31:45,897 [denest.io.save] INFO: Clearing directory: data/outputs/output
2020-06-29 12:31:45,901 [denest.io.save] INFO: Clearing directory: data/outputs/output
2020-06-29 12:31:45,904 [denest.io.save] INFO: Clearing directory: data/outputs/output/data
2020-06-29 12:31:45,909 [denest.io.save] INFO: Clearing directory: data/outputs/output/data
2020-06-29 12:31:45,912 [denest.io.save] INFO: Clearing directory: data/outputs/output/data
2020-06-29 12:31:45,915 [denest.io.save] INFO: Clearing directory: data/outputs/output
2020-06-29 12:31:45,925 [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-29 12:31:46,006 [denest.simulation] INFO: Initializing NEST kernel and seeds...
2020-06-29 12:31:46,007 [denest.simulation] INFO: Resetting NEST kernel...
2020-06-29 12:31:46,016 [denest.simulation] INFO: Setting NEST kernel status...
2020-06-29 12:31:46,019 [denest.simulation] INFO: Calling `nest.SetKernelStatus({'resolution': 0.5, 'overwrite_files': True})`
2020-06-29 12:31:46,023 [denest.simulation] INFO: Calling `nest.SetKernelStatus({'data_path': 'data/outputs/output/data', 'grng_seed': 11, 'rng_seeds': range(12, 13)})
2020-06-29 12:31:46,027 [denest.simulation] INFO: Finished setting NEST kernel status
2020-06-29 12:31:46,030 [denest.simulation] INFO: Installing external modules...
2020-06-29 12:31:46,035 [denest.simulation] INFO: Finished installing external modules
2020-06-29 12:31:46,038 [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-29 12:31:46,227 [denest.simulation] INFO: Building network.
2020-06-29 12:31:46,240 [denest.network] INFO: Build N=2 ``Model`` objects
2020-06-29 12:31:46,242 [denest.network] INFO: Build N=2 ``SynapseModel`` objects
2020-06-29 12:31:46,243 [denest.network] INFO: Build N=3 ``Model`` objects
2020-06-29 12:31:46,245 [denest.network] INFO: Build N=2 ``Layer`` or ``InputLayer`` objects.
2020-06-29 12:31:46,247 [denest.utils.validation] INFO: Object `proj_1_AMPA`: params: using default value for optional parameters:
{'type': 'topological'}
2020-06-29 12:31:46,248 [denest.utils.validation] INFO: Object `proj_2_GABAA`: params: using default value for optional parameters:
{'type': 'topological'}
2020-06-29 12:31:46,251 [denest.network] INFO: Build N=2 ``ProjectionModel`` objects
2020-06-29 12:31:46,255 [denest.network] INFO: Build N=3 ``TopoProjection`` objects
2020-06-29 12:31:46,258 [denest.network] INFO: Build N=2 population recorders.
2020-06-29 12:31:46,260 [denest.network] INFO: Build N=1 projection recorders.
2020-06-29 12:31:46,261 [denest.simulation] INFO: Creating network.
2020-06-29 12:31:46,263 [denest.network] INFO: Creating neuron models...
100%|██████████| 2/2 [00:00<00:00, 2283.24it/s]
2020-06-29 12:31:46,269 [denest.network] INFO: Creating synapse models...
100%|██████████| 2/2 [00:00<00:00, 1112.40it/s]
2020-06-29 12:31:46,275 [denest.network] INFO: Creating recorder models...
100%|██████████| 3/3 [00:00<00:00, 1377.29it/s]
2020-06-29 12:31:46,281 [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, 13.49it/s]
2020-06-29 12:31:46,434 [denest.network] INFO: Creating population recorders...
100%|██████████| 2/2 [00:00<00:00, 136.95it/s]
2020-06-29 12:31:46,452 [denest.network] INFO: Creating projection recorders...
100%|██████████| 1/1 [00:00<00:00, 402.72it/s]
2020-06-29 12:31:46,458 [denest.network] INFO: Connecting layers...
100%|██████████| 3/3 [00:00<00:00, 682.11it/s]
2020-06-29 12:31:46,467 [denest.network] INFO: Network size (including recorders and parrot neurons):
Number of nodes: 206
Number of projections: 6650
2020-06-29 12:31:46,468 [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_timefield 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, theoriginflag of the stimulation devices of all the network’sInputLayerlayers 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_changesis 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-29 12:31:46,595 [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-29 12:31:46,677 [denest.simulation] INFO: Build N=4 sessions
2020-06-29 12:31:46,678 [denest.session] INFO: Creating session "00_warmup"
2020-06-29 12:31:46,679 [denest.utils.validation] INFO: Object `00_warmup`: params: using default value for optional parameters:
{'reset_network': False, 'synapse_changes': [], 'unit_changes': []}
2020-06-29 12:31:46,680 [denest.session] INFO: Creating session "01_3_spikes"
2020-06-29 12:31:46,682 [denest.utils.validation] INFO: Object `01_3_spikes`: params: using default value for optional parameters:
{'reset_network': False, 'synapse_changes': []}
2020-06-29 12:31:46,683 [denest.session] INFO: Creating session "02_2_spikes"
2020-06-29 12:31:46,684 [denest.utils.validation] INFO: Object `02_2_spikes`: params: using default value for optional parameters:
{'reset_network': False, 'synapse_changes': []}
2020-06-29 12:31:46,686 [denest.session] INFO: Creating session "03_3_spikes"
2020-06-29 12:31:46,687 [denest.utils.validation] INFO: Object `03_3_spikes`: params: using default value for optional parameters:
{'reset_network': False, 'synapse_changes': []}
2020-06-29 12:31:46,689 [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-29 12:31:46,794 [denest.simulation] INFO: Running 4 sessions...
2020-06-29 12:31:46,795 [denest.simulation] INFO: Running session: '00_warmup'...
2020-06-29 12:31:46,796 [denest.session] INFO: Initializing session...
2020-06-29 12:31:46,798 [denest.network.recorders] INFO: Setting status for recorder my_multimeter_l1_l1_exc: {'start': 100.0}
2020-06-29 12:31:46,799 [denest.network.recorders] INFO: Setting status for recorder my_spike_detector_input_layer_parrot_neuron: {'start': 100.0}
2020-06-29 12:31:46,800 [denest.network.recorders] INFO: Setting status for recorder weight_recorder_proj_1_AMPA-l1-l1_exc-l1-l1_inh: {'start': 100.0}
2020-06-29 12:31:46,801 [denest.session] INFO: Setting `origin` flag to `0.0` for all stimulation devices in ``InputLayers`` for session `00_warmup`
2020-06-29 12:31:46,808 [denest.session] INFO: Finished initializing session
2020-06-29 12:31:46,809 [denest.session] INFO: Running session '00_warmup' for 100 ms
2020-06-29 12:31:46,917 [denest.session] INFO: Finished running session
2020-06-29 12:31:46,919 [denest.session] INFO: Session '00_warmup' virtual running time: 100 ms
2020-06-29 12:31:46,920 [denest.session] INFO: Session '00_warmup' real running time: 0h:00m:00s
2020-06-29 12:31:46,921 [denest.simulation] INFO: Done running session '00_warmup'
2020-06-29 12:31:46,922 [denest.simulation] INFO: Running session: '01_3_spikes'...
2020-06-29 12:31:46,923 [denest.session] INFO: Initializing session...
2020-06-29 12:31:46,924 [denest.session] INFO: Setting `origin` flag to `100.0` for all stimulation devices in ``InputLayers`` for session `01_3_spikes`
2020-06-29 12:31:46,928 [denest.utils.validation] INFO: Object `Unit changes dictionary`: params: using default value for optional parameters:
{'change_type': 'constant', 'from_array': False}
2020-06-29 12:31:46,929 [denest.network.layers] INFO: Layer='input_layer', pop='spike_generator': Applying 'constant' change, param='spike_times', from single value')
2020-06-29 12:31:47,001 [denest.session] INFO: Finished initializing session
2020-06-29 12:31:47,002 [denest.session] INFO: Running session '01_3_spikes' for 100 ms
2020-06-29 12:31:47,126 [denest.session] INFO: Finished running session
2020-06-29 12:31:47,127 [denest.session] INFO: Session '01_3_spikes' virtual running time: 100 ms
2020-06-29 12:31:47,127 [denest.session] INFO: Session '01_3_spikes' real running time: 0h:00m:00s
2020-06-29 12:31:47,130 [denest.simulation] INFO: Done running session '01_3_spikes'
2020-06-29 12:31:47,132 [denest.simulation] INFO: Running session: '02_2_spikes'...
2020-06-29 12:31:47,133 [denest.session] INFO: Initializing session...
2020-06-29 12:31:47,135 [denest.session] INFO: Setting `origin` flag to `200.0` for all stimulation devices in ``InputLayers`` for session `02_2_spikes`
2020-06-29 12:31:47,141 [denest.utils.validation] INFO: Object `Unit changes dictionary`: params: using default value for optional parameters:
{'change_type': 'constant', 'from_array': False}
2020-06-29 12:31:47,142 [denest.network.layers] INFO: Layer='input_layer', pop='spike_generator': Applying 'constant' change, param='spike_times', from single value')
2020-06-29 12:31:47,202 [denest.session] INFO: Finished initializing session
2020-06-29 12:31:47,203 [denest.session] INFO: Running session '02_2_spikes' for 100 ms
2020-06-29 12:31:47,378 [denest.session] INFO: Finished running session
2020-06-29 12:31:47,378 [denest.session] INFO: Session '02_2_spikes' virtual running time: 100 ms
2020-06-29 12:31:47,379 [denest.session] INFO: Session '02_2_spikes' real running time: 0h:00m:00s
2020-06-29 12:31:47,380 [denest.simulation] INFO: Done running session '02_2_spikes'
2020-06-29 12:31:47,381 [denest.simulation] INFO: Running session: '03_3_spikes'...
2020-06-29 12:31:47,382 [denest.session] INFO: Initializing session...
2020-06-29 12:31:47,383 [denest.session] INFO: Setting `origin` flag to `300.0` for all stimulation devices in ``InputLayers`` for session `03_3_spikes`
2020-06-29 12:31:47,388 [denest.utils.validation] INFO: Object `Unit changes dictionary`: params: using default value for optional parameters:
{'change_type': 'constant', 'from_array': False}
2020-06-29 12:31:47,390 [denest.network.layers] INFO: Layer='input_layer', pop='spike_generator': Applying 'constant' change, param='spike_times', from single value')
2020-06-29 12:31:47,458 [denest.session] INFO: Finished initializing session
2020-06-29 12:31:47,459 [denest.session] INFO: Running session '03_3_spikes' for 100 ms
2020-06-29 12:31:47,546 [denest.session] INFO: Finished running session
2020-06-29 12:31:47,546 [denest.session] INFO: Session '03_3_spikes' virtual running time: 100 ms
2020-06-29 12:31:47,547 [denest.session] INFO: Session '03_3_spikes' real running time: 0h:00m:00s
2020-06-29 12:31:47,549 [denest.simulation] INFO: Done running session '03_3_spikes'
2020-06-29 12:31:47,550 [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-29 12:31:47,620 [denest.simulation] INFO: Saving simulation metadata...
2020-06-29 12:31:47,621 [denest.simulation] INFO: Creating output directory: data/outputs/output
2020-06-29 12:31:47,656 [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-29 12:31:48,345 [denest.utils.validation] INFO: Object `simulation`: params: using default value for optional parameters:
{'input_dir': 'input'}
2020-06-29 12:31:48,347 [denest.simulation] INFO: Initializing NEST kernel and seeds...
2020-06-29 12:31:48,347 [denest.simulation] INFO: Resetting NEST kernel...
2020-06-29 12:31:48,357 [denest.simulation] INFO: Setting NEST kernel status...
2020-06-29 12:31:48,358 [denest.simulation] INFO: Calling `nest.SetKernelStatus({'resolution': 0.5, 'overwrite_files': True})`
2020-06-29 12:31:48,361 [denest.simulation] INFO: Calling `nest.SetKernelStatus({'data_path': 'data/outputs/output_replicate/data', 'grng_seed': 11, 'rng_seeds': range(12, 13)})
2020-06-29 12:31:48,366 [denest.simulation] INFO: Finished setting NEST kernel status
2020-06-29 12:31:48,367 [denest.simulation] INFO: Installing external modules...
2020-06-29 12:31:48,369 [denest.simulation] INFO: Finished installing external modules
2020-06-29 12:31:48,370 [denest.simulation] INFO: Finished initializing kernel
2020-06-29 12:31:48,372 [denest.simulation] INFO: Build N=3 session models
2020-06-29 12:31:48,374 [denest.simulation] INFO: Build N=4 sessions
2020-06-29 12:31:48,376 [denest.session] INFO: Creating session "00_warmup"
2020-06-29 12:31:48,380 [denest.utils.validation] INFO: Object `00_warmup`: params: using default value for optional parameters:
{'reset_network': False, 'synapse_changes': [], 'unit_changes': []}
2020-06-29 12:31:48,383 [denest.session] INFO: Creating session "01_3_spikes"
2020-06-29 12:31:48,390 [denest.utils.validation] INFO: Object `01_3_spikes`: params: using default value for optional parameters:
{'reset_network': False, 'synapse_changes': []}
2020-06-29 12:31:48,393 [denest.session] INFO: Creating session "02_2_spikes"
2020-06-29 12:31:48,397 [denest.utils.validation] INFO: Object `02_2_spikes`: params: using default value for optional parameters:
{'reset_network': False, 'synapse_changes': []}
2020-06-29 12:31:48,400 [denest.session] INFO: Creating session "03_3_spikes"
2020-06-29 12:31:48,402 [denest.utils.validation] INFO: Object `03_3_spikes`: params: using default value for optional parameters:
{'reset_network': False, 'synapse_changes': []}
2020-06-29 12:31:48,405 [denest.simulation] INFO: Sessions: ['00_warmup', '01_3_spikes', '02_2_spikes', '03_3_spikes']
2020-06-29 12:31:48,408 [denest.simulation] INFO: Building network.
2020-06-29 12:31:48,429 [denest.network] INFO: Build N=2 ``Model`` objects
2020-06-29 12:31:48,431 [denest.network] INFO: Build N=2 ``SynapseModel`` objects
2020-06-29 12:31:48,432 [denest.network] INFO: Build N=3 ``Model`` objects
2020-06-29 12:31:48,434 [denest.network] INFO: Build N=2 ``Layer`` or ``InputLayer`` objects.
2020-06-29 12:31:48,436 [denest.utils.validation] INFO: Object `proj_1_AMPA`: params: using default value for optional parameters:
{'type': 'topological'}
2020-06-29 12:31:48,437 [denest.utils.validation] INFO: Object `proj_2_GABAA`: params: using default value for optional parameters:
{'type': 'topological'}
2020-06-29 12:31:48,438 [denest.network] INFO: Build N=2 ``ProjectionModel`` objects
2020-06-29 12:31:48,442 [denest.network] INFO: Build N=3 ``TopoProjection`` objects
2020-06-29 12:31:48,445 [denest.network] INFO: Build N=2 population recorders.
2020-06-29 12:31:48,446 [denest.network] INFO: Build N=1 projection recorders.
2020-06-29 12:31:48,446 [denest.simulation] INFO: Creating network.
2020-06-29 12:31:48,447 [denest.network] INFO: Creating neuron models...
100%|██████████| 2/2 [00:00<00:00, 1528.82it/s]
2020-06-29 12:31:48,453 [denest.network] INFO: Creating synapse models...
100%|██████████| 2/2 [00:00<00:00, 1114.17it/s]
2020-06-29 12:31:48,459 [denest.network] INFO: Creating recorder models...
100%|██████████| 3/3 [00:00<00:00, 1912.01it/s]
2020-06-29 12:31:48,463 [denest.network] INFO: Creating layers...
100%|██████████| 2/2 [00:00<00:00, 13.50it/s]
2020-06-29 12:31:48,617 [denest.network] INFO: Creating population recorders...
100%|██████████| 2/2 [00:00<00:00, 138.88it/s]
2020-06-29 12:31:48,634 [denest.network] INFO: Creating projection recorders...
100%|██████████| 1/1 [00:00<00:00, 325.62it/s]
2020-06-29 12:31:48,640 [denest.network] INFO: Connecting layers...
100%|██████████| 3/3 [00:00<00:00, 725.16it/s]
2020-06-29 12:31:48,648 [denest.network] INFO: Network size (including recorders and parrot neurons):
Number of nodes: 206
Number of projections: 6650
2020-06-29 12:31:48,650 [denest.simulation] INFO: Finished creating network
2020-06-29 12:31:48,651 [denest.simulation] INFO: Saving simulation metadata...
2020-06-29 12:31:48,653 [denest.simulation] INFO: Creating output directory: data/outputs/output_replicate
2020-06-29 12:31:48,655 [denest.io.save] INFO: Clearing directory: data/outputs/output_replicate
2020-06-29 12:31:48,659 [denest.io.save] INFO: Clearing directory: data/outputs/output_replicate
2020-06-29 12:31:48,660 [denest.io.save] INFO: Clearing directory: data/outputs/output_replicate/data
2020-06-29 12:31:48,665 [denest.io.save] INFO: Clearing directory: data/outputs/output_replicate/data
2020-06-29 12:31:48,667 [denest.io.save] INFO: Clearing directory: data/outputs/output_replicate/data
2020-06-29 12:31:48,667 [denest.io.save] INFO: Clearing directory: data/outputs/output_replicate
2020-06-29 12:31:48,789 [denest.simulation] INFO: Finished saving simulation metadata
2020-06-29 12:31:48,790 [denest.simulation] INFO: Running 4 sessions...
2020-06-29 12:31:48,790 [denest.simulation] INFO: Running session: '00_warmup'...
2020-06-29 12:31:48,792 [denest.session] INFO: Initializing session...
2020-06-29 12:31:48,850 [denest.network.recorders] INFO: Setting status for recorder my_multimeter_l1_l1_exc: {'start': 100.0}
2020-06-29 12:31:48,859 [denest.network.recorders] INFO: Setting status for recorder my_spike_detector_input_layer_parrot_neuron: {'start': 100.0}
2020-06-29 12:31:48,860 [denest.network.recorders] INFO: Setting status for recorder weight_recorder_proj_1_AMPA-l1-l1_exc-l1-l1_inh: {'start': 100.0}
2020-06-29 12:31:48,863 [denest.session] INFO: Setting `origin` flag to `0.0` for all stimulation devices in ``InputLayers`` for session `00_warmup`
2020-06-29 12:31:48,870 [denest.session] INFO: Finished initializing session
2020-06-29 12:31:48,880 [denest.session] INFO: Running session '00_warmup' for 100 ms
2020-06-29 12:31:49,018 [denest.session] INFO: Finished running session
2020-06-29 12:31:49,020 [denest.session] INFO: Session '00_warmup' virtual running time: 100 ms
2020-06-29 12:31:49,021 [denest.session] INFO: Session '00_warmup' real running time: 0h:00m:00s
2020-06-29 12:31:49,028 [denest.simulation] INFO: Done running session '00_warmup'
2020-06-29 12:31:49,046 [denest.simulation] INFO: Running session: '01_3_spikes'...
2020-06-29 12:31:49,047 [denest.session] INFO: Initializing session...
2020-06-29 12:31:49,048 [denest.session] INFO: Setting `origin` flag to `100.0` for all stimulation devices in ``InputLayers`` for session `01_3_spikes`
2020-06-29 12:31:49,057 [denest.utils.validation] INFO: Object `Unit changes dictionary`: params: using default value for optional parameters:
{'change_type': 'constant', 'from_array': False}
2020-06-29 12:31:49,059 [denest.network.layers] INFO: Layer='input_layer', pop='spike_generator': Applying 'constant' change, param='spike_times', from single value')
2020-06-29 12:31:49,119 [denest.session] INFO: Finished initializing session
2020-06-29 12:31:49,120 [denest.session] INFO: Running session '01_3_spikes' for 100 ms
2020-06-29 12:31:49,245 [denest.session] INFO: Finished running session
2020-06-29 12:31:49,246 [denest.session] INFO: Session '01_3_spikes' virtual running time: 100 ms
2020-06-29 12:31:49,247 [denest.session] INFO: Session '01_3_spikes' real running time: 0h:00m:00s
2020-06-29 12:31:49,248 [denest.simulation] INFO: Done running session '01_3_spikes'
2020-06-29 12:31:49,250 [denest.simulation] INFO: Running session: '02_2_spikes'...
2020-06-29 12:31:49,251 [denest.session] INFO: Initializing session...
2020-06-29 12:31:49,252 [denest.session] INFO: Setting `origin` flag to `200.0` for all stimulation devices in ``InputLayers`` for session `02_2_spikes`
2020-06-29 12:31:49,265 [denest.utils.validation] INFO: Object `Unit changes dictionary`: params: using default value for optional parameters:
{'change_type': 'constant', 'from_array': False}
2020-06-29 12:31:49,272 [denest.network.layers] INFO: Layer='input_layer', pop='spike_generator': Applying 'constant' change, param='spike_times', from single value')
2020-06-29 12:31:49,330 [denest.session] INFO: Finished initializing session
2020-06-29 12:31:49,331 [denest.session] INFO: Running session '02_2_spikes' for 100 ms
2020-06-29 12:31:49,453 [denest.session] INFO: Finished running session
2020-06-29 12:31:49,455 [denest.session] INFO: Session '02_2_spikes' virtual running time: 100 ms
2020-06-29 12:31:49,456 [denest.session] INFO: Session '02_2_spikes' real running time: 0h:00m:00s
2020-06-29 12:31:49,458 [denest.simulation] INFO: Done running session '02_2_spikes'
2020-06-29 12:31:49,462 [denest.simulation] INFO: Running session: '03_3_spikes'...
2020-06-29 12:31:49,464 [denest.session] INFO: Initializing session...
2020-06-29 12:31:49,475 [denest.session] INFO: Setting `origin` flag to `300.0` for all stimulation devices in ``InputLayers`` for session `03_3_spikes`
2020-06-29 12:31:49,483 [denest.utils.validation] INFO: Object `Unit changes dictionary`: params: using default value for optional parameters:
{'change_type': 'constant', 'from_array': False}
2020-06-29 12:31:49,485 [denest.network.layers] INFO: Layer='input_layer', pop='spike_generator': Applying 'constant' change, param='spike_times', from single value')
2020-06-29 12:31:49,548 [denest.session] INFO: Finished initializing session
2020-06-29 12:31:49,549 [denest.session] INFO: Running session '03_3_spikes' for 100 ms
2020-06-29 12:31:49,643 [denest.session] INFO: Finished running session
2020-06-29 12:31:49,643 [denest.session] INFO: Session '03_3_spikes' virtual running time: 100 ms
2020-06-29 12:31:49,644 [denest.session] INFO: Session '03_3_spikes' real running time: 0h:00m:00s
2020-06-29 12:31:49,646 [denest.simulation] INFO: Done running session '03_3_spikes'
2020-06-29 12:31:49,651 [denest.simulation] INFO: Finished running simulation
[29]:
!ls {str(DATA_DIR/'output_replicate')}
data parameter_tree.yml session_times.yml versions.txt