CAD の例
この例では、GEMC CAD ファクトリを使って 3 つの STL 臓器メッシュをインポートし、医療用の小線源治療を
モデル化します。イリジウム192 の高線量率(HDR)線源を肝臓内部に配置し、光子を等方的に放出させます。
各臓器は flux 有感検出器であるため、臓器ごとに付与されたエネルギーが記録されます。
plot_dose.py がそれを吸収線量と、それに相当する Ir-192 の照射時間に変換します。
クイックスタート
この例を現在のディレクトリにコピーします。CAD 定義をアップロードし、200 イベントを実行して CSV 出力を 生成し、各臓器の線量をプロットするには、次のようにします。
cp -r $GEMC_HOME/examples/basic/cad .
cd cad
./cad.py
gemc cad.yaml -n=200
./plot_dose.py
ジオメトリ
ジオメトリは stls/cad__default.yaml に宣言的に定義され、cad.py によって gemc.db にアップロード
されます。
stls という名前の CAD システムには、次が含まれます。
- heart_NIH3D:材質を血液とした心臓メッシュ。
- respiratory_NIH3D:材質を G4_LUNG_ICRP とした半透明の肺メッシュ。
- liver_NIH3D:材質を軟組織とした肝臓メッシュ。
stls/cad__default.yaml の各エントリは、メッシュファイル、材質、色、スケール、位置、および識別子を
設定します。system の値は、cad.yaml の gsystem 名と、STL ファイルを含むディレクトリの両方に
一致していなければなりません。3 つの臓器は y 軸上に中心を置き(各重心は x = z = 0)、y 方向に並んで
います。また、気管が下を向くように作成された肺メッシュには、上下を正しい向きにするため、z 軸まわりに
180° の rotation が設定されています。
詳しくは CAD インポートのドキュメント も参照してください。
インタラクティブビューア:
物理リスト
デフォルトでは FTFP_BERT が使用され、YAML ファイル内で phys_list: FTFP_BERT により選択されます。
phys_list
The physics list can be selected using the option
gemc -phys_list <value>where
<value>can be a combination of the Geant4 physics constructors separated by the+sign. For examplegemc -phys_list="FTFP_BERT + G4NeutronCrossSectionXS"To see a list of the available Geant4 constructors:
gemc -showPhysics
ジェネレータ
粒子の運動学的条件は YAML ファイル内で定義されます。
gparticle:
- name: gamma
p: 380*keV
delta_p: 120*keV
multiplicity: 300
theta: 90*deg
delta_theta: 90*deg
randomThetaModel: cosine
phi: 180*deg
delta_phi: 180*deg
vx: 0*mm
vy: -140*mm
vz: 0*mm
delta_vx: 20*mm
delta_vy: 20*mm
delta_vz: 20*mm
randomVertexModel: sphere
これは、肝臓内に配置された臨床用の イリジウム192 HDR 小線源治療線源をモデル化しています。
- エネルギー — Ir-192 は線スペクトルを放出します(主要なスペクトル線は 0.30〜0.61 MeV)。ここでは、
平均光子エネルギーである約 0.38 MeV の光子で近似し、
delta_pでエネルギーに幅を持たせて スペクトルの範囲をカバーしています。 - 位置 — 生成位置の中心は、ワールド座標での肝臓の重心
(0, -140, 0) mmです。線源の滞留領域を 模擬するため、生成位置を半径約 35 mm の球内に一様に分布させます(randomVertexModel: sphereは|delta_v|を半径として使用します)。臓器は y 軸に沿って(x = z = 0)並んでおり、心臓が原点に、 肝臓はそのすぐ下に、肺はその上にあります。 - 方向 — 全立体角 4π への等方的な放出:θ を 0〜180° の範囲で
cosineに従ってサンプリングし、 φ を 0〜360° の範囲で一様にサンプリングして組み合わせます。
詳しくは 内部ジェネレータのドキュメント も参照してください。
デジタイズ
各臓器は、stls/cad__default.yaml で flux 有感検出器として設定されています。
defaults:
digitization: flux
volumes:
- name: heart_NIH3D
identifier: "organ: 1"
flux デジタイズはイベントモードの検出器です。ヒットごとに 1 行を出力し、各行には臓器の identifier と付与エネルギー totEdep が含まれます。これにより、1 回の実行で 3 つの臓器を 個別に区別できます。
組み込みの dosimeter デジタイズでも線量を計算できますが、これはランモードの検出器であり、 同じ有感検出器名を共有するすべてのヒットを合算して 1 つのレコードに記録します。3 つの臓器すべてが
dosimeterという同じ名前を共有するため、それらは 1 つの数値に集約されてしまいます。flux を 使用することで、すべてのヒットに臓器ごとの識別情報が保持されます。
吸収線量
plot_dose.py は、臓器ごとに付与エネルギーを合計し、臓器の質量で割って吸収線量を求めます。
ここで、総和はその臓器のすべてのヒットについて取ります。\(\rho\) は割り当てられた材質の密度
(gemc cad.yaml -printSystemsMaterials は、血液、肺、軟組織の各材質についてそれぞれ 1.06、1.04、
1.03 g/cm³ を報告します)、\(V_{\text{mesh}}\) は CAD メッシュの体積(元の符号付き体積 ×
一様な scale³)です。1 グレイは 1 キログラムあたり 1 ジュール、\(1\,\mathrm{Gy} = 1\,\mathrm{J/kg}\)
です。
照射時間
シミュレーションは一定数の光子を放出します。対応する実際の照射時間は、放射能 \(A\) の Ir-192 線源が それだけの数の光子を放出するのに必要な時間です。光子収率 \(Y\)(1 崩壊あたりの光子数)のとき、線源は 1 秒あたり \(R = A\,Y\) 個の光子を放出するため、シミュレートされた光子数 \(N_\gamma = N_{\text{events}} \times m\)(多重度 \(m\))に対して、次が成り立ちます。
\[R = A \, Y, \qquad t_{\text{rad}} = \frac{N_\gamma}{A \, Y}\]plot_dose.py はデフォルトで、公称放射能 \(A = 10\ \mathrm{Ci} = 3.7\times10^{11}\) Bq の HDR 線源と、
Ir-192 の 1 崩壊あたり \(Y = 2.3\) 個の光子収率(ガンマ線の各スペクトル線の強度の総和)を使用します。
両者はそれぞれ --activity と --yield で調整できます。線量と \(t_{\text{rad}}\) はどちらも
\(N_\gamma\) に比例するため、単位治療時間あたりの吸収線量(線量率)は
\(D_{\text{organ}} / t_{\text{rad}}\) となり、光子数(同等に、線源の滞留時間)を増やすことで
治療に必要な線量に到達します。
詳しくは 線量計のドキュメント を参照してください。
使い方
検出器の構築
Python スクリプト cad.py を使って CAD 定義をアップロードします。このスクリプトは
stls/cad__default.yaml を読み込み、設定を gemc.db という名前の SQLite ファイルに保存します。
./cad.py
python API
Pass
-hfor additional command line options:options: -h, --help show this help message and exit -f, --factory FACTORY ascii, sqlite -v, --variation VARIATION Set variation name -r, --run RUN Set run number -sql, --dbhost DBHOST SQLite filename or MYSQL host -pv, --pyvista Show geometry using pyvista (needs pyvista) -pvb, --pvb, --pyvista-background Use PyVista BackgroundPlotter (needs pyqt6 pyvistaqt) -pvw, --width WIDTH Set plotter width -pvh, --height HEIGHT Set plotter height -pvx, --x X Set plotter x position -pvy, --y Y Set plotter y position -axes, --add_axes_at_zeroIf you have
pyvista(see also install pyvista), you can use the-pvand-pvboptions to display the setup without having to run GEMC
詳しくは ジオメトリの構築 も参照してください。
GEMC の実行
cad.yaml ファイルを使ってこの設定で実行できます。インタラクティブに実行するには -gui を追加します。
gemc cad.yaml -gui
必要に応じて cad.yaml を変更してください。特に、粒子の追加、スレッド数の制御、出力の変更などを
行えます。
イベントの実行
出力
gstreamer オプションで出力ファイル名と形式を選択します。
gstreamer:
- format: csv
filename: organs
gstreamer
The
gstreameroption selects the output name and format. Rungemc help gstreamerto check its documentation:-gstreamer=<sequence> ......: define a gstreamer output • filename: name of output file. Default value: NODFLT • format: format of output file. Default value: NODFLT • type: type of output fileDefault value: event Define output formats and filenames. It can be used to select <events> or <frame> streams. The file extension is added automatically based on the format. Supported formats: - root - ascii - csv - json Output types: - event: write events - stream: write frame time snapshots Example that defines two gstreamer outputs: -gstreamer="[{format: root, filename: out}, {format: csv, filename: out}]" The produced files structure depends on the accumulation method used: - event-based digitization (like <flux>) will have one file per thread, with "_t<thread#>" appended to the filename - run-based digitization (like <dosimeter>) will have one output file
詳しくは 出力のドキュメント も参照してください。
各臓器の線量のプロット
まず GEMC を実行して flux の CSV ストリームを出力します(イベント数が多いほど、リスク臓器の 統計精度が向上します)。
gemc cad.yaml -n=200
次に plot_dose.py で臓器ごとの線量をプロットします。このスクリプトは organs_t0_digitized.csv を
読み込み、臓器ごとの付与エネルギー、質量、線量を表示し、棒グラフを描画します。
./plot_dose.py # nominal 10 Ci Ir-192 source
./plot_dose.py --activity 5 # a weaker 5 Ci source (rescales the irradiation time)
./plot_dose.py --save organs_dose.png

線源が配置された肝臓の吸収線量が圧倒的に大きくなります。そのすぐ上の心臓と最上部の肺が散乱線から受ける 線量は、はるかに小さくなります。このように線量が局所に集中することが、小線源治療の利点です。タイトルには、 シミュレートされた光子数に相当する Ir-192 の照射時間が示されます(上記の 照射時間 を参照)。
GEMC アナライザでのプロット
まず GEMC で 200 イベントを実行します。デフォルトの YAML ファイルの設定により、アナライザ用の CSV ストリームが出力されます。
gemc cad.yaml -n=200
ヒットごとの総付与エネルギーをプロットします。
gemc-analyzer organs_t0_digitized.csv totEdep --kind csv
