LArSoft  v07_13_02
Liquid Argon Software toolkit - http://larsoft.org/
OpNovice.cc File Reference

Main program of the OpNovice example. More...

#include "G4RunManager.hh"
#include "G4UImanager.hh"
#include "OpNovicePhysicsList.hh"
#include "OpNoviceDetectorConstruction.hh"
#include "OpNoviceActionInitialization.hh"

Go to the source code of this file.

Functions

int main (int argc, char **argv)
 

Detailed Description

Main program of the OpNovice example.

Definition in file OpNovice.cc.

Function Documentation

int main ( int  argc,
char **  argv 
)

Definition at line 80 of file OpNovice.cc.

References PrintUsage(), and session.

81 {
82  // Evaluate arguments
83  //
84  if ( argc > 9 ) {
85  PrintUsage();
86  return 1;
87  }
88 
89  G4String macro;
91 #ifdef G4MULTITHREADED
92  G4int nThreads = 0;
93 #endif
94 
95  G4long myseed = 345354;
96  for ( G4int i=1; i<argc; i=i+2 ) {
97  if ( G4String(argv[i]) == "-m" ) macro = argv[i+1];
98  else if ( G4String(argv[i]) == "-u" ) session = argv[i+1];
99  else if ( G4String(argv[i]) == "-r" ) myseed = atoi(argv[i+1]);
100 #ifdef G4MULTITHREADED
101  else if ( G4String(argv[i]) == "-t" ) {
102  nThreads = G4UIcommand::ConvertToInt(argv[i+1]);
103  }
104 #endif
105  else {
106  PrintUsage();
107  return 1;
108  }
109  }
110 
111  // Choose the Random engine
112  //
113  G4Random::setTheEngine(new CLHEP::RanecuEngine);
114 
115  // Construct the default run manager
116  //
117 #ifdef G4MULTITHREADED
118  G4MTRunManager * runManager = new G4MTRunManager;
119  if ( nThreads > 0 ) runManager->SetNumberOfThreads(nThreads);
120 #else
121  G4RunManager * runManager = new G4RunManager;
122 #endif
123 
124  // Seed the random number generator manually
125  G4Random::setTheSeed(myseed);
126 
127  // Set mandatory initialization classes
128  //
129  // Detector construction
130  runManager-> SetUserInitialization(new OpNoviceDetectorConstruction());
131  // Physics list
132  runManager-> SetUserInitialization(new OpNovicePhysicsList());
133  // User action initialization
134  runManager->SetUserInitialization(new OpNoviceActionInitialization());
135 
136  // Initialize G4 kernel
137  //
138  runManager->Initialize();
139 
140 #ifdef G4VIS_USE
141  // Initialize visualization
142  //
143  G4VisManager* visManager = new G4VisExecutive;
144  // G4VisExecutive can take a verbosity argument - see /vis/verbose guidance.
145  // G4VisManager* visManager = new G4VisExecutive("Quiet");
146  visManager->Initialize();
147 #endif
148 
149  // Get the pointer to the User Interface manager
150  //
151  G4UImanager* UImanager = G4UImanager::GetUIpointer();
152 
153  if ( macro.size() ) {
154  // Batch mode
155  G4String command = "/control/execute ";
156  UImanager->ApplyCommand(command+macro);
157  }
158  else // Define UI session for interactive mode
159  {
160 #ifdef G4UI_USE
161  G4UIExecutive * ui = new G4UIExecutive(argc,argv,session);
162 #ifdef G4VIS_USE
163  UImanager->ApplyCommand("/control/execute vis.mac");
164 #else
165  UImanager->ApplyCommand("/control/execute OpNovice.in");
166 #endif
167  if (ui->IsGUI())
168  UImanager->ApplyCommand("/control/execute gui.mac");
169  ui->SessionStart();
170  delete ui;
171 #endif
172  }
173 
174  // Job termination
175  // Free the store: user actions, physics_list and detector_description are
176  // owned and deleted by the run manager, so they should not
177  // be deleted in the main() program !
178 
179 #ifdef G4VIS_USE
180  delete visManager;
181 #endif
182  delete runManager;
183 
184  return 0;
185 }
static G4UIterminal * session
void PrintUsage()