63 {
64
65
71 theNeutron.SetKineticEnergy( eKinetic );
72
73
79
80
91
92
95
96
97
98
99
100
101
102
103 theNeutron.Lorentz(theNeutron, -1*theTarget);
104
105
106
109
110
111
112 eKinetic = theNeutron.GetKineticEnergy();
114 xSec[0] = theFC.
GetXsec(eKinetic);
115 xSec[1] = xSec[0]+theSC.
GetXsec(eKinetic);
116 xSec[2] = xSec[1]+theTC.
GetXsec(eKinetic);
117 xSec[3] = xSec[2]+theLC.
GetXsec(eKinetic);
119 unsigned int i=0;
121 if(xSec[3]==0)
122 {
123 it=-1;
124 }
125 else
126 {
127 for(i=0; i<4; i++)
128 {
129 it =i;
130 if(random<xSec[i]/xSec[3]) break;
131 }
132 }
133
134
135
136
137
138 G4int Prompt=0, delayed=0, all=0;
140 switch(it)
141 {
142 case 0:
144 if(Prompt==0&&delayed==0) Prompt=all;
146
147 break;
148 case 1:
150 if(Prompt==0&&delayed==0) Prompt=all;
152 break;
153 case 2:
155 if(Prompt==0&&delayed==0) Prompt=all;
157 break;
158 case 3:
160 if(Prompt==0&&delayed==0) Prompt=all;
162 break;
163 default:
164 break;
165 }
166
167
168
169
170
171 if ( produceFissionFragments ) delayed=0;
172
174
175 if( theNeutrons != 0)
176 {
177 theDecayConstants =
new G4double[delayed];
178
179
180
181
182 for(i=0; i<theNeutrons->size(); i++)
183 {
185 }
186 delete theNeutrons;
187
189
190 theDelayed = theFS.
ApplyYourself(0, delayed, theDecayConstants);
191 for(i=0; i<theDelayed->size(); i++)
192 {
197 }
198 delete theDelayed;
199 }
200 else
201 {
202
204 theDecayConstants =
new G4double[delayed];
205 if(Prompt==0&&delayed==0) Prompt=all;
206 theNeutrons = theFS.
ApplyYourself(Prompt, delayed, theDecayConstants);
207
208
209
211 for(i0=0; i0<Prompt; i0++)
212 {
214 }
215
216
217 for(i0=Prompt; i0<Prompt+delayed; i0++)
218 {
223 }
224 delete theNeutrons;
225 }
226 delete [] theDecayConstants;
227
228 unsigned int nPhotons = 0;
229 if(thePhotons!=0)
230 {
231 nPhotons = thePhotons->size();
232 for(i=0; i<nPhotons; i++)
233 {
235 }
236 delete thePhotons;
237 }
238
239
240
241
242
243
244
247
249
250
252
253
254
255
256 if ( produceFissionFragments )
257 {
261
265
266
267
268
269
271
274
275
279 G4ThreeVector direction (sinth*std::cos(phi) , sinth*std::sin(phi), std::cos(theta) );
280
281
291 }
292
293
295 }
std::vector< G4DynamicParticle * > G4DynamicParticleVector
void SetStatusChange(G4HadFinalStateStatus aS)
G4int GetNumberOfSecondaries() const
void AddSecondary(G4DynamicParticle *aP)
G4HadSecondary * GetSecondary(size_t i)
void SetLocalEnergyDeposit(G4double aE)
const G4Material * GetMaterial() const
const G4ParticleDefinition * GetDefinition() const
G4double GetKineticEnergy() const
const G4LorentzVector & Get4Momentum() const
G4double GetGlobalTime() const
void SetTime(G4double aT)
G4double GetTemperature() const
G4DynamicParticleVector * ApplyYourself(G4int nNeutrons)
void GetAFissionFragment(G4double, G4int &, G4int &, G4int &)
G4NeutronHPFissionERelease * GetEnergyRelease()
void SetTarget(const G4ReactionProduct &aTarget)
void SetNeutron(const G4ReactionProduct &aNeutron)
void SampleNeutronMult(G4int &all, G4int &Prompt, G4int &delayed, G4double energy, G4int off)
G4DynamicParticleVector * ApplyYourself(G4int Prompt, G4int delayed, G4double *decayconst)
G4DynamicParticleVector * GetPhotons()
G4HadFinalState theResult
virtual G4double GetXsec(G4double anEnergy)
void SetNeutron(const G4ReactionProduct &aNeutron)
void SetTarget(const G4ReactionProduct &aTarget)
G4double GetFragmentKinetic()
G4DynamicParticleVector * ApplyYourself(G4int NNeutrons)
G4DynamicParticleVector * ApplyYourself(G4int NNeutrons)
G4DynamicParticleVector * ApplyYourself(G4int NNeutrons)
G4ReactionProduct GetBiasedThermalNucleus(G4double aMass, G4ThreeVector aVelocity, G4double temp=-1) const
G4double GetPDGMass() const
static G4ParticleTable * GetParticleTable()
G4ParticleDefinition * GetIon(G4int atomicNumber, G4int atomicMass, G4double excitationEnergy)