95 delete theElementaryParticleCollider;
96 delete theIntraNucleiCascader;
97 delete theDeexcitation;
117 delete theDeexcitation;
123 delete theDeexcitation;
129 delete theDeexcitation;
141 const G4int itry_max = 100;
146 G4cout <<
" InuclCollider -> particle on particle collision" <<
G4endl;
148 theElementaryParticleCollider->
collide(bullet, target, globalOutput);
159 G4cerr <<
" InuclCollider -> no collision possible " <<
G4endl;
168 G4cerr <<
" InuclCollider -> ERROR target is not a nucleus " <<
G4endl;
183 G4cerr <<
" InuclCollider -> ERROR bullet is not a hadron " <<
G4endl;
189 G4cerr <<
" InuclCollider -> ERROR can not collide with "
195 btype = pbullet->
type();
200 G4cerr <<
" InuclCollider -> ERROR bullet is not a nucleus " <<
G4endl;
205 ab = nbullet->
getA();
206 zb = nbullet->
getZ();
216 G4cout <<
" InuclCollider -> inelastic interaction is impossible\n"
217 <<
" due to the coulomb barirer " <<
G4endl;
226 G4cout <<
" degenerated? " << convertToTargetRestFrame.
trivial()
241 while (itry < itry_max) {
245 globalOutput.
reset();
248 theIntraNucleiCascader->
collide(zbullet, target, output);
256 if (std::getenv(
"G4CASCADE_CHECK_PHOTONUCLEAR"))
260 G4cout <<
" itry " << itry <<
" finished, moving to lab frame" <<
G4endl;
265 globalOutput.
add(output);
272 G4cout <<
" InuclCollider output after trials " << itry <<
G4endl;
277 G4cerr <<
" InuclCollider setOnShell failed." <<
G4endl;
282 G4cout <<
" InuclCollider -> can not generate acceptable inter. after "
283 << itry_max <<
" attempts " <<
G4endl;
304 globalOutput.
reset();
307 theIntraNucleiCascader->
rescatter(bullet, theSecondaries, theNucleus,
315 globalOutput.
add(output);
318 G4cout <<
" InuclCollider output after trials " << itry <<
G4endl;
329 const G4int itry_max = 10;
335 theDeexcitation->
deExcite(fragment, DEXoutput);
337 }
while (!
validateOutput(fragment, DEXoutput) && (++itry < itry_max));
339 globalOutput.
add(DEXoutput);
353 G4cout <<
" >>> G4InuclCollider::photonuclearOkay" <<
G4endl;
359 G4cout <<
" comparing final nucleus with initial target:\n"
363 G4cout <<
" no final nucleus remains when target was "
373 if (mfinalNuc != mtargetNuc)
return true;
376 G4cout <<
" photonuclear produced only gammas. Try again." <<
G4endl;
G4GLOB_DLL std::ostream G4cerr
G4GLOB_DLL std::ostream G4cout
static const G4CascadeChannel * GetTable(G4int initialState)
virtual G4bool useEPCollider(G4InuclParticle *bullet, G4InuclParticle *target) const
virtual void setVerboseLevel(G4int verbose=0)
G4InteractionCase interCase
virtual G4bool validateOutput(G4InuclParticle *bullet, G4InuclParticle *target, G4CollisionOutput &output)
virtual G4bool inelasticInteractionPossible(G4InuclParticle *bullet, G4InuclParticle *target, G4double ekin) const
void removeRecoilFragment(G4int index=-1)
const std::vector< G4InuclNuclei > & getOutgoingNuclei() const
void boostToLabFrame(const G4LorentzConvertor &convertor)
const G4Fragment & getRecoilFragment(G4int index=0) const
void setOnShell(G4InuclParticle *bullet, G4InuclParticle *target)
void setVerboseLevel(G4int verbose)
G4int numberOfOutgoingNuclei() const
G4bool acceptable() const
void add(const G4CollisionOutput &right)
void trivialise(G4InuclParticle *bullet, G4InuclParticle *target)
void collide(G4InuclParticle *bullet, G4InuclParticle *target, G4CollisionOutput &output)
G4InuclParticle * getBullet() const
void set(G4InuclParticle *part1, G4InuclParticle *part2)
G4bool hadNucleus() const
G4InuclParticle * getTarget() const
void rescatter(G4InuclParticle *bullet, G4KineticTrackVector *theSecondaries, G4V3DNucleus *theNucleus, G4CollisionOutput &globalOutput)
void setVerboseLevel(G4int verbose=0)
void collide(G4InuclParticle *bullet, G4InuclParticle *target, G4CollisionOutput &globalOutput)
virtual ~G4InuclCollider()
void useCascadeDeexcitation()
void deexcite(const G4Fragment &fragment, G4CollisionOutput &globalOutput)
void usePreCompoundDeexcitation()
G4bool photonuclearOkay(G4CollisionOutput &checkOutput) const
void useAblaDeexcitation()
void collide(G4InuclParticle *bullet, G4InuclParticle *target, G4CollisionOutput &globalOutput)
void rescatter(G4InuclParticle *bullet, G4KineticTrackVector *theSecondaries, G4V3DNucleus *theNucleus, G4CollisionOutput &globalOutput)
void setVerboseLevel(G4int verbose=0)
G4bool isElectron() const
const G4ParticleDefinition * getDefinition() const
G4double getKineticEnergy() const
void toTheTargetRestFrame()
G4double getTRSMomentum() const
G4double getKinEnergyInTheTRS() const
const G4String & GetParticleName() const
virtual void setVerboseLevel(G4int verbose=0)
virtual void deExcite(const G4Fragment &fragment, G4CollisionOutput &output)=0