122 {
124
125 const G4int itry_max = 100;
126
127
130 G4cout <<
" InuclCollider -> particle on particle collision" <<
G4endl;
131
132 theElementaryParticleCollider->
collide(bullet, target, globalOutput);
133 return;
134 }
135
139 }
140
143 G4cerr <<
" InuclCollider -> no collision possible " <<
G4endl;
144
146 return;
147 }
148
149
151 if (!ntarget) {
152 G4cerr <<
" InuclCollider -> ERROR target is not a nucleus " <<
G4endl;
153
155 return;
156 }
157
161
165
166 if (!pbullet) {
167 G4cerr <<
" InuclCollider -> ERROR bullet is not a hadron " <<
G4endl;
169 return;
170 }
171
173 G4cerr <<
" InuclCollider -> ERROR can not collide with "
176 return;
177 }
178
179 btype = pbullet->
type();
180 } else {
183 if (!nbullet) {
184 G4cerr <<
" InuclCollider -> ERROR bullet is not a nucleus " <<
G4endl;
186 return;
187 }
188
189 ab = nbullet->
getA();
190 zb = nbullet->
getZ();
191 }
192
194 G4double ekin = convertToTargetRestFrame.getKinEnergyInTheTRS();
195
197
200 G4cout <<
" InuclCollider -> inelastic interaction is impossible\n"
201 <<
" due to the coulomb barirer " <<
G4endl;
202
204 return;
205 }
206
207
208 convertToTargetRestFrame.toTheTargetRestFrame();
210 G4cout <<
" degenerated? " << convertToTargetRestFrame.trivial()
212 }
213
215 bmom.
setZ(convertToTargetRestFrame.getTRSMomentum());
216
217
221 else
223
225 while (itry < itry_max) {
226 itry++;
229
230 globalOutput.
reset();
232
233 theIntraNucleiCascader->
collide(zbullet, target, output);
234
236
239
241 G4cout <<
" itry " << itry <<
" finished, moving to lab frame" <<
G4endl;
242
243
245
246 globalOutput.
add(output);
247
248
249
253 G4cout <<
" InuclCollider output after trials " << itry <<
G4endl;
254 delete zbullet;
255 return;
256 } else {
258 G4cerr <<
" InuclCollider setOnShell failed." <<
G4endl;
259 }
260 }
261
263 G4cout <<
" InuclCollider -> can not generate acceptable inter. after "
264 << itry_max <<
" attempts " <<
G4endl;
265 }
266
268
269 delete zbullet;
270 return;
271}
G4DLLIMPORT std::ostream G4cerr
G4DLLIMPORT std::ostream G4cout
static const G4CascadeChannel * GetTable(G4int initialState)
virtual G4bool useEPCollider(G4InuclParticle *bullet, G4InuclParticle *target) const
G4InteractionCase interCase
virtual G4bool inelasticInteractionPossible(G4InuclParticle *bullet, G4InuclParticle *target, G4double ekin) const
void boostToLabFrame(const G4LorentzConvertor &convertor)
void setOnShell(G4InuclParticle *bullet, G4InuclParticle *target)
const G4Fragment & getRecoilFragment() const
G4bool acceptable() const
void add(const G4CollisionOutput &right)
void trivialise(G4InuclParticle *bullet, G4InuclParticle *target)
void removeRecoilFragment()
void collide(G4InuclParticle *bullet, G4InuclParticle *target, G4CollisionOutput &output)
G4InuclParticle * getBullet() const
void set(G4InuclParticle *part1, G4InuclParticle *part2)
G4bool hadNucleus() const
G4InuclParticle * getTarget() const
void collide(G4InuclParticle *bullet, G4InuclParticle *target, G4CollisionOutput &globalOutput)
void deexcite(const G4Fragment &fragment, G4CollisionOutput &globalOutput)
G4ParticleDefinition * getDefinition() const
const G4String & GetParticleName() const