42 const G4StepPoint *preStep=aStep->GetPreStepPoint();
43 const G4VPhysicalVolume *preVol=preStep->GetPhysicalVolume();
44 const G4StepPoint *postStep=aStep->GetPostStepPoint();
45 const G4VPhysicalVolume *postVol=postStep->GetPhysicalVolume();
47 if (preVol==postVol) {
return false; }
49 const G4Track *track(aStep->GetTrack());
52 int pdgcode = (track->GetDefinition())?track->GetDefinition()->GetPDGEncoding():0;
53 if (track->GetDefinition() == G4Geantino::Definition() ) pdgcode=999;
54 if (track->GetDefinition() == G4ChargedGeantino::Definition() ) pdgcode=998;
57 G4ThreeVector pos=postStep->GetPosition();
58 G4ThreeVector mom=postStep->GetMomentum();
63 const G4TouchableHistory* touchHist =
static_cast<const G4TouchableHistory*
>(preStep->GetTouchable());
64 const G4AffineTransform trans = track->GetTouchable()->GetHistory()->GetTopTransform();
65 G4ThreeVector localPos=trans.TransformPoint(pos);
66 G4ThreeVector localMom=mom;
67 trans.ApplyAxisTransform(localMom);
68 const G4VSolid *shape= touchHist->GetSolid();
69 const G4ThreeVector normal=shape->SurfaceNormal(localPos);
71 if(normal.dot(localPos)>=0.)
return false;
75 const double ener=postStep->GetTotalEnergy();
78 const double time=postStep->GetGlobalTime();
100 if (!track) { G4cout <<
"ERROR: the track pointer was zero" << G4endl;
return; }
102 G4VPhysicalVolume *preVol=track->GetVolume();
104 const int pdgcode = (track->GetDefinition())?track->GetDefinition()->GetPDGEncoding():0;
106 const G4ThreeVector pos = originPos?track->GetVertexPosition():track->GetPosition();
107 const double ener=originMom?(track->GetVertexKineticEnergy()+track->GetDynamicParticle()->GetMass()):track->GetTotalEnergy();
108 G4ThreeVector mom = track->GetMomentum();
110 double mommag = std::sqrt(std::pow(ener,2)-std::pow(track->GetDynamicParticle()->GetMass(),2));
111 mom = track->GetVertexMomentumDirection()*mommag;
114 const double time=track->GetGlobalTime();
129 preVol ? preVol->GetName() :
"Unknown");