Version:
[ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]
1 Example GB06: parallel geometries with generic biasing
2 ------------------------------------------------------
3
4
5 This example demonstrates the use of parallel geometries in generic biasing,
6 on a classical shield problem, using geometry-based importance biasing.
7
8 1) Geometry and activation of navigation in parallel world:
9 --------------------------------------------------------
10
11 The geometry is made of two parts:
12 - the mass (standard) geometry, which is made of a single block of
13 concrete ; this is implemented in GB06DetectorConstuction ;
14 - a parallel geometry, in which a series of slices is defined, these
15 slices being created using a replica volume ; this is implemeted in
16 GB06ParallelGeometryForSlices, which derives from the base class
17 G4VUserParallelWorld .
18
19 The navigation in the parallel geometry is activated for neutrons. This is
20 done in the main program exampleGB06.cc. The activation is made using the
21 facilities of the G4GenericBiasingPhysics class, as:
22
23 biasingPhysics->AddParallelGeometry("neutron",
24 "parallelWorldForSlices");
25
26 where the first name is for the particle type to be aware of the parallel word,
27 the second argument is the name of the parallel world.
28
29 When checking the process list of neutrons (/particle/select neutron and
30 then /particle/process dump ) a new process, `biasingLimiter', is visible. This
31 process handles the step limitation in the parallel geometry. This process can
32 handle several parallel geometries, these being passed to the process as
33 biasingPhysics->AddParallelGeometry("neutron", "parallelWorld1") ,
34 biasingPhysics->AddParallelGeometry("neutron", "parallelWorld2") , etc.
35
36 The geometry-based importance technique utilizes only splitting and killing,
37 hence techniques which are "non-physics biasing" techniques, in the sense they
38 don't modify the behavior of physics processes. For this reason, only a process
39 making the interface between the tracking and the biaising is inserted in the
40 physics list, the physics processes themselves being untouched, this is made as:
41
42 biasingPhysics->NonPhysicsBias("neutron");
43
44 Finally, the volume (ie the slice) importances are defined in a simple
45 "importance map" that is created in the GB06ParallelGeometryForSlices class, this
46 map associating a replica number to a volume importance. The map is hold by the
47 biasing operator.
48
49
50 2) Biasing classes:
51 ----------------
52
53 As usual, with the generic biasing scheme, a biasing operator and a biasing
54 operation are defined, these are, respectively the
55
56 GB06BOptrSplitAndKillByImportance and
57 GB06BOptnSplitAndKillByImportance
58
59 classes. The operator here only handles one particle type. In the StartRun()
60 method, it configures the biasing operation GB06BOptnSplitAndKillByImportance
61 passing it the information related to the parallel geometry, and passing it the
62 importance map.
63
64 The biasing operation GB06BOptnSplitAndKillByImportance applies a classical
65 importance-based geometry technique, with spliting / killing at the slice
66 bondaries. Splitting is made if the track goes from a smaller importance to a
67 volume of larger importance, and killing (Russian roulette) is applied in the
68 other case.
69 The particularity of this biasing operation is its handling of the parallel
70 geometry information. It has to get by itself geometry information that, in the
71 case of information of the mass geometry, are provided in the G4StepPoint objects
72 (pre step point, post step point) of the G4Step. Here, in the
73 DistanceToApplyOperation(...), which is called at the beginning of the step, it
74 gets a "snapshot" of the geometry state keeping a G4TouchableHandle. Then
75 in the GenerateBiasingFinalState, which is called at the end of the step, it gets
76 the new geometry state, with an other G4TouchableHandle. For a step that
77 ends on the boundary, this last touchable history will logically point to the
78 next volume. In this case, the biasing is applied, and the importances are
79 obtained from the replica numbers taken from the two touchable histories, and
80 then from the importance map.
81
82 3) Output:
83 -------
84
85 A simple sensitive detector is defined (GB06SD) and is attached to a thin
86 volume ("meas.logical") placed after the concrete shield. This sensitive
87 detector simply prints the information (particle type, kinetic energy, etc,
88 and weight) leaving the shield.
89
90
91 4) Known problems:
92 ---------------
93
94 In exampleGB06.in the neutron killer process, nKiller, is de-activated
95 (process that kills neutrons after some time), for two reasons. First, killing
96 neutrons in a shield problem is not desirable because neutrons may fly for some
97 time before leaving the shield, and hence must be accounted for. Second, if
98 nKiller is left active, an exception message about a spurious displacement by
99 1e-7mm will appear sometimes : this happens when a neutron is killed on a volume
100 boundary, and the navigation "sees" a (tiny) displacement, that should not exist.