forked from GRAPE-balloon/GRAPE-simulation
-
Notifications
You must be signed in to change notification settings - Fork 0
/
startSIM.cc
137 lines (118 loc) · 3.84 KB
/
startSIM.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//
//
// Gamma-RAy Polarimeter Experiment (GRAPE)
// August 2023 Balloon Flight Campaign
// (V1) Created: Mar 2, 2022 by Camden Ertley
// (V2) Created: September 23, 2022 by Camden Ertley
// (V3) Edited: Dec 26, 2022 by Karla Onate Melecio
//
//
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//
//
/// \file startSIM.cc
/// \brief Main program
#include "DetectorConstruction.hh"
#include "ActionInitialization.hh"
#include "PhysicsList.hh"
#include "G4RunManagerFactory.hh"
#include "G4SteppingVerbose.hh"
#include "G4UImanager.hh"
#include "G4UIcommand.hh"
#include "G4VisExecutive.hh"
#include "G4UIExecutive.hh"
#include "Randomize.hh"
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
namespace {
void PrintUsage() {
G4cerr << " Usage: " << G4endl;
G4cerr << " example [-m macro ] [-u UIsession] [-t nThreads] [-vDefault]" << G4endl;
G4cerr << " note: -t option is available only for multi-threaded mode." << G4endl;
}
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
int main(int argc,char** argv)
{
// Evaluate arguments
//
if ( argc > 7 ) {
PrintUsage();
return 1;
}
G4String macro;
G4String session;
#ifdef G4MULTITHREADED
G4int nThreads = 0;
#endif
for ( G4int i=1; i<argc; i=i+2 ) {
if ( G4String(argv[i]) == "-m" ) macro = argv[i+1];
else if ( G4String(argv[i]) == "-u" ) session = argv[i+1];
#ifdef G4MULTITHREADED
else if ( G4String(argv[i]) == "-t" ) {
nThreads = G4UIcommand::ConvertToInt(argv[i+1]);
}
#endif
else {
PrintUsage();
return 1;
}
}
// Detect interactive mode (if no macro provided) and define UI session
//
G4UIExecutive* ui = 0;
if ( ! macro.size() ) {
ui = new G4UIExecutive( argc, argv, session );
}
// Optionally: choose a different Random engine...
//
// G4Random::setTheEngine(new CLHEP::MTwistEngine);
// Construct the default run manager
//
auto* runManager =
G4RunManagerFactory::CreateRunManager( G4RunManagerType::Default );
#ifdef G4MULTITHREADED
if ( nThreads > 0 ) {
runManager->SetNumberOfThreads( nThreads );
}
#endif
// Set mandatory initialization classes
//
auto detConstruction = new grape::DetectorConstruction();
runManager->SetUserInitialization( detConstruction );
auto physList = new grape::PhysicsList();
runManager->SetUserInitialization( physList );
auto actionInitialization = new grape::ActionInitialization();
runManager->SetUserInitialization( actionInitialization );
// Initialize visualization
//
auto visManager = new G4VisExecutive;
// G4VisExecutive can take a verbosity argument - see /vis/verbose guidance.
// G4VisManager* visManager = new G4VisExecutive("Quiet");
visManager->Initialize();
// Get the pointer to the User Interface manager
auto UImanager = G4UImanager::GetUIpointer();
// Process macro or start UI session
//
if ( macro.size() ) {
// batch mode
G4String command = "/control/execute ../macros/"; //! only name of macro file needs to be input if running ./startSIM from build dir
UImanager->ApplyCommand(command+macro);
}
else {
// interactive mode : define UI session
UImanager->ApplyCommand("/control/execute ../macros/init_vis.mac");
// if (ui->IsGUI()) {
// UImanager->ApplyCommand("/control/execute macros/gui.mac");
// }
ui->SessionStart();
delete ui;
}
// Job termination
// Free the store: user actions, physics_list and detector_description are
// owned and deleted by the run manager, so they should not be deleted
// in the main() program !
delete visManager;
delete runManager;
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%