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

Main program of the biasing/B02 example. More...

#include <iostream>
#include <stdlib.h>
#include "G4Types.hh"
#include "G4RunManager.hh"
#include "G4VPhysicalVolume.hh"
#include "G4UImanager.hh"
#include "G4GeometryManager.hh"
#include "B02DetectorConstruction.hh"
#include "B02ImportanceDetectorConstruction.hh"
#include "FTFP_BERT.hh"
#include "G4ImportanceBiasing.hh"
#include "G4ParallelWorldPhysics.hh"
#include "B02ActionInitialization.hh"
#include "G4GeometrySampler.hh"
#include "G4IStore.hh"
#include "G4VWeightWindowStore.hh"
#include "G4WeightWindowAlgorithm.hh"

Go to the source code of this file.

Functions

int main (int argc, char **argv)
 

Detailed Description

Main program of the biasing/B02 example.

Definition in file exampleB02.cc.

Function Documentation

int main ( int  argc,
char **  argv 
)

Definition at line 85 of file exampleB02.cc.

86 {
87  G4int mode = 0;
88  if (argc>1) mode = atoi(argv[1]);
89  if(mode != 0) {
90  G4cout << " mode not used yet, refer to B01 to see WeightWindow technique "
91  << mode << G4endl;
92  }
93 
94  G4int numberOfEvents = 100;
95  G4long myseed = 345354;
96 
97 #ifdef G4MULTITHREADED
98  G4MTRunManager * runManager = new G4MTRunManager;
99  G4cout << " Number of cores: " << G4Threading::G4GetNumberOfCores() << G4endl;
100  G4cout << " but using two! " << G4endl;
101  runManager->SetNumberOfThreads(2);
102  // runManager->SetNumberOfThreads(G4Threading::G4GetNumberOfCores());
103 #else
104  G4RunManager * runManager = new G4RunManager;
105 #endif
106 
107  G4Random::setTheSeed(myseed);
108 
109  // create the detector ---------------------------
110  B02DetectorConstruction* detector = new B02DetectorConstruction();
111  runManager->SetUserInitialization(detector);
112 
113  G4String parallelName("ParallelBiasingWorld");
114  B02ImportanceDetectorConstruction* pdet =
115  new B02ImportanceDetectorConstruction(parallelName);
116  detector->RegisterParallelWorld(pdet);
117 
118  G4GeometrySampler pgs(pdet->GetWorldVolume(),"neutron");
119 
120  pgs.SetParallel(true);
121 
122  G4VModularPhysicsList* physicsList = new FTFP_BERT;
123  physicsList->RegisterPhysics(new G4ImportanceBiasing(&pgs,parallelName));
124  physicsList->RegisterPhysics(new G4ParallelWorldPhysics(parallelName));
125 
126  runManager->SetUserInitialization(physicsList);
127 
128  // Set user action classes through Worker Initialization
129  //
130  B02ActionInitialization* actions = new B02ActionInitialization;
131  runManager->SetUserInitialization(actions);
132 
133  runManager->Initialize();
134 
135  pdet->CreateImportanceStore();
136 
137  //temporary fix before runManager->BeamOn works...
138  G4UImanager* UImanager = G4UImanager::GetUIpointer();
139  G4String command1 = "/control/cout/setCoutFile threadOut";
140  UImanager->ApplyCommand(command1);
141  G4String command2 = "/run/beamOn " +
142  G4UIcommand::ConvertToString(numberOfEvents);
143  UImanager->ApplyCommand(command2);
144 
145  // open geometry for clean biasing stores clean-up
146  //
147  G4GeometryManager::GetInstance()->OpenGeometry();
148 
149  // pgs.ClearSampling();
150 
151  delete runManager;
152 
153  return 0;
154 }