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.