69 if (!isDiscrete) { isGamma =
true; }
71 G4double excEnergy = nucleus->GetExcitationEnergy();
76 G4int Z = nucleus->GetZ_asInt();
80 if (bondEnergy > excEnergy) {
91 G4cout <<
"G4GammaTransition::GenerateGamma " <<
" Eexnew=" << newExcEnergy
92 <<
" Ebond=" << bondEnergy <<
G4endl;
97 G4int ne = nucleus->GetNumberOfElectrons();
98 if (0 == ne) { isGamma =
true; }
104 nucleus->SetNumberOfElectrons(ne);
107 if (isGamma && polarFlag && isDiscrete && JP1 <=
fTwoJMAX) {
118 G4double m0 = nucleus->GetGroundStateMass() + excEnergy;
119 G4double m1 = nucleus->GetGroundStateMass() + newExcEnergy;
121 m0 += (ne + 1)*CLHEP::electron_mass_c2 - bondEnergy;
122 m1 += ne*CLHEP::electron_mass_c2;
126 const G4double elim2 = 100.*CLHEP::eV*CLHEP::eV;
133 G4double energy = 0.5*((m0 - m1)*(m0 + m1) + emass*emass)/m0;
134 G4double mom = (isGamma) ? energy : std::sqrt((energy - emass)*(energy + emass));
141 energy = m0 - energy;
142 mom = std::sqrt((energy - m1)*(energy + m1));
152 nucleus->SetExcEnergyAndMomentum(newExcEnergy, lv);
160 G4cout <<
"G4GammaTransition::SampleTransition : " << *result <<
G4endl;
172 G4cout <<
"G4GammaTransition::SampleDirection : 2J1= " << twoJ1
173 <<
" 2J2= " << twoJ2 <<
" ratio= " << ratio
174 <<
" mp= " << mp <<
G4endl;
191 G4int L0 = 0, Lp = 0;
200 fPolTrans.SampleGammaTransition(np, twoJ1, twoJ2, L0, Lp, mpRatio, cosTheta, phi);
203 G4double sinTheta = std::sqrt((1.-cosTheta)*(1.+cosTheta));
204 fDirection.set(sinTheta*std::cos(phi),sinTheta*std::sin(phi),cosTheta);
virtual G4Fragment * SampleTransition(G4Fragment *nucleus, G4double newExcEnergy, G4double mpRatio, G4int JP1, G4int JP2, G4int MP, G4int shell, G4bool isDiscrete, G4bool isGamma)
G4double GetPDGMass() const