Geant4-11
Public Member Functions | Protected Attributes | Private Member Functions | Private Attributes | Static Private Attributes
G4UnstableFragmentBreakUp Class Reference

#include <G4UnstableFragmentBreakUp.hh>

Inheritance diagram for G4UnstableFragmentBreakUp:
G4VEvaporationChannel

Public Member Functions

virtual G4bool BreakUpChain (G4FragmentVector *, G4Fragment *) final
 
G4FragmentVectorBreakUpFragment (G4Fragment *theNucleus)
 
virtual void Dump () const
 
virtual G4FragmentEmittedFragment (G4Fragment *theNucleus)
 
 G4UnstableFragmentBreakUp ()
 
virtual G4double GetEmissionProbability (G4Fragment *fragment) final
 
virtual G4double GetLifeTime (G4Fragment *theNucleus)
 
virtual void Initialise ()
 
virtual void RDMForced (G4bool)
 
virtual void SetICM (G4bool)
 
void SetOPTxs (G4int opt)
 
void SetVerbose (G4int val)
 
void UseSICB (G4bool use)
 
virtual ~G4UnstableFragmentBreakUp ()
 

Protected Attributes

G4int OPTxs
 
G4bool useSICB
 

Private Member Functions

 G4UnstableFragmentBreakUp (const G4UnstableFragmentBreakUp &right)
 
G4bool operator!= (const G4UnstableFragmentBreakUp &right) const
 
const G4UnstableFragmentBreakUpoperator= (const G4UnstableFragmentBreakUp &right)
 
G4bool operator== (const G4UnstableFragmentBreakUp &right) const
 

Private Attributes

G4NuclearLevelDatafLevelData
 
G4int fSecID
 
G4int fVerbose
 
G4double masses [6]
 

Static Private Attributes

static const G4int Afr [6] = {1, 1, 2, 3, 3, 4}
 
static const G4int Zfr [6] = {0, 1, 1, 1, 2, 2}
 

Detailed Description

Definition at line 56 of file G4UnstableFragmentBreakUp.hh.

Constructor & Destructor Documentation

◆ G4UnstableFragmentBreakUp() [1/2]

G4UnstableFragmentBreakUp::G4UnstableFragmentBreakUp ( )
explicit

Definition at line 59 of file G4UnstableFragmentBreakUp.cc.

59 : fVerbose(1), fSecID(-1)
60{
62 for(G4int i=0; i<6; ++i) {
64 }
65 fSecID = G4PhysicsModelCatalog::GetModelID("model_G4UnstableFragmentBreakUp");
66}
int G4int
Definition: G4Types.hh:85
static G4NuclearLevelData * GetInstance()
static G4double GetNuclearMass(const G4double A, const G4double Z)
static G4int GetModelID(const G4int modelIndex)

References Afr, fLevelData, fSecID, G4NuclearLevelData::GetInstance(), G4PhysicsModelCatalog::GetModelID(), G4NucleiProperties::GetNuclearMass(), masses, and Zfr.

◆ ~G4UnstableFragmentBreakUp()

G4UnstableFragmentBreakUp::~G4UnstableFragmentBreakUp ( )
virtual

Definition at line 68 of file G4UnstableFragmentBreakUp.cc.

69{}

◆ G4UnstableFragmentBreakUp() [2/2]

G4UnstableFragmentBreakUp::G4UnstableFragmentBreakUp ( const G4UnstableFragmentBreakUp right)
private

Member Function Documentation

◆ BreakUpChain()

G4bool G4UnstableFragmentBreakUp::BreakUpChain ( G4FragmentVector results,
G4Fragment nucleus 
)
finalvirtual

Reimplemented from G4VEvaporationChannel.

Definition at line 71 of file G4UnstableFragmentBreakUp.cc.

