入射粒子したい(G4ParticleGun

1G4int n_particles = 1;
2G4ParticleGun *gun = new G4ParticleGun(n_particles);

G4ParticleGunはGeant4標準の粒子生成クラスのひとつです。 種類、方向、座標、エネルギーなどを固定した1種類の入射粒子を生成できます。

注意

あくまで1種類のParticleGunを生成するクラスです。 上記のサンプルでn_particles=100にした場合、 同じ設定の粒子が100個生成されます。

粒子をランダムに入射したい場合は、n_particles=1に設定し、 BeamOn(100)のようにイベント数を増やすとよいです。

ランダムに入射したい

 1void PrimaryGeneratorAction::GeneratePrimaries(G4Event* /*aEvent*/)
 2{
 3    // aTargetLogical : 入射標的の論理ボリューム
 4
 5    G4double target_x = aTargetLogical->GetXHalfLength() * 2.;
 6    G4double target_y = aTargetLogical->GetYHalfLength() * 2.;
 7    G4double target_z = aTargetLogical->GetZHalfLength() * 2.;
 8
 9    G4double factor = 0.8;
10    G4double x0 = factor * target_x * (G4UniformRand() - 0.5);
11    G4double x0 = factor * target_y * (G4UniformRand() - 0.5);
12    G4double z = -0.5 * target_z
13
14    position = G4ThreeVector(x0, y0, z0);
15    aParticleGun->SetParticlePosition(position);
16}

G4UniformRandを使って入射場所をランダムに設定できます。 付属サンプルB1では、標的となる論理ボリュームのサイズを利用して、座標を決めていました。

イベントに追加したい(GeneratePrimaryVertex

1// G4EventにGunを追加する
2gun->GeneratePrimaryVertex(aEvent);

GeneratePrimaryVertexで、作成したParticleGunをイベントに追加します。

リファレンス