97{
98
99
101
103
106
107 if (U <= 0.0) {
109 theResult->push_back(
new G4Fragment(theNucleus));
110 return theResult;
111 }
112
113
115
116
118
119
121
122
126
127
131
132 G4double FragmentsExcitationEnergy = 0.0;
133 G4double FragmentsKineticEnergy = 0.0;
134
135
138
140 do {
141
142
143 A1 = FissionAtomicNumber(A,theParameters);
144 Z1 = FissionCharge(A,Z,A1);
146
147
148 A2 = A - A1;
149 Z2 = Z - Z1;
150 if (A2 < 1 || Z2 < 0) {
152 "G4CompetitiveFission::BreakUp: Can't define second fragment! ");
153 }
155
156
157 if (M1 + M2 > theNucleusMomentum.
e()) {
159 "G4CompetitiveFission::BreakUp: Fragments Mass > Total Energy");
160 }
161
163
164 FragmentsKineticEnergy = FissionKineticEnergy( A , Z,
165 A1, Z1,
166 A2, Z2,
167 U , Tmax,
168 theParameters);
169
170
171
172
173
174
175
176 FragmentsExcitationEnergy =
177 Tmax - FragmentsKineticEnergy+FissionPairingEnergy;
178
179 } while (FragmentsExcitationEnergy < 0.0 && Trials++ < 100);
180
181 if (FragmentsExcitationEnergy <= 0.0) {
183 "G4CompetitiveFission::BreakItUp: Excitation energy for fragments < 0.0!");
184 }
185
186
187
188
190
192
193
194
196 (FragmentsKineticEnergy*(FragmentsKineticEnergy+2*(M2+U2)))
197 /(2*(M1+U1+M2+U2+FragmentsKineticEnergy));
198 G4ParticleMomentum Momentum1(IsotropicVector(std::sqrt(Fragment1KineticEnergy*(Fragment1KineticEnergy+2*(M1+U1)))));
200 G4LorentzVector FourMomentum1(Momentum1,std::sqrt(Momentum1.mag2()+(M1+U1)*(M1+U1)));
201 G4LorentzVector FourMomentum2(Momentum2,std::sqrt(Momentum2.mag2()+(M2+U2)*(M2+U2)));
202
203
204 FourMomentum1.boost(theNucleusMomentum.
boostVector());
205 FourMomentum2.boost(theNucleusMomentum.
boostVector());
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
236
237
239
240 theResult->push_back(Fragment1);
241 theResult->push_back(Fragment2);
242
243#ifdef debug
244 CheckConservation(theNucleus,theResult);
245#endif
246
247 return theResult;
248}
std::vector< G4Fragment * > G4FragmentVector
Hep3Vector boostVector() const
G4double GetGroundStateMass() const
G4double GetExcitationEnergy() const
const G4LorentzVector & GetMomentum() const
G4double GetIonMass(G4int Z, G4int A, G4int L=0) const
!! Only ground states are supported now
static G4PairingCorrection * GetInstance()
G4double GetFissionPairingCorrection(G4int A, G4int Z) const
static G4ParticleTable * GetParticleTable()
G4IonTable * GetIonTable()