Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4UserStackingAction.hh
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// G4UserStackingAction
27//
28// Class description:
29//
30// This is the base class of one of the user's optional action classes.
31// This class gives the hooks for G4StackManager which controls the stacks
32// of G4Track objects
33
34// Author: Makoto Asai (SLAC)
35// --------------------------------------------------------------------
36#ifndef G4UserStackingAction_hh
37#define G4UserStackingAction_hh 1
38
40
41class G4StackManager;
42class G4Track;
43
45{
46 public:
47
49 virtual ~G4UserStackingAction() = default;
50
51 inline void SetStackManager(G4StackManager* value) { stackManager=value; }
52
53 // ---------------------------------------------------------------
54 // vitual methods to be implemented by user
55 // ---------------------------------------------------------------
56
58 //
59 // Reply G4ClassificationOfNewTrack determined by the newly
60 // coming G4Track.
61 //
62 // enum G4ClassificationOfNewTrack
63 // {
64 // fUrgent, // put into the urgent stack
65 // fWaiting, // put into the waiting stack
66 // fPostpone, // postpone to the next event
67 // fKill // kill without stacking
68 // }
69 //
70 // The parent_ID of the track indicates the origin of it:
71 //
72 // G4int parent_ID = aTrack->get_parentID();
73 //
74 // parent_ID = 0 : primary particle
75 // > 0 : secondary particle
76 // < 0 : postponed from the previous event
77
78 virtual void NewStage();
79 //
80 // This method is called by G4StackManager when the urgentStack
81 // becomes empty and contents in the waitingStack are transferred
82 // to the urgentStack.
83 // Note that this method is not called at the begining of each
84 // event, but "PrepareNewEvent()" is called.
85 //
86 // In case re-classification of the stacked tracks is needed,
87 // use the following method to request to G4StackManager:
88 //
89 // stackManager->ReClassify();
90 //
91 // All of the stacked tracks in the waitingStack will be re-classified
92 // by "ClassifyNewTrack()" method.
93 // To abort current event, use the following method:
94 //
95 // stackManager->clear();
96 //
97 // Note that this way is valid and safe only for the case it is called
98 // from this user class. The more global way of event abortion is:
99 //
100 // G4UImanager * UImanager = G4UImanager::GetUIpointer();
101 // UImanager->ApplyCommand("/event/abort");
102
103 virtual void PrepareNewEvent();
104 //
105 // This method is called by G4StackManager at the beginning of
106 // each event.
107 // Be careful that the 'urgentStack' and the 'waitingStack' of
108 // G4StackManager are empty at this moment, because this method
109 // is called before accepting primary particles. Also, note that
110 // the 'postponeStack' of G4StackManager may have some postponed
111 // tracks.
112
113 protected:
114
115 G4StackManager* stackManager = nullptr; // Not owned
116};
117
118#endif
virtual G4ClassificationOfNewTrack ClassifyNewTrack(const G4Track *aTrack)
virtual void PrepareNewEvent()
void SetStackManager(G4StackManager *value)
G4StackManager * stackManager
virtual ~G4UserStackingAction()=default