Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
G4TrackingManager.cc
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26//
27// $Id$
28//
29//---------------------------------------------------------------
30//
31// G4TrackingManager.cc
32//
33// Contact:
34// Questions and comments to this code should be sent to
35// Katsuya Amako (e-mail: Katsuya.Amako@kek.jp)
36// Takashi Sasaki (e-mail: Takashi.Sasaki@kek.jp)
37//
38//---------------------------------------------------------------
39
40#include "G4TrackingManager.hh"
41#include "G4Trajectory.hh"
42#include "G4SmoothTrajectory.hh"
43#include "G4RichTrajectory.hh"
44#include "G4ios.hh"
46
47//////////////////////////////////////
49//////////////////////////////////////
50 : fpUserTrackingAction(0), fpTrajectory(0),
51 StoreTrajectory(0), verboseLevel(0), EventIsAborted(false)
52{
53 fpSteppingManager = new G4SteppingManager();
54 messenger = new G4TrackingMessenger(this);
55}
56
57///////////////////////////////////////
59///////////////////////////////////////
60{
61 delete messenger;
62 delete fpSteppingManager;
63 if (fpUserTrackingAction) delete fpUserTrackingAction;
64}
65
66////////////////////////////////////////////////////////////////
68////////////////////////////////////////////////////////////////
69{
70
71 // Receiving a G4Track from the EventManager, this funciton has the
72 // responsibility to trace the track till it stops.
73 fpTrack = apValueG4Track;
74 EventIsAborted = false;
75
76 // Clear 2ndary particle vector
77 // GimmeSecondaries()->clearAndDestroy();
78 // std::vector<G4Track*>::iterator itr;
79 size_t itr;
80 // for(itr=GimmeSecondaries()->begin();itr=GimmeSecondaries()->end();itr++){
81 for(itr=0;itr<GimmeSecondaries()->size();itr++){
82 delete (*GimmeSecondaries())[itr];
83 }
84 GimmeSecondaries()->clear();
85
86 if(verboseLevel>0 && (G4VSteppingVerbose::GetSilent()!=1) ) TrackBanner();
87
88 // Give SteppingManger the pointer to the track which will be tracked
89 fpSteppingManager->SetInitialStep(fpTrack);
90
91 // Pre tracking user intervention process.
92 fpTrajectory = 0;
93 if( fpUserTrackingAction != 0 ) {
94 fpUserTrackingAction->PreUserTrackingAction(fpTrack);
95 }
96#ifdef G4_STORE_TRAJECTORY
97 // Construct a trajectory if it is requested
98 if(StoreTrajectory&&(!fpTrajectory)) {
99 // default trajectory concrete class object
100 switch (StoreTrajectory) {
101 default:
102 case 1: fpTrajectory = new G4Trajectory(fpTrack); break;
103 case 2: fpTrajectory = new G4SmoothTrajectory(fpTrack); break;
104 case 3: fpTrajectory = new G4RichTrajectory(fpTrack); break;
105 }
106 }
107#endif
108
109 // Give SteppingManger the maxmimum number of processes
110 fpSteppingManager->GetProcessNumber();
111
112 // Give track the pointer to the Step
113 fpTrack->SetStep(fpSteppingManager->GetStep());
114
115 // Inform beginning of tracking to physics processes
116 fpTrack->GetDefinition()->GetProcessManager()->StartTracking(fpTrack);
117
118 // Track the particle Step-by-Step while it is alive
119 // G4StepStatus stepStatus;
120
121 while( (fpTrack->GetTrackStatus() == fAlive) ||
122 (fpTrack->GetTrackStatus() == fStopButAlive) ){
123
125 fpSteppingManager->Stepping();
126#ifdef G4_STORE_TRAJECTORY
127 if(StoreTrajectory) fpTrajectory->
128 AppendStep(fpSteppingManager->GetStep());
129#endif
130 if(EventIsAborted) {
132 }
133 }
134 // Inform end of tracking to physics processes
136
137 // Post tracking user intervention process.
138 if( fpUserTrackingAction != 0 ) {
139 fpUserTrackingAction->PostUserTrackingAction(fpTrack);
140 }
141
142 // Destruct the trajectory if it was created
143#ifdef G4VERBOSE
144 if(StoreTrajectory&&verboseLevel>10) fpTrajectory->ShowTrajectory();
145#endif
146 if( (!StoreTrajectory)&&fpTrajectory ) {
147 delete fpTrajectory;
148 fpTrajectory = 0;
149 }
150}
151
153{
154#ifndef G4_STORE_TRAJECTORY
155 G4Exception("G4TrackingManager::SetTrajectory()",
156 "Tracking0015", FatalException,
157 "Invoked without G4_STORE_TRAJECTORY option set!");
158#endif
159 fpTrajectory = aTrajectory;
160}
161
162//////////////////////////////////////
164//////////////////////////////////////
165{
167 EventIsAborted = true;
168}
169
170
171void G4TrackingManager::TrackBanner()
172{
173 G4cout << G4endl;
174 G4cout << "*******************************************************"
175 << "**************************************************"
176 << G4endl;
177 G4cout << "* G4Track Information: "
178 << " Particle = " << fpTrack->GetDefinition()->GetParticleName()
179 << ","
180 << " Track ID = " << fpTrack->GetTrackID()
181 << ","
182 << " Parent ID = " << fpTrack->GetParentID()
183 << G4endl;
184 G4cout << "*******************************************************"
185 << "**************************************************"
186 << G4endl;
187 G4cout << G4endl;
188}
189
190
191
192
193
194
195
@ FatalException
@ fKillTrackAndSecondaries
@ fAlive
@ fStopButAlive
#define G4endl
Definition: G4ios.hh:52
G4DLLIMPORT std::ostream G4cout
G4ProcessManager * GetProcessManager() const
const G4String & GetParticleName() const
void StartTracking(G4Track *aTrack=0)
G4StepStatus Stepping()
void SetInitialStep(G4Track *valueTrack)
G4Step * GetStep() const
G4TrackStatus GetTrackStatus() const
void SetTrackStatus(const G4TrackStatus aTrackStatus)
G4int GetTrackID() const
void SetStep(const G4Step *aValue)
G4ParticleDefinition * GetDefinition() const
G4int GetParentID() const
void IncrementCurrentStepNumber()
G4TrackVector * GimmeSecondaries() const
void ProcessOneTrack(G4Track *apValueG4Track)
void SetTrajectory(G4VTrajectory *aTrajectory)
virtual void PostUserTrackingAction(const G4Track *)
virtual void PreUserTrackingAction(const G4Track *)
static G4int GetSilent()
virtual void ShowTrajectory(std::ostream &os=G4cout) const
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41