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

INDEX

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

1 はじめに

E-CELL2 Systemは、 細胞を、物質を表すSubstance、 反応を表すReactor及び それらが存在する場所、あるいは機能を表現するSystemの 三種類のオブジェクトの組合わせによりモデル化する 。ReactorSubstanceの量の 時間的変化を表現しており、 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)リアクター

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

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

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

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

2 Reactor Descriptionファイル

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

2.1 Reactor Descriptionファイルの書き方

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

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

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

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

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

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

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

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

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

例えば、「%SUBSTANCE:Substrate, 1, 10」という記述は、基質が1個以上10個以下存在できるという意味である。

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

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

%PARAMETER行ではそのReactorの引数となる パラメータの定義を行う。記述方法は、パラメータ名、パラメータの型、単位、 パラメータに関する記述を、","で区切って書く。パラメータの型は、整数ならば、 "Int"を、小数ならば"Float"を使用する。 しかし、これらの型はE-CELL System独自のもので、 CPU、OS、コンパイラーに依存し、 C++基本型の"int"や"float"とは異なる。 Windows版のE-CELL 2では、 "Int"は32ビットの整数、"Float"は80ビット浮動小数である。しかし、JNI (Java Native Interface)の制約のために、GUI版では64ビット、バッチ版では80ビットの精度である。

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

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

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

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

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

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

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

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

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

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

KEYWORD.tex.cpp.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);

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

として計算する。

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

つまり記述は、

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

となる。同様に、PEも定義する。

3 Reactor Source Code(.cpp .hファイル)及び実行モジュール(DLL)への変換

RDファイルをE-CELL2 SystemにおけるReactorのソースコード、および実行モジュールに変換するには、 モデリングランチャーのReactorタブをクリックする。 変換したい.rdファイルを指定し"Execute"ボタンを押すことで 自動的にソースコードの作成、コンパイルを行いDLLを作成する。 詳細は6章のモデリングランチャーのマニュアルを参照されたい。


図2 Modeling Launcher

4 E-CELL2 System の実行

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

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

Reactor ClassnameReversible/IrreversibleReaction
ZeroReactorI零次反応
MassActionReactorI素反応
MichaelisUniUniReactorIMichaelisMenten式に従う
MichaelisUniUniReversibleReactorRMichaelisMenten式に従う
RapidEquilibriumReactorR迅速平衡を表す
ConstantParameterReactorI定数を表示する
OrderedUniBiReactorR.
OrderedBiUniReactorR.
OrderedBiBiReactorR.
PingPongBiReactorI.
PingPongBiBiReactorR.
RandomUniBiReactorR.
RandomBiUniReactorR.
RandomBiBiReactorR.
RapidEquilibriumReactorR.
IsoUniUniReactorR.
CatalyzedMassActionReactor R .
DecayReactor I .
GeneralRapidEquilibriumPReactor - .
RapidEquilibriumPReactor - .

表5.3 Standard Reactor

 

PDFをご覧になるには が必要です


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