シンチレータバレル
この例では、48枚の台形パドルをリング状に一周配置した円筒形のシンチレータバレル検出器を構築します。
distribute_on_circle API を使って、円周上に等角度間隔でボリュームを複製する方法を示します。
また、隣り合う面がほぼ隙間なく接するように、
パドルの寸法を決める方法を説明します。
クイックスタート
この例を現在のディレクトリにコピーします。 ジオメトリを作成して3イベントを実行するには、次のようにします。
cp -r $GEMC_HOME/examples/basic/scintillator_barrel .
cd scintillator_barrel
./scintillator_barrel.py
gemc scintillator_barrel.yaml
ジオメトリ
ジオメトリは scintillator_barrel.py で定義されています。ワールド(root という名前のボックス)には、
リング状に配置された48個の同一の paddle ボリュームが含まれています。
- 各 paddle は
G4Trapの一般台形ソリッド(材質は G4_PLASTIC_SC_VINYLTOLUENE)で、 幅の広い面が半径方向外側を、幅の狭い面がビーム軸側を向いています。 - 隣接する外側の面が隙間なく接するように、弦の公式を使ってパドルの寸法を決めます。
- 外側の半幅:
pX = (radius + pY) × sin(π/n) - 内側の半幅:
pLTX = (radius − pY) × sin(π/n)
- 外側の半幅:
distribute_on_circle(n=48, radius=400 mm, align=True, axis='z')は、各コピーを z 軸まわりに 7.5° の等間隔で配置し、回転させます。
distribute_on_circle の完全な API リファレンスと寸法の計算に用いる幾何学的関係については、
構造ヘルパーのドキュメントを参照してください。
インタラクティブビューア(48枚すべてのパドルで構成されるバレル):
物理リスト
デフォルトでは QBBC が使用され、YAML ファイルで phys_list: QBBC として選択されます。
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: proton
p: 500*MeV
theta: 90*deg
delta_phi: 360*deg
multiplicity: 3
詳細については、内部ジェネレータのドキュメントも参照してください。
デジタイゼーション
各 paddle には、一意のパドル識別子とともに flux デジタイゼーションが割り当てられます。
paddle.digitization = "flux"
# ...
v.set_identifier("paddle", i)
詳細については、フラックスのドキュメントを参照してください。
distribute_on_circle API
GVolume の distribute_on_circle メソッドは、指定した半径 radius の円周上に
テンプレートボリュームを n 個複製します。align=True の場合、各コピーはさらに、選択した軸のまわりに
その角度位置 φᵢ だけ回転し、各パドルのローカル座標系が半径方向に揃います。
for i, v in enumerate(paddle.distribute_on_circle(n, radius, align=True, axis='z')):
v.set_identifier("paddle", i)
v.publish(cfg)
このメソッドは、角度ステップごとに1つずつ、独立した GVolume コピーのリストを返します。各コピーは
<name>_i という名前で、(radius·cos φᵢ, radius·sin φᵢ, 0) に配置されます。
完全な API リファレンスは構造ヘルパーのドキュメントにあります。
使い方
検出器の構築
検出器を構築するには Python スクリプト scintillator_barrel.py を使用します。デフォルトでは、
構成は gemc.db という名前の SQLite ファイルに保存されます。コマンドラインオプションで
データベースの種類、バリエーション、ラン番号を指定できます。
詳細については、ジオメトリの構築も参照してください。
GEMC の実行
scintillator_barrel.yaml ファイルを使ってシミュレーションを実行します。インタラクティブに実行するには、
-gui を追加します。
gemc scintillator_barrel.yaml -gui
必要に応じて scintillator_barrel.yaml を変更してください。特に、イベント数の変更、
スレッド数の増加、出力形式の選択などを行えます。
イベントの実行
以下のビューは、θ = 90° で半径方向外側に3個の陽子を発射した1イベント後のバレルを、 ビーム軸方向から見たものです。各陽子はシンチレータパドルを1枚ずつ通過します。
出力
gstreamer オプションで出力ファイル名と形式を選択します。
gstreamer:
- format: csv
filename: barrel
詳細については、出力のドキュメントも参照してください。
GEMC Analyzer によるプロット
まず1,000イベントで GEMC を実行します。デフォルトの YAML ファイルはアナライザ用の CSV ストリームを書き出します。
gemc scintillator_barrel.yaml -n=1000
ヒットごとの総エネルギー付与量をプロットします。
gemc-analyzer barrel_t0_digitized.csv totEdep --kind csv

粒子トラックの真のエネルギーをプロットします。
gemc-analyzer barrel_t0_true_info.csv E --kind csv --data true_info