73{
74 //G4cout << "G4UnstableFragmentBreakUp::EmittedFragment" << G4endl;
75 G4Fragment* frag = nullptr;
76
77 G4int Z = nucleus->GetZ_asInt();
78 G4int A = nucleus->GetA_asInt();
79
80 G4LorentzVector lv = nucleus->GetMomentum();
81 G4double time = nucleus->GetCreationTime();
82
83 G4double mass1(0.0), mass2(0.0);
84
85 // look for the decay channel with normal masses
86 // without Coulomb barrier and paring corrections
87 // 1 - recoil, 2 - emitted light ion
88 if(fVerbose > 1) {
89 G4cout << "#Unstable decay " << " Z= " << Z << " A= " << A
90 << " Eex(MeV)= " << nucleus->GetExcitationEnergy() << G4endl;
91 }
92 const G4double tolerance = 10*CLHEP::eV;
93 const G4double dmlimit = 0.2*CLHEP::MeV;
94 G4double mass = lv.mag();
95 G4double exca = -1000.0;
96 G4bool isChannel = false;
97 G4int idx = -1;
98 for(G4int i=0; i<6; ++i) {
99 G4int Zres = Z - Zfr[i];
100 G4int Ares = A - Afr[i];
101 if(Zres >= 0 && Ares >= Zres && Ares >= Afr[i]) {
102 if(Ares <= 4) {
103 for(G4int j=0; j<6; ++j) {
104 if(Zres == Zfr[j] && Ares == Afr[j]) {
105 /*
106 G4cout << "i= " << i << " j= " << j << " Zres= " << Zres
107 << " Ares= " << Ares << " dm= " << mass - masses[i] - masses[j]
108 << G4endl;
109 */
110 G4double delm = mass - masses[i] - masses[j];
111 if(delm > exca) {
112 mass2 = masses[i]; // emitted
113 mass1 = masses[j]; // recoil
114 exca = delm;
115 idx = i;
116 if(delm > 0.0) { isChannel = true; }
117 break;
118 }
119 }
120 }
121 }
122 if(isChannel) { break; }
123 // no simple channel
125 G4double e = mass - mres - masses[i];
126 // select excited state
127 const G4LevelManager* lman = fLevelData->GetLevelManager(Zres, Ares);
128 if(lman && e >= 0.0) {
129 mass2 = masses[i];
130 mass1 = mres + e*G4UniformRand();
131 idx = i;
132 isChannel = true;
133 break;
134 }
135 // if physical channel is not identified
136 // check excitation energy
137 if(e > exca) {
138 mass2 = masses[i];
139 mass1 = mres;
140 if(e > 0.0) { mass1 += e; }
141 exca = e;
142 idx = i;
143 }
144 }
145 }
146 G4double massmin = mass1 + mass2;
147 if(mass < massmin) {
148 if(mass + dmlimit < massmin) { return false; }
149 if(fVerbose > 1) {
150 G4cout << "#Unstable decay correction: Z= " << Z << " A= " << A
151 << " idx= " << idx
152 << " deltaM(MeV)= " << mass - massmin
153 << G4endl;
154 }
155 mass = massmin;
156 G4double e = std::max(lv.e(), mass + tolerance);
157 G4double mom = std::sqrt((e - mass)*(e + mass));
158 G4ThreeVector dir = lv.vect().unit();
159 lv.set(dir*mom, e);
160 }
161
162 // compute energy of light fragment
163 G4double e2 = 0.5*((mass - mass1)*(mass + mass1) + mass2*mass2)/mass;
164 e2 = std::max(e2, mass2);
165 G4double mom = std::sqrt((e2 - mass2)*(e2 + mass2));
166
167 // sample decay
168 G4ThreeVector bst = lv.boostVector();
170 G4LorentzVector mom2 = G4LorentzVector(v*mom, e2);
171 mom2.boost(bst);
172 frag = new G4Fragment(Afr[idx], Zfr[idx], mom2);
173 frag->SetCreationTime(time);
175 results->push_back(frag);
176
177 // residual
178 lv -= mom2;
179 Z -= Zfr[idx];
180 A -= Afr[idx];
181
182 nucleus->SetZandA_asInt(Z, A);
183 nucleus->SetMomentum(lv);
184 nucleus->SetCreatorModelID(fSecID);
185 return true;
186}
static const G4double e2[44]
CLHEP::HepLorentzVector G4LorentzVector
G4ThreeVector G4RandomDirection()
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
const G4int Z[17]
const G4double A[17]
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
#define G4UniformRand()
Definition: Randomize.hh:52
Hep3Vector unit() const
Hep3Vector boostVector() const
HepLorentzVector & boost(double, double, double)
Hep3Vector vect() const
void set(double x, double y, double z, double t)
G4double GetExcitationEnergy() const
Definition: G4Fragment.hh:299
const G4LorentzVector & GetMomentum() const
Definition: G4Fragment.hh:323
void SetCreatorModelID(G4int value)
Definition: G4Fragment.hh:428
G4double GetCreationTime() const
Definition: G4Fragment.hh:464
G4int GetZ_asInt() const
Definition: G4Fragment.hh:276
void SetCreationTime(G4double time)
Definition: G4Fragment.hh:469
void SetMomentum(const G4LorentzVector &value)
Definition: G4Fragment.hh:328
void SetZandA_asInt(G4int Znew, G4int Anew)
Definition: G4Fragment.hh:281
G4int GetA_asInt() const
Definition: G4Fragment.hh:271
const G4LevelManager * GetLevelManager(G4int Z, G4int A)
static constexpr double MeV
static constexpr double eV
T max(const T t1, const T t2)
brief Return the largest of the two arguments

