ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
exampleB02.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file exampleB02.cc
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 //
28 //
29 //
30 //
31 //
32 // --------------------------------------------------------------
33 // GEANT 4 - exampleB02
34 //
35 // --------------------------------------------------------------
36 // Comments
37 //
38 // This example intends to show how to use importance sampling and scoring
39 // in the mass (tracking) geometry.
40 // A simple geometry consisting of a 180 cm high concrete cylinder
41 // divided into 18 slabs of 10cm each is created.
42 // Importance values are assigned to the 18 concrete slabs in the
43 // detector construction class for simplicity.
44 // Pairs of G4GeometryCell and importance values are stored in
45 // the importance store.
46 //
47 
48 // --------------------------------------------------------------
49 
50 #include <iostream>
51 
52 #include <stdlib.h>
53 
54 #include "G4Types.hh"
55 
56 #ifdef G4MULTITHREADED
57 #include "G4MTRunManager.hh"
58 #else
59 #include "G4RunManager.hh"
60 #endif
61 
62 #include "G4VPhysicalVolume.hh"
63 #include "G4UImanager.hh"
64 #include "G4GeometryManager.hh"
65 
66 // user classes
69 #include "FTFP_BERT.hh"
70 #include "G4ImportanceBiasing.hh"
72 
74 // #include "B02PrimaryGeneratorAction.hh"
75 // #include "B02RunAction.hh"
76 
77 // Files specific for biasing and scoring
78 #include "G4GeometrySampler.hh"
79 #include "G4IStore.hh"
80 #include "G4VWeightWindowStore.hh"
82 
83 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
84 
85 int main(int argc, char **argv)
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 ---------------------------
111  runManager->SetUserInitialization(detector);
112 
113  G4String parallelName("ParallelBiasingWorld");
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  //
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  //
148 
149  // pgs.ClearSampling();
150 
151  delete runManager;
152 
153  return 0;
154 }
155 
156 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......