· 

E-Cell4のインストール (Windows)

(著)山たー

理研QbicのスプリングコースでE-Cellというものを知った。E-CellはPythonのライブラリ(その他にもあるようだが)であり、化学反応のシミュレーションができる。単なる理想空間内での化学反応なら自分で微分方程式を解いてやればいいだけなのだが、E-Cellの凄いところは、3次元的な空間を定義して細胞内での反応をシミュレートできることである。

 

Githubのレポジトリは

https://github.com/ecell/ecell4

であり、使用方法は

http://ecell4.readthedocs.io/ja/latest/index.html

にまとめられている。

 

今回は、E-Cellの導入について説明する。導入に関しては

https://github.com/ecell/ecell4/blob/master/INSTALL.md

を読めばいいのだが、関係ないところを読んで遠回りしてしまったので、日本語で書いておく。動作確認はWindows10で行ったので、Mac, Linuxは上記のページを参照。

 

E-Cell4の導入手順

やりやすい方法を説明する。

①Anacondaのインストール

これに関してはAnacondaを用いたPythonのインストールを参照。Pythonのバージョンは2.7と3.6のどちらでも良い。最初、2.7しか駄目だと思って2.7の仮想環境を作るという遠回りをしてしまった。2系で書かれたサンプルコードが多いが、3系でも実行可能である。それに伴って、今後のソースコードは3系のもので記述する。 

 

②HDF5(version 1.8.17)のインストール

Windows限定。WindowsでE-Cellを動かすにはHDF5が必要だが、そのバージョンは1.8.17でなければならない(今後変更されるかもしれないが)。HDF5の古いバージョンだとKerasのモデルが保存できなかったり、他と干渉する恐れがあるので、

conda create -n ecell python=3.6 anaconda

などとして、仮想環境を作成してからの方がよい。

 

Anaconda Promptを開いて

 

conda install hdf5=1.8.17

 

とする。HDF5がすでにインストールされていれば

 

conda uninstall hdf5
conda clean -a
conda install hdf5=1.8.17

 

とする。2行目はAnacondaのインストールファイルを削除(掃除)するコマンドである。たまに実行しないと不要ファイルが溜まってしまう。

 

③E-Cellのインストール

E-Cellはpipでインストールできる。

 

pip install ecell

 

この他、matplotlibやjupyter notebookのインストールも必要だが、Anacondaに含まれるので省略する。

 

クイックデモ

インストールが完了したら、正常にインストールされているか確認する。

from ecell4 import *

エラーが出なければ一先ずは成功。

例1. Speciesの定義

Speciesというのはモデル中の分子エンティティのことであるが、今は以下のコードを実行してエラーが出なければよい。

from ecell4.core import *
sp = Species("A.B.C")
print(sp.serial()) #A.B.C

例2. A + B ⇆ Cの反応

次にA + B ⇆ Cという反応のシミュレーションを実行してみる。コードは次の通りである。

import matplotlib.pyplot as plt
'''
notebook上では代わりに
%matplotlib inline
を入力
'''
from ecell4 import *

#反応の定義
with reaction_rules():
    A + B == C | (0.01, 0.3)

#反応シミュレーションの実行
#run_simulation(計算する時間, {'A': Aの分子数, 'B': Bの分子数})
run_simulation(10, {'A': 60, 'B': 60})

 

実行すると、次のような画像が出力される。

AとBの分子数は60とした。AとBが反応してCが生成され、A, B, Cの分子数が30になったところで平衡状態となったことが分かる(この図ではAのグラフはBのグラフに隠れている)。

 

コードの説明をしておく。途中、

#反応の定義
with reaction_rules():
    A + B == C | (0.01, 0.3)

と書いた部分であるが、0.01はA+B→Cの反応速度係数、0.3はC→A+Bの反応速度係数を表す。これを丁寧に

#反応の定義
with reaction_rules():
    A + B > C | 0.01  # equivalent to create_binding_reaction_rule
    C > A + B | 0.3   # equivalent to create_unbinding_reaction_rule

と書くこともできる。なお、この部分をインタプリタで実行すると

<ecell4.util.parseobj.EqExp: (A+B)==(C|(0.01, 0.3))>

と出力されるが、これはエラーではない。