135{
136 fragZ = fragment->GetZ_asInt();
137 fragA = fragment->GetA_asInt();
138 resZ = fragZ - evapZ;
139 resA = fragA - evapA;
140
141
142 if (resA < evapA || resA < resZ || resZ < 1 ||
143 (resA == evapA && resZ < evapZ)) { return 0.0; }
144
145 fFragExc = fragment->GetExcitationEnergy();
146 fMass = fragment->GetGroundStateMass() + fFragExc;
148 fResA13 = g4pow->Z13(resA);
149 xsfactor = g4pow->Z23(fragA)/g4pow->Z23(resA);
150
151
152
153 if (fMass <= fEvapMass + fResMass) { return 0.0; }
154
156 delta0 = nData->GetPairingCorrection(fragZ, fragA);
157 delta1 = nData->GetPairingCorrection(resZ, resA);
158 fE0 = std::max(fFragExc - delta0, 0.0);
159
160 if (indexC > 0) {
161 bCoulomb = cBarrier->GetCoulombBarrier(resA, resZ, fFragExc);
162 }
164 G4double de = fMass - fEvapMass - fResMass - elim;
165 if (de < fTolerance) { return 0.0; }
166 nProbEvap = 1;
167 fDeltaEvap = de;
168 if (7 == indexC) {
170 nProbEvap = std::min(n, nProbMax);
171 if (nProbEvap > 1) { fDeltaEvap /= (
G4double)(nProbEvap - 1); }
172 }
173
174 if (2 < fVerbose) {
175 G4cout <<
"## G4GEMChannelVI::GetEmissionProbability fragZ="
176 << fragZ << " fragA=" << fragA << " Z=" << evapZ << " A=" << evapA
177 << " Eex(MeV)=" << fFragExc << " nProbEvap=" << nProbEvap
178 << " nProbRes=" << nProbRes << " CB=" << bCoulomb
179 <<
" Elim=" << fEnergyLimitXS <<
" XSfac=" << xsfactor <<
G4endl;
180 }
181
182
183
185 for (
G4int i = 0; i < nProbEvap; ++i) {
186 fEvapExc = fDeltaEvap*i;
188 G4double e2 = fMass - m1 - fResMass;
189 e2 = std::max(e2, 0.0);
190 if (e2 <= elim + fTolerance) {
191 nProbEvap = i + 1;
192 prob[i] = sump;
193 break;
194 }
196 sump += p;
197 prob[i] = sump;
198 if (2 < fVerbose) {
199 G4cout << i <<
". e1=" << elim <<
" e2=" << e2 <<
" e2-e1="
200 << e2 - elim << " fEvapExc=" << fEvapExc
201 <<
" Probability=" << p <<
G4endl;
202 }
203 }
204 if (nProbEvap > 1) { sump /= (
G4double)nProbEvap; }
205 return sump;
206}
G4GLOB_DLL std::ostream G4cout
static G4double LevelDensity(const G4int Z, const G4int A, const G4int index)