多機能検出器したい(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);

G4MultiFunctionalDetectorG4VSensitiveDetectorクラスを継承した簡易的な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("粒子名")で複数の粒子を対象とするフィルターを作成できます。

そのほかにも電荷フィルター(G4SDChargedFilterG4SDNeutralFilter)、 運動エネルギーフィルター(G4SDKineticEnergyFilter)、 粒子&運動ネルギーフィルター(G4SDParticleWithEnergyFilter)があります。