Skip to content

Simulation data recording and analysis function

[!NOTE] For the latest implementation status, please refer to Functional Implementation Status (Remaining Functionality).

Creation date: December 6, 2025

Author: Masahiro Aoki

Purpose and use of this document

  • Purpose: A summary memo to quickly understand the additions to the simulation recording/analysis function.
  • Target audience: Developers, QA/Verification personnel.
  • First reading order: Overview → Newly added files → Quick start.
  • Related links: Detailed instructions are SIMULATION_RECORDING_GUIDE.md, execution script is examples/run_zenoh_distributed_brain.py.

overview

A data recording and analysis system for running distributed brain simulations has been added.

Newly added files

Core module

  • evospikenet/sim_recorder.py - Data recording system
  • evospikenet/sim_analyzer.py - Data analysis tool

Document

  • SIMULATION_RECORDING_GUIDE.md - Detailed guide
  • examples/example_simulation_recording.py - Usage example

Quick start

1. Run the simulation with recording enabled

python examples/run_zenoh_distributed_brain.py \
    --node-id pfc-0 \
    --module-type pfc \
    --enable-recording

2. Analyze recorded data

python evospikenet/sim_analyzer.py ./sim_recordings/sim_20251206_001234

3. Run the sample script

python examples/example_simulation_recording.py

Recorded data

  • Spike data: Spike trains from each layer
  • Membrane potential data: Neuron membrane potential (optional)
  • Weight data: Network weight matrix (optional)
  • Control data: Node state transition

Main features

Recording function

  • Optionally enable/disable
  • Reduce storage with subsampling
  • Supports GZIP compression
  • Efficient writing with buffering

Analysis function

  • Automatic calculation of firing rate
  • Spy cluster plot generation
  • Firing rate time series plot
  • Automatic summary report generation

Usage example

<!-- from evospikenet.sim_recorder import SimulationRecorder, RecorderConfig -->

# Recording settings
config = RecorderConfig(
    enable_recording=True,
    record_spikes=True,
    record_membrane=True,
    session_name="my_experiment"
)

# Start recording
with SimulationRecorder(config) as recorder:
    # Simulation execution
    for step in range(1000):
        # record spike
        recorder.record_spike_data(
            node_id="pfc-0",
            layer_name="lif",
            spikes=output_spikes
        )

Detailed information

See SIMULATION_RECORDING_GUIDE.md for details.