Geant4 11.2.2
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4ExcitationHandler Class Reference

#include <G4ExcitationHandler.hh>

Public Member Functions

 G4ExcitationHandler ()
 
 ~G4ExcitationHandler ()
 
G4ReactionProductVectorBreakItUp (const G4Fragment &theInitialState)
 
void ModelDescription (std::ostream &outFile) const
 
void Initialise ()
 
void SetEvaporation (G4VEvaporation *ptr, G4bool isLocal=false)
 
void SetMultiFragmentation (G4VMultiFragmentation *ptr)
 
void SetFermiModel (G4VFermiBreakUp *ptr)
 
void SetPhotonEvaporation (G4VEvaporationChannel *ptr)
 
void SetDeexChannelsType (G4DeexChannelType val)
 
void SetMaxZForFermiBreakUp (G4int aZ)
 
void SetMaxAForFermiBreakUp (G4int anA)
 
void SetMaxAandZForFermiBreakUp (G4int anA, G4int aZ)
 
void SetMinEForMultiFrag (G4double anE)
 
G4VEvaporationGetEvaporation ()
 
G4VMultiFragmentationGetMultiFragmentation ()
 
G4VFermiBreakUpGetFermiModel ()
 
G4VEvaporationChannelGetPhotonEvaporation ()
 
void SetOPTxs (G4int opt)
 
void UseSICB ()
 
 G4ExcitationHandler (const G4ExcitationHandler &right)=delete
 
const G4ExcitationHandleroperator= (const G4ExcitationHandler &right)=delete
 
G4bool operator== (const G4ExcitationHandler &right) const =delete
 
G4bool operator!= (const G4ExcitationHandler &right) const =delete
 

Detailed Description

Definition at line 63 of file G4ExcitationHandler.hh.

Constructor & Destructor Documentation

◆ G4ExcitationHandler() [1/2]

G4ExcitationHandler::G4ExcitationHandler ( )

Definition at line 87 of file G4ExcitationHandler.cc.

88 : minEForMultiFrag(1.*CLHEP::TeV), minExcitation(1.*CLHEP::eV),
89 maxExcitation(100.*CLHEP::MeV)
90{
91 thePartTable = G4ParticleTable::GetParticleTable();
92 theTableOfIons = thePartTable->GetIonTable();
94
95 theMultiFragmentation = new G4StatMF();
96 theFermiModel = new G4FermiBreakUpVI();
97 thePhotonEvaporation = new G4PhotonEvaporation();
98 SetEvaporation(new G4Evaporation(thePhotonEvaporation), true);
99 theResults.reserve(60);
100 results.reserve(30);
101 theEvapList.reserve(30);
102
103 theElectron = G4Electron::Electron();
104 theNeutron = G4Neutron::NeutronDefinition();
105 theProton = G4Proton::ProtonDefinition();
106 theDeuteron = G4Deuteron::DeuteronDefinition();
107 theTriton = G4Triton::TritonDefinition();
108 theHe3 = G4He3::He3Definition();
109 theAlpha = G4Alpha::AlphaDefinition();
110 theLambda = G4Lambda::Lambda();
111
112 fLambdaMass = theLambda->GetPDGMass();
113
114 if(fVerbose > 1) { G4cout << "### New handler " << this << G4endl; }
115}
#define G4endl
Definition G4ios.hh:67
G4GLOB_DLL std::ostream G4cout
static G4Alpha * AlphaDefinition()
Definition G4Alpha.cc:78
static G4Deuteron * DeuteronDefinition()
Definition G4Deuteron.cc:85
static G4Electron * Electron()
Definition G4Electron.cc:91
void SetEvaporation(G4VEvaporation *ptr, G4bool isLocal=false)
static G4He3 * He3Definition()
Definition G4He3.cc:85
static G4Lambda * Lambda()
Definition G4Lambda.cc:105
static G4Neutron * NeutronDefinition()
Definition G4Neutron.cc:96
static G4NistManager * Instance()
G4IonTable * GetIonTable() const
static G4ParticleTable * GetParticleTable()
static G4Proton * ProtonDefinition()
Definition G4Proton.cc:85
static G4Triton * TritonDefinition()
Definition G4Triton.cc:85

