Tracks and steps How can I access the track information through the step object and what information am I allowed to access ? 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. We retrieve a touchable by creating a handle for it: G4TouchableHandle touch1 = point1->GetTouchableHandle(); To get the current volume: G4VPhysicalVolume* volume = touch1->GetVolume(); To get its name: G4String name = volume->GetName(); To get the physical volume copy number: G4int copyNumber = touch1->GetCopyNumber(); To get logical volume: G4LogicalVolume* lVolume = volume->GetLogicalVolume(); To get the associated material: the following statements are equivalent: G4Material* material = point1 ->GetMaterial(); G4Material* material = lVolume ->GetMaterial(); To get the geometrical region: G4Region* region = lVolume->GetRegion(); To get its mother volume: G4VPhysicalVolume* mother = touch1->GetVolume(depth=1); grandMother: depth=2 ...etc... To get the copy number of the mother volume: 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 the particle has just entered in the current volume (i.e. it is at the first step in the volume; the preStepPoint is at the boundary): if (point1->GetStepStatus() == fGeomBoundary) To check that the particle is leaving the current volume (i.e. it is at the last step in the volume; the postStepPoint is at the boundary): if (point2->GetStepStatus() == fGeomBoundary) In the above situation, to get touchable of the next volume: G4TouchableHandle touch2 = point2->GetTouchableHandle(); From touch2, all informations on the next volume can be retrieved as above. Physics quantities are available from the step (G4Step) or from the track (G4Track). To get the energy deposition, step length, displacement and time of flight spent by the current 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... Remark To transform a position from the global coordinate system to the local system of the current volume, use the preStepPoint transformation, as described in the geometry section above.