source: trunk/documents/UserDoc/UsersGuides/ForApplicationDeveloper/html/Detector/parallelWorld.html @ 1211

Last change on this file since 1211 was 1208, checked in by garnier, 15 years ago

CVS update

File size: 9.0 KB
Line 
1<HTML>
2<TITLE>
3</TITLE>
4<!-- Created by: Makoto Asai,   24-Nov-2006 -->
5
6<BODY>
7<TABLE WIDTH="100%"><TR>
8<TD>
9
10
11<A HREF="index.html">
12<IMG SRC="../../../../resources/html/IconsGIF/Contents.gif" ALT="Contents"></A>
13<A HREF="persistency.html">
14<IMG SRC="../../../../resources/html/IconsGIF/Previous.gif" ALT="Previous"></A>
15<A HREF="index.html">
16<IMG SRC="../../../../resources/html/IconsGIF/Next.gif" ALT="Next"></A>
17</TD>
18<TD ALIGN="Right">
19<FONT SIZE="-1" COLOR="#238E23">
20<B>Geant4 User's Guide</B>
21<BR>
22<B>For Application Developers</B>
23<BR>
24<B>Detector Definition and Response</B>
25</FONT>
26</TD>
27</TR></TABLE>
28<BR><BR>
29
30<P ALIGN="Center">
31<FONT SIZE="+3" COLOR="#238E23">
32<B>4.7 Parallel Geometries</B>
33</FONT>
34<BR><BR>
35
36<HR ALIGN="Center" SIZE="7%">
37<p>
38<font color="#ff0000">Notice</font><br>
39As of Geant4 release 8.2, this functionality for defining parallel geometries
40is still in <i>beta</i> release. We appreciate your feedback.
41</p>
42<HR ALIGN="Center" SIZE="7%">
43
44<a name="4.7.1">
45<H2>4.7.1 A parallel world</H2></a>
46<p>
47Occasionally, it is not straightforward to define geometries for sensitive
48detectors, importance geometries or envelopes for shower parameterization to
49be coherently assigned to volumes in the tracking (mass) geometry.
50The new parallel navigation functionality allows the user to define more than
51one worlds simultaneously. The new <tt>G4Transportation</tt> process will see
52all worlds simultaneously; steps will be limited by both boundaries of
53the mass geometry and parallel geometries.<br>
54In a parallel world, the user can define volumes in arbitrary manner with
55sensitivity, regions, shower parameterization setups, and/or importance weight
56for biasing. Volumes in different worlds can overlap.
57</p>
58<p>
59Here are restrictions to be considered for the parallel geometry:
60<ul>
61<li>Materials, production thresholds and EM field are used only from the mass
62    geometry. Even if such <i>physical</i> quantities are defined in a parallel
63    world, they do not affect to the simulation.</li>
64<li>Although all worlds will be comprehensively taken care by the
65    <tt>G4Transportation</tt> process for the navigation, each parallel world
66    must have its own process assigned to achieve its purpose.
67    For example: in case the user defines a sensitive detector to a parallel
68    world, a process dedicated to the parallel world is responsible to invoke
69    this detector. The <tt>G4SteppingManager</tt> treats only the detectors in
70    the mass geometry. For this case of detector sensitivity defined in a
71    parallel world, a <tt>G4ParallelWorldScoringProcess</tt> process must be
72    defined in the physics list (see <a href=#4.7.3>section 4.7.3</a>).
73</ul>
74</p>
75
76<a name="4.7.2">
77<H2>4.7.2 Defining a parallel world</H2></a>
78<p>
79A parallel world should be defined in the <tt>Construct()</tt> virtual
80method of the user's class derived from the abstract base class
81<i>G4VUserParallelWorld</i>.
82</p>
83<p>
84<center>
85<table border=2 cellpadding=10>
86<tr>
87<td>
88<pre>
89#ifndef MyParallelWorld_h
90#define MyParallelWorld_h 1
91
92#include "globals.hh"
93#include "G4VUserParallelWorld.hh"
94
95class MyParallelWorld : <font color="#ff0000">public G4VUserParallelWorld</font>
96{
97  public:
98    MyParallelWorld(G4String worldName);
99    virtual ~MyParallelWorld();
100
101  public:
102    <font color="#ff0000">virtual void Construct();</font>
103};
104
105#endif
106</pre>
107</td>
108</tr>
109<tr>
110<td align=center>
111 Source listing 4.7.1<BR>
112 An example header file of a concrete user parallel world class.
113</td>
114</tr>
115</table></center>
116</p>
117<p>
118A parallel world must have its unique name, which should be set to the
119<tt>G4VUserParallelWorld</tt> base class as an argument of the base class
120constructor.
121</p>
122<p>
123The world physical volume of the parallel world is provided by the
124<tt>G4RunManager</tt> as a clone of the mass geometry.
125In the <tt>Construct()</tt> virtual method of the user's class, the pointer
126to this cloned world physical volume is available through the
127<tt>GetWorld()</tt> method defined in the base class. The user
128should fill the volumes in the parallel world by using this provided
129world volume. For a logical volume in a parallel world, the material pointer
130can be <tt>NULL</tt>. Even if specified a valid material pointer, it will not
131be taken into account by any physics process.
132</p>
133<p>
134<center>
135<table border=2 cellpadding=10>
136<tr>
137<td>
138<pre>
139
140#include "MyParallelWorld.hh"
141#include "G4LogicalVolume.hh"
142#include "G4VPhysicalVolume.hh"
143#include "G4Box.hh"
144#include "G4PVPlacement.hh"
145
146MyParallelWorld::MyParallelWorld(G4String worldName)
147<font color="#ff0000">:G4VUserParallelWorld(worldName)</font>
148{;}
149
150MyParallelWorld::~MyParallelWorld()
151{;}
152
153void MyParallelWorld::Construct()
154{
155  G4VPhysicalVolume* ghostWorld = <font color="#ff0000">GetWorld();</font>
156  G4LogicalVolume* worldLogical = ghostWorld->GetLogicalVolume();
157
158  // place volumes in the parallel world here. For example ...
159  //
160  G4Box * ghostSolid = new G4Box("GhostdBox", 60.*cm, 60.*cm, 60.*cm);
161  G4LogicalVolume * ghostLogical
162        = new G4LogicalVolume(ghostSolid, 0, "GhostLogical", 0, 0, 0);
163  new G4PVPlacement(0, G4ThreeVector(), ghostLogical,
164                    "GhostPhysical", worldLogical, 0, 0);
165}
166
167</pre>
168</td>
169</tr>
170<tr>
171<td align=center>
172 Source listing 4.7.2<BR>
173 An example source code of a concrete user parallel world class.
174</td>
175</tr>
176</table></center>
177</p>
178<p>
179In case the user needs to define more than one parallel worlds, each of them
180must be implemented through its dedicated class.
181Each parallel world should be registered to the mass geometry class using the
182method <tt>RegisterParallelWorld()</tt> available through the class
183<tt>G4VUserDetectorConstruction</tt>. The registration must be done -before-
184the mass world is registed to the <tt>G4RunManager</tt>.
185</p>
186<p>
187<center>
188<table border=2 cellpadding=10>
189<tr>
190<td>
191<pre>
192  // RunManager construction
193  //
194  G4RunManager* runManager = new G4RunManager;
195
196  // mass world
197  //
198  MyDetectorConstruction* massWorld = new MyDetectorConstruction;
199
200  // parallel world
201  //
202  massWorld-&gt;<font color="#ff0000">RegisterParallelWorld</font>(new MyParallelWorld("ParallelScoringWorld"));
203
204  // set mass world to run manager
205  //
206  runManager-&gt;SetUserInitialization(massWorld);
207</pre>
208</td>
209</tr>
210<tr>
211<td align=center>
212 Source listing 4.7.3<BR>
213 Typical implementation in the <tt>main()</tt> to define a parallel world.
214</td>
215</tr>
216</table></center>
217</p>
218
219<a name="4.7.3">
220<H2>4.7.3 Detector sensitivity in a parallel world</H2></a>
221<p>
222Any kind of <ttG4VSensitiveDetector</tt> object can be defined in volumes in a
223parallel world, exactly at the same manner for the mass geometry. Once the user
224defines the sensitive detector in a parallel world, he/she must define a process
225which takes care of these detectors.<br>
226The <tt>G4ParallelWorldScoringProcess</tt> is the class provided for this
227purpose. This process must be defined to all kinds of particles which need to
228be "detected". This process must be ordered <font color="#ff0000">just after
229<tt>G4Transporation</tt> and prior to any other physics processes</font>.
230The name of the parallel world where the <tt>G4ParallelWorldScoringProcess</tt>
231is responsible for, must be defined through the method <tt>SetParallelWorld()</tt>
232available from the class <tt>G4ParallelWorldScoringProcess</tt>.
233If the user has more than one parallel worlds with detectors, for each of
234the parallel worlds, dedicated <tt>G4ParallelWorldScoringProcess</tt> objects
235must be instantiated with the name of each parallel world respectively and
236registered to the particles.
237</p>
238<p>
239<center>
240<table border=2 cellpadding=10>
241<tr>
242<td>
243<pre>
244  // Add parallel world scoring process
245  //
246  G4ParallelWorldScoringProcess* theParallelWorldScoringProcess
247      = new <font color="#ff0000">G4ParallelWorldScoringProcess</font>("ParaWorldScoringProc");
248  theParallelWorldScoringProcess-&gt;<font color="#ff0000">SetParallelWorld</font>("ParallelScoringWorld");
249
250  theParticleIterator-&gt;reset();
251  while( (*theParticleIterator)() )
252  {
253    G4ParticleDefinition* particle = theParticleIterator->value();
254    if (!particle-&gt;IsShortLived())
255    {
256      G4ProcessManager* pmanager = particle-&gt;GetProcessManager();
257      pmanager-&gt;AddProcess(theParallelWorldScoringProcess);
258      pmanager-&gt;SetProcessOrderingToLast(theParallelWorldScoringProcess, idxAtRest);
259      pmanager-&gt;SetProcessOrdering(theParallelWorldScoringProcess, idxAlongStep, 1);
260      pmanager-&gt;SetProcessOrderingToLast(theParallelWorldScoringProcess, idxPostStep);
261    }
262  }
263</pre>
264</td>
265</tr>
266<tr>
267<td align=center>
268 Source listing 4.7.4<BR>
269 Define <tt>G4ParallelWorldScoringProcess</tt>.
270</td>
271</tr>
272</table></center>
273</p>
274<p>
275At the end of processing an event, all hits collections made for the parallel
276world are stored in <tt>G4HCofThisEvent</tt> as well as those for the mass
277geometry.
278</p>
279
280<hr>
281<a href="../../../../Authors/html/subjectsToAuthors.html">
282<i>About the authors</i></a>
283
284</body>
285</html>
Note: See TracBrowser for help on using the repository browser.