多機能検出器したい(G4MultiFunctionalDetector
)
1G4MultiFunctionalDetector *detector = new G4MultiFunctionalDetector("検出器の名前");
2
3G4String filter_name, particle_name;
4G4SDParticleFilter *electron_filter = new G4SDParticleFilter(filter_name="electronFilter", particle_name="e-");
5
6G4VPrimitiveScorer *primitive;
7// エネルギー損失(=ステップごとのエネルギー損失の総和)
8primitive = new G4PSEnergyDeposit("energy_deposit");
9primitive->SetFilter(electron_filter);
10detector->RegisterPrimitive(primitive);
11
12// ボリューム内で生成された二次粒子の数
13primitive = new G4PSNofSecondary("n_secondary");
14primitive->SetFilter(electron_filter);
15detector->RegisterPrimitive(primitive);
G4MultiFunctionalDetector
はG4VSensitiveDetector
クラスを継承した簡易的なSensitive Detectorです。
G4VSDFilter
の派生クラスとG4VPrimitiveScorer
の派生クラスを追加することでスコアリングできます。
G4MultiFunctionalDetector and G4VPrimitiveScorerを参照してください。
スコアリングしたい(G4VPrimitiveScorer
)
1G4VPrimitiveScorer *primitive;
2
3// トラックの長さ(=セル内のステップ長の総和)
4primitive = new G4PSTrackLength("track_length");
5// トラックの長さ(=セル内を通過した粒子のステップ長の総和)
6primitive = new G4PSPassageTrackLength("passage_track_length");
7
8// エネルギー損失(=ステップごとのエネルギー損失の総和)
9primitive = new G4PSEnergyDeposit("energy_deposit");
10
11// ボリューム内の粒子数(=通過した粒子のトラック数)
12primitive = new G4PSPassageCurrent("passage_current");
13// ボリュームあたりのフラックス(=ボリューム内のトラック長/ボリュームの体積)
14primitive = new G4PSCellFlux("cell_flux");
15// ボリュームあたりのフラックス(=ボリューム内を通過した粒子のトラック長/ボリュームの体積)
16primitive = new G4PSPassageCellFlux("passage_cell_flux");
17
18// 生成された二次粒子の数
19primitive = new G4PSNofSecondary("n_secondary");
20// ステップ数
21primitive = new G4PSNofStep("n_step");
22// セル内の電荷(=ボリューム内で停止した粒子の電荷の総和)
23primitive = new G4PSCellCharge("cell_charge");
フィルターしたい(G4SDParticleFilter
)
1G4SDParticleFilter *gamma_filter = new G4SDParticleFilter("gammaFilter", "gamma");
2G4SDParticleFilter *electron_filter = new G4SDParticleFilter("electronFilter", "e-");
3G4SDParticleFilter *positron_filter = new G4SDParticleFilter("positronFilter", "e+");
4
5G4SDParticleFilter *ep_filter = new G4SDParticleFilter("epFilter");
6ep_filter->add("e-");
7ep_filter->add("e+");
8
9G4SDParticleFilter *charged_filter = new G4SDChargedFilter("chargedFilter");
10G4SDParticleFilter *neutral_filter = new G4SDNeutralFilter("neutralFilter");
G4SDParticleFilter
で、粒子の種類を絞るフィルターを作成できます。
gamma_filter
を通すと、ガンマ線だけが測定できます。
add("粒子名")
で複数の粒子を対象とするフィルターを作成できます。
そのほかにも電荷フィルター(G4SDChargedFilter
とG4SDNeutralFilter
)、
運動エネルギーフィルター(G4SDKineticEnergyFilter
)、
粒子&運動ネルギーフィルター(G4SDParticleWithEnergyFilter
)があります。