データを詰めたい(SensorHit::Fill

 1#include "SensorHit.hh"    // 自作のG4VHitクラス
 2
 3#include "G4SystemOfUnit.hh"
 4#include "G4RunManager.hh"
 5#include "G4EventManager.hh"
 6#include "G4Step.hh"
 7
 8void SensorHit::Fill(G4Step *aStep)
 9{
10    // G4Run
11    // G4Event
12    //
13    // G4Step
14    fEnergyDeposit = aStep->GetTotalEnergyDeposit() / MeV;
15
16    // G4StepPoint
17    auto pre_step = aStep->GetPreStepPoint();
18    fStepXYZ = pre_step->GetPosition() / mm;
19    fStepGlobalTime = pre_step->GetGlobalTime() / ns;
20    fStepTotalEnergy = pre_step->GetTotalEnergy() / MeV;
21
22    // G4Track
23    auto track = aStep->GetTrack();
24    fTrackID = track->GetTrackID();
25    fTrackParentID = track->GetParentID();
26    fStepID = track->GetCurrentStepNumber();
27    fTrackLength = track->GetTrackLength() / mm;
28    fStepLength = track->GetStepLength() / mm;
29    fTrackXYZ = track->GetPosition() / mm;
30    fTrackTotalEnergy = track->GetTotalEnergy() / MeV;
31    // fTrackKineticEnergy
32    // fTrackMomentum
33    // fTrackMomentumDirection
34    fVertexXYZ = track->GetVertexPosition() / mm;
35    // fVertexKineticEnergy
36    // fVertexMomentumDirection
37
38    // G4TouchableHistory
39    auto touch = pre_step->GetTouchableHandle();
40    fHistoryDepth = touch->GetHistoryDepth();
41    fCopyNumber = touch->GetCopyNumber();
42    fReplicaNumber = touch->GetReplicaNumber();
43
44    // G4VPhysicalVolume
45    auto pv = pre_step->GetPhysicalVolume();
46    fDetectorID = pv->GetCopyNo();
47    fPVName = pv->GetName();
48
49    // G4LogicalVolume
50    auto lv = pv->GetLogicalVolume();
51    fLVName = lv->GetName();
52
53    // G4ParticleDefinition
54    auto particle = track->GetParticleDefinition();
55    fParticleName = particle->GetParticleName();
56    fParticleID = particle->GetPDGEncoding();
57};

Fillで、G4Stepからアクセスできる物理量を(ほぼ)すべて取得しています。

ラン番号とイベント番号は、ステップからは取得できないため、 G4RunManagerとG4EventManagerに直接聞いています。

リファレンス