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