#include <G4UnstableFragmentBreakUp.hh>
Inheritance diagram for G4UnstableFragmentBreakUp:
Public Member Functions | |
G4UnstableFragmentBreakUp () | |
virtual | ~G4UnstableFragmentBreakUp () |
virtual G4FragmentVector * | BreakUpFragment (G4Fragment *fragment) |
virtual G4Fragment * | EmittedFragment (G4Fragment *fragment) |
virtual G4FragmentVector * | BreakUp (const G4Fragment &fragment) |
virtual G4double | GetEmissionProbability (G4Fragment *fragment) |
void | SetVerboseLevel (G4int val) |
Definition at line 57 of file G4UnstableFragmentBreakUp.hh.
G4UnstableFragmentBreakUp::G4UnstableFragmentBreakUp | ( | ) |
Definition at line 57 of file G4UnstableFragmentBreakUp.cc.
References G4NucleiProperties::GetNuclearMass(), and G4NistManager::Instance().
00058 :verbose(0) 00059 { 00060 fNistManager = G4NistManager::Instance(); 00061 if(0 == Afr[0]) { 00062 G4int z[6] = {0, 1, 1, 1, 2, 2}; 00063 G4int a[6] = {1, 1, 2, 3, 3, 4}; 00064 for(G4int i=0; i<6; ++i) { 00065 Zfr[i] = z[i]; 00066 Afr[i] = a[i]; 00067 masses[i] = G4NucleiProperties::GetNuclearMass(a[i], z[i]); 00068 } 00069 } 00070 }
G4UnstableFragmentBreakUp::~G4UnstableFragmentBreakUp | ( | ) | [virtual] |
G4FragmentVector * G4UnstableFragmentBreakUp::BreakUp | ( | const G4Fragment & | fragment | ) | [virtual] |
G4FragmentVector * G4UnstableFragmentBreakUp::BreakUpFragment | ( | G4Fragment * | fragment | ) | [virtual] |
Reimplemented from G4VEvaporationChannel.
Definition at line 80 of file G4UnstableFragmentBreakUp.cc.
References G4UniformRand, G4Fragment::GetA_asInt(), G4Fragment::GetCreationTime(), G4Fragment::GetMomentum(), G4NucleiProperties::GetNuclearMass(), G4Fragment::GetZ_asInt(), G4Fragment::SetCreationTime(), G4Fragment::SetMomentum(), and G4Fragment::SetZandA_asInt().
Referenced by G4Evaporation::BreakItUp().
00081 { 00082 //G4cout << "G4UnstableFragmentBreakUp::BreakUpFragment" << G4endl; 00083 G4FragmentVector * theResult = new G4FragmentVector(); 00084 00085 G4int Z = nucleus->GetZ_asInt(); 00086 G4int A = nucleus->GetA_asInt(); 00087 G4int Amax = A; 00088 G4LorentzVector lv = nucleus->GetMomentum(); 00089 G4double time = nucleus->GetCreationTime(); 00090 00091 G4double deltaE, mass, mass1(0.0), mass2(0.0); 00092 G4int i, index; 00093 00094 // Starts loop over evaporated particles, loop is limited by number 00095 // of nucleons 00096 for(G4int ia=0; ia<Amax; ++ia) { 00097 00098 mass = lv.mag(); 00099 deltaE = 0.0; 00100 index = -1; 00101 for(i=0; i<6; ++i) { 00102 G4int Zres = Z - Zfr[i]; 00103 G4int Ares = A - Afr[i]; 00104 if(Zres >= 0 && Ares >= Zres && Ares > 0) { 00105 G4double m1 = G4NucleiProperties::GetNuclearMass(Ares, Zres); 00106 G4double de = mass - m1 - masses[i]; 00107 if(de > deltaE) { 00108 mass1 = m1; 00109 mass2 = masses[i]; 00110 deltaE= de; 00111 index = i; 00112 } 00113 } 00114 } 00115 00116 // no decay channels 00117 if(index < 0) { break; } 00118 00119 // compute energy of light fragment 00120 G4double e2 = 0.5*((mass - mass1)*(mass + mass1) + mass2*mass2)/mass; 00121 if(e2 < mass2) { break; } 00122 00123 // sample decay 00124 G4ThreeVector bst = lv.boostVector(); 00125 00126 G4double cosTheta = 1. - 2. * G4UniformRand(); 00127 G4double sinTheta = std::sqrt(1. - cosTheta * cosTheta); 00128 G4double phi = twopi * G4UniformRand(); 00129 G4double mom = std::sqrt((e2 - mass2)*(e2 + mass2)); 00130 G4LorentzVector mom2(mom * sinTheta * std::cos(phi), 00131 mom * sinTheta * std::sin(phi), 00132 mom * cosTheta, 00133 e2); 00134 mom2.boost(bst); 00135 G4Fragment* fr = new G4Fragment(Afr[index], Zfr[index], mom2); 00136 fr->SetCreationTime(time); 00137 theResult->push_back(fr); 00138 00139 // residual 00140 lv -= mom2; 00141 Z -= Zfr[index]; 00142 A -= Afr[index]; 00143 } 00144 00145 // updated fragment 00146 if( theResult->size() > 0) { 00147 nucleus->SetZandA_asInt(Z, A); 00148 nucleus->SetMomentum(lv); 00149 } 00150 00151 return theResult; 00152 }
G4Fragment * G4UnstableFragmentBreakUp::EmittedFragment | ( | G4Fragment * | fragment | ) | [virtual] |
Reimplemented from G4VEvaporationChannel.
Definition at line 75 of file G4UnstableFragmentBreakUp.cc.
G4double G4UnstableFragmentBreakUp::GetEmissionProbability | ( | G4Fragment * | fragment | ) | [virtual] |
void G4UnstableFragmentBreakUp::SetVerboseLevel | ( | G4int | val | ) | [inline] |