入射粒子したい(G4ParticleGun

1G4int n_particles = 100;
2G4ParticleGun *aParticleGun = new G4ParticleGun(n_particles);

粒子の種類を変更したい(SetParticleDefinition

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

入射粒子の種類を変更できます。 ただし、粒子名をそのままSetParticleDefinitionすることはできません。 まずG4ParticleTableから粒子情報(質量、電荷、スピンなど)を取得して、 それをSetParticleDefinitionに渡す手順になっています。

エネルギーを変更したい(SetParticleEnergy

1aParticleGun->SetParticleEnergy(400*MeV);

SetParticleEnergyで入射粒子のエネルギーを変更できます。 運動量をすでに設定していた場合は0に変更されるようです。

運動量を変更したい(SetParticleMomentum

1aParticleGun->SetParticleMomentum(400*MeV);

SetParticleMomentumで入射粒子の運動量を変更できます。 エネルギーを設定していなかった場合、入射粒子の質量を考慮したエネルギーが設定されます。

入射方向を変更したい(SetParticleMomentumDirection

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

```SetParticleMomentumDirection``で入射方向を変更できます。 方向は(x, y, z)の単位ベクトルで指定します。 上のサンプルは鉛直下向きに入射しています。

注釈

Geant4の世界には重力がないと思うので、横から打っても、上から打っても同じだと思います。 ただ、ミューオンを上から入射したほうが、見た目的に宇宙線っぽくなります。

入射場所を変更したい(SetParticlePosition

1position = G4ThreeVector(x0, y0, z0);
2aParticleGun->SetParticlePosition(position);

SetParticlePositionで入射位置を変更できます。 座標はG4ThreeVectorで設定します。

ランダムに入射したい

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

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