◆ ~G4ExcitationHandler()

G4ExcitationHandler::~G4ExcitationHandler ( )

Definition at line 117 of file G4ExcitationHandler.cc.

118{
119 delete theMultiFragmentation;
120 delete theFermiModel;
121 if(isEvapLocal) { delete theEvaporation; }
122}

◆ G4ExcitationHandler() [2/2]

G4ExcitationHandler::G4ExcitationHandler ( const G4ExcitationHandler & right)
delete

Member Function Documentation

◆ BreakItUp()

G4ReactionProductVector * G4ExcitationHandler::BreakItUp ( const G4Fragment & theInitialState)

Definition at line 290 of file G4ExcitationHandler.cc.

291{
292 // Variables existing until end of method
293 G4Fragment * theInitialStatePtr = new G4Fragment(theInitialState);
294 if (fVerbose > 1) {
295 G4cout << "@@@@@@@@@@ Start G4Excitation Handler @@@@@@@@@@@@@ " << G4endl;
296 G4cout << theInitialState << G4endl;
297 }
298 if (!isInitialised) { Initialise(); }
299
300 // pointer to fragment vector which receives temporal results
301 G4FragmentVector * theTempResult = nullptr;
302
303 theResults.clear();
304 theEvapList.clear();
305
306 // Variables to describe the excited configuration
307 G4double exEnergy = theInitialState.GetExcitationEnergy();
308 G4int A = theInitialState.GetA_asInt();
309 G4int Z = theInitialState.GetZ_asInt();
310 G4int nL = theInitialState.GetNumberOfLambdas();
311
312 // too much excitation
313 if (exEnergy > A*maxExcitation && A > 0) {
314 ++fWarnings;
315 if(fWarnings < 0) {
317 ed << "High excitation Fragment Z= " << Z << " A= " << A
318 << " Eex/A(MeV)= " << exEnergy/A;
319 G4Exception("G4ExcitationHandler::BreakItUp()","had0034",JustWarning,ed,"");
320 }
321 }
322
323 // for hyper-nuclei subtract lambdas from the projectile fragment
324 G4double lambdaF = 0.0;
325 G4LorentzVector lambdaLV = theInitialStatePtr->GetMomentum();
326 if (0 < nL) {
327
328 // is it a stable hyper-nuclei?
329 if(A >= 3 && A <= 5 && nL <= 2) {
330 G4int pdg = 0;
331 if(3 == A && 1 == nL) {
332 pdg = 1010010030;
333 } else if(5 == A && 2 == Z && 1 == nL) {
334 pdg = 1010020050;
335 } else if(4 == A) {
336 if(1 == Z && 1 == nL) {
337 pdg = 1010010040;
338 } else if(2 == Z && 1 == nL) {
339 pdg = 1010020040;
340 } else if(0 == Z && 2 == nL) {
341 pdg = 1020000040;
342 } else if(1 == Z && 2 == nL) {
343 pdg = 1020010040;
344 }
345 }
346 // initial state is one of hyper-nuclei
347 if (0 < pdg) {
348 const G4ParticleDefinition* part = thePartTable->FindParticle(pdg);
349 if(nullptr != part) {
350 G4ReactionProduct* theNew = new G4ReactionProduct(part);
351 G4ThreeVector dir = G4ThreeVector( 0.0, 0.0, 0.0 );
352 if ( lambdaLV.vect().mag() > CLHEP::eV ) {
353 dir = lambdaLV.vect().unit();
354 }
355 G4double mass = part->GetPDGMass();
356 G4double etot = std::max(lambdaLV.e(), mass);
357 dir *= std::sqrt((etot - mass)*(etot + mass));
358 theNew->SetMomentum(dir);
359 theNew->SetTotalEnergy(etot);
360 theNew->SetFormationTime(theInitialState.GetCreationTime());
361 theNew->SetCreatorModelID(theInitialState.GetCreatorModelID());
363 v->push_back(theNew);
364 return v;
365 }
366 }
367 }
368 G4double mass = theInitialStatePtr->GetGroundStateMass();
369 lambdaF = nL*(fLambdaMass - CLHEP::neutron_mass_c2)/mass;
370
371 // de-excitation with neutrons instead of lambda inside the fragment
372 theInitialStatePtr->SetZAandMomentum(lambdaLV*(1. - lambdaF), Z, A, 0);
373
374 // 4-momentum not used in de-excitation
375 lambdaLV *= lambdaF;
376 } else if (0 > nL) {
377 ++fWarnings;
378 if(fWarnings < 0) {
380 ed << "Fragment with negative L: Z=" << Z << " A=" << A << " L=" << nL
381 << " Eex/A(MeV)= " << exEnergy/A;
382 G4Exception("G4ExcitationHandler::BreakItUp()","had0034",JustWarning,ed,"");
383 }
384 }
385
386 // In case A <= 1 the fragment will not perform any nucleon emission
387 if (A <= 1 || !isActive) {
388 theResults.push_back( theInitialStatePtr );
389
390 // check if a fragment is stable
391 } else if (exEnergy < minExcitation && nist->GetIsotopeAbundance(Z, A) > 0.0) {
392 theResults.push_back( theInitialStatePtr );
393
394 // JMQ 150909: first step in de-excitation is treated separately
395 // Fragments after the first step are stored in theEvapList
396 } else {
397 if ((A<maxAForFermiBreakUp && Z<maxZForFermiBreakUp)
398 || exEnergy <= minEForMultiFrag*A) {
399 theEvapList.push_back(theInitialStatePtr);
400
401 // Statistical Multifragmentation will take place only once
402 } else {
403 theTempResult = theMultiFragmentation->BreakItUp(theInitialState);
404 if (nullptr == theTempResult) {
405 theEvapList.push_back(theInitialStatePtr);
406 } else {
407 std::size_t nsec = theTempResult->size();
408
409 // no fragmentation
410 if (0 == nsec) {
411 theEvapList.push_back(theInitialStatePtr);
412
413 // secondary are produced - sort out secondary fragments
414 } else {
415 G4bool deletePrimary = true;
416 for (auto const & ptr : *theTempResult) {
417 if (ptr == theInitialStatePtr) { deletePrimary = false; }
418 SortSecondaryFragment(ptr);
419 }
420 if (deletePrimary) { delete theInitialStatePtr; }
421 }
422 delete theTempResult; // end multifragmentation
423 }
424 }
425 }
426 if (fVerbose > 2) {
427 G4cout << "## After first step of handler " << theEvapList.size()
428 << " for evap; "
429 << theResults.size() << " results. " << G4endl;
430 }
431 // -----------------------------------
432 // FermiBreakUp and De-excitation loop
433 // -----------------------------------
434
435 static const G4int countmax = 1000;
436 std::size_t kk;
437 for (kk=0; kk<theEvapList.size(); ++kk) {
438 G4Fragment* frag = theEvapList[kk];
439 if (fVerbose > 3) {
440 G4cout << "Next evaporate: " << G4endl;
441 G4cout << *frag << G4endl;
442 }
443 if (kk >= countmax) {
445 ed << "Infinite loop in the de-excitation module: " << kk
446 << " iterations \n"
447 << " Initial fragment: \n" << theInitialState
448 << "\n Current fragment: \n" << *frag;
449 G4Exception("G4ExcitationHandler::BreakItUp","had0333",FatalException,
450 ed,"Stop execution");
451
452 }
453 A = frag->GetA_asInt();
454 Z = frag->GetZ_asInt();
455 results.clear();
456 if (fVerbose > 2) {
457 G4cout << "G4ExcitationHandler# " << kk << " Z= " << Z << " A= " << A
458 << " Eex(MeV)= " << frag->GetExcitationEnergy() << G4endl;
459 }
460 // Fermi Break-Up
461 if (theFermiModel->IsApplicable(Z, A, frag->GetExcitationEnergy())) {
462 theFermiModel->BreakFragment(&results, frag);
463 std::size_t nsec = results.size();
464 if (fVerbose > 2) { G4cout << "FermiBreakUp Nsec= " << nsec << G4endl; }
465
466 // FBU takes care to delete input fragment or add it to the results
467 // The secondary may be excited - photo-evaporation should be applied
468 if (1 < nsec) {
469 for (auto const & res : results) {
470 SortSecondaryFragment(res);
471 }
472 continue;
473 }
474 // evaporation will be applied
475 }
476 // apply Evaporation, residual nucleus is always added to the results
477 // photon evaporation is possible
478 theEvaporation->BreakFragment(&results, frag);
479 if (fVerbose > 3) {
480 G4cout << "Evaporation Nsec= " << results.size() << G4endl;
481 }
482 if (0 == results.size()) {
483 theResults.push_back(frag);
484 } else {
485 SortSecondaryFragment(frag);
486 }
487
488 // Sort out secondary fragments
489 for (auto const & res : results) {
490 if(fVerbose > 4) {
491 G4cout << "Evaporated product #" << *res << G4endl;
492 }
493 SortSecondaryFragment(res);
494 } // end of loop on secondary
495 } // end of the loop over theEvapList
496 if (fVerbose > 2) {
497 G4cout << "## After 2nd step of handler " << theEvapList.size()
498 << " was evap; "
499 << theResults.size() << " results. " << G4endl;
500 }
501 G4ReactionProductVector * theReactionProductVector =
503
504 // MAC (24/07/08)
505 // To optimise the storing speed, we reserve space
506 // in memory for the vector
507 theReactionProductVector->reserve( theResults.size() );
508
509 if (fVerbose > 2) {
510 G4cout << "### ExcitationHandler provides " << theResults.size()
511 << " evaporated products:" << G4endl;
512 }
513 G4LorentzVector partOfLambdaLV;
514 if ( nL > 0 ) partOfLambdaLV = lambdaLV/(G4double)nL;
515 for (auto const & frag : theResults) {
516 G4LorentzVector lv0 = frag->GetMomentum();
517 G4double etot = lv0.e();
518
519 // in the case of dummy de-excitation, excitation energy is transfered
520 // into kinetic energy of output ion
521 if (!isActive) {
522 G4double mass = frag->GetGroundStateMass();
523 G4double ptot = lv0.vect().mag();
524 G4double fac = (etot <= mass || 0.0 == ptot) ? 0.0
525 : std::sqrt((etot - mass)*(etot + mass))/ptot;
526 G4LorentzVector lv((frag->GetMomentum()).px()*fac,
527 (frag->GetMomentum()).py()*fac,
528 (frag->GetMomentum()).pz()*fac, etot);
529 frag->SetMomentum(lv);
530 }
531 if (fVerbose > 3) {
532 G4cout << *frag;
533 if (frag->NuclearPolarization()) {
534 G4cout << " " << frag->NuclearPolarization();
535 }
536 G4cout << G4endl;
537 }
538
539 G4int fragmentA = frag->GetA_asInt();
540 G4int fragmentZ = frag->GetZ_asInt();
541 G4double eexc = 0.0;
542 const G4ParticleDefinition* theKindOfFragment = nullptr;
543 G4bool isHyperN = false;
544 if (fragmentA == 0) { // photon or e-
545 theKindOfFragment = frag->GetParticleDefinition();
546 } else if (fragmentA == 1 && fragmentZ == 0) { // neutron
547 theKindOfFragment = theNeutron;
548 } else if (fragmentA == 1 && fragmentZ == 1) { // proton
549 theKindOfFragment = theProton;
550 } else if (fragmentA == 2 && fragmentZ == 1) { // deuteron
551 theKindOfFragment = theDeuteron;
552 } else if (fragmentA == 3 && fragmentZ == 1) { // triton
553 theKindOfFragment = theTriton;
554 if(0 < nL) {
555 const G4ParticleDefinition* p = thePartTable->FindParticle(1010010030);
556 if(nullptr != p) {
557 theKindOfFragment = p;
558 isHyperN = true;
559 --nL;
560 }
561 }
562 } else if (fragmentA == 3 && fragmentZ == 2) { // helium3
563 theKindOfFragment = theHe3;
564 } else if (fragmentA == 4 && fragmentZ == 2) { // alpha
565 theKindOfFragment = theAlpha;
566 if (0 < nL) {
567 const G4ParticleDefinition* p = thePartTable->FindParticle(1010020040);
568 if(nullptr != p) {
569 theKindOfFragment = p;
570 isHyperN = true;
571 --nL;
572 }
573 }
574 } else {
575
576 // fragment
577 eexc = frag->GetExcitationEnergy();
578 G4int idxf = frag->GetFloatingLevelNumber();
579 if (eexc < minExcitation) {
580 eexc = 0.0;
581 idxf = 0;
582 }
583
584 theKindOfFragment = theTableOfIons->GetIon(fragmentZ, fragmentA, eexc,
586 if (fVerbose > 3) {
587 G4cout << "### EXCH: Find ion Z= " << fragmentZ
588 << " A= " << fragmentA
589 << " Eexc(MeV)= " << eexc/MeV << " idx= " << idxf
590 << G4endl;
591 }
592 }
593 // fragment identified
594 if (nullptr != theKindOfFragment) {
595 G4ReactionProduct * theNew = new G4ReactionProduct(theKindOfFragment);
596 if (isHyperN) {
597 G4LorentzVector lv = lv0 + partOfLambdaLV;
598 G4ThreeVector dir = lv.vect().unit();
599 G4double mass = theKindOfFragment->GetPDGMass();
600 etot = std::max(lv.e(), mass);
601 G4double ptot = std::sqrt((etot - mass)*(etot + mass));
602 dir *= ptot;
603 theNew->SetMomentum(dir);
604 // remaining not compensated 4-momentum
605 lambdaLV += (lv0 - G4LorentzVector(dir, etot));
606 } else {
607 theNew->SetMomentum(lv0.vect());
608 }
609 theNew->SetTotalEnergy(etot);
610 theNew->SetFormationTime(frag->GetCreationTime());
611 if (theKindOfFragment == theElectron) {
612 theNew->SetCreatorModelID(icID);
613 } else {
614 theNew->SetCreatorModelID(frag->GetCreatorModelID());
615 }
616 theReactionProductVector->push_back(theNew);
617
618 // fragment not found out ground state is created
619 } else {
620 theKindOfFragment =
621 theTableOfIons->GetIon(fragmentZ,fragmentA,0.0,noFloat,0);
622 if (theKindOfFragment) {
623 G4ThreeVector mom(0.0,0.0,0.0);
624 G4double ionmass = theKindOfFragment->GetPDGMass();
625 if (etot <= ionmass) {
626 etot = ionmass;
627 } else {
628 G4double ptot = std::sqrt((etot - ionmass)*(etot + ionmass));
629 mom = (frag->GetMomentum().vect().unit())*ptot;
630 }
631 G4ReactionProduct * theNew = new G4ReactionProduct(theKindOfFragment);
632 theNew->SetMomentum(mom);
633 theNew->SetTotalEnergy(etot);
634 theNew->SetFormationTime(frag->GetCreationTime());
635 theNew->SetCreatorModelID(frag->GetCreatorModelID());
636 theReactionProductVector->push_back(theNew);
637 if (fVerbose > 3) {
638 G4cout << " ground state, energy corrected E(MeV)= "
639 << etot << G4endl;
640 }
641 }
642 }
643 delete frag;
644 }
645 // remaining lambdas are free; conserve quantum numbers but
646 // not 4-momentum
647 if (0 < nL) {
648 G4ThreeVector dir = G4ThreeVector(0.0, 0.0, 0.0);
649 if (lambdaLV.vect().mag() > CLHEP::eV) {
650 dir = lambdaLV.vect().unit();
651 }
652 G4double etot = std::max(lambdaLV.e()/(G4double)nL, fLambdaMass);
653 dir *= std::sqrt((etot - fLambdaMass)*(etot + fLambdaMass));
654 for (G4int i=0; i<nL; ++i) {
655 G4ReactionProduct* theNew = new G4ReactionProduct(theLambda);
656 theNew->SetMomentum(dir);
657 theNew->SetTotalEnergy(etot);
658 theNew->SetFormationTime(theInitialState.GetCreationTime());
659 theNew->SetCreatorModelID(theInitialState.GetCreatorModelID());
660 theReactionProductVector->push_back(theNew);
661 }
662 }
663 if (fVerbose > 3) {
664 G4cout << "@@@@@@@@@@ End G4Excitation Handler "<< G4endl;
665 }
666 return theReactionProductVector;
667}
@ JustWarning
@ FatalException
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
std::ostringstream G4ExceptionDescription
std::vector< G4Fragment * > G4FragmentVector
Definition G4Fragment.hh:65
#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]
Hep3Vector unit() const
double mag() const
Hep3Vector vect() const
G4double GetGroundStateMass() const
G4int GetCreatorModelID() const
G4double GetExcitationEnergy() const
const G4LorentzVector & GetMomentum() const
G4double GetCreationTime() const
G4int GetZ_asInt() const
G4int GetNumberOfLambdas() const
void SetMomentum(const G4LorentzVector &value)
G4int GetA_asInt() const
void SetZAandMomentum(const G4LorentzVector &, G4int Z, G4int A, G4int nLambdas=0)
G4ParticleDefinition * GetIon(G4int Z, G4int A, G4int lvl=0)
static G4Ions::G4FloatLevelBase FloatLevelBase(char flbChar)
Definition G4Ions.cc:107
G4ParticleDefinition * FindParticle(G4int PDGEncoding)
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)
virtual void BreakFragment(G4FragmentVector *, G4Fragment *theNucleus)
virtual G4bool IsApplicable(G4int Z, G4int A, G4double eexc) const =0
virtual void BreakFragment(G4FragmentVector *results, G4Fragment *theNucleus)=0
virtual G4FragmentVector * BreakItUp(const G4Fragment &theNucleus)=0

