source: trunk/documents/UserDoc/DocBookUsersGuides/ForApplicationDeveloper/xml/UserActions/mandatoryActions.xml@ 1222

Last change on this file since 1222 was 904, checked in by garnier, 17 years ago

ajout de la doc

File size: 10.2 KB
Line 
1<!-- ******************************************************** -->
2<!-- -->
3<!-- [History] -->
4<!-- Changed by: Katsuya Amako, 9-Jul-1998 -->
5<!-- Changed by: Katsuya Amako, 4-Aug-1998 -->
6<!-- Changed by: John Allison, 4-Aug-1998 -->
7<!-- Changed by: Katsuya Amako, 30-Nov-1998 -->
8<!-- Changed by: Dennis Wright, 29-Nov-2001 -->
9<!-- Changed by: Makoto Asai, 22-Apr-2003 -->
10<!-- Proof read by: Joe Chuma, 2-Jul-1999 -->
11<!-- Converted to DocBook: Katsuya Amako, Aug-2006 -->
12<!-- -->
13<!-- ******************************************************** -->
14
15
16<!-- ******************* Section (Level#1) ****************** -->
17<sect1 id="sect.ManUAct">
18<title>
19Mandatory User Actions and Initializations
20</title>
21
22<para>
23Geant4 has three virtual classes whose methods the user must
24override in order to implement a simulation. They require the user
25to define the detector, specify the physics to be used, and
26describe how initial particles are to be generated.
27</para>
28
29<!-- ******* Bridgehead ******* -->
30<bridgehead renderas='sect4'>
31<literal>G4VUserDetectorConstruction</literal>
32</bridgehead>
33
34<para>
35<example id="programlist_ManUAct_1">
36<title>
37<literal>G4VUserDetectorConstruction</literal>
38</title>
39
40<programlisting>
41 class G4VUserDetectorConstruction
42 {
43 public:
44 G4VUserDetectorConstruction();
45 virtual ~G4VUserDetectorConstruction();
46
47 public:
48 virtual G4VPhysicalVolume* Construct() = 0;
49 };
50</programlisting>
51</example>
52</para>
53
54
55<!-- ******* Bridgehead ******* -->
56<bridgehead renderas='sect4'>
57<literal>G4VUserPhysicsList</literal>
58</bridgehead>
59
60<para>
61This is an abstract class for constructing particles and
62processes. The user must derive a concrete class from it and
63implement three virtual methods:
64
65<itemizedlist spacing="compact">
66 <listitem><para>
67 <literal>ConstructParticle()</literal> to instantiate each requested
68 particle type,
69 </para></listitem>
70 <listitem><para>
71 <literal>ConstructPhysics()</literal> to instantiate the desired physics
72 processes and register each of them with the process managers of
73 the appropriate particles, and
74 </para></listitem>
75 <listitem><para>
76 <literal>SetCuts(G4double aValue)</literal> to set a cut value in range
77 for all particles in the particle table, which invokes the
78 rebuilding of the physics table.
79 </para></listitem>
80</itemizedlist>
81</para>
82
83<para>
84When called, the <literal>Construct()</literal> method of
85<emphasis>G4VUserPhysicsList</emphasis> first invokes
86<literal>ConstructParticle()</literal> and then <literal>ConstructProcess()</literal>.
87The <literal>ConstructProcess()</literal> method must always invoke the
88<literal>AddTransportation()</literal> method in order to insure particle
89transportation. <literal>AddTransportation()</literal> must never be
90overridden.
91</para>
92
93<para>
94<emphasis>G4VUserPhysicsList</emphasis> provides several utility methods for
95the implementation of the above virtual methods. They are presented
96with comments in the class declaration in <xref linkend="programlist_ManUAct_2"
97/>.
98
99<example id="programlist_ManUAct_2">
100<title>
101<literal>G4VUserPhysicsList</literal>
102</title>
103
104<programlisting>
105class G4VUserPhysicsList
106{
107 public:
108 G4VUserPhysicsList();
109 virtual ~G4VUserPhysicsList();
110
111 public: // with description
112 // By calling the "Construct" method,
113 // particles and processes are created
114 void Construct();
115
116 protected: // with description
117 // These two methods of ConstructParticle() and ConstructProcess()
118 // will be invoked in the Construct() method.
119
120 // each particle type will be instantiated
121 virtual void ConstructParticle() = 0;
122
123 // each physics process will be instantiated and
124 // registered to the process manager of each particle type
125 virtual void ConstructProcess() = 0;
126
127 protected: // with description
128 // User must invoke this method in his ConstructProcess()
129 // implementation in order to insures particle transportation.
130 // !! Caution: this class must not be overriden !!
131 void AddTransportation();
132
133 /////////////////////////////////////////////////////////////////
134 public: // with description
135 // "SetCuts" method sets a cut value for all particle types
136 // in the particle table
137 virtual void SetCuts() = 0;
138
139 public: // with description
140 // set/get the default cut value
141 // Calling SetDefaultCutValue causes re-calcuration of cut values
142 // and physics tables just before the next event loop
143 void SetDefaultCutValue(G4double newCutValue);
144 G4double GetDefaultCutValue() const;
145</programlisting>
146</example>
147<informalexample>
148<programlisting>
149 /////////////////////////////////////////////////////////////////////
150 public: // with description
151 // Invoke BuildPhysicsTable for all processes for all particles
152 // In case of "Retrieve" flag is ON, PhysicsTable will be
153 // retrieved from files
154 void BuildPhysicsTable();
155
156 // do BuildPhysicsTable for specified particle type
157 void BuildPhysicsTable(G4ParticleDefinition* );
158
159 // Store PhysicsTable together with both material and cut value
160 // information in files under the specified directory.
161 // (return true if files are sucessfully created)
162 G4bool StorePhysicsTable(const G4String&amp; directory = ".");
163
164 // Return true if "Retrieve" flag is ON.
165 // (i.e. PhysicsTable will be retrieved from files)
166 G4bool IsPhysicsTableRetrieved() const;
167 G4bool IsStoredInAscii() const;
168
169 // Get directory path for physics table files.
170 const G4String&amp; GetPhysicsTableDirectory() const;
171
172 // Set "Retrieve" flag
173 // Directory path can be set together.
174 // Null string (default) means directory is not changed
175 // from the current value
176 void SetPhysicsTableRetrieved(const G4String&amp; directory = "");
177 void SetStoredInAscii();
178
179 // Reset "Retrieve" flag
180 void ResetPhysicsTableRetrieved();
181 void ResetStoredInAscii();
182
183 ///////////////////////////////////////////////////////////////////////
184 public: // with description
185 // Print out the List of registered particles types
186 void DumpList() const;
187
188 public: // with description
189 // Request to print out information of cut values
190 // Printing will be performed when all tables are made
191 void DumpCutValuesTable(G4int nParticles=3);
192
193 // The following method actually trigger the print-out requested
194 // by the above method. This method must be invoked by RunManager
195 // at the proper moment.
196 void DumpCutValuesTableIfRequested();
197
198 public: // with description
199 void SetVerboseLevel(G4int value);
200 G4int GetVerboseLevel() const;
201 // set/get controle flag for output message
202 // 0: Silent
203 // 1: Warning message
204 // 2: More
205</programlisting>
206</informalexample>
207<informalexample>
208<programlisting>
209 ///////////////////////////////////////////////////////////////////////////
210 public: // with description
211 // "SetCutsWithDefault" method sets the default cut value
212 // for all particles for the default region.
213 void SetCutsWithDefault();
214
215 // Following are utility methods for SetCuts
216
217 // SetCutValue sets a cut value for a particle type for the default region
218 void SetCutValue(G4double aCut, const G4String&amp; pname);
219
220 // SetCutValue sets a cut value for a particle type for a region
221 void SetCutValue(G4double aCut, const G4String&amp; pname, const G4String&amp; rname);
222
223 // Invoke SetCuts for specified particle for a region
224 // If the pointer to the region is NULL, the default region is used
225 // In case of "Retrieve" flag is ON,
226 // Cut values will be retrieved from files
227 void SetParticleCuts(G4double cut,G4ParticleDefinition* particle,G4Region* region=0);
228
229 // Invoke SetCuts for all particles in a region
230 void SetCutsForRegion(G4double aCut, const G4String&amp; rname);
231
232 // Following are utility methods are obsolete
233 void ResetCuts();
234
235///////////////////////////////////////////////////////////////////
236 public:
237 // Get/SetApplyCuts gets/sets the flag for ApplyCuts
238 void SetApplyCuts(G4bool value, const G4String&amp; name);
239 G4bool GetApplyCuts(const G4String&amp; name) const;
240
241///////////////////////////////////////////////////////////////////////////////
242 protected:
243 // do BuildPhysicsTable for make the integral schema
244 void BuildIntegralPhysicsTable(G4VProcess* ,G4ParticleDefinition* );
245
246
247 protected:
248 // Retrieve PhysicsTable from files for proccess belongng the particle.
249 // Normal BuildPhysics procedure of processes will be invoked,
250 // if it fails (in case of Process's RetrievePhysicsTable returns false)
251 virtual void RetrievePhysicsTable(G4ParticleDefinition* ,
252 const G4String&amp; directory,
253 G4bool ascii = false);
254
255 /////////////////////////////////////////////////////////////////
256 protected:
257 // adds new ProcessManager to all particles in the Particle Table
258 // this routine is used in Construct()
259 void InitializeProcessManager();
260
261 public: // with description
262 // remove and delete ProcessManagers for all particles in tha Particle Table
263 // this routine is invoked from RunManager
264 void RemoveProcessManager();
265
266 public: // with description
267 // add process manager for particles created on-the-fly
268 void AddProcessManager(G4ParticleDefinition* newParticle,
269 G4ProcessManager* newManager = 0 );
270
271};
272</programlisting>
273</informalexample>
274</para>
275
276
277<!-- ******* Bridgehead ******* -->
278<bridgehead renderas='sect4'>
279<literal>G4VUserPrimaryGeneratorAction</literal>
280</bridgehead>
281
282<para>
283<example id="programlist_ManUAct_3">
284<title>
285<literal>G4VUserPrimaryGeneratorAction</literal>
286</title>
287
288<programlisting>
289 class G4VUserPrimaryGeneratorAction
290 {
291 public:
292 G4VUserPrimaryGeneratorAction();
293 virtual ~G4VUserPrimaryGeneratorAction();
294
295 public:
296 virtual void GeneratePrimaries(G4Event* anEvent) = 0;
297 };
298</programlisting>
299</example>
300</para>
301
302
303</sect1>
Note: See TracBrowser for help on using the repository browser.