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 // Author: Jonathan Madsen (May 28th 2020) 27 // 28 // class description: 29 // This is a class creates a G4RunManager instance. Once can specify an 30 // enumerated value to set the default. If "G4RunManagerType::Default" 31 // is used, 32 // 33 34 #ifndef G4RunManagerFactory_hh 35 #define G4RunManagerFactory_hh 1 36 37 #include "G4MTRunManager.hh" 38 #include "G4RunManager.hh" 39 #include "G4TaskRunManager.hh" 40 #include "G4Types.hh" 41 #include "G4VUserTaskQueue.hh" 42 43 #include <map> 44 #include <regex> 45 #include <set> 46 #include <string> 47 48 //============================================================================// 49 50 enum class G4RunManagerType : G4int 51 { 52 Serial = 0, 53 SerialOnly = 1, 54 MT = 2, 55 MTOnly = 3, 56 Tasking = 4, 57 TaskingOnly = 5, 58 TBB = 6, 59 TBBOnly = 7, 60 SubEvt = 8, 61 SubEvtOnly = 9, 62 Default 63 }; 64 65 //============================================================================// 66 67 class G4RunManagerFactory 68 { 69 public: 70 static G4RunManager* CreateRunManager(G4RunManagerType _type = G4RunManagerType::Default, 71 G4VUserTaskQueue* _queue = nullptr, 72 G4bool fail_if_unavail = true, G4int nthreads = 0); 73 74 // provide a version which specifies to fail if unavailable 75 static G4RunManager* CreateRunManager(G4RunManagerType _type, G4bool fail_if_unavail, 76 G4int nthreads = 0, G4VUserTaskQueue* _queue = nullptr) 77 { 78 return CreateRunManager(_type, _queue, fail_if_unavail, nthreads); 79 } 80 81 static G4RunManager* CreateRunManager(G4RunManagerType _type, G4int nthreads, 82 G4bool fail_if_unavail = true, 83 G4VUserTaskQueue* _queue = nullptr) 84 { 85 return CreateRunManager(_type, _queue, fail_if_unavail, nthreads); 86 } 87 88 // provide string versions of above 89 template<typename... Args> 90 static G4RunManager* CreateRunManager(std::string type, Args&&... args) 91 { 92 return CreateRunManager(GetType(type), std::forward<Args>(args)...); 93 } 94 95 static std::string GetDefault(); 96 static std::string GetName(G4RunManagerType); 97 static G4RunManagerType GetType(const std::string&); 98 static std::set<std::string> GetOptions(); 99 static G4RunManager* GetMasterRunManager(); 100 static G4MTRunManager* GetMTMasterRunManager(); 101 static G4RunManagerKernel* GetMasterRunManagerKernel(); 102 }; 103 104 #endif // G4TaskRunManagerCreator_h 105