71 G4StepPoint* preStepPoint = aStep->GetPreStepPoint();
72 G4StepStatus preStepStatus = preStepPoint->GetStepStatus();
73 if (preStepStatus != G4StepStatus::fGeomBoundary)
79 G4ThreeVector globalPos = preStepPoint->GetPosition();
80 G4ThreeVector globalMom = preStepPoint->GetMomentum();
85 G4VSolid* preStepSolid = preStepPoint->GetPhysicalVolume()->GetLogicalVolume()->GetSolid();
87 G4ThreeVector surfaceNormal = preStepSolid->SurfaceNormal(posLocal);
93 G4ThreeVector radius(posLocal.x(), posLocal.y(), 0);
94 if (radius.dot(surfaceNormal) < 0)
95 {surfaceNormal *= -1;}
99 G4double dotProduct = surfaceNormal.dot(localPosMom.
PreStepPoint());
100 G4bool leavingBeamPipe = dotProduct >= 0;
101 if (!leavingBeamPipe)
105 G4ThreeVector momLocalUnit = momLocal.unit();
106 G4double x = posLocal.x();
107 G4double y = posLocal.y();
109 G4int beamlineIndex = -1;
120 S = info->
GetSPos() + posLocal.z();
121 beamlineIndex = info->GetBeamlineIndex();
125 {UpdateParams(theInfo);}
128 G4ThreeVector unitDir = globalMom.unit();
129 G4ThreeVector newPos = globalPos + 1e-3*unitDir;
133 {UpdateParams(theInfo);}
137 G4Track* track = aStep->GetTrack();
138 G4int nElectrons = track->GetDynamicParticle()->GetTotalOccupancy();
140 preStepPoint->GetKineticEnergy(),
146 preStepPoint->GetWeight(),
147 preStepPoint->GetGlobalTime(),
148 track->GetDefinition()->GetPDGEncoding(),
150 track->GetParentID(),