チェレンコフ放射したい(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
プロパティしたい
プロパティ名 |
種類 |
説明 |
単位 |
---|---|---|---|
|
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();