Referenced by G4EMDissociation::ApplyYourself(), G4LightIonQMDReaction::ApplyYourself(), G4LowEIonFragmentation::ApplyYourself(), G4NeutronFissionVI::ApplyYourself(), G4QMDReaction::ApplyYourself(), G4WilsonAbrasionModel::ApplyYourself(), and G4PreCompoundDeexcitation::deExcite().

◆ GetEvaporation()

G4VEvaporation * G4ExcitationHandler::GetEvaporation ( )

Definition at line 265 of file G4ExcitationHandler.cc.

266{
267 if (nullptr != theEvaporation) { SetParameters(); }
268 return theEvaporation;
269}

Referenced by G4INCLXXInterface::G4INCLXXInterface(), and G4NeutronFissionVI::InitialiseModel().

◆ GetFermiModel()

G4VFermiBreakUp * G4ExcitationHandler::GetFermiModel ( )

Definition at line 277 of file G4ExcitationHandler.cc.

278{
279 if (nullptr != theFermiModel) { SetParameters(); }
280 return theFermiModel;
281}

◆ GetMultiFragmentation()

G4VMultiFragmentation * G4ExcitationHandler::GetMultiFragmentation ( )

Definition at line 271 of file G4ExcitationHandler.cc.

272{
273 if (nullptr != theMultiFragmentation) { SetParameters(); }
274 return theMultiFragmentation;
275}

