181{
182
183
184
185
186
188 fragmentVector->clear();
189
190
191
192
196 if (verboseLevel >= 2)
197 {
198 G4cout <<
"oooooooooooooooooooooooooooooooooooooooo"
199 <<"oooooooooooooooooooooooooooooooooooooooo"
203 G4cout <<
"Initial prefragment A=" <<
A
205 <<", excitation energy = " <<ex/MeV <<" MeV"
207 }
208
209
210
211
212
213
215 {
216 if (verboseLevel >= 2)
217 {
219 G4cout <<
"oooooooooooooooooooooooooooooooooooooooo"
220 <<"oooooooooooooooooooooooooooooooooooooooo"
222 }
223 return fragmentVector;
224 }
226 {
228 lorentzVector.
setE(lorentzVector.
e()-ex+10.0*eV);
230 {
233 fragmentVector->push_back(fragment);
234 }
235 else
236 {
239 fragmentVector->push_back(fragment);
240 }
241 if (verboseLevel >= 2)
242 {
243 G4cout <<
"Final fragment is in fact only a nucleon) :" <<
G4endl;
245 G4cout <<
"oooooooooooooooooooooooooooooooooooooooo"
246 <<"oooooooooooooooooooooooooooooooooooooooo"
248 }
249 return fragmentVector;
250 }
251
252
253
254
255
257 if (DAabl >
A) DAabl =
A;
258
259
260
261
262
263
264
265
266
269
270 if (AF > 0)
271 {
275 G4int minZ = std::max(1,
Z - DAabl);
276
277
278
279
280
281 G4int zmax = std::min(199,
Z);
283 for (ZF=minZ; ZF<=zmax; ++ZF)
284 {
285 sum +=
G4Exp(-R*g4calc->
powA(std::abs(ZF - 0.486*AFd + 3.8E-04*AFd*AFd),1.5));
286 fSig[ZF] = sum;
287 }
288
289
290
291
293 for (ZF=minZ; ZF<=zmax; ++ZF) {
294 if(sum <= fSig[ZF]) { break; }
295 }
296 }
298
299
300
301
302
303
304
305
307 evapType.clear();
308 for (
G4int ift=0; ift<nFragTypes; ift++)
309 {
313 if (fragType[ift]->GetPDGCharge() > 0.0)
316 if (n > 0.0)
317 {
320 {
321 totalEpost += mass;
322 evapType.push_back(type);
323 }
326 }
327 }
328
329
330
331
332
333
334
335
337 if (AF > 0)
339 GetIonMass(ZF,AF);
340 else
341 {
345 evapType.erase(evapType.end()-1);
346 }
347 totalEpost += massFinalFrag;
348
349
350
351
352 if (verboseLevel >= 2)
353 {
354 G4cout <<
"Final fragment A=" <<AF
355 <<", Z=" <<ZF
357 for (
G4int ift=0; ift<nFragTypes; ift++)
358 {
360 G4long n = std::count(evapType.cbegin(),evapType.cend(),type);
361 if (n > 0)
363 <<
", number of particles emitted = " <<
n <<
G4endl;
364 }
365 }
366
367
368
369
370
372 G4double totalEpre = massPreFrag + ex;
373 G4double excess = totalEpre - totalEpost;
374
377 std::size_t nEvap = 0;
378 if (produceSecondaries && evapType.size()>0)
379 {
380 if (excess > 0.0)
381 {
382 SelectSecondariesByEvaporation (resultNucleus);
383 nEvap = fragmentVector->size();
385 if (evapType.size() > 0)
386 SelectSecondariesByDefault (boost);
387 }
388 else
390 }
391
392 if (AF > 0)
393 {
395 GetIonMass(ZF,AF);
397 G4double p = std::sqrt(e*e-mass*mass);
400 lorentzVector.
boost(-boost);
403 fragmentVector->push_back(frag);
404 }
405 delete resultNucleus;
406
407
408
409
410 if (verboseLevel >= 2)
411 {
412 if (nEvap > 0)
413 {
417 }
418 std::size_t ie = 0;
419 for (auto iter = fragmentVector->cbegin();
420 iter != fragmentVector->cend(); ++iter)
421 {
422 if (ie == nEvap)
423 {
424
428 }
430 }
431 G4cout <<
"oooooooooooooooooooooooooooooooooooooooo"
432 <<"oooooooooooooooooooooooooooooooooooooooo"
434 }
435
436 return fragmentVector;
437}
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
std::vector< G4Fragment * > G4FragmentVector
CLHEP::HepLorentzVector G4LorentzVector
CLHEP::Hep3Vector G4ThreeVector
G4GLOB_DLL std::ostream G4cout
HepLorentzVector & boost(double, double, double)
Hep3Vector findBoostToCM() const
G4double GetGroundStateMass() const
G4double GetExcitationEnergy() const
const G4LorentzVector & GetMomentum() const
void SetCreatorModelID(G4int value)
G4double GetPDGMass() const
G4double GetPDGCharge() const
G4int GetBaryonNumber() const
const G4String & GetParticleName() const
G4IonTable * GetIonTable() const
static G4ParticleTable * GetParticleTable()
static G4Pow * GetInstance()
G4double powZ(G4int Z, G4double y) const
G4double powA(G4double A, G4double y) const