========================
設計と実装
========================
このページでは、BMTKとBioNetの背景、およびbionetliteの設計思想と実装の詳細について説明します。
BMTKについて
============
BMTK (Brain Modeling Toolkit) は、神経科学コミュニティのためのモデリング・シミュレーションフレームワークです。
モジュラー設計
--------------
BMTKは、意図的に以下の3つのモジュールに分割されています:
.. image:: ../_static/767339839-bmtk_flow.png
:width: 700px
:align: center
.. raw:: html
1. **The Network Builder**: ネットワーク構築
2. **The Simulation Engines**: シミュレーション実行
3. **Analysis & Visualization**: 結果の解析と可視化
この分離により、大規模なシミュレーションの実行が容易になります。
データ標準化
------------
BMTKは、神経科学コミュニティのデータ標準化形式に対応しています:
* `SONATA `_: ネットワーク記述形式
* `Allen Cell Types Database `_: モデルパラメータのデータベース
BioNetについて
==============
BioNetは、BMTKのモジュールの1つで、生物物理学的ニューロンネットワークを扱います。
BioNet Builder
--------------
ネットワークの構築部分だけを担当するモジュールです。
* ユーザはネットワークにニューロンやシナプスを追加するコードを記述
* 実行すると、H5ファイルやCSVファイルなどの形でネットワーク情報が出力される
* bionet simulatorは、これらのファイルを用いて実行を行う
大規模なネットワークではネットワークの構築だけでも計算コストが高く、シミュレータ部分と独立して動作することがエラーハンドリングの観点などから有用です。
使用例:
.. code-block:: python
from bmtk.builder.networks import NetworkBuilder
# Create network
net = NetworkBuilder('mcortex')
# Add nodes
net.add_nodes(...)
# Add edges
net.add_edges(...)
# Build and save
net.build()
net.save_nodes(output_dir='network')
net.save_edges(output_dir='network')
BioNet Simulator
----------------
bionet builderが生成したファイルを読み込み、`NEURON `_ シミュレータを用いてシミュレーションを実行します。
bionetliteの設計
=================
bionetliteは、bionetの拡張として設計されています。既存コードの最低限の変更で、Neuliteカーネル用のファイルを生成します。
NetworkBuilderのオーバーライド
------------------------------
bionetliteは、bmtk.builder.networksのNetworkBuilderを拡張します:
.. code-block:: python
# bionet case
from bmtk.builder.networks import NetworkBuilder
# bionetlite case
from bionetlite import NeuliteBuilder as NetworkBuilder
このシンプルなimportの変更により、以下が実現されます:
* bionetの全ての機能がそのまま使用可能
* NeuliteBuilder固有の処理が追加される
* ユーザコードの変更は最小限
処理フロー
==========
bionetliteの処理フロー:
.. image:: ../_static/767369966-bionetlite_flow.png
:width: 700px
:align: center
.. raw:: html
1. **NeuliteBuilderの初期化** - 形態ファイルとイオンチャネル設定の前処理を設定
2. **add_nodes() / add_edges()** - bionetの処理をそのまま実行し、biophysicalノードのみを記録
3. **save_nodes()** - bionetの処理に加えて、``_population.csv`` を生成
4. **save_edges()** - bionetの処理に加えて、シナプス接続位置を決定し ``__connection.csv`` を生成
並列実行のサポート
==================
bionetliteは、MPI並列実行をサポートしています:
.. code-block:: bash
# Parallel execution with 4 processes
mpirun -n 4 python build_network.py
並列実行時の処理:
* 各MPIプロセスが独立してネットワーク構築を実行
* ファイル出力は適切に同期される
* 大規模ネットワークの構築時間を大幅に短縮
次のステップ
============
* :doc:`../api_reference/index` - API リファレンス
* :doc:`../user_guide/basic_usage` - 実践的な使用例