粒子生成したい(G4VUserPrimaryGeneratorAction
)
一次粒子(入射粒子)を定義するクラスは、必須クラスのひとつで、
G4VUserPrimaryGeneratorAction
クラスを継承して作成します。
親クラス
1G4VUserPrimaryGeneratorAction();
2virtual ~G4VUserPrimaryGeneratorAction() = default;
3virtual void GeneratePrimaries(G4Event *aEvent) = 0;
親クラスのメンバー関数を抜粋しました。
コンストラクターとデストラクターは、この設定を引き継げばよさそうです。
GeneratePrimaries()
は、イベントの一次粒子を設定するための関数です。
純粋仮想関数になっているため、自作クラスでoverrideが必要です。
PrimaryGeneratorクラス
クラス名をPrimaryGenerator
としました。
1// //////////////////////////////////////////////////
2// include/PrimaryGenerator.hh
3// //////////////////////////////////////////////////
4
5#ifndef PrimaryGenerator_h
6#define PrimaryGenerator_h 1
7
8#include "G4VUserPrimaryGeneratorAction.hh"
9
10namespace ToyMC
11{
12
13class PrimaryGenerator : public G4VUserPrimaryGeneratorAction
14{
15 public:
16 PrimaryGenerator() = default;
17 ~PrimaryGenerator() = default;
18
19 void GeneratePrimaries(G4Event *aEvent) override;
20};
21
22}; // namespace ToyMC
23
24#endif
GeneratePrimaries
1void PrimaryGenerator::GeneratePrimaries(G4Event *aEvent)
2{
3 // 入射粒子の数を設定
4 G4int n_particles = 1;
5 G4ParticleGun *gun = new G4ParticleGun(n_particles);
6
7 // 入射粒子の種類を設定
8 auto table = G4ParticleTable::GetParticleTable();
9 auto particle = table->FindParticle("mu-");
10 gun->SetParticleDefinition(particle);
11
12 // 入射粒子の座標を設定
13 G4ThreeVector xyz{0., 0., 0.};
14 gun->SetParticlePosition{xyz};
15
16 // 入射粒子の方向を設定
17 G4ThreeVector direction{0., 0., 1.};
18 gun->SetParticleMomentumDirection(direction);
19
20 // 入射粒子のエネルギーを設定
21 G4double energy{1. * GeV};
22 gun->SetParticleEnergy(energy);
23
24 // イベントに追加
25 gun->GeneratePrimaryVertex(aEvent);
26}
G4ParticleGun
を使ってミューオンを入射しています。
G4ParticleGun
はGeant4標準の粒子生成クラスのひとつです。