Geant4 11.4.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4ExcitationHandler.cc
Go to the documentation of this file.
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// Hadronic Process: Nuclear De-excitations
27// by V. Lara (May 1998)
28//
29//
30// Modified:
31// 30 June 1998 by V. Lara:
32// -Modified the Transform method for use G4ParticleTable and
33// therefore G4IonTable. It makes possible to convert all kind
34// of fragments (G4Fragment) produced in deexcitation to
35// G4DynamicParticle
36// -It uses default algorithms for:
37// Evaporation: G4Evaporation
38// MultiFragmentation: G4StatMF
39// Fermi Breakup model: G4FermiBreakUp
40// 24 Jul 2008 by M. A. Cortes Giraldo:
41// -Max Z,A for Fermi Break-Up turns to 9,17 by default
42// -BreakItUp() reorganised and bug in Evaporation loop fixed
43// -Transform() optimised
44// (September 2008) by J. M. Quesada. External choices have been added for :
45// -inverse cross section option (default OPTxs=3)
46// -superimposed Coulomb barrier (if useSICB is set true, by default it is false)
47// September 2009 by J. M. Quesada:
48// -according to Igor Pshenichnov, SMM will be applied (just in case) only once.
49// 27 Nov 2009 by V.Ivanchenko:
50// -cleanup the logic, reduce number internal vectors, fixed memory leak.
51// 11 May 2010 by V.Ivanchenko:
52// -FermiBreakUp activated, used integer Z and A, used BreakUpFragment method for
53// final photon deexcitation; used check on adundance of a fragment, decay
54// unstable fragments with A <5
55// 22 March 2011 by V.Ivanchenko: general cleanup and addition of a condition:
56// products of Fermi Break Up cannot be further deexcited by this model
57// 30 March 2011 by V.Ivanchenko removed private inline methods, moved Set methods
58// to the source
59// 23 January 2012 by V.Ivanchenko general cleanup including destruction of
60// objects, propagate G4PhotonEvaporation pointer to G4Evaporation class and
61// not delete it here
62
64#include "G4SystemOfUnits.hh"
65#include "G4LorentzVector.hh"
66#include "G4ThreeVector.hh"
67#include "G4ParticleTable.hh"
68#include "G4ParticleTypes.hh"
69#include "G4Ions.hh"
70#include "G4Electron.hh"
71#include "G4Lambda.hh"
72
74#include "G4StatMF.hh"
75#include "G4VFermiBreakUp.hh"
76#include "G4Element.hh"
77#include "G4ElementTable.hh"
78
79#include "G4VEvaporation.hh"
81#include "G4Evaporation.hh"
83#include "G4FermiBreakUpAN.hh"
84#include "G4FermiBreakUpVI.hh"
85#include "G4NuclearLevelData.hh"
87
89 : minExcitation(1.*CLHEP::eV)
90{
91 thePartTable = G4ParticleTable::GetParticleTable();
92 theTableOfIons = thePartTable->GetIonTable();
94
95 theFermiModel = nullptr;
96 thePhotonEvaporation = new G4PhotonEvaporation();
97 SetEvaporation(new G4Evaporation(thePhotonEvaporation), true);
98 theResults.reserve(60);
99 results.reserve(30);
100 theEvapList.reserve(30);
101
102 theElectron = G4Electron::Electron();
103 theNeutron = G4Neutron::NeutronDefinition();
104 theProton = G4Proton::ProtonDefinition();
105 theDeuteron = G4Deuteron::DeuteronDefinition();
106 theTriton = G4Triton::TritonDefinition();
107 theHe3 = G4He3::He3Definition();
108 theAlpha = G4Alpha::AlphaDefinition();
109 theLambda = G4Lambda::Lambda();
110
111 fLambdaMass = theLambda->GetPDGMass();
112
113 if(fVerbose > 1) { G4cout << "### New handler " << this << G4endl; }
114}
115
117{
118 delete theMultiFragmentation;
119 delete theFermiModel;
120 if(isEvapLocal) { delete theEvaporation; }
121}
122
123void G4ExcitationHandler::SetParameters()
124{
125 // initialisation only once
126 if (isInitialised) { return; }
127
128 G4NuclearLevelData* ndata = G4NuclearLevelData::GetInstance();
129 auto param = ndata->GetParameters();
130 isActive = true;
131 // check if de-excitation is needed
132 if (fDummy == param->GetDeexChannelsType()) {
133 isActive = false;
134 } else {
135 // upload data for elements used in geometry
136 G4int Zmax = 20;
138 for (auto const & elm : *table) { Zmax = std::max(Zmax, elm->GetZasInt()); }
139 ndata->UploadNuclearLevelData(Zmax+1);
140 }
141 minExcitation = param->GetMinExcitation();
142
143 // allowing local debug printout
144 fVerbose = std::max(fVerbose, param->GetVerbose());
145 if (isActive) {
146 // photon evaporation initialisation
147 if (nullptr == thePhotonEvaporation) {
148 SetPhotonEvaporation(new G4PhotonEvaporation());
149 }
150 thePhotonEvaporation->Initialise();
151
152 // FermiBreakUp initialisation
153 if (nullptr == theFermiModel) {
154 auto type = param->GetFermiBreakUpType();
155 if (type == bModelVI) {
156 theFermiModel = new G4FermiBreakUpVI();
157 } else if (type == bModelAN) {
158 theFermiModel = new G4FermiBreakUpAN(fVerbose);
159 } else {
160 theFermiModel = new G4VFermiBreakUp();
161 }
162 SetFermiModel(theFermiModel);
163 }
164 theFermiModel->Initialise();
165
166 // evaporation initialisation
167 if (nullptr == theEvaporation) {
168 SetEvaporation(new G4Evaporation(thePhotonEvaporation), true);
169 }
170 theEvaporation->SetPhotonEvaporation(thePhotonEvaporation);
171 theEvaporation->SetFermiBreakUp(theFermiModel);
172 SetDeexChannelsType(param->GetDeexChannelsType());
173 theEvaporation->InitialiseChannels();
174 }
175 if (fVerbose > 1) {
176 G4cout << "G4ExcitationHandler::SetParameters() done " << this << G4endl;
177 }
178}
179
181{
182 // initialisation only once
183 if (isInitialised) { return; }
184 if (fVerbose > 1) {
185 G4cout << "G4ExcitationHandler::Initialise() started " << this << G4endl;
186 }
187 G4DeexPrecoParameters* param =
189 SetParameters();
190
191 // dump level is controlled by parameter class
192 param->Dump();
193 isInitialised = true;
194}
195
197{
198 if (!isInitialised && nullptr != ptr && ptr != theEvaporation) {
199 delete theEvaporation;
200 theEvaporation = ptr;
201 isEvapLocal = flag;
202 if(fVerbose > 1) {
203 G4cout << "G4ExcitationHandler::SetEvaporation() " << ptr
204 << " done for " << this << G4endl;
205 }
206 }
207}
208
210{
211 G4cout << "### G4ExcitationHandler::SetMultiFragmentation() is obsolete and "
212 << "will be removed in the next major release" << G4endl;
213 delete theMultiFragmentation;
214 theMultiFragmentation = ptr;
215}
216
218{
219 G4cout << "### G4ExcitationHandler::SetMinEForMultiFrag() is obsolete and "
220 << "will be removed in the next major release" << G4endl;
221}
222
224{
225 if (!isInitialised && nullptr != ptr && ptr != theFermiModel) {
226 delete theFermiModel;
227 theFermiModel = ptr;
228 }
229}
230
231void
233{
234 if (!isInitialised && nullptr != ptr && ptr != thePhotonEvaporation) {
235 delete thePhotonEvaporation;
236 thePhotonEvaporation = ptr;
237 if (fVerbose > 1) {
238 G4cout << "G4ExcitationHandler::SetPhotonEvaporation() " << ptr
239 << " for handler " << this << G4endl;
240 }
241 }
242}
243
245{
246 G4Evaporation* evap = static_cast<G4Evaporation*>(theEvaporation);
247 if (fVerbose > 1) {
248 G4cout << "G4ExcitationHandler::SetDeexChannelsType " << val
249 << " for " << this << G4endl;
250 }
251 if(val == fDummy) {
252 isActive = false;
253 return;
254 }
255 if (nullptr == evap) { return; }
256 if (val == fEvaporation) {
257 evap->SetDefaultChannel();
258 } else if (val == fCombined) {
259 evap->SetCombinedChannel();
260 } else if (val == fGEM) {
261 evap->SetGEMChannel();
262 } else if (val == fGEMVI) {
263 evap->SetGEMVIChannel();
264 }
265 evap->InitialiseChannels();
266 if (fVerbose > 1) {
268 G4cout << "Number of de-excitation channels is changed to: "
269 << theEvaporation->GetNumberOfChannels();
270 G4cout << " " << this;
271 }
272 G4cout << G4endl;
273 }
274}
275
277{
278 if (nullptr != theEvaporation) { SetParameters(); }
279 return theEvaporation;
280}
281
283{
284 G4cout << "### G4ExcitationHandler::GetMultiFragmentation() is obsolete and "
285 << "will be removed in the next major release" << G4endl;
286 if (nullptr == theMultiFragmentation) { theMultiFragmentation = new G4StatMF(); }
287 return theMultiFragmentation;
288}
289
291{
292 if (nullptr != theFermiModel) { SetParameters(); }
293 return theFermiModel;
294}
295
297{
298 if (nullptr != thePhotonEvaporation) { SetParameters(); }
299 return thePhotonEvaporation;
300}
301
304{
305 // Variables existing until end of method
306 G4Fragment * theInitialStatePtr = new G4Fragment(theInitialState);
307 if (fVerbose > 1) {
308 G4cout << "@@@@@@@@@@ Start G4Excitation Handler @@@@@@@@@@@@@ " << G4endl;
309 G4cout << theInitialState << G4endl;
310 }
311 if (!isInitialised) { Initialise(); }
312
313 theResults.clear();
314 theEvapList.clear();
315
316 // Variables to describe the excited configuration
317 G4double exEnergy = theInitialState.GetExcitationEnergy();
318 G4int A = theInitialState.GetA_asInt();
319 G4int Z = theInitialState.GetZ_asInt();
320 G4int nL = theInitialState.GetNumberOfLambdas();
321
322 // for hyper-nuclei subtract lambdas from the projectile fragment
323 G4double lambdaF = 0.0;
324 G4LorentzVector lambdaLV = theInitialStatePtr->GetMomentum();
325 if (0 < nL) {
326
327 // is it a stable hyper-nuclei?
328 if(A >= 3 && A <= 5 && nL <= 2) {
329 G4int pdg = 0;
330 if(3 == A && 1 == nL) {
331 pdg = 1010010030;
332 } else if(5 == A && 2 == Z && 1 == nL) {
333 pdg = 1010020050;
334 } else if(4 == A) {
335 if(1 == Z && 1 == nL) {
336 pdg = 1010010040;
337 } else if(2 == Z && 1 == nL) {
338 pdg = 1010020040;
339 } else if(0 == Z && 2 == nL) {
340 pdg = 1020000040;
341 } else if(1 == Z && 2 == nL) {
342 pdg = 1020010040;
343 }
344 }
345 // initial state is one of hyper-nuclei
346 if (0 < pdg) {
347 const G4ParticleDefinition* part = thePartTable->FindParticle(pdg);
348 if(nullptr != part) {
349 G4ReactionProduct* theNew = new G4ReactionProduct(part);
350 G4ThreeVector dir = G4ThreeVector( 0.0, 0.0, 0.0 );
351 if ( lambdaLV.vect().mag() > CLHEP::eV ) {
352 dir = lambdaLV.vect().unit();
353 }
354 G4double mass = part->GetPDGMass();
355 G4double etot = std::max(lambdaLV.e(), mass);
356 dir *= std::sqrt((etot - mass)*(etot + mass));
357 theNew->SetMomentum(dir);
358 theNew->SetTotalEnergy(etot);
359 theNew->SetFormationTime(theInitialState.GetCreationTime());
360 theNew->SetCreatorModelID(theInitialState.GetCreatorModelID());
362 v->push_back(theNew);
363 return v;
364 }
365 }
366 }
367 G4double mass = theInitialStatePtr->GetGroundStateMass();
368 lambdaF = nL*(fLambdaMass - CLHEP::neutron_mass_c2)/mass;
369
370 // de-excitation with neutrons instead of lambda inside the fragment
371 theInitialStatePtr->SetZAandMomentum(lambdaLV*(1. - lambdaF), Z, A, 0);
372
373 // 4-momentum not used in de-excitation
374 lambdaLV *= lambdaF;
375 } else if (0 > nL) {
376 ++fWarnings;
377 if(fWarnings < 0) {
379 ed << "Fragment with negative L: Z=" << Z << " A=" << A << " L=" << nL
380 << " Eex/A(MeV)= " << exEnergy/A;
381 G4Exception("G4ExcitationHandler::BreakItUp()","had0034",JustWarning,ed,"");
382 }
383 }
384
385 // In case A <= 1 the fragment will not perform any nucleon emission
387 theResults.push_back( theInitialStatePtr );
388
389 // check if a fragment is stable
390 } else if (exEnergy < minExcitation && nist->GetIsotopeAbundance(Z, A) > 0.0) {
391 theResults.push_back( theInitialStatePtr );
392
393 // JMQ 150909: first step in de-excitation is treated separately
394 // Fragments after the first step are stored in theEvapList
395 } else {
396 theEvapList.push_back(theInitialStatePtr);
397 }
398 if (fVerbose > 2) {
399 G4cout << "## After first step of handler " << theEvapList.size()
400 << " for evap; "
401 << theResults.size() << " results. " << G4endl;
402 }
403 // -----------------------------------
404 // FermiBreakUp and De-excitation loop
405 // -----------------------------------
406
407 static const G4int countmax = 1000;
408 std::size_t kk;
409 for (kk=0; kk<theEvapList.size(); ++kk) {
410 G4Fragment* frag = theEvapList[kk];
411 if (fVerbose > 3) {
412 G4cout << "Next evaporate: " << G4endl;
413 G4cout << *frag << G4endl;
414 }
415 if (kk >= countmax) {
417 ed << "Infinite loop in the de-excitation module: " << kk
418 << " iterations \n"
419 << " Initial fragment: \n" << theInitialState
420 << "\n Current fragment: \n" << *frag;
421 G4Exception("G4ExcitationHandler::BreakItUp","had0333",FatalException,
422 ed,"Stop execution");
423
424 }
425 A = frag->GetA_asInt();
426 Z = frag->GetZ_asInt();
427 results.clear();
428 if (fVerbose > 2) {
429 G4cout << "G4ExcitationHandler# " << kk << " Z= " << Z << " A= " << A
430 << " Eex(MeV)= " << frag->GetExcitationEnergy() << G4endl;
431 }
432 // Fermi Break-Up
433 if (theFermiModel->IsApplicable(Z, A, frag->GetExcitationEnergy())) {
434 theFermiModel->BreakFragment(&results, frag);
435 std::size_t nsec = results.size();
436 if (fVerbose > 2) { G4cout << "FermiBreakUp Nsec= " << nsec << G4endl; }
437
438 // FBU takes care to delete input fragment or add it to the results
439 // The secondary may be excited - photo-evaporation should be applied
440 if (1 < nsec) {
441 for (auto const & res : results) {
442 SortSecondaryFragment(res);
443 }
444 continue;
445 }
446 // evaporation will be applied
447 }
448 // apply Evaporation, residual nucleus is always added to the results
449 // photon evaporation is possible
450 theEvaporation->BreakFragment(&results, frag);
451 if (fVerbose > 3) {
452 G4cout << kk << ". Evaporation: Nsec=" << results.size()
453 << " Z=" << frag->GetZ_asInt()
454 << " A=" << frag->GetA_asInt()
455 << " Eex=" << frag->GetExcitationEnergy()
456 << " stable=" << frag->IsLongLived()
457 << G4endl;
458 }
459 if (0 == results.size()) {
460 theResults.push_back(frag);
461 } else {
462 SortSecondaryFragment(frag);
463 }
464
465 // Sort out secondary fragments
466 for (auto const & res : results) {
467 if(fVerbose > 4) {
468 G4cout << "Evaporated product #" << *res << G4endl;
469 }
470 SortSecondaryFragment(res);
471 } // end of loop on secondary
472 } // end of the loop over theEvapList
473 if (fVerbose > 2) {
474 G4cout << "## After 2nd step of handler " << theEvapList.size()
475 << " was evap; "
476 << theResults.size() << " results. " << G4endl;
477 }
478 G4ReactionProductVector * theReactionProductVector =
480
481 // To optimise the storing speed, we reserve space
482 // in memory for the vector
483 theReactionProductVector->reserve(theResults.size());
484
485 if (fVerbose > 1) {
486 G4cout << "### ExcitationHandler provides " << theResults.size()
487 << " evaporated products:" << G4endl;
488 }
489 G4LorentzVector partOfLambdaLV;
490 if ( nL > 0 ) partOfLambdaLV = lambdaLV/(G4double)nL;
491 for (auto const & frag : theResults) {
492 G4LorentzVector lv0 = frag->GetMomentum();
493 G4double etot = lv0.e();
494
495 // in the case of dummy de-excitation, excitation energy is transfered
496 // into kinetic energy of output ion
497 if (!isActive) {
498 G4double mass = frag->GetGroundStateMass();
499 G4double ptot = lv0.vect().mag();
500 G4double fac = (etot <= mass || 0.0 == ptot) ? 0.0
501 : std::sqrt((etot - mass)*(etot + mass))/ptot;
502 G4LorentzVector lv((frag->GetMomentum()).px()*fac,
503 (frag->GetMomentum()).py()*fac,
504 (frag->GetMomentum()).pz()*fac, etot);
505 frag->SetMomentum(lv);
506 }
507 if (fVerbose > 3) {
508 G4cout << *frag;
509 if (frag->NuclearPolarization()) {
510 G4cout << " " << frag->NuclearPolarization();
511 }
512 G4cout << G4endl;
513 }
514
515 G4int fragmentA = frag->GetA_asInt();
516 G4int fragmentZ = frag->GetZ_asInt();
517 G4double eexc = 0.0;
518 const G4ParticleDefinition* theKindOfFragment = nullptr;
519 G4bool isHyperN = false;
520 if (fragmentA == 0) { // photon or e-
521 theKindOfFragment = frag->GetParticleDefinition();
522 } else if (fragmentA == 1 && fragmentZ == 0) { // neutron
523 theKindOfFragment = theNeutron;
524 } else if (fragmentA == 1 && fragmentZ == 1) { // proton
525 theKindOfFragment = theProton;
526 } else if (fragmentA == 2 && fragmentZ == 1) { // deuteron
527 theKindOfFragment = theDeuteron;
528 } else if (fragmentA == 3 && fragmentZ == 1) { // triton
529 theKindOfFragment = theTriton;
530 if(0 < nL) {
531 const G4ParticleDefinition* p = thePartTable->FindParticle(1010010030);
532 if(nullptr != p) {
533 theKindOfFragment = p;
534 isHyperN = true;
535 --nL;
536 }
537 }
538 } else if (fragmentA == 3 && fragmentZ == 2) { // helium3
539 theKindOfFragment = theHe3;
540 } else if (fragmentA == 4 && fragmentZ == 2) { // alpha
541 theKindOfFragment = theAlpha;
542 if (0 < nL) {
543 const G4ParticleDefinition* p = thePartTable->FindParticle(1010020040);
544 if(nullptr != p) {
545 theKindOfFragment = p;
546 isHyperN = true;
547 --nL;
548 }
549 }
550 } else {
551
552 // fragment
553 eexc = frag->GetExcitationEnergy();
554 G4int idxf = frag->GetFloatingLevelNumber();
555 if (eexc < minExcitation) {
556 eexc = 0.0;
557 idxf = 0;
558 }
559
560 theKindOfFragment = theTableOfIons->GetIon(fragmentZ, fragmentA, eexc,
562 if (fVerbose > 3) {
563 G4cout << "### EXCH: Find ion Z= " << fragmentZ
564 << " A= " << fragmentA
565 << " Eexc(MeV)= " << eexc/MeV << " idx= " << idxf
566 << " " << theKindOfFragment->GetParticleName()
567 << G4endl;
568 }
569 }
570 // fragment identified
571 if (nullptr != theKindOfFragment) {
572 G4ReactionProduct * theNew = new G4ReactionProduct(theKindOfFragment);
573 if (isHyperN) {
574 G4LorentzVector lv = lv0 + partOfLambdaLV;
575 G4ThreeVector dir = lv.vect().unit();
576 G4double mass = theKindOfFragment->GetPDGMass();
577 etot = std::max(lv.e(), mass);
578 G4double ptot = std::sqrt((etot - mass)*(etot + mass));
579 dir *= ptot;
580 theNew->SetMomentum(dir);
581 // remaining not compensated 4-momentum
582 lambdaLV += (lv0 - G4LorentzVector(dir, etot));
583 } else {
584 theNew->SetMomentum(lv0.vect());
585 }
586 theNew->SetTotalEnergy(etot);
587 theNew->SetFormationTime(frag->GetCreationTime());
588 theNew->SetCreatorModelID(frag->GetCreatorModelID());
589 theReactionProductVector->push_back(theNew);
590
591 // fragment not found out ground state is created
592 } else {
593 theKindOfFragment =
594 theTableOfIons->GetIon(fragmentZ,fragmentA,0.0,noFloat,0);
595 if (theKindOfFragment) {
596 G4ThreeVector mom(0.0,0.0,0.0);
597 G4double ionmass = theKindOfFragment->GetPDGMass();
598 if (etot <= ionmass) {
599 etot = ionmass;
600 } else {
601 G4double ptot = std::sqrt((etot - ionmass)*(etot + ionmass));
602 mom = (frag->GetMomentum().vect().unit())*ptot;
603 }
604 G4ReactionProduct * theNew = new G4ReactionProduct(theKindOfFragment);
605 theNew->SetMomentum(mom);
606 theNew->SetTotalEnergy(etot);
607 theNew->SetFormationTime(frag->GetCreationTime());
608 theNew->SetCreatorModelID(frag->GetCreatorModelID());
609 theReactionProductVector->push_back(theNew);
610 if (fVerbose > 3) {
611 G4cout << " ground state, energy corrected E(MeV)= "
612 << etot << G4endl;
613 }
614 }
615 }
616 delete frag;
617 }
618 // remaining lambdas are free; conserve quantum numbers but
619 // not 4-momentum
620 if (0 < nL) {
621 G4ThreeVector dir = G4ThreeVector(0.0, 0.0, 0.0);
622 if (lambdaLV.vect().mag() > CLHEP::eV) {
623 dir = lambdaLV.vect().unit();
624 }
625 G4double etot = std::max(lambdaLV.e()/(G4double)nL, fLambdaMass);
626 dir *= std::sqrt((etot - fLambdaMass)*(etot + fLambdaMass));
627 for (G4int i=0; i<nL; ++i) {
628 G4ReactionProduct* theNew = new G4ReactionProduct(theLambda);
629 theNew->SetMomentum(dir);
630 theNew->SetTotalEnergy(etot);
631 theNew->SetFormationTime(theInitialState.GetCreationTime());
632 theNew->SetCreatorModelID(theInitialState.GetCreatorModelID());
633 theReactionProductVector->push_back(theNew);
634 }
635 }
636 if (fVerbose > 3) {
637 G4cout << "@@@@@@@@@@ End G4Excitation Handler "<< G4endl;
638 }
639 return theReactionProductVector;
640}
641
642void G4ExcitationHandler::ModelDescription(std::ostream& outFile) const
643{
644 outFile << "G4ExcitationHandler description\n"
645 << "This class samples de-excitation of excited nucleus using\n"
646 << "Fermi Break-up model for light fragments (Z < 9, A < 17), "
647 << "evaporation, fission, and photo-evaporation models. Evaporated\n"
648 << "particle may be proton, neutron, and other light fragment \n"
649 << "(Z < 13, A < 29). During photon evaporation produced gamma \n"
650 << "or electrons due to internal conversion \n";
651}
652
653
654
std::vector< G4Element * > G4ElementTable
@ JustWarning
@ FatalException
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
std::ostringstream G4ExceptionDescription
#define noFloat
Definition G4Ions.hh:119
CLHEP::HepLorentzVector G4LorentzVector
std::vector< G4ReactionProduct * > G4ReactionProductVector
CLHEP::Hep3Vector G4ThreeVector
double G4double
Definition G4Types.hh:83
bool G4bool
Definition G4Types.hh:86
int G4int
Definition G4Types.hh:85
const G4double A[17]
#define G4endl
Definition G4ios.hh:67
G4GLOB_DLL std::ostream G4cout
Hep3Vector unit() const
double mag() const
Hep3Vector vect() const
static G4Alpha * AlphaDefinition()
Definition G4Alpha.cc:78
static G4Deuteron * DeuteronDefinition()
Definition G4Deuteron.cc:85
static G4Electron * Electron()
Definition G4Electron.cc:91
static const G4ElementTable * GetElementTable()
Definition G4Element.cc:401
void SetDefaultChannel()
void SetCombinedChannel()
void InitialiseChannels() override
G4VEvaporationChannel * GetPhotonEvaporation()
G4VEvaporation * GetEvaporation()
void SetEvaporation(G4VEvaporation *ptr, G4bool isLocal=false)
void SetFermiModel(G4VFermiBreakUp *ptr)
void SetPhotonEvaporation(G4VEvaporationChannel *ptr)
void ModelDescription(std::ostream &outFile) const
G4ReactionProductVector * BreakItUp(const G4Fragment &theInitialState)
void SetMultiFragmentation(G4VMultiFragmentation *ptr)
G4VMultiFragmentation * GetMultiFragmentation()
void SetMinEForMultiFrag(G4double anE)
G4VFermiBreakUp * GetFermiModel()
void SetDeexChannelsType(G4DeexChannelType val)
G4double GetGroundStateMass() const
G4int GetCreatorModelID() const
G4double GetExcitationEnergy() const
const G4LorentzVector & GetMomentum() const
G4double GetCreationTime() const
G4bool IsLongLived() const
G4int GetZ_asInt() const
G4int GetNumberOfLambdas() const
G4int GetA_asInt() const
void SetZAandMomentum(const G4LorentzVector &, G4int Z, G4int A, G4int nLambdas=0)
static G4He3 * He3Definition()
Definition G4He3.cc:85
static G4Ions::G4FloatLevelBase FloatLevelBase(char flbChar)
Definition G4Ions.cc:107
static G4Lambda * Lambda()
Definition G4Lambda.cc:105
static G4Neutron * NeutronDefinition()
Definition G4Neutron.cc:96
static G4NistManager * Instance()
G4DeexPrecoParameters * GetParameters()
void UploadNuclearLevelData(G4int Zlim)
static G4NuclearLevelData * GetInstance()
const G4String & GetParticleName() const
static G4ParticleTable * GetParticleTable()
static G4Proton * ProtonDefinition()
Definition G4Proton.cc:85
void SetMomentum(const G4double x, const G4double y, const G4double z)
void SetTotalEnergy(const G4double en)
void SetCreatorModelID(const G4int mod)
void SetFormationTime(G4double aTime)
static G4Triton * TritonDefinition()
Definition G4Triton.cc:85
G4bool IsMasterThread()