入射粒子したい(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では、標的となる論理ボリュームのサイズを利用して、座標を決めていました。