![]() | E-CELL2 User's Manual | 5章 ユーザー定義リアクターの作成 [ |
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++言語を用いてユーザーが自由に記述できるため、 化学反応のほかどのような物質の量の変化の形式も表現できる。
上図は、E-CELL2 Systemに関係するファイルの作成の流れを 表している。上図の構造を見ると分かるように、ReactorはE-CELL2 System本体と別に 作成できる。Reactorを作成するには、まず、Reactorの仕様と実行される処理の内容を Reactor Descriptionファイル(RDファイル)に書く。 次にRDファイルはC++のコードに変換されさらに E-CELL2 Systemがロードできる形式 (.dll
ファイル)にコンパイルされる。 また、RDファイルからLaTeX形式のReactor Spec Sheetに変換できる。
通常(Regular)と裏口(Postern)の2種類のリアクターが存在する。 通常リアクターは、積分機構を使って連立微分方程式を解くために使われる。 裏口リアクターは、積分機構から独立しており、 Substanceの量を計算するために連立微分方程式が適さない場合に使われる。 2種類のリアクターは、複数段階の計算機構によって実現されている。 まず、通常リアクターによる計算がReact段階で実行され、 次に、裏口リアクターによる計算がPosten段階で実行される。 裏口リアクターは次のような状況で利用可能である。
通常リアクターがサブスタンス量を決定するために反応速度を計算するのに対し、 裏口リアクターは物質移動問題を考慮せずに全てのサブスタンスを扱う。 したがって、通常リアクターはvelocity(Float v)
メソッドを 使って計算結果を返すのに対し、 裏口リアクターはSetQuantity(Float Q)
メソッドを 使って計算結果を返すように実装される。
裏口リアクターは、通常"PReactor
"で終わる名前、 例えば"ABCPReactor
"のような名前を持つ。
それぞれの裏口リアクターによって、1個のみのサブスタンス量が 操作されるべきである。 複数の裏口リアクターによってはサブスタンス量を制御できない。 1個のサブスタンス量の決定に複数の裏口リアクターが関係すると、 シミュレーションの精度が保証されない。 複数の反応が1つのサブスタンスに影響する場合には、 それらの全ての反応を1つの裏口リアクター、 例えばGeneralRapidEquilibriumPReactor
によって 指定する必要がある。
既知の問題:E-CELL 2.25では、Windows DLLの制約のために、GeneralRapidEquilibriumPReactor
が動かない。
いくつかの反応形式のためのReactorは E-CELL2 Systemに標準添付されている(5節を参照)。 しかし、非標準的な反応形式をモデル化する際や、 より高度なシミュレーションをするためにはRDファイルを書いて、 自分でReactorを作成する必要がある。
RDファイルは、キーワードと値の組からなる行を必要な数を並べて作成する。 なお、RDファイルを作成する際には以下の約束事に注意する。
_
」(下線記号)で構成され、スペースを含まない。
@
」または「%
」で始まる。「@
」で始まる行は単純にその内容が読み込まれる。「%
」で始まる行はその中身を","で区切ることによって、配列として処理される。
#
」で始まる行はコメント文とみなされる。行頭の「#
」をそのまま出力する際は、「\#
」とするかスペースを1つ入れる。ただし、行頭以外の「#
はそのまま出力される。
\\」
を入れる。)
@CLASSNAME
行には、 作成するReactor のクラス名を入力する。ファイル名はCLASSNAME.rd
でなければならない。@BASECLASS
行では、そのクラスが継承する元の基底クラスを記述する。 通常はFluxReactor
を継承する場合が多い。@AUTHOR
行、@EMAIL
行、@DATE
行には、 それぞれ作成者、電子メールアドレス、作成日を記入する。 日付の書式に厳密な決まりはない。
%VERSION
行には、E-CELL2Systemおよび そのReactorバージョン番号を","で区切って記述する。@BRIEF_DESCRIPTION
行は、 そのReactorの1行程度の説明。 これらのキーワードの内容は、 E-CELL2 System本体にも渡される情報である。
@DESCRIPTION
行は、 その Reactor の詳しい説明である。
@EQUATION
行は、 Reactor の式を LaTeXのdisplaymath環境で記述する。displaymath環境にするには、
$$
数式の記述 $$
\begin{displaymath}
数式の記述 \end{displaymath}
\[
数式の記述 \]
のいずれかの方式で記述すること。
%SUBSTANCE
行では、Substanceの定義を行う。 用意されているSubstanceは、Substrate
、Product
、Catalyst
、Effector
の4種類がある。 ここで記述するものは物質等の種類、最大の物質数、最小の物質数、備考で、 それぞれを",
"で区切る。最大の物質数及び最小の物質数は、 基本的には10進整数値であるが、最大の個数に関しては "Inf
"として無限大に設定可能である。 備考欄は、特殊なSubstanceを定義する際に書けば良い。 ここでの記述は、現在はSpec Sheetに参照されるだけである。
例えば、「%SUBSTANCE:Substrate, 1, 10
」という記述は、基質が1個以上10個以下存在できるという意味である。
@NOTES行
では、Reactorの実装に関する注意点を書く。
%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.h
、Reactant.h
、RootSystem.h
は 自動的にインクルードされるので記述する必要がない。なお、E-CELL1 Systemで存在していた、Stepper.h
はE-CELL2 Systemでは 廃止されたので注意すること。FluxReactor.h
を継承しないならば、 前述の3個のファイルを自動的にインクルードするために、StandardHeaders.h
のインクルードが望ましい。
@OPTION_C
行では、新たなメソッドやマクロの定義等を書く。 ここに書いた事項は、.cpp
ファイルの先頭に挿入される。
@INITIALIZE_FUNC
にはルールファイルの読み込み後、 シミュレーションの開始前に一度だけ実行する処理をC++のコードで記述する。 ここでは主にパラメータの値域のチェックや、 シミュレーション中に変化しない値の計算などの初期設定を行う。
@REACT_FUNC
には毎ステップ行う処理を書く。通常は、
といった一連の処理を書く。FluxReactorを継承している場合は、process()
メソッドを用いて(2)の処理を簡単に行うことができる。process()
メソッドの引数は、1秒あたりの反応分子数で、Float
型である。
リアクターが扱うアクティビティーはステップ当たりの値であるが、 リアクターウィンドウなどのユーザーインターフェースが表示する アクティビティーは1秒間当たりの値である。
|
(*1)△は、コメント分としてのみ参照される (*2)Reactorによっては必要のないものもある |
表5.2 メソッド一覧 2.2 Reactor Descriptionの例以下に、既知の反応速度式に基づくRDファイルの書き方を例を用いて説明する。 例えば、
という反応式に従う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);
として計算する。
つまり記述は、 Float S=Substrate(0)->concentration();
となる。同様に、 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
表5.3 Standard Reactor
|