Geant4 Cross Reference |
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 39 #include "G4ClassificationOfNewTrack.hh" 40 41 class G4StackManager; 42 class G4Track; 43 44 class G4UserStackingAction 45 { 46 public: 47 48 G4UserStackingAction(); 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 57 virtual G4ClassificationOfNewTrack ClassifyNewTrack(const G4Track* aTrack); 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 119