| E-CELL2 User's Manual |  | 5章 E-CELL2ユーザー定義リアクターの作成 [ 1章 : 2章 : 3章 : 4章 ][ トップ ]

INDEX

1.はじめに 1.1 裏口(Postern)リアクター 2.Reactor Descriptionファイル 2.1 Reactor Descriptionファイルの書き方 一般情報に関するキーワード Reactor Spec Sheetに関するキーワード Reactor Source Codeに関するキーワード 2.2 Reactor Descriptionの例 3 Reacor Source Code(.C .hファイル）への変換 4 Spec Sheetへの変換 5 Makefileを用いたReactorの追加 6 E-CELL2 System の実行 7 E-CELL2 projectが標準で用意するReactor

# 1 はじめに

本章は、2章4節``ユーザー定義Reactor''の説明を補完するためのリファレンス である。本章を参照する前に、必ず2章4節を熟読されたい。 E-CELL2 Systemは、 細胞を、物質を表すSubstance、 反応を表すReactor及び それらが存在する場所、あるいは機能を表現するSystemの 三種類のオブジェクトの組合わせによりモデル化する 。 ReactorはSubstanceの量の 時間的変化を表現しており、 E-CELL2 Systemを用いたモデリングにおいて、 重要な役割を担っている。

Reactorはユーザーが自由にプログラムできるオブジェクトである。 ReactorはE-CELL2 System本体とは別に コンパイルし、E-CELL2 Systemがロード可能な形式に変換する。 E-CELL2 Systemは、ルールファイルによって指定された Reactorをロードする。 Reactorは、C++言語を用いてユーザーが自由に記述できるため、 化学反応のほかどのような物質の量の変化の形式も表現できる。

図1 E-CELL2 System用の各種ファイル作成の流れ

上図は、E-CELL2 Systemに関係するファイルの作成の流れを 表している。上図の構造を見ると分かるように、 ReactorはE-CELL2 System本体と別に 作成できる。Reactorを作成するには、まず、 Reactorの仕様と実行される処理の内容を Reactor Descriptionファイル（RDファイル）に書く。 次にRDファイルはC++のコードに変換されさらに E-CELL2 Systemがロードできる形式 (`.dll`ファイル）にコンパイルされる。 また、RDファイルからLaTeX形式のReactor Spec Sheetに変換できる。

## 1.1 裏口(Postern)リアクター

通常(Normal)と裏口(Postern)の2種類のリアクターが存在する。 通常リアクターは、積分機構を使って連立微分方程式を解くために使われる。 裏口リアクターは、積分機構から独立しており、 Substanceの量を計算するために連立微分方程式が適さない場合に使われる。 2種類のリアクターは、複数段階の計算機構によって実現されている。 まず、通常リアクターによる計算がReact段階で実行され、 次に、裏口リアクターによる計算がPosterior段階で実行される。 裏口リアクターは次のような状況で利用可能である。

- サブスタンスの量が離散的に制御される場合、 例えば、サブスタンスの量が極めて少ない場合。
- サブスタンスの量が、積分機構によらずに、直接決定される場合。 例えば、リアクターが転写の開始を決定する場合や、 細胞分裂によって全てのサブスタンス量が2分の1になる場合。
- 代数方程式によって反応が計算される場合。 例えば、リアクターが迅速平衡連立方程式を解く場合や、 浸透圧を計算する場合。

通常リアクターがサブスタンス量を決定するために反応速度を計算するのに対し、 裏口リアクターは運動問題を考慮せずに全てのサブスタンスを扱う。 したがって、通常リアクターは`velocity(Float v)`メソッドを 使って計算結果を返すのに対し、 裏口リアクターは`SetQuantity(Float Q)`メソッドを 使って計算結果を返すように実装される。

裏口リアクターは、通常```PReactor`''で終わる名前、 例えば```ABCPReactor`''のような名前を持つ。

それぞれの裏口リアクターによって、1個のみのサブスタンス量が 操作されるべきである。 複数の裏口リアクターによってはサブスタンス量を制御できない。 1個のサブスタンス量の決定に複数の裏口リアクターが関係すると、 シミュレーションの精度が保証されない。 複数の反応が1つのサブスタンスに影響する場合には、 それらの全ての反応を1つの裏口リアクター、 例えば`GeneralRapidEquilibriumPReactor`によって 指定する必要がある。

## 2 Reactor Descriptionファイル

いくつかの反応形式のためのReactorは E-CELL2 Systemに標準添付されている(7節を参照)。 しかし、非標準的な反応形式をモデル化する際や、 より高度なシミュレーションをするためにはRDファイルを書いて、 自分でReactorを作成する必要がある。

## 2.1 Reactor Descriptionファイルの書き方

RDファイルは、キーワードと値の組からなる行を必要な数を並べて作成する。 なお、RDファイルを作成する際には以下の約束事に注意する。

- キーワードはアルファベットの大文字又は_で構成され、スペースを含まない。
- キーワードは @ または % で始まる。 @ で始まる行は単純にその内容が読み込まれる。% で始まる行はその中身を","で区切ることによって、配列として処理される。
- # で始まる行はコメント文とみなされる。行頭の # をそのまま出力する際は、\# とするかスペースを１つ入れる。ただし、行頭以外の # はそのまま出力される。
- 行頭にキーワードのない行は、それより前の行の内容に続くものとして解釈される。（Spec Sheet に変換する際に改行したい場合、改行したい個所に\\を入れる。）
- キーワードは必要でないものに関しては省略できる。(表5.1参照)

### 一般情報に関するキーワード

- @CLASSNAME:
- @BASECLASS:
- @AUTHOR:
- @EMAIL:
- @DATE:
- %VERSION:
- @BRIEF_DESCRIPTION:

`@CLASSNAME`行には、 作成するReactor のクラス名を入力する。 ファイル名はCLASSNAME`.rd`でなければならない。 `@BASECLASS`行では、そのクラスが継承する元の基底クラスを記述する。 通常は`FluxReactor`を継承する場合が多い。 `@AUTHOR`行、`@EMAIL`行、`@DATE`行には、 それぞれ作成者、E-mailaddress、作成日を記入する。 日付の書式に厳密な決まりはない。 `%VERSION`行には、E-CELL2Systemおよび そのReactorバージョン番号を``,''で区切って記述する。 `@BRIEF_DESCRIPTION`行は、 そのReactorの1行程度の説明。 これらのキーワードの内容は、 E-CELL2 System本体にも渡される情報である。

### Reactor Spec Sheetに関するキーワード

- @DESCRIPTION:
- @EQUATION:
- %SUBSTANCE:
- @NOTES:

`@DESCRIPTION`行は、 その Reactor の詳しい説明である。

`@EQUATION`行は、 Reactor の式を LaTeXのdisplaymath環境で記述する。displaymath環境にするには、

1. $$<数式の記述>$$
2. \begin{displaymath}<数式の記述>\end{displaymath}
3. \[<数式の記述>\]

のいずれかの方式で記述すること。

`%SUBSTANCE`行では、Substanceの定義を行う。 用意されているSubstanceは、 `Substrate`、`Product`、`Catalyst`、 `Effector`の4種類があるが、 それ以外にもユーザーで定義できるようになっている。 ここで記述するものは物質等の名前、最大の個数、最小の個数、備考で、 それぞれを``,''で区切る。最大の個数及び最小の個数は、 基本的には10進整数値であるが、最大の個数に関しては ```Inf`''として無限大に設定可能である。 備考欄は、特殊なSubstanceを定義する際に書けば良い。 ここでの記述は、現在はSpec Sheetに参照されるだけである。

`@NOTES行`では、Reactorの実装に関する注意点を書く。

### Reactor Source Codeに関するキーワード

- %PARAMETER:
- %INCLUDE_FILE_H:
- @PRIVATE:
- @PROTECTED:
- @PUBLIC:
- %INCLUDE_FILE_C:
- @INITIALIZE_FUNC:
- @REACT_FUNC:
- @OPTION_C:

`%PARAMETER`行ではそのReactorの引数となる パラメータの定義を行う。記述方法は、パラメータ名、パラメータの型、単位、 パラメータに関する記述を、``,''で区切って書く。パラメータの型は、整数ならば、 ```Int`''を、小数ならば```Float`''を使用する。 しかし、これらの型はE-CELL System独自のもので、 C++で使われる```int`''や```float`''とは異なる。 ```Int`''は32ビットの整数、```Float`''はGUI版では 64ビット、バッチ版では80ビットの浮動少数である。

`%INCLUDE_FILE_H`行は、 ソースコードのヘッダファイル(`.h`)にincludeしたいファイル名を書く。 ファイル名を、< >や" " でくくってはならない。

`@PRIVATE行`に記述した内容は、オブジェクトの私的要素になる。 また、`@PROTECTED`行での記述は、オブジェクトの限定公開要素になる。 `@PUBLIC行`での記述は、オブジェクトの公開要素になる。

`%INCLUDE_FILE_C`行は、 ソースファイル(`.C`)の頭にincludeしたいファイル名を記入する。 ファイル名を、< >や" " でくくってはならない。

`FluxReactor.h`を継承しているならば、 `Reactor.h`、`Reactant.h`、`RootSystem.h`は 自動的にインクルードされるので記述する必要がない。なお、E-CELL1 Systemで存在していた、`Stepper.h`はE-CELL2 Systemでは 廃止されたので注意すること。 `FluxReactor.h`を継承しないならば、 前述の3個のファイルを自動的にインクルードするために、 `StandardHeaders.h`のインクルードが望ましい。

`@OPTION_C`行では、新たなメソッドやマクロの定義等を書く。 ここに書いた事項は、.Cファイルの先頭に挿入される。

`@INITIALIZE_FUNC`にはルールファイルの読み込み後、 シミュレーションの開始前に一度だけ実行する処理をC++のコードで記述する。 ここでは主にパラメータの値域のチェックや、 シミュレーション中に変化しない値の計算などの初期設定を行う。

`@REACT_FUNC`には毎ステップ行う処理を書く。通常は、

1. 反応速度を算出し、
2. その速度にしたがって物質の量を増減させる、

といった一連の処理を書く。FluxReactorを継承している場合は、 `process()`メソッドを用いて(2)の処理を簡単に行うことができる。 `process()`メソッドの引数は、1秒あたりの反応分子数で、 `Float`型である。

リアクターが扱うアクティビティーはステップ当たりの値であるが、 リアクターウィンドウなどのユーザーインターフェースが表示する アクティビティーは1秒間当たりの値である。

KEYWORD | .tex | .C | .h | 書式 | 必要
@CLASSNAME | ○ | ○ | ○ | . | ○
@BASECLASS | ○ | ○ | ○ | . | ○
@AUTHOR | ○ | △(*1) | △(*1) | . | .
@EMAIL | ○ | △(*1) | △(*1) | . | .
@DATE | ○ | △(*1) | △(*1) | . | .
%VERSION | ○ | ○ | ○ | . | .
@BRIEF_DESCRIPTION | ○ | . | ○ | . | .
@DESCRIPTION | ○ | . | . | TEX | .
@EQUAION | ○ | . | . | TEX | .
%SUBSTANCE | ○ | . | . | . | ○(*2)
%PARAMETER | ○ | ○ | ○ | . | ○(*2)
@NOTES | ○ | . | . | TEX | .
%INCLUDE_FILE_H | . | . | ○ | . | .
@PRIVATE | . | . | ○ | C++ | .
@PROTECTED | . | . | ○ | C++ | .
@PUBLIC | . | . | ○ | C++ | .
%INCLUDE_FILE_C | . | ○ | . | . | .
@INITIALIZE_FUNC | . | ○ | . | C++ | ○
@REACT_FUNC | . | ○ | . | C++ | ○
@OPTION_FUNC | . | ○ | . | C++ | .

表5.1 キーワードのまとめ(参照されるファイル、及び書式)

(*1)△は、コメント分としてのみ参照される (*2)Reactorによっては必要のないものもある

記述法 | 意味
N_A | アボガドロ数
deltaT() | ステップ幅(E-CELL1での表記法(supersystem()->stepper()->deltaT())から簡略化 された。)
numSubstrate() | Substrateの数
numProduct() | Productの数
numCatalyst() | Catalystの数
numEffector() | Effectorの数
substrate(i)->coefficient() | i番目のSubstrateの化学量論係数
substrate(i)->concentration() | i番目のSubstrateの濃度（単位：M）
substrate(i)->quantity() | i番目のSubstrateの分子数
substrate(i)->substance().supersystem()->volume() | i番目のSubstrateのSystemの体積
product(i)->coefficient() | i番目のProductの化学量論係数
product(i)->concentration() | i番目のProductの濃度(単位：M）
product(i)->quantity() | i番目のProductの分子数
product(i)->substance().supersystem()->volume() | i番目のProductのSystemの体積
catalyst(i)->concentration() | i番目のCatalystの濃度(単位：M）
catalyst(i)->quantity() | i番目のCatalystの分子数
catalyst(i)->substance().supersystem()->volume() | i番目のCatalystのSystemの体積
effector(i)->concentration() | i番目のEffectorの濃度（単位：M）
effector(i)->quantity() | i番目のEffectorの分子数
effector(i)->substance().supersystem()->volume() | i番目のEffectorのSystemの体積

表5.2 メソッド一覧

## 2.2 Reactor Descriptionの例

以下に、既知の反応速度式に基づくRDファイルの書き方を例を用いて説明する。 例えば、

v = | (KcFKp[S] - KcRKs[P])[E]
Ks[P] + Kp[S] + KsKp

という反応式に従うMichaelisUniUniReversibleReactorを作成するための キーワードの記述は以下の通りになる。

`@CLASSNAME:MichaelisUniUniReversibleReactor @BASECLASS: FluxReactor @AUTHOR: Kouichi Takahashi @EMAIL: shafi@sfc.keio.ac.jp @DATE: 1999 2/22 %VERSION: ecs-v08, 0.1 @BRIEF_DESCRIPTION:Simple Henri-Michaelis-Menten UniUni Reversible kinetics. @DESCRIPTION:Simple Henri-Michaelis-Menten UniUni Reversible kinetics. @EQUATION:$$v=\frac{(K_{cF} K_p [S]-K_{cR} K_s[P])[E]}{K_s[P]+K_p[S]+Ks Kp}$$ %SUBSTANCE:Substrate, 1, 1 %SUBSTANCE:Product, 1, 1 %SUBSTANCE:Catalyst, 1, 1 %SUBSTANCE:Effector, 0, 0 %PARAMETER: Ks, Float, mol/l, Michaelis Constant of Substrate %PARAMETER: Kp, Float, mol/l,Michaelis Constant of Product %PARAMETER: KcF, Float, mol/l, Catalytic Constant (Forward) %PARAMETER: KcR, Float, mol/l,Catalytic Constant (Reverse) @PRIVATE: Float Ksp; @INITIALIZE_FUNC: Ksp = Ks * Kp; @REACT_FUNC: Float S = substrate(0)->concentration(); Float P = product(0)->concentration(); Float E = catalyst(0)->quantity(); Float velocity = (KcF * Kp * S - KcR * Ks * P) * E / (Ks * P + Kp * S + Ksp); process(velocity);`

`Ks`、`Kp`は共に定数であるために 乗算(Ks * Kp)の結果も常に一定である。 よって、これは最初に一度計算すればよいので`@PRIVATE`で新たな定数 `Ksp`を定義し、`@INITIALIZE_FUNC`で `Ksp = Ks * Kp;`

として計算する。

`@REACT_FUNC`行内では、 Substrateの濃度を表わすために、変数`S`を定義して、 `substrate(0)->concentration()`を代入する。

つまり記述は、

`Float S=Substrate(0)->concentration();`

となる。同様に、`P`と`E`も定義する。

# 3 Reactor Source Code（.C .hファイル）への変換

RDファイルをE-CELL2 Systemにおける Reactorのソースコードに変換するプログラムは、 ``rd2ch.pl''であり、``tools\reactor''というディレクトリに格納されている。 標準的なインストールでは、このディレクトリは``C:\E-CELL2\tools\reactor''であり、 Cygwin上では、``/cygdrive/c/E-CELL2/tools/reactor''として認識される。 RDファイルからソースコードである.Cファイル及び.hファイルが生成される。

また、E-CELL2 Systemでは、 Reactorのソースファイルとして`cpp`ファイルを使用するため、 Windowsのエクスプローラ等でファイルの拡張子が``.cpp''である必要がある。 そのため、デフォルトで拡張子``.cpp''がソースコードに付くようになっている。 `-e`オプションにて出力ファイルの拡張子を``cpp''とすることも可能である。

Cygwin上で、``rd2ch.pl''があるディレクトリに``cd''コマンドで移動する。RDファイルは、 このディレクトリに置かれてることを前提に説明する。以下の操作をCygwin上で実行する。

> `% ./rd2ch.pl` filename`.rd`

`-d`オプションで出力先のディレクトリを指定できる。

> `% ./rd2ch.pl` filename`.rd -d` output_directory

`-t`オプションでテンプレートファイルのあるディレクトリを指定する。 デフォルトのディレクトリは、``rd2ch.pl''が置かれているディレクトリの直下にあるtemplateという ディレクトリである。

> `% ./rd2ch.pl` filename`.rd -t` ./template_directory

`-e`オプションで出力ファイルの拡張子を指定できる。通常は、``cpp''付きの ソースコードファイルを生成するように、このオプションが暗黙的に指定されている。

> `% ./rd2ch.pl` filename`.rd -e` file_extension

`-h`オプションでヘルプを表示する。

> `% ./rd2ch.pl -h`

# 4 Spec Sheetへの変換

RDファイルをReactor Spec Sheetに変換するプログラムは、 ``rd2tex.pl''であり、``rd2ch.pl''と同じディレクトリに格納されている。 ここでの操作方法の説明は、``rd2ch.pl''の場合と同様に、対象となるRDファイルが ``rd2tex.pl''のあるディレクトリと同じディレクトリにあることを前提にしている。

> `% ./rd2tex.pl` filename`.rd`

このプログラムを実行すると、 読み込まれたキーワードの数が表示されるようになっている。 引数には複数のファイルが指定できる。 この場合、それをまとめた内容のLaTeXファイルが出力される。 ファイル名にはワイルドカードの使用も可能であり、例えば、

> `% ./rd2tex.pl *.rd`

を実行すると、カレントディレクトリにある全てのRDファイルをまとめた Reactorのリストが作成される。

引数が複数の場合で、 出力ファイル名をfilename`.tex`にしたい場合に、 `-o`オプションを用いる。 このオプションをつけない場合は自動的に `ReactorDescription.tex`というファイルが作成される。

> `% ./rd2tex.pl` filename1`.rd` filename2`.rd .......-o` output_filename`.tex`

ヘルプメッセージを表示する。

> `% ./rd2tex.pl -h`

# 5 Makefileを用いたReactorの追加

Reactorを新規に作成するには、C/C++のコンパイラが必要になる。インストール方法の詳細について は、１章を参照されたい。

- Borland Borland C++ Compiler 5.5 無償ダウンロード手順(日本語)

E-CELL2 System では、 Borland社が配布しているBorland C++ Compiler 5.5.1を用いている。

標準リアクターモデル用E-CELL2は、デフォルトで``C:\E-CELL2\standard''に インストールされる。このディレクトリは、Cygwin上では``/cygdrive/c/E-CELL2/standard''として認識される。 赤血球モデル用のReactorのRDファイルやソースコードはは、今回の配布物には含まれていない ので注意されたい。

``C:\E-CELL2\standard''ディレクトリの下で、Reactor作成と利用に関与する サブディレクトリには、``SRCR(Reactorのソースコード、ヘッダファイルを格納)''、 ``DLLR(GUI版用のReactorの実体(.dll)を格納)''、 ``DLLRB(バッチ版用のReactorの実体(.dll)を格納)''の3つがある。

ソースコードファイルに変換されたReactorをコンパイルするには、ここまでの作業で 生成されたReactorソースコードファイルとヘッダファイルをSRCRディレクトリへ格納し、 DLLRディレクトリ内、DLLRBディレクトリ内にあるMakefileのDLLFILESR部へ、生成するべきオブジェクト ファイル名を``.dll''の拡張子付きで追記する。``\''を行の末尾につけることで、複数行に渡ってDLLFILESR の記述を行うことができる。

`・ ・ ・ DLLFILESR = CatalyzedMassActionReactor.dll ConstantParameterReactor.dll \ DecayReactor.dll GeneralRapidEquilibriumPReactor.dll IsoUniUniReactor.dll \ MassActionReactor.dll MichaelisUniUniReactor.dll \ MichaelisUniUniReversibleReactor.dll OrderedBiBiReactor.dll \ OrderedBiUniReactor.dll OrderedUniBiReactor.dll PingPongBiBiReactor.dll \ RandomBiBiReactor.dll RandomBiUniReactor.dll RandomUniBiReactor.dll \ RapidEquilibriumPReactor.dll RapidEquilibriumReactor.dll ZeroReactor.dll ・ ・ ・`

Cygwin上で、E-CELL2 Systemの標準リアクターモデル用のディレクトリに 移動する。このディレクトリは、標準的なインストールでは``C:\E-CELL2\standard''であり、 Cygwin上では``/cygdrive/c/E-CELL2/standard''として認識される。ここには、``buildr.bat'' というバッチファイルがある。dllファイルの生成と適切なディレクトリへの格納は、 このバッチファイルを実行して行う。``buildr.bat''を実行する前に、エディタで開き、 ``set PATH=c:\borland\bcc55\bin;%PATH%''の下線部の部分を、実際にBorland C++ Compilerがインストールされているディレクトリの下にある``bin''の絶対パスあるいは相対パス で置き換えて保存する必要がある。

この作業が終わったら、``buildr.bat''バッチファイルをCygwin上で実行する。

> `% ./buildr.bat`

と入力する。 コンパイルされたオブジェクトファイル（`.dll`）は、GUI版用と バッチ版用に、各DLLRディレクトリ内とDLLRBディレクトリ内に格納される。

`Reactor`のDLLファイルを全て消去するには、Cygwin上の`DLLR`ディレクトリ内に 移動し、次のように入力する。

> `% make clean`

# 6 E-CELL2 System の実行

E-CELL2が正常に実行されるためには、 以下のことに注意する必要がある。 ルールで指定されたReactor (.dllファイル）は、リアクターディレクトリ(通常の設定では、 起動用バッチファイルの``ECELL2.BAT''、``ECELL2BB.BAT''のPATH中で、DLLRとDLLRBが各々 指定されている。)に置く必要がある。通常は``buildr.bat''により、生成されたリアクターのdll ファイルはこれらのディレクトリに格納される。ルールファイル中で指定されたReactorが 存在しないかPATHが通っていないと、E-CELL2はエラーメッセージを表示して 終了する。

# 7 E-CELL2 Projectが標準で用意するReactor

> Reactor Classname | Reversible/Irreversible | Reaction
> ZeroReactor | I | 零次反応
> MassActionReactor | I | 素反応
> MichaelisUniUniReactor | I | MichaelisMenten式に従う
> MichaelisUniUniReversibleReactor | R | MichaelisMenten式に従う
> RapidEquilibriumReactor | R | 迅速平衡を表す
> ConstantParameterReactor | I | 定数を表示する
> OrderedUniBiReactor | R | .
> OrderedBiUniReactor | R | .
> OrderedBiBiReactor | R | .
> PingPongBiReactor | I | .
> PingPongBiBiReactor | R | .
> RandomUniBiReactor | R | .
> RandomBiUniReactor | R | .
> RandomBiBiReactor | R | .
> RapidEquilibriumReactor | R | .
> IsoUniUniReactor | R | .

> 表5.3 Standard Reactor

> - Standard Reactorについての詳細(Adobe Portable Document Format(PDF)ファイル)
> PDFをご覧になるには が必要です

| E-CELL2 User's Manual Last Update $Date: 2002/07/16 16:45:42 $ Copyright: Keio University and Mitsui Knowledge Industry Co., Ltd. 2002 |  | 5章 E-CELL2ユーザー定義リアクターの作成 [ 1章 : 2章 : 3章 : 4章 ][ トップ ]