対話モードしたい

対話モードを起動して、アプリケーションを対話的にコマンド操作できます。 Qtを有効にしてビルドした場合、Qtウィンドウ上でコマンド操作できます。

付属サンプルで遊ぶときに使いそうなコマンド操作を列挙してみました。 また、対応する(と思われる)ソースコードも参考に載せておきました。

終了したい(exit

exit

対話モードから抜け出すコマンドです。 コマンドの頭に/は不要です。

Qtウィンドウしたい(/vis/open

/vis/open OGL

可視化ドライバーを指定します。 OGLを指定すると、Qtウィンドウが使えるようになります。

ランを開始したい(/run/beamOn

/run/beamOn イベント数
/run/beamOn 1
/run/beamOn 100

/run/beamOn イベント数で指定したイベント数のランを開始します。 ランを開始すると/run/initializeでインターロックがかかり、測定器にアクセスできなくなります。

参考

1auto rm = G4RunManagerFactory::CreateRunManager();
2rm->Initialize();
3rm->beamOn(イベント数);

粒子数を変更したい(/gun/number

/gun/number 粒子数
/gun/number 1
/gun/number 100

/gun/number 粒子数で、1イベントで入射する粒子の数を変更できます。

参考

1G4ParticleGun *gun = new G4ParticleGun(粒子数);

粒子を変更したい(/gun/particle

/gun/particle 粒子名
/gun/particle mu-
/gun/particle e-

/gun/particle 粒子名で、1イベントで入射する粒子の種類を変更できます。

参考

1G4ParticleTable *table = G4ParticleTable::GetParticleTable();
2G4ParticleDefinition *particle = table->FindParticle("粒子名");
3gun->SetParticleDefinition(particle);

入射エネルギーを変更したい(/gun/energy

/gun/energy エネルギー 単位
/gun/energy 1. GeV
/gun/energy 500. MeV

入射エネルギーを変更できます。 単位を間違えるとエラーになります。

参考

1G4double energy = 500. * MeV
2gun->SetParticleEnergy(energy);

入射位置を変更したい(/gun/position

/gun/position x y z 単位
/gun/position 10. 10. 10. cm

入射位置を変更できます。 単位を間違えるとエラーになります。

参考

1G4ThreeVector position = G4ThreeVector(0., 0., -10. * cm);
2gun->SetParticlePosition(position);

入射方向を変更したい(/gun/direction

/gun/direction ex ey ez
/gun/direction 0 0 1  // z軸方向
/gun/direction 0 1 1  // y-z平面:45度
/gun/direction 0 1 2  // y-z平面:30度ちょい

入射方向を、入射位置からのベクトルで設定できます。 単位は不要です。

参考

1G4ThreeVector direction = G4ThreeVector(0., 0., 1.);
2gun->SetParticleMomentumDirection(direction);

利用できる粒子を確認したい(/particle/list

/particle/list

/particle/listで利用可能な粒子名を確認できます。 素粒子物理学、原子核物理学で扱う粒子・反粒子がすべて揃っています。

以下は、素粒子物理学で使いそうな粒子名を抜粋してみました。

gamma,
opticalphoton
alpha, anti_alpha
neutron, anti_neutron
proton, anti_proton,
pi+, pi-, pi0,

// レプトン
e+ e-,
mu+, mu-
tau+, tau-,

// ニュートリオ
nu_e, anti_nu_e,
nu_mu, anti_nu_mu,
nu_tau anti_nu_tau,

// 仮想粒子(たぶん)
geantino,

粒子名そのものや、記号で表現します。 反粒子はanti_*ではじまるものがほとんどですが、 荷電レプトン(とパイ中間子)は、そのまま*-*+と書きます。

カット長を確認したい(/cuts/dump

/cuts/dump
========= Table of registered couples ============================

Index : 0     used in the geometry : Yes
 Material : G4_AIR
 Range cuts        :  gamma  700 um     e-  700 um     e+  700 um  proton 700 um
 Energy thresholds :  gamma  990 eV     e-  990 eV     e+  990 eV  proton 70 keV
 Region(s) which use this couple :
    DefaultRegionForTheWorld

Index : 1     used in the geometry : Yes
 Material : G4_BGO
 Range cuts        :  gamma  700 um     e-  700 um     e+  700 um  proton 700 um
 Energy thresholds :  gamma  64.4521 keV    e-  770.195 keV    e+  731.433 keV proton 70 keV
 Region(s) which use this couple :
    DefaultRegionForTheWorld

==================================================================

/cuts/dumpで二次粒子を生成するかどうかの閾値を確認できます。 閾値は カット長(=粒子の飛程) で設定されていて、デフォルトだと、ガンマ線、電子、陽電子、陽子の飛程の閾値はすべて 700 um になっていました。 エネルギーの閾値は、設定した物体の材料の情報から、自動で計算されます。

ヒント

検出器シミュレーションでは、エネルギー損失により粒子が停止するまで計算します。

「粒子が停止したこと」を判定するために、運動エネルギーを使って閾値を設定する手法もありますが、Geant4では 運動エネルギーがゼロになるまできちんと計算 する手法をとっています。

この手法だと、停止点の位置情報や、エネルギー損失の誤差をなくすことができます。 一方で、二次粒子(=二次、三次、四次、・・・)が発生した場合に計算量が膨らみます。 そこで、二次粒子生成の閾値を設定することで、計算量の増大を回避しています。