-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathexampleB4c.cc
More file actions
163 lines (132 loc) · 4.16 KB
/
exampleB4c.cc
File metadata and controls
163 lines (132 loc) · 4.16 KB
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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
#include "OpNovicePhysicsList.hh"
#include "ConfigFile.hh"
#include "DetectorConstruction_planar.hh"
#include "OpNoviceDetectorConstruction_longtile.hh"
#include "B4cActionInitialization.hh"
#ifdef G4MULTITHREADED
#include "G4MTRunManager.hh"
#else
#include "G4RunManager.hh"
#endif
#include "G4UImanager.hh"
#include "G4UIcommand.hh"
#include "FTFP_BERT.hh"
#include "Randomize.hh"
#include "G4VisExecutive.hh"
#include "G4UIExecutive.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
namespace {
void PrintUsage() {
G4cerr << " Usage: " << G4endl;
G4cerr << " ./exampleB4c [filename.cfg]" << G4endl;
G4cerr << " note: cfg is mandatory (default template.cfg)"
<< G4endl;
}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
int main(int argc,char** argv)
{
// Evaluate arguments
//
if ( argc == 1 || argc >= 3)
{
PrintUsage();
return 1;
}
//G4String macro;
G4String session;
#ifdef G4MULTITHREADED
G4int nThreads = 4;
#endif
std::string configFileName = argv[1];
ConfigFile config(configFileName);
// Detect interactive mode (if no macro provided) and define UI session
//
G4int Nevents=0;
if (config.keyExists("Nevents"))
Nevents = config.read<int> ("Nevents");
G4long myseed = 0;//time(NULL);
if (config.keyExists("Seed"))
myseed= config.read<int> ("Seed");
G4UIExecutive* ui = 0;
if ( Nevents<=0 /*! macro.size()*/ )
{
ui = new G4UIExecutive(argc, argv);
}
// Choose the Random engine
//
G4Random::setTheEngine(new CLHEP::RanecuEngine);
G4Random::setTheSeed(myseed);
// Construct the default run manager
//
#ifdef G4MULTITHREADED
G4MTRunManager * runManager = new G4MTRunManager;
if ( nThreads > 0 )
{
runManager->SetNumberOfThreads(nThreads);
}
#else
G4RunManager * runManager = new G4RunManager;
#endif
// Set the geometry
//
G4String geometry;
if (config.keyExists("geometry"))
geometry = config.read<std::string> ("geometry");
else
{
G4cerr<<"WARNING: geometry not set, default geometry: planar"<<G4endl;
geometry = "planar";
}
if(geometry == "planar" || geometry == "Planar" || geometry == "PLANAR")
runManager-> SetUserInitialization(new DetectorConstruction_planar(configFileName));
else
if(geometry == "longtile" || geometry == "Longtile" || geometry == "LONGTILE")
runManager-> SetUserInitialization(new OpNoviceDetectorConstruction_longtile(configFileName));
else
{
G4cerr<<"ERROR: geometry "<<geometry<<" is NOT VALID!"<<G4endl;
exit(EXIT_FAILURE);
}
//Initialize physics list
//G4VModularPhysicsList* physicsList = new FTFP_BERT;
runManager->SetUserInitialization(new OpNovicePhysicsList());
//Initialize ActionInizializiation which initializes the other required classes
B4cActionInitialization* actionInitialization = new B4cActionInitialization(configFileName);
runManager->SetUserInitialization(actionInitialization);
// Get the pointer to the User Interface manager
G4UImanager* UImanager = G4UImanager::GetUIpointer();
// Process macro or start UI session
//
if ( Nevents > 0 /*macro.size()*/ )
{
// batch mode
//G4String command = "/control/execute ";
//UImanager->ApplyCommand(command+macro);
runManager->Initialize();
runManager->BeamOn(Nevents);
}
else
{
// Initialize visualization
G4VisManager* visManager = new G4VisExecutive;
// G4VisExecutive can take a verbosity argument - see /vis/verbose guidance.
// G4VisManager* visManager = new G4VisExecutive("Quiet");
visManager->Initialize();
// interactive mode : define UI session
UImanager->ApplyCommand("/control/execute init_vis.mac");
if (ui->IsGUI())
{
UImanager->ApplyCommand("/control/execute gui.mac");
}
ui->SessionStart();
delete ui;
delete visManager;
}
// 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 runManager;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.....