References A, Afr, CLHEP::HepLorentzVector::boost(), CLHEP::HepLorentzVector::boostVector(), CLHEP::HepLorentzVector::e(), e2, CLHEP::eV, fLevelData, fSecID, fVerbose, G4cout, G4endl, G4RandomDirection(), G4UniformRand, G4Fragment::GetA_asInt(), G4Fragment::GetCreationTime(), G4Fragment::GetExcitationEnergy(), G4NuclearLevelData::GetLevelManager(), G4Fragment::GetMomentum(), G4NucleiProperties::GetNuclearMass(), G4Fragment::GetZ_asInt(), CLHEP::HepLorentzVector::mag(), masses, G4INCL::Math::max(), CLHEP::MeV, CLHEP::HepLorentzVector::set(), G4Fragment::SetCreationTime(), G4Fragment::SetCreatorModelID(), G4Fragment::SetMomentum(), G4Fragment::SetZandA_asInt(), CLHEP::Hep3Vector::unit(), CLHEP::HepLorentzVector::vect(), Z, and Zfr.

Referenced by G4Evaporation::BreakFragment().

◆ BreakUpFragment()

G4FragmentVector * G4VEvaporationChannel::BreakUpFragment ( G4Fragment theNucleus)
inlineinherited

Definition at line 106 of file G4VEvaporationChannel.hh.

107{
108 G4FragmentVector* results = new G4FragmentVector();
109 BreakUpChain(results, theNucleus);
110 return results;
111}
std::vector< G4Fragment * > G4FragmentVector
Definition: G4Fragment.hh:64
virtual G4bool BreakUpChain(G4FragmentVector *theResult, G4Fragment *theNucleus)

References G4VEvaporationChannel::BreakUpChain().

Referenced by G4NeutronRadCapture::ApplyYourself().

◆ Dump()

void G4VEvaporationChannel::Dump ( ) const
virtualinherited

Reimplemented in G4GEMChannel, and G4GEMChannelVI.

Definition at line 71 of file G4VEvaporationChannel.cc.

72{}

◆ EmittedFragment()

G4Fragment * G4VEvaporationChannel::EmittedFragment ( G4Fragment theNucleus)
virtualinherited

Reimplemented in G4GEMChannel, G4GEMChannelVI, G4PhotonEvaporation, G4EvaporationChannel, and G4CompetitiveFission.

Definition at line 61 of file G4VEvaporationChannel.cc.

62{
63 return nullptr;
64}

◆ GetEmissionProbability()

G4double G4UnstableFragmentBreakUp::GetEmissionProbability ( G4Fragment fragment)
finalvirtual

