A G4Step object consists of two points: G4StepPoint* point1 = step->GetPreStepPoint(); G4StepPoint* point2 = step->GetPostStepPoint(); To get their positions in the global coordinate system: G4ThreeVector pos1 = point1->GetPosition(); G4ThreeVector pos2 = point2->GetPosition(); Hereafter we call 'current volume' the volume where the step has just gone through. Geometrical informations are available from preStepPoint. G4VTouchable and its derivates keep these geometrical informations: G4TouchableHandle touch1 = point1->GetTouchableHandle(); To get the current volume: G4VPhysicalVolume* volume = touch1->GetVolume(); To get its name: G4String name = volume->GetName(); To get copy number: G4int copyNumber = touch1->GetCopyNumber(); To get logical volume: G4LogicalVolume* lVolume = volume->GetLogicalVolume(); To get material: the following statements are equivalent G4Material* material = point1 ->GetMaterial(); G4Material* material = lVolume ->GetMaterial(); To get region: G4Region* region = lVolume->GetRegion(); To get mother volume: G4VPhysicalVolume* mother = touch1->GetVolume(depth=1); grandMother: depth=2 ...etc... To get copy number of mother: G4int copyNumber = touch1->GetCopyNumber(depth=1); grandMother: depth=2 ...etc... To get the process which has limited the current step: G4VProcess* aProcess = point2->GetProcessDefinedStep(); To check that particle has just entered in the current volume: ie. is at the first step in the volume; the preStepPoint is at boundary if (point1->GetStepStatus() == fGeomBoundary) To check that particle is leaving the current volume: ie. is at the last step in the volume; the postStepPoint is at boundary if (point2->GetStepStatus() == fGeomBoundary) In the above situation, get touchable of the next volume: G4TouchableHandle touch2 = point2->GetTouchableHandle(); From touch2, all informations on the next volume as above. Physics quantities are available from step (G4Step) or track (G4Track). To get energy deposition, step length, displacement and time of flight spent by this step: G4double eDeposit = step->GetTotalEnergyDeposit(); G4double sLength = step->GetStepLength(); G4ThreeVector displace = step->GetDeltaPosition(); G4double tof = step->GetDeltaTime(); To get momentum, kinetic energy and global time (time since the beginning of the event) of the track after the completion of the current step: G4Track* track = step->GetTrack(); G4ThreeVector momentum = track->GetMomentum(); G4double kinEnergy = track->GetKineticEnergy(); G4double globalTime = track->GetGlobalTime(); ...etc... Additional remark. To transform position from the global coordinate system to the local system of current volume, use preStepPoint transformation: G4ThreeVector localPosi = touch1->GetHistory()->GetTopTransform().TransformPoint(position);