source: trunk/source/event/src/G4TrackStack.cc@ 1349

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

tag geant4.9.4 beta 1 + modifs locales

File size: 5.2 KB
RevLine 
[816]1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26//
[1196]27// $Id: G4TrackStack.cc,v 1.8 2009/09/10 21:31:41 asaim Exp $
[1337]28// GEANT4 tag $Name: geant4-09-04-beta-01 $
[816]29//
30
31#include "G4TrackStack.hh"
[1196]32#include "G4SmartTrackStack.hh"
[816]33#include "G4VTrajectory.hh"
34
35G4TrackStack::G4TrackStack()
36:n_stackedTrack(0),firstStackedTrack(0),lastStackedTrack(0)
[1196]37{
38 maxNTracks = 0;
39}
[816]40
41G4TrackStack::~G4TrackStack()
42{
43 if( n_stackedTrack != 0 )
44 {
45 G4StackedTrack * aStackedTrack = firstStackedTrack;
46 G4StackedTrack * nextStackedTrack;
47
48 // delete tracks in the stack
49 while( aStackedTrack != 0 )
50 {
51 nextStackedTrack = aStackedTrack->GetNext();
52 delete aStackedTrack->GetTrack();
53 delete aStackedTrack->GetTrajectory();
54 delete aStackedTrack;
55 aStackedTrack = nextStackedTrack;
56 }
57 }
58}
59
60const G4TrackStack & G4TrackStack::operator=(const G4TrackStack &right)
61{
62 n_stackedTrack = right.n_stackedTrack;
63 firstStackedTrack = right.firstStackedTrack;
64 lastStackedTrack = right.lastStackedTrack;
65 return *this;
66}
67
68int G4TrackStack::operator==(const G4TrackStack &right) const
69{ return (firstStackedTrack==right.firstStackedTrack); }
70int G4TrackStack::operator!=(const G4TrackStack &right) const
71{ return (firstStackedTrack!=right.firstStackedTrack); }
72
73void G4TrackStack::TransferTo(G4TrackStack * aStack)
74{
75 if(n_stackedTrack==0) return;
76
77 if(aStack->n_stackedTrack == 0)
78 {
79 *aStack = *this;
80 }
81 else
82 {
83 aStack->lastStackedTrack->SetNext( firstStackedTrack );
84 firstStackedTrack->SetPrevious( aStack->lastStackedTrack );
85 aStack->lastStackedTrack = lastStackedTrack;
86 aStack->n_stackedTrack += n_stackedTrack;
87 }
88
89 n_stackedTrack = 0;
90 firstStackedTrack = 0;
91 lastStackedTrack = 0;
92}
93
[1196]94void G4TrackStack::TransferTo(G4SmartTrackStack * aStack)
95{
96 while(n_stackedTrack)
97 { aStack->PushToStack(PopFromStack()); }
98}
99
[816]100G4StackedTrack * G4TrackStack::PopFromStack()
101{
102 if( n_stackedTrack == 0 ) return 0;
103 G4StackedTrack * aStackedTrack = lastStackedTrack;
104 GrabFromStack( aStackedTrack );
105 return aStackedTrack;
106}
107
108void G4TrackStack::PushToStack( G4StackedTrack * aStackedTrack )
109{
110 if( n_stackedTrack == 0 )
111 {
112 aStackedTrack->SetPrevious( 0 );
113 firstStackedTrack = aStackedTrack;
114 }
115 else
116 {
117 lastStackedTrack->SetNext( aStackedTrack );
118 aStackedTrack->SetPrevious( lastStackedTrack );
119 }
120 lastStackedTrack = aStackedTrack;
121 n_stackedTrack++;
[1196]122 if(n_stackedTrack>maxNTracks) maxNTracks = n_stackedTrack;
[816]123}
124
125void G4TrackStack::GrabFromStack( G4StackedTrack * aStackedTrack )
126{
127 if( n_stackedTrack == 1 )
128 {
129 firstStackedTrack = 0;
130 lastStackedTrack = 0;
131 }
132 else
133 {
134 if( aStackedTrack == firstStackedTrack )
135 {
136 firstStackedTrack = aStackedTrack->GetNext();
137 firstStackedTrack->SetPrevious( 0 );
138 }
139 else
140 {
141 if( aStackedTrack == lastStackedTrack )
142 {
143 lastStackedTrack = aStackedTrack->GetPrevious();
144 lastStackedTrack->SetNext( 0 );
145 }
146 else
147 {
148 aStackedTrack->GetPrevious()
149 ->SetNext( aStackedTrack->GetNext() );
150 aStackedTrack->GetNext()
151 ->SetPrevious( aStackedTrack->GetPrevious() );
152 }
153 }
154 }
155 n_stackedTrack--;
156}
157
158void G4TrackStack::clear()
159{
160 G4StackedTrack * aStackedTrack = firstStackedTrack;
161 G4StackedTrack * nextStackedTrack;
162
163 if ( n_stackedTrack == 0 ) return;
164
165 // delete tracks in the stack
166 while( aStackedTrack != 0 )
167 {
168 nextStackedTrack = aStackedTrack->GetNext();
169 delete aStackedTrack->GetTrack();
170 delete aStackedTrack->GetTrajectory();
171 delete aStackedTrack;
172 aStackedTrack = nextStackedTrack;
173 }
174 n_stackedTrack = 0;
175 firstStackedTrack = 0;
176 lastStackedTrack = 0;
177}
178
179
Note: See TracBrowser for help on using the repository browser.