$$ \newcommand{\pv}{\mbox{p.v.}} \newcommand{\nm}{\noalign{\smallskip}} %\newcommand{\qed}{ $\Box$} \newcommand{\ds}{\displaystyle} %\newcommand{\pf}{\noindent {\sl Proof}. \ } \newcommand{\p}{\partial} \newcommand{\pd}[2]{\frac {\p #1}{\p #2}} \newcommand{\eqnref}[1]{(\ref {#1})} \newcommand{\Abb}{\mathbb{A}} \newcommand{\Cbb}{\mathbb{C}} \newcommand{\Hbb}{\mathbb{H}} \newcommand{\Ibb}{\mathbb{I}} \newcommand{\Nbb}{\mathbb{N}} \newcommand{\Kbb}{\mathbb{K}} \newcommand{\Rbb}{\mathbb{R}} \newcommand{\Sbb}{\mathbb{S}} \renewcommand{\div}{\mbox{div}\,} \newcommand{\la}{\langle} \newcommand{\ra}{\rangle} \newcommand{\Acal}{\mathcal{A}} \newcommand{\Bcal}{\mathcal{B}} \newcommand{\Ccal}{\mathcal{C}} \newcommand{\Ecal}{\mathcal{E}} \newcommand{\Fcal}{\mathcal{F}} \newcommand{\Hcal}{\mathcal{H}} \newcommand{\Lcal}{\mathcal{L}} \newcommand{\Kcal}{\mathcal{K}} \newcommand{\Ncal}{\mathcal{N}} \newcommand{\Dcal}{\mathcal{D}} \newcommand{\Pcal}{\mathcal{P}} \newcommand{\Qcal}{\mathcal{Q}} \newcommand{\Rcal}{\mathcal{R}} \newcommand{\Scal}{\mathcal{S}} \newcommand{\Tcal}{\mathcal{T}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % define bold face %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def\Ba{{\bf a}} \def\Bb{{\bf b}} \def\Bc{{\bf c}} \def\Bd{{\bf d}} \def\Be{{\bf e}} \def\Bf{{\bf f}} \def\Bg{{\bf g}} \def\Bh{{\bf h}} \def\Bi{{\bf i}} \def\Bj{{\bf j}} \def\Bk{{\bf k}} \def\Bl{{\bf l}} \def\Bm{{\bf m}} \def\Bn{{\bf n}} \def\Bo{{\bf o}} \def\Bp{{\bf p}} \def\Bq{{\bf q}} \def\Br{{\bf r}} \def\Bs{{\bf s}} \def\Bt{{\bf t}} \def\Bu{{\bf u}} \def\Bv{{\bf v}} \def\Bw{{\bf w}} \def\Bx{{\bf x}} \def\By{{\bf y}} \def\Bz{{\bf z}} \def\BA{{\bf A}} \def\BB{{\bf B}} \def\BC{{\bf C}} \def\BD{{\bf D}} \def\BE{{\bf E}} \def\BF{{\bf F}} \def\BG{{\bf G}} \def\BH{{\bf H}} \def\BI{{\bf I}} \def\BJ{{\bf J}} \def\BK{{\bf K}} \def\BL{{\bf L}} \def\BM{{\bf M}} \def\BN{{\bf N}} \def\BO{{\bf O}} \def\BP{{\bf P}} \def\BQ{{\bf Q}} \def\BR{{\bf R}} \def\BS{{\bf S}} \def\BT{{\bf T}} \def\BU{{\bf U}} \def\BV{{\bf V}} \def\BW{{\bf W}} \def\BX{{\bf X}} \def\BY{{\bf Y}} \def\BZ{{\bf Z}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Abbreviate definitions of greek symbols %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcommand{\Ga}{\alpha} \newcommand{\Gb}{\beta} \newcommand{\Gd}{\delta} \newcommand{\Ge}{\epsilon} \newcommand{\Gve}{\varepsilon} \newcommand{\Gf}{\Gvf} \newcommand{\Gvf}{\varphi} \newcommand{\Gg}{\gamma} \newcommand{\Gc}{\chi} \newcommand{\Gi}{\iota} \newcommand{\Gk}{\kappa} \newcommand{\Gvk}{\varkappa} \newcommand{\Gl}{\lambda} \newcommand{\Gn}{\eta} \newcommand{\Gm}{\mu} \newcommand{\Gv}{\nu} \newcommand{\Gp}{\pi} \newcommand{\Gt}{\theta} \newcommand{\Gvt}{\vartheta} \newcommand{\Gr}{\rho} \newcommand{\Gvr}{\varrho} \newcommand{\Gs}{\sigma} \newcommand{\Gvs}{\varsigma} \newcommand{\Gj}{\Phi^*} \newcommand{\Gu}{\upsilon} \newcommand{\Go}{\omega} \newcommand{\Gx}{\xi} \newcommand{\Gy}{\psi} \newcommand{\Gz}{\zeta} \newcommand{\GD}{\Delta} \newcommand{\GF}{\Phi} \newcommand{\GG}{\Gamma} \newcommand{\GL}{\Lambda} \newcommand{\GP}{\Pi} \newcommand{\GT}{\Theta} \newcommand{\GS}{\Sigma} \newcommand{\GU}{\Upsilon} \newcommand{\GO}{\Omega} \newcommand{\GX}{\Xi} \newcommand{\GY}{\Psi} %%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newcommand{\BGG}{{\bf \GG}} \newcommand{\BGf}{\mbox{\boldmath $\Gf$}} \newcommand{\BGvf}{\mbox{\boldmath $\Gvf$}} \newcommand{\Bpsi}{\mbox{\boldmath $\Gy$}} \newcommand{\wBS}{\widetilde{\BS}} \newcommand{\wGl}{\widetilde{\Gl}} \newcommand{\wGm}{\widetilde{\Gm}} \newcommand{\wGv}{\widetilde{\Gv}} \newcommand{\wBU}{\widetilde{\BU}} %%%%%%%%%% \newcommand{\Jfrak}{\mathfrak{J}} %%%%%%%%%% \newcommand{\beq}{\begin{equation}} \newcommand{\eeq}{\end{equation}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def\ol{\overline} \def\bs{\backslash} \def\wt{\widetilde} \newcommand{\hatna}{\widehat{\nabla}} \DeclareMathOperator{\Ker}{Ker} \DeclareMathOperator{\divergence}{div} \DeclareMathOperator{\Real}{Re} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% $$ 山田祐也氏の引き継ぎ

山田祐也氏の引き継ぎ

pdfバージョンはこちらから 元のページに戻る

山田の研究の引き継ぎ。次のことを引き継いで、今後の研究がスムーズに進むようにする。


修論後の検討(しようと思っていたものも含めて)

定常状態への到達

修論時点ではtMCimgによる定常状態への到達は定性的に判断していたので、これを定量的に評価し、より正確なシミュレーション結果の比較を行う。Fluence(内部分布)の各Voxelの値に対して、2時刻間の最大変化率を見ることで定常状態に達しているかを判定できると考える。

$$ \text{Max Difference}(\%) = \max_{\text{Voxel}} \frac{\text{Fluence at } t_2 - \text{Fluence at } t_1}{\text{Fluence at } t_1} \times 100 $$

上記を200psから2000psまで、200ps刻みで計算した結果は次の表と図の通り。どの程度のMax Differenceまでを許容するかは別途議論の必要がある。

Table1: Max Difference
Time(ps) Max Difference(\(\%\))
400 100
600 29.36
800 11.49
1000 10.23
1200 12.61
1400 6.96
1600 4.84
1800 4.24
2000 2.87

領域の形状による影響

修論では直方体領域に対するシミュレーションを考えていたが、MCMLでは円筒座標を用いているので実際にはこの直方体に内接する円柱領域でのシミュレーションになっていた。元々MCMLでは無限平面を考えることになっていて、とはいえ現実にその領域でシミュレーションを行うことは不可能なので適当に切ってシミュレーションすることになる。そこで、設定の簡便さと、適当な大きさの直方体領域を考えれば問題なくシミュレーションできるものと考えていたこととで、直方体領域でのシミュレーションをすることにしていたのだが、観測したい領域に対してどれほど十分な大きさの直方体領域を取れば問題ないと言えるのかという点については考察が不足していた。そのため、修論時にやったものより大きい領域でシミュレーションする(観測する領域は変えずに)、$y = x$ の平面で切った結果を見るなどしてこの点をさらに議論する必要がある。


ソフトウェア手引き

MCML

1. Download

https://omlc.org/software/mc/

上記サイトから MCML と CONV をそれぞれダウンロードし、適当に展開する。

2. Installation

上記を展開したディレクトリでそれぞれ以下を実行する。

(for MCML installation): cc -o mcml mcmlio.c mcmlnr. mcmlgo.c mcmlmain.c\\ (for CONV installation): cc -o conv convi.c convo.c convnr.c conviso.c convconv.c convmain.c

3. Usage

tMCimg

1. Download

http://www.nmr.mgh.harvard.edu/PMI/resources/tmcimg/index.htm

計算機環境に合ったものをダウンロードする。

2. Installation

基本的には上記 URL に従ってインストールする。山田の環境(Apple LLVM version 9.1.0 (clang-902.0.39.2))では下記のようにはじめ make が通らなかったが修正して通るようになった。

=\(>\)make
gcc -I.. -g -O2 -c doconfig.c
gcc -I.. -g -O2 -c doscale.c
gcc -I.. -g -O2 -c fpusetup.c
gcc -I.. -g -O2 -c hisfile.c
gcc -I.. -g -O2 -c moveSD.c
gcc -I.. -g -O2 -c ran.c
gcc -I.. -g -O2 -c segfile.c
segfile.c:79:15: warning: format specifies type 'int' but the argument has type 'unsigned long' [-Wformat]
p-\(>\)nxstep * p-\(>\)nystep * p-\(>\)nzstep * sizeof(TISSUE));
1 warning generated.
gcc -I.. -g -O2 -c storage.c
storage.c:45:11: error: assignment to cast is illegal, lvalue casts are not supported
return ((void *)p = alloc\_vector(n1, nb));
1 error generated.
make[1]: *** [storage.o] Error 1

そこで該当箇所 libmccore/storage.c:45 を次のように修正した。

return p = alloc\_vector(n1, nb);

これで make が通った。

3. Usage

基本は `sample.cfg` に倣って設定する。infinitely narrow beamを用いた定常状態のシミュレーションの場合には、`freq` と `source[:rad]` は0にする。シミュレーションの実行時間は `start\_time`, `gate\_width`, `ngate` で指定する。`gate\_width * ngate` がシミュレーション時間になる。それぞれの値がもつ意味は下記の内部シミュレーション結果の解釈を参照。別途各voxelに属性を割り振るbinaly fileを用意する必要があるが、これもdocに従ってやれば良い。

4. アウトプットの解釈

tMCimgによるアウトプットはそのままでは使えないので、別途変換する必要がある。内部のシミュレーション結果(`*.2pt`)と境界のシミュレーション結果(`*.his`) では若干処理方法が異なるので注意を要する。アウトプットの形式はdocを参照されたいが以下に要約する。

  • 境界シミュレーション結果
    境界相当のVoxelに入ったphotonについて、その座標、到達時刻、内部Voxelの各属性のものをどれほど通ったかを32bit floating pointで記録する。例えば、2層からなるモデル(layer1, larye2)があったとしたら、境界シミュレーションのアウトプットは

    x, y, z, total time traveled by a photon, total length traveled by the photon in layer 1, total length traveled by the photon in layer 2

    が並んでいることになる.
  • 内部シミュレーション結果
    内部シミュレーションの結果は、Voxel毎、`gate\_width` 毎に64bit floating pointで記録する。例えば、定常状態のシミュレーションにおいて総Voxel数が10で、`gate\_width = 10ps, ngate = 2` とすると、シミュレーションは20psまで行われ、そのアウトプットは 20個の数値

    Fluence in Voxel 0 at 10ps, Fluence in Voxel 1 at 10ps, $\ldots$, Fluence in Voxel 9 at 10ps, Fluence in Voxel 0 at 20ps, Fluence in Voxel 1 at 20ps, $\ldots$, Fluence in Voxel 9 at 20ps

    が並ぶ。なので、特に事情がなければ ngate = 1 としておくのがよいと思われる。これらは全部バイナリで書き出されるので、 `hexdump`するなどして適切に変換する。

5. Mersenne Twisterの使い方

tMCimgはGSL(Gnu Scientific Library)経由でMersenne Twisterを利用できる。これを利用するには事前にGSLを使えるようにしておく必要がある。導入方法と動作確認は例えば以下を参照。

http://hooktail.sub.jp/computPhys/gsl/install.html

続いてtMCimgディレクトリ内の config.h:86 に以下を記載する。

#define HAVE\_GSL 1

これでtMCimgは libmccore/ran.c の中でGSL経由のMTを利用しようとする。

最後に再びmakeする。但し、実行前に tMCimg/Makefile を以下の通り修正する。

#before
30: GSLLIBS =
49: $>$-gcc \$(CFLAGS) -o tMCimg tMCimg.lo \$(LDFLAGS) \$(LIBS)

#after
30: GSLLIBS = -lgsl -lgslcblas -lm
49: $>$-gcc \$(CFLAGS) -o tMCimg tMCimg.lo \$(LDFLAGS) \$(LIBS) \$(GSLLIBS)


備考(川越の加筆)

本引き継ぎ資料には山田祐也氏の連絡先が記載されておりましたが, 個人情報保護の観点から記載を削除しました. また, 本引き継ぎ資料には山田祐也氏の修士論文および川越のノートがリンクされていましたが, 修士論文は「答案」に該当するためリンク部分を削除しました. なお川越のノートのほうについては, 別ページにて後日公開する予定です.