◆ GetPhotonEvaporation()

G4VEvaporationChannel * G4ExcitationHandler::GetPhotonEvaporation ( )

Definition at line 283 of file G4ExcitationHandler.cc.

284{
285 if(nullptr != thePhotonEvaporation) { SetParameters(); }
286 return thePhotonEvaporation;
287}

◆ Initialise()

void G4ExcitationHandler::Initialise ( )

Definition at line 166 of file G4ExcitationHandler.cc.

167{
168 if(isInitialised) { return; }
169 if(fVerbose > 1) {
170 G4cout << "G4ExcitationHandler::Initialise() started " << this << G4endl;
171 }
172 G4DeexPrecoParameters* param =
174 isInitialised = true;
175 SetParameters();
176 if(isActive) {
177 theFermiModel->Initialise();
178 theEvaporation->InitialiseChannels();
179 }
180 // dump level is controlled by parameter class
181 param->Dump();
182}
G4DeexPrecoParameters * GetParameters()
static G4NuclearLevelData * GetInstance()
virtual void InitialiseChannels()
virtual void Initialise()=0

Referenced by BreakItUp(), G4AblaInterface::InitialiseModel(), G4NeutronFissionVI::InitialiseModel(), and G4PreCompoundModel::InitialiseModel().

◆ ModelDescription()

