65{
66 G4Fragment* result = nullptr;
69 if (!isDiscrete) { isGamma = true; }
70
72
73
74 if (!isGamma) {
75 if(0 <= shell) {
77 if(Z <= 104) {
80 if (bondEnergy > excEnergy) {
81 isGamma = true;
82 }
83 } else {
84 isGamma = true;
85 }
86 } else {
87 isGamma = true;
88 }
89 }
91 G4cout <<
"G4GammaTransition::GenerateGamma " <<
" Eexnew=" << newExcEnergy
92 <<
" Ebond=" << bondEnergy <<
G4endl;
93 }
94
95
96 G4ParticleDefinition* part;
98 if (0 == ne) { isGamma = true; }
99
101 else {
103 --ne;
104 nucleus->SetNumberOfElectrons(ne);
105 }
106
107 if (isGamma && polarFlag && isDiscrete && JP1 <=
fTwoJMAX) {
109 } else {
111 }
112
113
115
116
120 if (!isGamma) {
121 m0 += (ne + 1)*CLHEP::electron_mass_c2 - bondEnergy;
122 m1 += ne*CLHEP::electron_mass_c2;
123 }
124
125
126 const G4double elim2 = 100.*CLHEP::eV*CLHEP::eV;
130
131
132
135
136
140
142 mom = std::sqrt((energy - m1)*(energy + m1));
144
145
146 if (!atRest) {
149 }
150
151
152 nucleus->SetExcEnergyAndMomentum(newExcEnergy, lv);
153
154
155 result = new G4Fragment(res4mom, part);
156
157
158
160 G4cout <<
"G4GammaTransition::SampleTransition : " << *result <<
G4endl;
162 }
163 return result;
164}
CLHEP::HepLorentzVector G4LorentzVector
G4ThreeVector G4RandomDirection()
CLHEP::Hep3Vector G4ThreeVector
Hep3Vector boostVector() const
HepLorentzVector & boost(double, double, double)
void set(double x, double y, double z, double t)
static G4double GetBindingEnergy(G4int Z, G4int SubshellNb)
static G4int GetNumberOfShells(G4int Z)
static G4Electron * Electron()
virtual void SampleDirection(G4Fragment *nuc, G4double ratio, G4int twoJ1, G4int twoJ2, G4int mp)
G4double GetPDGMass() const
G4double energy(const ThreeVector &p, const G4double m)