Step processing method.
48 const G4TouchableHistory* touchable =
dynamic_cast<const G4TouchableHistory*
>(
step->GetPreStepPoint()->GetTouchable());
49 int ladderID = touchable->GetVolume(2)->GetCopyNo();
50 int sensorID = touchable->GetVolume(1)->GetCopyNo();
53 const G4Track& track = *
step->GetTrack();
54 const int trackID = track.GetTrackID();
55 const int pdgCode =
step->GetTrack()->GetDefinition()->GetPDGEncoding();
57 double depEnergy =
step->GetTotalEnergyDeposit();
62 const G4StepPoint& preStep = *
step->GetPreStepPoint();
63 const G4StepPoint& postStep = *
step->GetPostStepPoint();
66 if (
m_tracks.empty() || (!
m_tracks.top().check(trackID, ladderID, sensorID))) {
70 SensorTraversal& traversal =
m_tracks.top();
73 if (traversal.getTrackID() == 0) {
76 const G4ThreeVector preStepPos = preStep.GetPosition() / CLHEP::mm *
Unit::mm;
77 const G4ThreeVector preStepMom = preStep.GetMomentum() / CLHEP::MeV *
Unit::MeV;
79 const G4AffineTransform& localToGlobalTransform = preStep.GetTouchableHandle()->GetHistory()->GetTopTransform();
80 const G4ThreeVector localpreStepPos = localToGlobalTransform.TransformPoint(preStep.GetPosition()) / CLHEP::mm *
Unit::mm;
81 const double time = preStep.GetGlobalTime() / CLHEP::ns *
Unit::ns;
82 traversal.setInitial(trackID, ladderID, sensorID, pdgCode, isPrimary, preStepPos, localpreStepPos, preStepMom, time);
84 if (preStep.GetStepStatus() == fGeomBoundary) traversal.hasEntered();
87 const G4ThreeVector postStepPos = postStep.GetPosition() / CLHEP::mm *
Unit::mm;
88 const double length =
step->GetStepLength() / CLHEP::cm *
Unit::cm;
89 traversal.add(postStepPos, depEnergy, length);
92 bool isLeaving = (postStep.GetStepStatus() == fGeomBoundary);
93 if (isLeaving) traversal.hasLeft();
96 if (isLeaving || track.GetTrackStatus() >= fStopAndKill) {
97 bool contained = traversal.isContained();
100 if (saved && !contained) {
@ c_PrimaryParticle
bit 0: Particle is primary particle.
static Payload getInfo(Carrier &obj)
Static function to just return UserInformation attached to the obj of type Carrier.
static const double mm
[millimeters]
static const double MeV
[megaelectronvolt]
static const double cm
Standard units with the value = 1.
static const double ns
Standard of [time].
static const double GeV
Standard of [energy, momentum, mass].
bool finishTrack()
finish a track
std::stack< SensorTraversal > m_tracks
Stack of tracks to keep track of particles.
bool step(G4Step *step, G4TouchableHistory *) override
Step processing method.