void G4ExcitationHandler::ModelDescription ( std::ostream & outFile) const

Definition at line 669 of file G4ExcitationHandler.cc.

670{
671 outFile << "G4ExcitationHandler description\n"
672 << "This class samples de-excitation of excited nucleus using\n"
673 << "Fermi Break-up model for light fragments (Z < 9, A < 17), "
674 << "evaporation, fission, and photo-evaporation models. Evaporated\n"
675 << "particle may be proton, neutron, and other light fragment \n"
676 << "(Z < 13, A < 29). During photon evaporation produced gamma \n"
677 << "or electrons due to internal conversion \n";
678}

Referenced by G4BinaryCascade::ModelDescription(), and G4BinaryCascade::PropagateModelDescription().

◆ operator!=()

G4bool G4ExcitationHandler::operator!= ( const G4ExcitationHandler & right) const
delete

◆ operator=()

const G4ExcitationHandler & G4ExcitationHandler::operator= ( const G4ExcitationHandler & right)
delete

◆ operator==()

G4bool G4ExcitationHandler::operator== ( const G4ExcitationHandler & right) const
delete

◆ SetDeexChannelsType()

void G4ExcitationHandler::SetDeexChannelsType ( G4DeexChannelType val)

Definition at line 233 of file G4ExcitationHandler.cc.

