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 // G4VUserActionInitialization 27 // 28 // Class description: 29 // 30 // This is the abstract base class for instantiating all user action classes. 31 // It has a pure virtual method Build() which is invoked by G4RunManager for 32 // sequential execution, and G4WorkerRunManager for multi-threaded execution. 33 // The additional virtual method BuildForMaster() will be invoked from 34 // G4MTRunManager for multi-threaded execution. 35 // 36 // Note that these virtual methods are const. It means the user may construct 37 // user action objects, but should not store the pointers of these objects as 38 // data members of the derived class. 39 // 40 // Note for multi-threaded mode: the only action class the user may set to 41 // G4MTRunManager is a run action. It is then used at the beginning and the 42 // end of a run. It may be the same class or a dedicated class different from 43 // the run action instantiated for G4WorkerRunManager. 44 45 // Author: M.Asai (SLAC), 17 April 2013 46 // -------------------------------------------------------------------- 47 #ifndef G4VUserActionInitialization_hh 48 #define G4VUserActionInitialization_hh 1 49 50 class G4VUserPrimaryGeneratorAction; 51 class G4UserRunAction; 52 class G4UserEventAction; 53 class G4UserStackingAction; 54 class G4UserTrackingAction; 55 class G4UserSteppingAction; 56 class G4VSteppingVerbose; 57 58 class G4VUserActionInitialization 59 { 60 public: 61 G4VUserActionInitialization() = default; 62 virtual ~G4VUserActionInitialization() = default; 63 64 // Virtual method to be implemented by the user to instantiate 65 // user action class objects. 66 virtual void Build() const = 0; 67 68 // Virtual method to be implemented by the user to instantiate user 69 // run action class object to be used by G4MTRunManager. This method 70 // is not invoked in the sequential mode. The user should not use 71 // this method to instantiate user action classes except for user 72 // run action. 73 virtual void BuildForMaster() const {} 74 75 // Virtual method to be implemented by the user if having a concrete 76 // SteppingVerbose class to be used by the worker thread. In this case 77 // one should instantiate a SteppingVerbose in the concrete 78 // implementation of this method and return its pointer. If this method 79 // is not implemented, the default G4SteppingVerbose will be used. 80 // Please note that this method affects only for the worker thread. 81 virtual G4VSteppingVerbose* InitializeSteppingVerbose() const { return nullptr; } 82 83 protected: 84 // These methods should be used to define user's action classes. 85 void SetUserAction(G4VUserPrimaryGeneratorAction*) const; 86 void SetUserAction(G4UserRunAction*) const; 87 void SetUserAction(G4UserEventAction*) const; 88 void SetUserAction(G4UserStackingAction*) const; 89 void SetUserAction(G4UserTrackingAction*) const; 90 void SetUserAction(G4UserSteppingAction*) const; 91 }; 92 93 #endif 94