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

#include <G4UnstableFragmentBreakUp.hh>

+ Inheritance diagram for G4UnstableFragmentBreakUp:

Public Member Functions

 G4UnstableFragmentBreakUp ()
 
virtual ~G4UnstableFragmentBreakUp ()
 
virtual G4bool BreakUpChain (G4FragmentVector *, G4Fragment *) final
 
virtual G4double GetEmissionProbability (G4Fragment *fragment) final
 
void SetVerbose (G4int val)
 
- Public Member Functions inherited from G4VEvaporationChannel
 G4VEvaporationChannel (const G4String &aName="")
 
virtual ~G4VEvaporationChannel ()=default
 
virtual G4double GetEmissionProbability (G4Fragment *theNucleus)=0
 
virtual void Initialise ()
 
virtual G4double GetLifeTime (G4Fragment *theNucleus)
 
virtual G4FragmentEmittedFragment (G4Fragment *theNucleus)
 
virtual G4bool BreakUpChain (G4FragmentVector *theResult, G4Fragment *theNucleus)
 
G4FragmentVectorBreakUpFragment (G4Fragment *theNucleus)
 
virtual G4double ComputeInverseXSection (G4Fragment *theNucleus, G4double kinEnergy)
 
virtual G4double ComputeProbability (G4Fragment *theNucleus, G4double kinEnergy)
 
virtual void Dump () const
 
virtual void SetICM (G4bool)
 
virtual void RDMForced (G4bool)
 
void SetOPTxs (G4int opt)
 
void UseSICB (G4bool use)
 
 G4VEvaporationChannel (const G4VEvaporationChannel &right)=delete
 
const G4VEvaporationChanneloperator= (const G4VEvaporationChannel &right)=delete
 
G4bool operator== (const G4VEvaporationChannel &right) const =delete
 
G4bool operator!= (const G4VEvaporationChannel &right) const =delete
 

Additional Inherited Members

- Protected Attributes inherited from G4VEvaporationChannel
G4int OPTxs
 
G4bool useSICB
 

Detailed Description

Definition at line 56 of file G4UnstableFragmentBreakUp.hh.

Constructor & Destructor Documentation

◆ G4UnstableFragmentBreakUp()

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) {
63 masses[i] = G4NucleiProperties::GetNuclearMass(Afr[i], Zfr[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)

◆ ~G4UnstableFragmentBreakUp()

G4UnstableFragmentBreakUp::~G4UnstableFragmentBreakUp ( )
virtual

Definition at line 68 of file G4UnstableFragmentBreakUp.cc.

69{}

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.005*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 G4double delm = mass - masses[i] - masses[j];
106 /*
107 G4cout << "i=" << i << " j=" << j << " Zres=" << Zres
108 << " Ares=" << Ares << " delm=" << delm << G4endl;
109 */
110 if(delm > exca) {
111 mass2 = masses[i]; // emitted
112 mass1 = masses[j]; // recoil
113 exca = delm;
114 idx = i;
115 if(delm > 0.0) {
116 isChannel = true;
117 break;
118 }
119 }
120 }
121 }
122 }
123 if(isChannel) { break; }
124 // no simple channel
126 G4double e = mass - mres - masses[i];
127 // select excited state
128 //const G4LevelManager* lman = fLevelData->GetLevelManager(Zres, Ares);
129 /*
130 G4cout << "i=" << i << " Zres=" << Zres
131 << " Ares=" << Ares << " delm=" << e << G4endl;
132 */
133 if(e >= exca) {
134 mass2 = masses[i];
135 mass1 = (Ares > 4 && e > 0.0) ? mres + e*G4UniformRand() : mres;
136 exca = e;
137 idx = i;
138 if(e > 0.0) {
139 isChannel = true;
140 break;
141 }
142 }
143 }
144 }
145
146 G4double massmin = mass1 + mass2;
147 if(fVerbose > 1) {
148 G4cout << "isChannel:" << isChannel << " idx=" << idx << " Zfr=" << Zfr[idx]
149 << " Arf=" << Afr[idx] << " delm=" << mass - massmin << G4endl;
150 }
151 if(!isChannel || mass < massmin) {
152 if(mass + dmlimit < massmin) { return false; }
153 if(fVerbose > 1) {
154 G4cout << "#Unstable decay correction: Z= " << Z << " A= " << A
155 << " idx= " << idx
156 << " deltaM(MeV)= " << mass - massmin
157 << G4endl;
158 }
159 mass = massmin;
160 G4double e = std::max(lv.e(), mass + tolerance);
161 G4double mom = std::sqrt((e - mass)*(e + mass));
162 G4ThreeVector dir = lv.vect().unit();
163 lv.set(dir*mom, e);
164 }
165
166 // compute energy of light fragment
167 G4double e2 = 0.5*((mass - mass1)*(mass + mass1) + mass2*mass2)/mass;
168 e2 = std::max(e2, mass2);
169 G4double mom = std::sqrt((e2 - mass2)*(e2 + mass2));
170
171 // sample decay
172 G4ThreeVector bst = lv.boostVector();
174 G4LorentzVector mom2 = G4LorentzVector(v*mom, e2);
175 mom2.boost(bst);
176 frag = new G4Fragment(Afr[idx], Zfr[idx], mom2);
177 frag->SetCreationTime(time);
178 frag->SetCreatorModelID(fSecID);
179 results->push_back(frag);
180
181 // residual
182 lv -= mom2;
183 Z -= Zfr[idx];
184 A -= Afr[idx];
185
186 nucleus->SetZandA_asInt(Z, A);
187 nucleus->SetMomentum(lv);
188 nucleus->SetCreatorModelID(fSecID);
189 return true;
190}
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)
void SetZandA_asInt(G4int Znew, G4int Anew, G4int Lnew=0)
Definition: G4Fragment.hh:295
G4double GetExcitationEnergy() const
Definition: G4Fragment.hh:312
const G4LorentzVector & GetMomentum() const
Definition: G4Fragment.hh:322
void SetCreatorModelID(G4int value)
Definition: G4Fragment.hh:433
G4double GetCreationTime() const
Definition: G4Fragment.hh:479
G4int GetZ_asInt() const
Definition: G4Fragment.hh:289
void SetCreationTime(G4double time)
Definition: G4Fragment.hh:484
void SetMomentum(const G4LorentzVector &value)
Definition: G4Fragment.hh:327
G4int GetA_asInt() const
Definition: G4Fragment.hh:284

Referenced by G4Evaporation::BreakFragment().

◆ GetEmissionProbability()

G4double G4UnstableFragmentBreakUp::GetEmissionProbability ( G4Fragment fragment)
finalvirtual

Implements G4VEvaporationChannel.

Definition at line 192 of file G4UnstableFragmentBreakUp.cc.

193{
194 return 0.0;
195}

◆ SetVerbose()

void G4UnstableFragmentBreakUp::SetVerbose ( G4int  val)
inline

Definition at line 69 of file G4UnstableFragmentBreakUp.hh.

69{ fVerbose = val; }

Referenced by G4Evaporation::InitialiseChannels().


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