234{
235 G4Evaporation* evap = static_cast<G4Evaporation*>(theEvaporation);
236 if(fVerbose > 1) {
237 G4cout << "G4ExcitationHandler::SetDeexChannelsType " << val
238 << " for " << this << G4endl;
239 }
240 if(val == fDummy) {
241 isActive = false;
242 return;
243 }
244 if (nullptr == evap) { return; }
245 if (val == fEvaporation) {
246 evap->SetDefaultChannel();
247 } else if (val == fCombined) {
248 evap->SetCombinedChannel();
249 } else if (val == fGEM) {
250 evap->SetGEMChannel();
251 } else if (val == fGEMVI) {
252 evap->SetGEMVIChannel();
253 }
254 evap->InitialiseChannels();
255 if (fVerbose > 1) {
257 G4cout << "Number of de-excitation channels is changed to: "
258 << theEvaporation->GetNumberOfChannels();
259 G4cout << " " << this;
260 }
261 G4cout << G4endl;
262 }
263}
void SetDefaultChannel()
void SetCombinedChannel()
void InitialiseChannels() override
std::size_t GetNumberOfChannels() const
G4bool IsMasterThread()

◆ SetEvaporation()

void G4ExcitationHandler::SetEvaporation ( G4VEvaporation * ptr,
G4bool isLocal = false )

