LArSoft  v09_90_00
Liquid Argon Software toolkit - https://larsoft.org/
exampleGB04.cc File Reference

Main program of the GB04 example. More...

#include "G4Types.hh"
#include "G4RunManager.hh"
#include "GB04ActionInitialization.hh"
#include "G4UImanager.hh"
#include "GB04DetectorConstruction.hh"
#include "GB04PrimaryGeneratorAction.hh"
#include "FTFP_BERT.hh"
#include "G4GenericBiasingPhysics.hh"
#include "G4VisExecutive.hh"
#include "G4UIExecutive.hh"

Go to the source code of this file.

Functions

int main (int argc, char **argv)
 

Detailed Description

Main program of the GB04 example.

Definition in file exampleGB04.cc.

Function Documentation

int main ( int  argc,
char **  argv 
)

Definition at line 65 of file exampleGB04.cc.

References PrintUsage().

66 {
67  // Evaluate arguments
68  //
69  if ( argc > 5 ) {
70  PrintUsage();
71  return 1;
72  }
73 
74  G4String macro("");
75  G4String onOffBiasing("");
76  if ( argc == 2 ) macro = argv[1];
77  else
78  {
79  for ( G4int i=1; i<argc; i=i+2 )
80  {
81  if ( G4String(argv[i]) == "-m" ) macro = argv[i+1];
82  else if ( G4String(argv[i]) == "-b" ) onOffBiasing = argv[i+1];
83  else
84  {
85  PrintUsage();
86  return 1;
87  }
88  }
89  }
90 
91  if ( onOffBiasing == "" ) onOffBiasing = "on";
92 
93  // Instantiate G4UIExecutive if interactive mode
94  G4UIExecutive* ui = nullptr;
95  if ( macro == "" ) {
96  ui = new G4UIExecutive(argc, argv);
97  }
98 
99  // -- Construct the run manager : MT or sequential one
100 #ifdef G4MULTITHREADED
101  G4MTRunManager * runManager = new G4MTRunManager;
102  G4cout << " ********** Run Manager constructed in MT mode ************ "
103  << G4endl;
104  // -- Choose 4 threads:
105  runManager->SetNumberOfThreads(4);
106 #else
107  G4RunManager * runManager = new G4RunManager;
108  G4cout << " ********** Run Manager constructed in sequential mode ************ "
109  << G4endl;
110 #endif
111 
112  // -- Set mandatory initialization classes
113  GB04DetectorConstruction* detector = new GB04DetectorConstruction();
114  runManager->SetUserInitialization(detector);
115  // -- Select a physics list
116  FTFP_BERT* physicsList = new FTFP_BERT;
117  // -- And augment it with biasing facilities:
118  G4GenericBiasingPhysics* biasingPhysics = new G4GenericBiasingPhysics();
119  if ( onOffBiasing == "on" )
120  {
121  // -- Create list of physics processes to be biased: only brem. in this case:
122  std::vector< G4String > processToBias;
123  processToBias.push_back("eBrem");
124  // -- Pass the list to the G4GenericBiasingPhysics, which will wrap the eBrem
125  // -- process of e- and e+ to activate the biasing of it:
126  biasingPhysics->PhysicsBias("e-", processToBias);
127  biasingPhysics->PhysicsBias("e+", processToBias);
128  physicsList->RegisterPhysics(biasingPhysics);
129  G4cout << " ********************************************************* "
130  << G4endl;
131  G4cout << " ********** processes are wrapped for biasing ************ "
132  << G4endl;
133  G4cout << " ********************************************************* "
134  << G4endl;
135  }
136  else
137  {
138  G4cout << " ************************************************* " << G4endl;
139  G4cout << " ********** processes are not wrapped ************ " << G4endl;
140  G4cout << " ************************************************* " << G4endl;
141  }
142  runManager->SetUserInitialization(physicsList);
143  // -- Action initialization:
144  runManager->SetUserInitialization(new GB04ActionInitialization);
145 
146  // Initialize G4 kernel
147  runManager->Initialize();
148 
149  // Initialize visualization
150  G4VisManager* visManager = new G4VisExecutive;
151  // G4VisExecutive can take a verbosity argument - see /vis/verbose guidance.
152  visManager->Initialize();
153 
154  // Get the pointer to the User Interface manager
155  G4UImanager* UImanager = G4UImanager::GetUIpointer();
156 
157  if ( !ui ) // batch mode
158  {
159  G4String command = "/control/execute ";
160  UImanager->ApplyCommand(command+macro);
161  }
162  else
163  { // interactive mode : define UI session
164  // UImanager->ApplyCommand("/control/execute vis.mac");
165  // if (ui->IsGUI())
166  // UImanager->ApplyCommand("/control/execute gui.mac");
167  ui->SessionStart();
168  delete ui;
169  }
170 
171  delete visManager;
172  delete runManager;
173 
174 
175  return 0;
176 }
void PrintUsage()