source: trunk/documents/UserDoc/UsersGuides/ForApplicationDeveloper/html/UserActions/MandatoryActions.html @ 1208

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

CVS update

File size: 10.0 KB
Line 
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
2<HTML>
3<HEAD>
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
12<META NAME="GENERATOR" CONTENT="Mozilla/3.0Gold (X11; I; OSF1 V4.0 alpha) [Netscape]">
13</HEAD>
14<BODY>
15<TABLE WIDTH="100%" >
16<TR>
17<TD>
18</A>
19<A HREF="index.html">
20<IMG SRC="../../../../resources/html/IconsGIF/Contents.gif" ALT="Contents" HEIGHT=16 WIDTH=59></A>
21<A>
22<IMG SRC="../../../../resources/html/IconsGIF/PreviousGR.gif" ALT="Previous" HEIGHT=16 WIDTH=59></A>
23<A HREF="OptionalActions.html">
24<IMG SRC="../../../../resources/html/IconsGIF/Next.gif" ALT="Next" HEIGHT=16 WIDTH=59></A>
25</TD>
26
27<TD ALIGN="Right">
28<FONT COLOR="#238E23"><FONT SIZE=-1>
29<B>Geant4 User's Guide</B> <BR>
30<B>For Application Developers</B> <BR>
31<B>User Actions</B> </FONT></FONT> 
32</TD>
33</TR>
34</TABLE>
35<P><BR>
36
37<CENTER><FONT COLOR="#238E23"><FONT SIZE=+3>
38<B>6.1 Mandatory User Actions and Initializations</B>
39</FONT></FONT> 
40<BR><BR>
41</CENTER>
42
43<HR ALIGN="Center" SIZE="7%">
44<p>
45
46Geant4 has three virtual classes whose methods the user must override in order
47to implement a simulation.  They require the user to define the detector,
48specify the physics to be used, and describe how initial particles are to be
49generated.
50<p>
51
52<H3><tt>G4VUserDetectorConstruction</tt></H3>
53<p>
54<center>
55<table border=2 cellpadding=10>
56<tr>
57<td>
58 <pre>
59     class G4VUserDetectorConstruction
60     {
61       public:
62         G4VUserDetectorConstruction();
63         virtual ~G4VUserDetectorConstruction();
64
65       public:
66         virtual G4VPhysicalVolume* Construct() = 0;
67     };
68
69 </pre>
70</td>
71</tr>
72<tr>
73<td align=center>
74 Source listing 6.1.1<BR>
75 <tt>G4VUserDetectorConstruction</tt>
76</td>
77</tr>
78</table></center>
79<p>
80
81<H3><tt>G4VUserPhysicsList</tt></H3>
82<p>
83This is an abstract class for constructing particles and processes.  The user
84must derive a concrete class from it and implement three virtual methods:
85<UL>
86  <LI><tt>ConstructParticle()</tt> to instantiate each requested particle
87          type,</LI> 
88  <LI><tt>ConstructPhysics()</tt> to instantiate the desired physics processes
89          and register each of them with the process managers of the
90          appropriate particles, and </LI>
91  <LI><tt>SetCuts(G4double aValue)</tt> to set a cut value in range for all
92          particles in the particle table, which invokes the rebuilding of the
93          physics table.</LI>
94</UL>
95<p>
96When called, the <tt>Construct()</tt> method of <i>G4VUserPhysicsList</i> 
97first invokes <tt>ConstructParticle()</tt> and then
98<tt>ConstructProcess()</tt>.  The <tt>ConstructProcess()</tt> method must
99always invoke the <tt>AddTransportation()</tt> method in order to insure
100particle transportation.  <tt>AddTransportation()</tt> must never be
101overridden.</p>
102<p>
103<i>G4VUserPhysicsList</i> provides several utility methods for the
104implementation of the above virtual methods.  They are presented with comments
105in the class declaration in source listing 6.1.2.</p> 
106 
107<center>
108<table border=2 cellpadding=10>
109<tr>
110<td>
111 <pre>
112
113class G4VUserPhysicsList
114{
115  public:
116    G4VUserPhysicsList();
117    virtual ~G4VUserPhysicsList();
118
119  public:  // with description
120    // By calling the "Construct" method,
121    // particles and processes are created
122    void Construct();
123
124
125  protected: // with description
126   // These two methods of  ConstructParticle() and ConstructProcess()
127   // will be invoked in the Construct() method.
128
129   // each particle type will be instantiated
130   virtual void ConstructParticle() = 0;
131
132   // each physics process will be instantiated and
133   // registered to the process manager of each particle type
134   virtual void ConstructProcess() = 0;
135
136  protected: // with description
137   //  User must invoke this method in his ConstructProcess()
138   //  implementation in order to insures particle transportation.
139   //  !! Caution: this class must not be overriden !!
140   void AddTransportation();
141
142  /////////////////////////////////////////////////////////////////
143  public: // with description
144   //  "SetCuts" method sets a cut value for all particle types
145   //   in the particle table
146   virtual void SetCuts() = 0;
147
148  public:  // with description
149   //  set/get the default cut value
150   //  Calling SetDefaultCutValue causes re-calcuration of cut values
151   //  and physics tables just before the next event loop
152   void     SetDefaultCutValue(G4double newCutValue);
153   G4double GetDefaultCutValue() const;
154
155  /////////////////////////////////////////////////////////////////////
156  public: // with description
157    // Invoke BuildPhysicsTable for all processes for all particles
158    // In case of "Retrieve" flag is ON, PhysicsTable will be
159    // retrieved from files
160    void BuildPhysicsTable();
161
162   // do BuildPhysicsTable for specified particle type
163    void BuildPhysicsTable(G4ParticleDefinition* );
164
165     // Store PhysicsTable together with both material and cut value
166    // information in files under the specified directory.
167    //  (return true if files are sucessfully created)
168    G4bool  StorePhysicsTable(const G4String& directory = ".");
169
170    // Return true if "Retrieve" flag is ON.
171    // (i.e. PhysicsTable will be retrieved from files)
172    G4bool  IsPhysicsTableRetrieved() const;
173    G4bool  IsStoredInAscii() const;
174
175    // Get directory path for physics table files.
176    const G4String& GetPhysicsTableDirectory() const;
177
178    // Set "Retrieve" flag
179    // Directory path can be set together.
180    // Null string (default) means directory is not changed
181    // from the current value
182    void    SetPhysicsTableRetrieved(const G4String& directory = "");
183    void    SetStoredInAscii();
184
185    // Reset "Retrieve" flag
186    void    ResetPhysicsTableRetrieved();
187    void    ResetStoredInAscii();
188
189 ///////////////////////////////////////////////////////////////////////
190  public: // with description
191    // Print out the List of registered particles types
192    void DumpList() const;
193
194  public: // with description
195    // Request to print out information of cut values
196    // Printing will be performed when all tables are made
197    void DumpCutValuesTable(G4int nParticles=3);
198
199    // The following method actually trigger the print-out requested
200    // by the above method. This method must be invoked by RunManager
201    // at the proper moment.
202    void DumpCutValuesTableIfRequested();
203
204  public: // with description
205    void  SetVerboseLevel(G4int value);
206    G4int GetVerboseLevel() const;
207    // set/get controle flag for output message
208    //  0: Silent
209    //  1: Warning message
210    //  2: More
211
212  ///////////////////////////////////////////////////////////////////////////
213  public: // with description
214   //  "SetCutsWithDefault" method sets the default cut value
215   //   for all particles for the default region.
216   void SetCutsWithDefault();
217
218   // Following are utility methods for SetCuts
219
220   // SetCutValue sets a cut value for a particle type for the default region
221   void SetCutValue(G4double aCut, const G4String& pname);
222
223   // SetCutValue sets a cut value for a particle type for a region
224   void SetCutValue(G4double aCut, const G4String& pname, const G4String& rname);
225
226   // Invoke SetCuts for specified particle for a region
227   // If the pointer to the region is NULL, the default region is used
228   // In case of "Retrieve" flag is ON,
229   // Cut values will be retrieved from files
230   void SetParticleCuts(G4double cut,G4ParticleDefinition* particle,G4Region* region=0);
231
232   // Invoke SetCuts for all particles in a region
233   void SetCutsForRegion(G4double aCut, const G4String& rname);
234
235   // Following are utility methods are obsolete
236   void ResetCuts();
237
238///////////////////////////////////////////////////////////////////
239  public:
240   // Get/SetApplyCuts gets/sets the flag for ApplyCuts
241   void SetApplyCuts(G4bool value, const G4String& name);
242   G4bool GetApplyCuts(const G4String& name) const;
243
244///////////////////////////////////////////////////////////////////////////////
245  protected:
246    // do BuildPhysicsTable for make the integral schema
247    void BuildIntegralPhysicsTable(G4VProcess* ,G4ParticleDefinition*  );
248
249
250  protected:
251    // Retrieve PhysicsTable from files for proccess belongng the particle.
252    // Normal BuildPhysics procedure of processes will be invoked,
253    // if it fails (in case of Process's RetrievePhysicsTable returns false)
254    virtual void  RetrievePhysicsTable(G4ParticleDefinition* ,
255                                       const G4String& directory,
256                                       G4bool          ascii = false);
257
258   /////////////////////////////////////////////////////////////////
259  protected:
260    // adds new ProcessManager to all particles in the Particle Table
261    //   this routine is used in Construct()
262    void InitializeProcessManager();
263
264  public: // with description
265    // remove and delete ProcessManagers for all particles in tha Particle Table
266    //    this routine is invoked from RunManager
267    void RemoveProcessManager();
268
269  public: // with description
270    // add process manager for particles created on-the-fly
271    void AddProcessManager(G4ParticleDefinition* newParticle,
272                           G4ProcessManager*    newManager = 0 );
273
274};
275
276
277
278 </pre>
279</td>
280</tr>
281<tr>
282<td align=center>
283 Source listing 6.1.2<BR>
284 <tt>G4VUserPhysicsList</tt>
285</td>
286</tr>
287</table></center>
288<p>
289
290<b><tt>G4VUserPrimaryGeneratorAction</tt></b>
291<p>
292<center>
293<table border=2 cellpadding=10>
294<tr>
295<td>
296 <pre>
297     class G4VUserPrimaryGeneratorAction
298     {
299       public:
300         G4VUserPrimaryGeneratorAction();
301         virtual ~G4VUserPrimaryGeneratorAction();
302     
303       public:
304         virtual void GeneratePrimaries(G4Event* anEvent) = 0;
305     };
306
307 </pre>
308</td>
309</tr>
310<tr>
311<td align=center>
312 Source listing 6.1.3<BR>
313 <tt>G4VUserPrimaryGeneratorAction</tt>
314</td>
315</tr>
316</table></center>
317<p>
318
319<BR><BR>
320<HR><A HREF="../../../../Authors/html/subjectsToAuthors.html">
321<I>About the authors</A></I> </P></CENTER>
322
323</BODY>
324</HTML>
Note: See TracBrowser for help on using the repository browser.