LArSoft  v09_90_00
Liquid Argon Software toolkit - https://larsoft.org/
FissionFragment.cc
Go to the documentation of this file.
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 // -------------------------------------------------------------
27 // GEANT4 FF_Neutron_HP
28 //
29 // Command line options:
30 // -i ARG : run in batch mode from script file ARG
31 // -o ARG : write output to file ARG
32 // (defaults to FF_Neutron_HP.out)
33 // -n ARG : multithreading with ARG number of threads
34 // (only works if Geant4 was compiled with
35 // multithreading enables)
36 //
37 // =============== Begin Documentation Comments ===============
53 // ================ End Documentation Comments ================
54 //
55 // Modified:
56 //
57 // 23-06-14 BWendt
58 // Added check for NeutronHP fission generator environment variable
59 //
60 // -------------------------------------------------------------
61 
62 #include "globals.hh"
63 
64 #ifdef G4MULTITHREADED
65 #include "G4MTRunManager.hh"
66 #else
67 #include "G4RunManager.hh"
68 #endif // G4MULTITHREADED
69 
70 #include "G4UImanager.hh"
71 #include "QGSP_BIC_HP.hh"
72 #include "Randomize.hh"
73 
74 #include "FFDetectorConstruction.hh"
75 #include "FFActionInitialization.hh"
76 
77 #include "G4VisExecutive.hh"
78 #include "G4UIExecutive.hh"
79 
80 
81 // Entry point
82 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
83 int main(int argc, char* argv[])
84 {
85  int result;
86  unsigned int numberOfThreads = 1;
87 
88  G4String scriptFileName = "";
89  G4String outputFileName = "FF_Neutron_HP.out";
90  G4UImanager* UIManager = NULL;
91 
92  char makeFissionFragments[] = "G4NEUTRONHP_PRODUCE_FISSION_FRAGMENTS";
93  char useWendtFission[] = "G4NEUTRON_HP_USE_WENDT_FISSION_MODEL";
94 
95  char Force[] = "G4FORCENUMBEROFTHREADS";
96  if(std::getenv(Force) != NULL) {
97  char doNotForce[]="G4FORCENUMBEROFTHREADS=1";
98  putenv(doNotForce);
99  }
100 
101  // Indicate the example is starting
102  G4cout << "#### Starting: " << argv[0] << " ####" << G4endl;
103 
104  // Verify that NeutronHP is going to create fission fragments
105  // Throw and error if it isn't.
106  if(std::getenv(makeFissionFragments) == NULL)
107  {
108  G4cerr << G4endl << "!!!!" << G4endl;
109  G4cerr << "!!!! Error in example" << argv[0] << G4endl;
110  G4cerr << "!!!! The \"" << makeFissionFragments << "\" "
111  "environment variable is not set!" << G4endl;
112  G4cerr << "!!!! Please set it in order to use this example." << G4endl;
113  G4cerr << "!!!!" << G4endl << G4endl;
114 
115  return EXIT_FAILURE;
116  }
117 
118  // We are trying to use the Wendt fission model in Neutron_HP
119  // Warn the user if the appropriate environment variable is not set up
120  if(std::getenv(useWendtFission) == NULL)
121  {
122  G4cout << G4endl << "!!!!" << G4endl;
123  G4cout << "!!!! Warning in example" << argv[0] << G4endl;
124  G4cout << "!!!! The \"" << useWendtFission << "\" "
125  "environment variable is not set!" << G4endl;
126  G4cout << "!!!! Please set it if you wish to use this fission model, "
127  "otherwise the default fission model will be used" << G4endl;
128  G4cout << "!!!!" << G4endl << G4endl;
129  }
130 
131  // Parse the command line arguments, if any
132  for(int i = 1;
133  i < argc;
134  i += 2)
135  {
136  // Ensure that this is actually a command
137  if(argv[i][0] != '-')
138  {
139  G4cerr << G4endl << "!!!!" << G4endl;
140  G4cerr << "!!!! Error in argument " << i + 1 << G4endl;
141  G4cerr << "!!!! A command-line option was expected, but \""
142  << argv[i] << "\" was found" << G4endl;
143  G4cerr << "!!!! " << argv[0] << " will now terminate" << G4endl;
144  G4cerr << "!!!!" << G4endl << G4endl;
145 
146  return EXIT_FAILURE;
147  }
148 
149  // Ensure that the command-line option has an associated argument
150  if(!(i + 1 < argc))
151  {
152  G4cerr << G4endl << "!!!!" << G4endl;
153  G4cerr << "!!!! Error in argument " << i + 2 << G4endl;
154  G4cerr << "!!!! An argument was expected, but \"" << argv[i + 1]
155  << "\" was found" << G4endl;
156  G4cerr << "!!!! Ensure that a space is used to separate the "
157  "option and argument" << G4endl;
158  G4cerr << "!!!! " << argv[0] << " will now terminate" << G4endl;
159  G4cerr << "!!!!" << G4endl << G4endl;
160 
161  return EXIT_FAILURE;
162  }
163 
164  switch(argv[i][1])
165  {
166  case 'i':
167  scriptFileName = "/control/execute ";
168  scriptFileName.append(argv[i + 1]);
169  break;
170 
171  case 'o':
172  outputFileName = argv[i + 1];
173  break;
174 
175  case 'n':
176  result = sscanf(argv[i + 1],
177  "%u",
178  &numberOfThreads);
179  if(result != 1)
180  {
181  G4cerr << G4endl << "!!!!" << G4endl;
182  G4cerr << "!!!! Error in argument " << i + 2 << G4endl;
183  G4cerr << "!!!! An positive number was expected, but \""
184  << argv[i + 1] << "\" was found" << G4endl;
185  G4cerr << "!!!! " << argv[0] << " will now terminate"
186  << G4endl;
187  G4cerr << "!!!!" << G4endl << G4endl;
188 
189  return EXIT_FAILURE;
190  }
191  break;
192 
193  default:
194  G4cout << G4endl << "!!!!" << G4endl;
195  G4cout << "!!!! Warning for command " << i + 1 << G4endl;
196  G4cout << "!!!! \"" << argv[i] << "\" is not a valid command"
197  << G4endl;
198  G4cout << "!!!! " << argv[0] << " will ignore \"" << argv[i]
199  << "\" and \"" << argv[i + 1] << "\"" << G4endl;
200  G4cout << "!!!!" << G4endl << G4endl;
201  }
202  }
203 
204  // Instantiate G4UIExecutive if interactive mode
205  G4UIExecutive* ui = nullptr;
206  if (scriptFileName.length() == 0) {
207  ui = new G4UIExecutive(argc, argv);
208  }
209 
210  // Set the Random engine
211  // A seed of 62737819 produced a maximum number of 67 events on the
212  // author's system before timing out the nightly test
213  const G4long seed = 62737819;
214 #ifndef NDEBUG
215  G4cout << "MT RNG Seed: " << seed << G4endl;
216 #endif // NDEBUG
217  G4Random::setTheEngine(new CLHEP::MTwistEngine(seed));
218 
219 // The 'runManger' type must be declared here at initialization to provide for
220 // 'SetNumberOfThreads()' method required for multithreading
221 #ifdef G4MULTITHREADED
222  // Initialize the multithreaded run manager
223  G4MTRunManager* const runManager = new G4MTRunManager();
224  runManager->SetNumberOfThreads(numberOfThreads);
225 
226  G4cout << "Multithreading enabled" << G4endl;
227  G4cout << " Threads requested: " << numberOfThreads << G4endl;
228  G4cout << " Threads started: " << runManager->GetNumberOfThreads()
229  << G4endl;
230 #else
231  // Multithreading not available
232  G4RunManager* const runManager = new G4RunManager();
233 #endif // G4MULTITHREADED
234 
235  // Set mandatory initialization classes
236  runManager->SetUserInitialization(new FFDetectorConstruction());
237  runManager->SetUserInitialization(new QGSP_BIC_HP());
238  runManager->SetUserInitialization(new FFActionInitialization());
239 
240  // Initialize the Geant4 kernel
241  runManager->Initialize();
242 
243  // Initialize visualization
244  G4VisManager* visManager = new G4VisExecutive();
245  visManager->Initialize();
246 
247  // Get the pointer to the User Interface manager
248  UIManager = G4UImanager::GetUIpointer();
249 
250  if(!ui)
251  {
252  // Batch mode
253  UIManager->ApplyCommand(scriptFileName);
254  } else
255  {
256  // Interactive mode
257  ui->SessionStart();
258  delete ui;
259  }
260 
261  // Job termination
262  // Free the store: user actions, physics_list and detector_description are
263  // owned and deleted by the run manager, so they should not be deleted
264  // in the main() program !
265  delete visManager;
266  delete runManager;
267 
268  return 0;
269 }
270 
271 
long seed
Definition: chem4.cc:67
int main(int argc, char *argv[])