データを詰めたい(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に直接聞いています。