ヒットの判断したい(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::DefinitionGetParticleNameと比較する場合は "opticalphoton"です。