source: trunk/documents/UserDoc/UsersGuides/ForApplicationDeveloper/html/UserActions/UserInformationClasses.html

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

CVS update

File size: 7.5 KB
Line 
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
2<HTML>
3<HEAD>
4<!-- Created by: Makoto Asai, 27-Nov-2004 -->
5
6<META NAME="GENERATOR" CONTENT="Mozilla/3.0Gold (X11; I; OSF1 V4.0 alpha) [Netscape]">
7</HEAD>
8<BODY>
9<TABLE WIDTH="100%" >
10<TR>
11<TD>
12</A>
13<A HREF="index.html">
14<IMG SRC="../../../../resources/html/IconsGIF/Contents.gif" ALT="Contents" HEIGHT=16 WIDTH=59></A>
15<A HREF="OptionalActions.html">
16<IMG SRC="../../../../resources/html/IconsGIF/Previous.gif" ALT="Previous" HEIGHT=16 WIDTH=59></A>
17<A>
18<IMG SRC="../../../../resources/html/IconsGIF/NextGR.gif" ALT="Next" HEIGHT=16 WIDTH=59></A>
19</TD>
20
21<TD ALIGN="Right">
22<FONT COLOR="#238E23"><FONT SIZE=-1>
23<B>Geant4 User's Guide</B> <BR>
24<B>For Application Developers</B> <BR>
25<B>User Actions</B> </FONT></FONT> 
26</TD>
27</TR>
28</TABLE>
29<P><BR>
30
31<CENTER><FONT COLOR="#238E23"><FONT SIZE=+3>
32<B>6.3 User Information Classes</B>
33</FONT></FONT> 
34<BR><BR>
35</CENTER>
36
37<HR ALIGN="Center" SIZE="7%">
38
39Additional user information can be associated with various Geant4 classes.
40There are basically two ways for the user to do this:
41<ul>
42<li>derive concrete classes from base classes used in Geant4.
43These are classes for run, hit, digit, trajectory and trajectory point,
44which are discussed in
45<a href="OptionalActions.html">6.2 for G4Run</a>,
46<a href="../Detector/hit.html">4.4 for G4VHit</a>,
47<a href="../Detector/digitization.html">4.5 for G4VDigit</a>, and
48<a href="../TrackingAndPhysics/tracking.html#5.1.6">5.1.6 for G4VTrajectory and G4VTrajectoryPoint</a>
49
50<li>create concrete classes from provided abstract base classes and
51associate them with classes used in Geant4. Geant4 classes which can
52accommodate user information classes are G4Event, G4Track, G4PrimaryVertex,
53G4PrimaryParticle and G4Region. These classes are discussed here.
54</ul>
55
56<a name="6.3.1">
57<h2>6.3.1 G4VUserEventInformation</h2>
58
59<i>G4VUserEventInformation</i> is an abstract class from which the user can
60derive his/her own concrete class for storing user information associated
61with a G4Event class object. It is the user's responsibility to construct a
62concrete class object and set the pointer to a proper G4Event object.
63<p>
64
65Within a concrete implementation of G4UserEventAction, the
66SetUserEventInformation() method of G4EventManager may be used to set a
67pointer of a concrete class object to G4Event, given that the G4Event
68object is available only by "pointer to const".
69
70Alternatively, the user may modify the GenerateEvent() method of his/her
71own RunManager to instantiate a G4VUserEventInformation object and
72set it to G4Event.
73<p>
74The concrete class object is deleted by the Geant4 kernel when the
75associated G4Event object is deleted.
76
77<a name="6.3.2">
78<h2>6.3.2 G4VUserTrackInformation</h2>
79
80This is an abstract class from which the user can derive his/her own
81concrete class for storing user information associated with a G4Track
82class object. It is the user's responsibility to construct a concrete
83class object and set the pointer to the proper G4Track object.
84<p>
85Within a concrete implementation of G4UserTrackingAction, the
86SetUserTrackInformation() method of G4TrackingManager may be used
87to set a pointer of a concrete class object to G4Track,
88given that the G4Track object is available only by "pointer to const".
89<p>
90The ideal place to copy a G4VUserTrackInformation object from a mother track
91to its daughter tracks is <i>G4UserTrackingAction::PostUserTrackingAction()</i>.
92<p>
93<center>
94<table border=1 cellpadding=10>
95<tr>
96<td>
97 <pre>
98void RE01TrackingAction::PostUserTrackingAction(const G4Track* aTrack)
99{
100  G4TrackVector* secondaries = fpTrackingManager->GimmeSecondaries();
101  if(secondaries)
102  {
103    RE01TrackInformation* info = (RE01TrackInformation*)(aTrack->GetUserInformation());
104    size_t nSeco = secondaries->size();
105    if(nSeco>0)
106    {
107      for(size_t i=0; i < nSeco; i++)
108      {
109        RE01TrackInformation* infoNew = new RE01TrackInformation(info);
110        (*secondaries)[i]->SetUserInformation(infoNew);
111      }
112    }
113  }
114}
115 </pre>
116</td>
117</tr>
118<tr>
119<td align=center>
120 Source listing 6.3.1<BR>
121 <tt>Copying G4VUserTrackInformation from mother to daughter tracks</tt>
122</td>
123</tr>
124</table></center><p>
125The concrete class object is deleted by the Geant4 kernel when the
126associated G4Track object is deleted. In case the user wants to keep
127the information, it should be copied to a trajectory corresponding to
128the track.
129
130<a name="6.3.3">
131<h2>6.3.3 G4VUserPrimaryVertexInformation and G4VUserPrimaryTrackInformation</h2>
132
133These abstract classes allow the user to attach information regarding the
134generated primary vertex and primary particle. Concrete class objects derived
135from these classes should be attached to <i>G4PrimaryVertex</i> and
136<i>G4PrimaryParticle</i> class objects, respectively.
137<p>
138The concrete class objects are deleted by the Geant4 Kernel when the
139associated G4PrimaryVertex or G4PrimaryParticle class objects are deleted
140along with the deletion of G4Event.
141
142<a name="6.3.4">
143<h2>6.3.4 G4VUserRegionInformation</h2>
144
145This abstract base class allows the user to attach information associated
146with a region. For example, it would be quite beneficial to add some methods
147returning a boolean flag to indicate the characteristics of the region
148(e.g. tracker, calorimeter, etc.). With this example, the user can easily and
149quickly identify the detector component.
150<p>
151<center>
152<table border=1 cellpadding=10>
153<tr>
154<td>
155 <pre>
156class RE01RegionInformation : public G4VUserRegionInformation
157{
158  public:
159    RE01RegionInformation();
160    ~RE01RegionInformation();
161    void Print() const;
162
163  private:
164    G4bool isWorld;
165    G4bool isTracker;
166    G4bool isCalorimeter;
167
168  public:
169    inline void SetWorld(G4bool v=true) {isWorld = v;}
170    inline void SetTracker(G4bool v=true) {isTracker = v;}
171    inline void SetCalorimeter(G4bool v=true) {isCalorimeter = v;}
172    inline G4bool IsWorld() const {return isWorld;}
173    inline G4bool IsTracker() const {return isTracker;}
174    inline G4bool IsCalorimeter() const {return isCalorimeter;}
175};
176 </pre>
177</td>
178</tr>
179<tr>
180<td align=center>
181 Source listing 6.3.2<BR>
182 <tt>A sample region information class</tt>
183</td>
184</tr>
185</table></center>
186<p>
187 The following code is an example of a stepping action. Here, a track is
188suspended when it enters the "calorimeter region" from the "tracker region".
189<p>
190<center>
191<table border=1 cellpadding=10>
192<tr>
193<td>
194 <pre>
195void RE01SteppingAction::UserSteppingAction(const G4Step * theStep)
196{
197  // Suspend a track if it is entering into the calorimeter
198
199  // check if it is alive
200  G4Track * theTrack = theStep->GetTrack();
201  if(theTrack-&gt;GetTrackStatus()!=fAlive) { return; }
202
203  // get region information
204  G4StepPoint * thePrePoint = theStep-&gt;GetPreStepPoint();
205  G4LogicalVolume * thePreLV = thePrePoint-&gt;GetPhysicalVolume()-&gt;GetLogicalVolume();
206  RE01RegionInformation* thePreRInfo
207   = (RE01RegionInformation*)(thePreLV-&gt;GetRegion()-&gt;GetUserInformation());
208  G4StepPoint * thePostPoint = theStep-&gt;GetPostStepPoint();
209  G4LogicalVolume * thePostLV = thePostPoint-&gt;GetPhysicalVolume()-&gt;GetLogicalVolume();
210  RE01RegionInformation* thePostRInfo
211   = (RE01RegionInformation*)(thePostLV-&gt;GetRegion()-&gt;GetUserInformation());
212
213  // check if it is entering to the calorimeter volume
214  if(!(thePreRInfo-&gt;IsCalorimeter()) && (thePostRInfo-&gt;IsCalorimeter()))
215  { theTrack-&gt;SetTrackStatus(fSuspend); }
216}
217 </pre>
218</td>
219</tr>
220<tr>
221<td align=center>
222 Source listing 6.3.2<BR>
223 <tt>Sample use of a region information class</tt>
224</td>
225</tr>
226</table></center>
227
228<BR><BR>
229<HR><A HREF="../../../../Authors/html/subjectsToAuthors.html">
230<I>About the authors</A></I> </P></CENTER>
231
232</BODY>
233</HTML>
Note: See TracBrowser for help on using the repository browser.