Implements G4VEvaporationChannel.

Definition at line 188 of file G4UnstableFragmentBreakUp.cc.

189{
190 return 0.0;
191}

◆ GetLifeTime()

G4double G4VEvaporationChannel::GetLifeTime ( G4Fragment theNucleus)
virtualinherited

Definition at line 50 of file G4VEvaporationChannel.cc.

51{
52 return 0.0;
53}

◆ Initialise()

void G4VEvaporationChannel::Initialise ( )
virtualinherited

◆ operator!=()

G4bool G4UnstableFragmentBreakUp::operator!= ( const G4UnstableFragmentBreakUp right) const
private

◆ operator=()

const G4UnstableFragmentBreakUp & G4UnstableFragmentBreakUp::operator= ( const G4UnstableFragmentBreakUp right)
private

◆ operator==()

G4bool G4UnstableFragmentBreakUp::operator== ( const G4UnstableFragmentBreakUp right) const
private

◆ RDMForced()

void G4VEvaporationChannel::RDMForced ( G4bool  )
virtualinherited

Reimplemented in G4PhotonEvaporation.

Definition at line 58 of file G4VEvaporationChannel.cc.

59{}

◆ SetICM()

void G4VEvaporationChannel::SetICM ( G4bool  )
virtualinherited

Reimplemented in G4PhotonEvaporation.

Definition at line 55 of file G4VEvaporationChannel.cc.

56{}

Referenced by G4NeutronRadCapture::InitialiseModel().

◆ SetOPTxs()

void G4VEvaporationChannel::SetOPTxs ( G4int  opt)
inlineinherited

Definition at line 113 of file G4VEvaporationChannel.hh.

114{}

◆ SetVerbose()

void G4UnstableFragmentBreakUp::SetVerbose ( G4int  val)
inline

Definition at line 69 of file G4UnstableFragmentBreakUp.hh.

69{ fVerbose = val; }

References fVerbose.

Referenced by G4Evaporation::InitialiseChannels().

◆ UseSICB()

void G4VEvaporationChannel::UseSICB ( G4bool  use)
inlineinherited

Definition at line 116 of file G4VEvaporationChannel.hh.

117{}

Field Documentation

◆ Afr

const G4int G4UnstableFragmentBreakUp::Afr = {1, 1, 2, 3, 3, 4}
staticprivate

Definition at line 80 of file G4UnstableFragmentBreakUp.hh.

Referenced by BreakUpChain(), and G4UnstableFragmentBreakUp().

◆ fLevelData

G4NuclearLevelData* G4UnstableFragmentBreakUp::fLevelData
private

Definition at line 83 of file G4UnstableFragmentBreakUp.hh.

Referenced by BreakUpChain(), and G4UnstableFragmentBreakUp().

◆ fSecID

G4int G4UnstableFragmentBreakUp::fSecID
private

Definition at line 86 of file G4UnstableFragmentBreakUp.hh.

Referenced by BreakUpChain(), and G4UnstableFragmentBreakUp().

◆ fVerbose

G4int G4UnstableFragmentBreakUp::fVerbose
private

Definition at line 84 of file G4UnstableFragmentBreakUp.hh.

Referenced by BreakUpChain(), and SetVerbose().

◆ masses

G4double G4UnstableFragmentBreakUp::masses[6]
private

Definition at line 81 of file G4UnstableFragmentBreakUp.hh.

Referenced by BreakUpChain(), and G4UnstableFragmentBreakUp().

◆ OPTxs

G4int G4VEvaporationChannel::OPTxs
protectedinherited

◆ useSICB

G4bool G4VEvaporationChannel::useSICB
protectedinherited

Definition at line 94 of file G4VEvaporationChannel.hh.

◆ Zfr

const G4int G4UnstableFragmentBreakUp::Zfr = {0, 1, 1, 1, 2, 2}
staticprivate

Definition at line 79 of file G4UnstableFragmentBreakUp.hh.

Referenced by BreakUpChain(), and G4UnstableFragmentBreakUp().


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