ヒットの判断したい(Sensor::ProcessHits
)
1G4bool Sensor::ProcessHits(G4Step *aStep) {};
有感検出器のヒットの条件はユーザーが定義する必要があります。 とはいえ、実際の検出器では、それぞれ測定できる物理量に特徴があります。 Geant4の付属サンプルなどを参考に、検出器ごとにどのようにヒット判断しているかを整理しました。
カロリメーターしたい
1G4bool Sensor::ProcessHits(G4Step *aStep) {
2 G4double energy_deposit = aStep->GetTotalEnergyDeposit();
3
4 if (energy_deposit == 0.) {
5 return false;
6 }
7
8 auto hit = new SensorHit{}
9 hit->Fill(aStep);
10};
カロリーメータはエネルギーを測定する検出器です。 検出器の中でエネルギーを落とさなかったイベントは、 スキップします。
ドリフトチェンバーしたい
1G4bool Sensor::ProcessHits(G4Step *aStep) {
2
3 G4double charge = aStep->GetTrack()->GetDefinition()->GetPDGCharge();
4
5 if (charge == 0.) {
6 return false;
7 }
8
9 auto hit = new SensorHit{};
10 hit->Fill(aStep);
11
12};
examples/basic/B5
サンプルを参考にしました。
ドリフトチェンバーは、荷電粒子が通過した位置を測定する検出器です。 (基本的に)中性粒子には反応しないため、 電荷を持たないトラックはスキップします。
光電子増倍管したい
1G4bool Sensor::ProcessHits(G4Step *aStep) {
2 auto particle = aStep->GetTrack()->GetDefinition()
3
4 if (particle != G4OpticalPhoton::Definition()) {
5 return false;
6 };
7
8 auto hit = new SensorHit{};
9 hit->Fill(aStep);
10}
extended/optical/LXe
サンプルを参考にしました。
光電子増倍管は、イベントで発生した光子の数を測定する検出器です。
粒子の種類がopticalphoton
でない場合は、スキップします。
注釈
GetDefinition
と比較する場合は
G4OpticalPhoton::Definition
、
GetParticleName
と比較する場合は
"opticalphoton"
です。