Definition at line 184 of file G4ExcitationHandler.cc.

185{
186 if(nullptr != ptr && ptr != theEvaporation) {
187 theEvaporation = ptr;
188 theEvaporation->SetPhotonEvaporation(thePhotonEvaporation);
189 theEvaporation->SetFermiBreakUp(theFermiModel);
190 isEvapLocal = flag;
191 if(fVerbose > 1) {
192 G4cout << "G4ExcitationHandler::SetEvaporation() " << ptr << " done for " << this << G4endl;
193 }
194 }
195}
virtual void SetPhotonEvaporation(G4VEvaporationChannel *ptr)
void SetFermiBreakUp(G4VFermiBreakUp *ptr)

Referenced by G4ExcitationHandler(), G4WilsonAbrasionModel::G4WilsonAbrasionModel(), and G4WilsonAbrasionModel::SetUseAblation().

◆ SetFermiModel()

void G4ExcitationHandler::SetFermiModel ( G4VFermiBreakUp * ptr)

Definition at line 206 of file G4ExcitationHandler.cc.

207{
208 if(nullptr != ptr && ptr != theFermiModel) {
209 delete theFermiModel;
210 theFermiModel = ptr;
211 if(nullptr != theEvaporation) {
212 theEvaporation->SetFermiBreakUp(theFermiModel);
213 }
214 }
215}

