56const G4int G4UnstableFragmentBreakUp::Zfr[] = {0, 1, 1, 1, 2, 2};
57const G4int G4UnstableFragmentBreakUp::Afr[] = {1, 1, 2, 3, 3, 4};
77 G4int Z = nucleus->GetZ_asInt();
78 G4int A = nucleus->GetA_asInt();
81 G4double time = nucleus->GetCreationTime();
89 G4cout <<
"#Unstable decay " <<
" Z= " << Z <<
" A= " <<
A
90 <<
" Eex(MeV)= " << nucleus->GetExcitationEnergy() <<
G4endl;
92 const G4double tolerance = 10*CLHEP::eV;
93 const G4double dmlimit = 0.005*CLHEP::MeV;
98 for(
G4int i=0; i<6; ++i) {
99 G4int Zres = Z - Zfr[i];
101 if(Zres >= 0 && Ares >= Zres && Ares >= Afr[i]) {
103 for(
G4int j=0; j<6; ++j) {
104 if(Zres == Zfr[j] && Ares == Afr[j]) {
105 G4double delm = mass - masses[i] - masses[j];
123 if(isChannel) {
break; }
126 G4double e = mass - mres - masses[i];
135 mass1 = (Ares > 4 && e > 0.0) ? mres + e*
G4UniformRand() : mres;
148 G4cout <<
"isChannel:" << isChannel <<
" idx=" << idx <<
" Zfr=" << Zfr[idx]
149 <<
" Arf=" << Afr[idx] <<
" delm=" << mass - massmin <<
G4endl;
151 if(!isChannel || mass < massmin) {
152 if(mass + dmlimit < massmin) {
return false; }
154 G4cout <<
"#Unstable decay correction: Z= " << Z <<
" A= " <<
A
156 <<
" deltaM(MeV)= " << mass - massmin
160 G4double e = std::max(lv.
e(), mass + tolerance);
161 G4double mom = std::sqrt((e - mass)*(e + mass));
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));
176 frag =
new G4Fragment(Afr[idx], Zfr[idx], mom2);
179 results->push_back(frag);
186 nucleus->SetZandA_asInt(Z,
A);
187 nucleus->SetMomentum(lv);
188 nucleus->SetCreatorModelID(fSecID);