Geant4 9.6.0
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 G4FragmentVectorBreakUpFragment (G4Fragment *fragment)
 
virtual G4FragmentEmittedFragment (G4Fragment *fragment)
 
virtual G4FragmentVectorBreakUp (const G4Fragment &fragment)
 
virtual G4double GetEmissionProbability (G4Fragment *fragment)
 
void SetVerboseLevel (G4int val)
 
- Public Member Functions inherited from G4VEvaporationChannel
 G4VEvaporationChannel (const G4String &aName="Anonymous")
 
virtual ~G4VEvaporationChannel ()
 
virtual G4FragmentEmittedFragment (G4Fragment *theNucleus)
 
virtual G4FragmentVectorBreakUpFragment (G4Fragment *theNucleus)
 
virtual G4FragmentVectorBreakUp (const G4Fragment &theNucleus)=0
 
virtual G4double GetEmissionProbability (G4Fragment *theNucleus)=0
 
G4String GetName () const
 
void SetName (const G4String &aName)
 
void SetOPTxs (G4int opt)
 
void UseSICB (G4bool use)
 

Additional Inherited Members

- Protected Attributes inherited from G4VEvaporationChannel
G4int OPTxs
 
G4bool useSICB
 

Detailed Description

Definition at line 57 of file G4UnstableFragmentBreakUp.hh.

Constructor & Destructor Documentation

◆ G4UnstableFragmentBreakUp()

G4UnstableFragmentBreakUp::G4UnstableFragmentBreakUp ( )

Definition at line 57 of file G4UnstableFragmentBreakUp.cc.

58 :verbose(0)
59{
60 fNistManager = G4NistManager::Instance();
61 if(0 == Afr[0]) {
62 G4int z[6] = {0, 1, 1, 1, 2, 2};
63 G4int a[6] = {1, 1, 2, 3, 3, 4};
64 for(G4int i=0; i<6; ++i) {
65 Zfr[i] = z[i];
66 Afr[i] = a[i];
67 masses[i] = G4NucleiProperties::GetNuclearMass(a[i], z[i]);
68 }
69 }
70}
int G4int
Definition: G4Types.hh:66
static G4NistManager * Instance()
static G4double GetNuclearMass(const G4double A, const G4double Z)

◆ ~G4UnstableFragmentBreakUp()

G4UnstableFragmentBreakUp::~G4UnstableFragmentBreakUp ( )
virtual

Definition at line 72 of file G4UnstableFragmentBreakUp.cc.

73{}

Member Function Documentation

◆ BreakUp()

G4FragmentVector * G4UnstableFragmentBreakUp::BreakUp ( const G4Fragment fragment)
virtual

Implements G4VEvaporationChannel.

Definition at line 154 of file G4UnstableFragmentBreakUp.cc.

155{
156 return 0;
157}

◆ BreakUpFragment()

G4FragmentVector * G4UnstableFragmentBreakUp::BreakUpFragment ( G4Fragment fragment)
virtual

Reimplemented from G4VEvaporationChannel.

Definition at line 80 of file G4UnstableFragmentBreakUp.cc.

81{
82 //G4cout << "G4UnstableFragmentBreakUp::BreakUpFragment" << G4endl;
83 G4FragmentVector * theResult = new G4FragmentVector();
84
85 G4int Z = nucleus->GetZ_asInt();
86 G4int A = nucleus->GetA_asInt();
87 G4int Amax = A;
88 G4LorentzVector lv = nucleus->GetMomentum();
89 G4double time = nucleus->GetCreationTime();
90
91 G4double deltaE, mass, mass1(0.0), mass2(0.0);
92 G4int i, index;
93
94 // Starts loop over evaporated particles, loop is limited by number
95 // of nucleons
96 for(G4int ia=0; ia<Amax; ++ia) {
97
98 mass = lv.mag();
99 deltaE = 0.0;
100 index = -1;
101 for(i=0; i<6; ++i) {
102 G4int Zres = Z - Zfr[i];
103 G4int Ares = A - Afr[i];
104 if(Zres >= 0 && Ares >= Zres && Ares > 0) {
106 G4double de = mass - m1 - masses[i];
107 if(de > deltaE) {
108 mass1 = m1;
109 mass2 = masses[i];
110 deltaE= de;
111 index = i;
112 }
113 }
114 }
115
116 // no decay channels
117 if(index < 0) { break; }
118
119 // compute energy of light fragment
120 G4double e2 = 0.5*((mass - mass1)*(mass + mass1) + mass2*mass2)/mass;
121 if(e2 < mass2) { break; }
122
123 // sample decay
124 G4ThreeVector bst = lv.boostVector();
125
126 G4double cosTheta = 1. - 2. * G4UniformRand();
127 G4double sinTheta = std::sqrt(1. - cosTheta * cosTheta);
128 G4double phi = twopi * G4UniformRand();
129 G4double mom = std::sqrt((e2 - mass2)*(e2 + mass2));
130 G4LorentzVector mom2(mom * sinTheta * std::cos(phi),
131 mom * sinTheta * std::sin(phi),
132 mom * cosTheta,
133 e2);
134 mom2.boost(bst);
135 G4Fragment* fr = new G4Fragment(Afr[index], Zfr[index], mom2);
136 fr->SetCreationTime(time);
137 theResult->push_back(fr);
138
139 // residual
140 lv -= mom2;
141 Z -= Zfr[index];
142 A -= Afr[index];
143 }
144
145 // updated fragment
146 if( theResult->size() > 0) {
147 nucleus->SetZandA_asInt(Z, A);
148 nucleus->SetMomentum(lv);
149 }
150
151 return theResult;
152}
std::vector< G4Fragment * > G4FragmentVector
Definition: G4Fragment.hh:65
double G4double
Definition: G4Types.hh:64
#define G4UniformRand()
Definition: Randomize.hh:53
Hep3Vector boostVector() const
void SetCreationTime(G4double time)
Definition: G4Fragment.hh:383

Referenced by G4Evaporation::BreakItUp().

◆ EmittedFragment()

G4Fragment * G4UnstableFragmentBreakUp::EmittedFragment ( G4Fragment fragment)
virtual

Reimplemented from G4VEvaporationChannel.

Definition at line 75 of file G4UnstableFragmentBreakUp.cc.

76{
77 return 0;
78}

◆ GetEmissionProbability()

G4double G4UnstableFragmentBreakUp::GetEmissionProbability ( G4Fragment fragment)
virtual

Implements G4VEvaporationChannel.

Definition at line 159 of file G4UnstableFragmentBreakUp.cc.

160{
161 return 0.0;
162}

◆ SetVerboseLevel()

void G4UnstableFragmentBreakUp::SetVerboseLevel ( G4int  val)
inline

Definition at line 95 of file G4UnstableFragmentBreakUp.hh.

96{
97 verbose = val;
98}

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