◆ SetMaxAandZForFermiBreakUp()

void G4ExcitationHandler::SetMaxAandZForFermiBreakUp ( G4int anA,
G4int aZ )
inline

Definition at line 172 of file G4ExcitationHandler.hh.

173{
176}
void SetMaxZForFermiBreakUp(G4int aZ)
void SetMaxAForFermiBreakUp(G4int anA)

◆ SetMaxAForFermiBreakUp()

void G4ExcitationHandler::SetMaxAForFermiBreakUp ( G4int anA)
inline

Definition at line 167 of file G4ExcitationHandler.hh.

168{
169 maxAForFermiBreakUp = anA;
170}

Referenced by SetMaxAandZForFermiBreakUp().

◆ SetMaxZForFermiBreakUp()

void G4ExcitationHandler::SetMaxZForFermiBreakUp ( G4int aZ)
inline

Definition at line 162 of file G4ExcitationHandler.hh.

163{
164 maxZForFermiBreakUp = aZ;
165}

Referenced by SetMaxAandZForFermiBreakUp().

◆ SetMinEForMultiFrag()

void G4ExcitationHandler::SetMinEForMultiFrag ( G4double anE)
inline

Definition at line 178 of file G4ExcitationHandler.hh.

179{
180 minEForMultiFrag = anE;
181}

Referenced by G4EMDissociation::G4EMDissociation().

◆ SetMultiFragmentation()

void G4ExcitationHandler::SetMultiFragmentation ( G4VMultiFragmentation * ptr)

Definition at line 198 of file G4ExcitationHandler.cc.

199{
200 if(nullptr != ptr && ptr != theMultiFragmentation) {
201 delete theMultiFragmentation;
202 theMultiFragmentation = ptr;
203 }
204}

◆ SetOPTxs()

void G4ExcitationHandler::SetOPTxs ( G4int opt)
inline

◆ SetPhotonEvaporation()

void G4ExcitationHandler::SetPhotonEvaporation ( G4VEvaporationChannel * ptr)

Definition at line 218 of file G4ExcitationHandler.cc.

219{
220 if(nullptr != ptr && ptr != thePhotonEvaporation) {
221 delete thePhotonEvaporation;
222 thePhotonEvaporation = ptr;
223 if(nullptr != theEvaporation) {
224 theEvaporation->SetPhotonEvaporation(ptr);
225 }
226 if(fVerbose > 1) {
227 G4cout << "G4ExcitationHandler::SetPhotonEvaporation() " << ptr
228 << " for handler " << this << G4endl;
229 }
230 }
231}

◆ UseSICB()

void G4ExcitationHandler::UseSICB ( )
inline

The documentation for this class was generated from the following files: