100{
101 fProbability->ResetProbability();
102 fragZ = fragment->GetZ_asInt();
103 fragA = fragment->GetA_asInt();
104 resZ = fragZ - Z;
105 resA = fragA - A;
106 if(resA < A || resA < resZ || resZ < 0 || (resA == A && resZ < Z)) {
107 return 0.0;
108 }
109
110 fExc = fragment->GetExcitationEnergy();
111 fMass = fragment->GetGroundStateMass() + fExc;
113
114
115
116 if (fMass <= fEvapMass + fResMass) { return 0.0; }
117
118 if (Z > 0) {
119 bCoulomb = cBarrier->GetCoulombBarrier(resA, resZ, 0.0);
120 }
121 G4double de = fMass - fEvapMass - fResMass - bCoulomb;
122 nProb = (
G4int)(de/minExc);
123 if (nProb <= 1 || indexC < 6 || resA <= 4) {
124 nProb = 1;
125 } else {
126 nProb = std::min(nProb, nProbMax);
127 }
128 if (2 < fVerbose) {
129 G4cout <<
"## G4GEMChannelVI::GetEmissionProbability fragZ="
130 << fragZ << " fragA=" << fragA << " Z=" << Z << " A=" << A
131 << " Eex(MeV)=" << fExc << " nProb=" << nProb
133 }
134 fProbability->SetDecayKinematics(resZ, resA, fResMass, fMass);
136 for (
G4int i=0; i<nProb; ++i) {
137 G4double exc = std::min(minExc*i, de);
139 G4double e2 = 0.5*((fMass-fResMass)*(fMass+fResMass) + m1*m1)/fMass - m1;
140 G4double m2 = fMass - m1 - 0.5*bCoulomb;
141 if (m2 < fResMass) {
142 nProb = i;
143 break;
144 }
145 G4double e1 = std::max(0.5*((fMass-m2)*(fMass+m2) + m1*m1)/fMass - m1, 0.0);
146 if (e1 >= e2) {
147 nProb = i;
148 break;
149 }
150 sump += fProbability->TotalProbability(*fragment, e1, e2, bCoulomb, fExc, exc);
151 fEData[i].exc = exc;
152 fEData[i].ekin1 = e1;
153 fEData[i].ekin2 = e2;
154 fEData[i].prob = sump;
155 }
156 return sump;
157}
G4GLOB_DLL std::ostream G4cout