チェレンコフ放射したい(G4Cerenkov

 1#include "G4Cerenkov.hh"
 2
 3auto params = G4OpticalParameters::Instance();
 4// 1ステップで生成されるチェレンコフの最大数
 5params->SetMaxNumPhotonsPerStep(100);
 6// 1ステップ内で許容されるβの変化の最大値
 7params->SetMaxBetaChangePerStep(10.0);
 8// 光子トラッキングのタイミング(true: 即座、false: 後回し)
 9params->SetCerenkovTrackSecondariesFirst(true);
10// スタック追加のタイミング(true: 即座(推奨))
11params->SetCerenkovStackPhotons(true);
12// デバッグ出力の詳細レベル
13params->SetCerenkovVerbosity(0);

チェレンコフ放射の主要なパラメーターとデフォルト値です。 SetMaxNumPhotonsPerStepで、1ステップで生成されるチェレンコフ光子の最大数を設定できます。 非常に多くの光子が生成される場合は、この値を調整しないとシミュレーションが遅くなります。

SetMaxBetaChangePerStepで、1ステップ内で許容されるβの変化率を設定できます。 ステップ内のβの変化率が大きい(例:急な減速など)と、チェレンコフ光子の生成数が不正確になるため調整が必要です。 デフォルトの10は「制限なし」に近い値です。 精度が必要な場合は0.01〜0.1程度にするとよいそうです。

SetTrackSecondariesFirstで、光子トラッキングのタイミングを設定できます。 SetCerenkovStackPhotonsで、生成された光子をイベントに追加するタイミングを設定できます。 どちらもtrueが推奨されています。

物質に屈折率(RINDEX)が設定されているボリュームで生成されます。

設定値を確認したい

1G4OpticalParameters::Instance()->GetCerenkovMaxPhotonsPerStep(); // 100
2G4OpticalParameters::Instance()->GetCerenkovMaxBetaChange();     // 10.0
3G4OpticalParameters::Instance()->GetCerenkovTrackSecondariesFirst(); // true

プロパティしたい

プロパティ名

種類

説明

単位

RINDEX

Energy-dependent

屈折率

なし

マクロで設定したい(/process/optical/cerenkov/

/process/optical/cerenkov/setMaxPhotons 100
/process/optical/cerenkov/setMaxBetaChange 10.0
/process/optical/cerenkov/setStackPhotons true
/process/optical/cerenkov/setTrackSecondariesFirst true
/process/optical/cerenkov/verbose 1  # initialisation

チェレンコフ放射の設定はマクロでもできます。 上の値は、それぞれの設定のデフォルト値です。

チェレンコフ光を記録したい

 1G4bool MyProcessHits(G4Step* step, G4TouchableHistory*) {
 2    // トラックを取得
 3    G4Track* track = step->GetTrack();
 4
 5    // チェレンコフ光だけを記録
 6    if (track->GetDefinition() != G4OpticalPhoton::Definition())
 7    {
 8        return false;
 9    }
10
11    // チェレンコフ光の生成プロセス名を確認
12    if (track->GetCreatorProcess() &&
13        track->GetCreatorProcess()->GetProcessName() != "Cerenkov")
14    {
15        return false;
16    }
17
18    // ...記録したい情報を取得...

トラックの粒子の種類と生成プロセスを確認して、チェレンコフ光かどうかは判別できます。 G4VSensitiveDetector::ProcessHitsを継承したMyProcessHitsの中に書くのがよいと思います。

注釈

G4OpticalPhotonは、エネルギーの小さな光子(1.5eV〜6.2eV)を指します。

チェレンコフ光を数えたい(GetNumPhotons

1G4int n_photons = cerenkov->GetNumPhotons();