Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
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: [email protected])
36// Takashi Sasaki (e-mail: [email protected])
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