Problem 1132 - Unreliable radioactive decays if G4ParticleDefinition::SetPDGStable(false) is not called
Summary: Unreliable radioactive decays if G4ParticleDefinition::SetPDGStable(false) is...
Status: RESOLVED FIXED
Alias: None
Product: Geant4
Classification: Unclassified
Component: processes/decay (show other problems)
Version: 9.3
Hardware: Apple Mac OS X
: P5 trivial
Assignee: kurasige
URL:
Depends on:
Blocks:
 
Reported: 2010-08-04 18:37 CEST by Alexis Schubert
Modified: 2010-08-05 10:02 CEST (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this problem.
Description Alexis Schubert 2010-08-04 18:37:24 CEST
I am having a problem with unreliable decays of tritons in Geant4.9.3.p01.  I followed this advice to make the triton unstable:
http://bugzilla-geant4.kek.jp/show_bug.cgi?id=916

I find that if G4ParticleDefinition::SetPDGStable(false) is not also called for the triton, Geant4 will sometimes produce decays, but sometimes not.  

I think that if G4ParticleDefinition::SetPDGStable(false) is not called, radioactive decay may not be invoked in G4SteppingManager::
InvokeAtRestDoItProcs().  This occurs because G4SteppingManager::
InvokeAtRestDoItProcs() sets lifeTime to G4VProcess::AtRestGPIL(*
fTrack, &fCondition ), which returns the value of G4VRestDiscreteProcess::AtRestGetPhysicalInteractionLength().  G4VRestDiscreteProcess::AtRestGetPhysicalInteractionLength() returns the product of -std::log( G4UniformRand()) (from G4VProcess::ResetNumberOfInteractionLengthLeft()) and G4RadioactiveDecay::GetMeanLifeTime().
G4RadioactiveDecay::GetMeanLifeTime() will return DBL_MAX if GetPDGStable() returns false; this leads to lifeTime = inf if -std::log( G4UniformRand()) is greater than 1.0.  If lifeTime is set to inf, G4RadioactiveDecay is never invoked.

If I set G4ParticleDefinition::SetPDGStable(false), the problem goes away.  It seems undesirable that not setting G4ParticleDefinition::SetPDGStable(false) leads to this unreliable behavior.
Comment 1 kurasige 2010-08-05 10:02:08 CEST
Hi,

  Yes. You are right.
   
  G4ParticleDefinition::SetPDGStable(false) 
  should be called in addition to activate the decay process and set the life time as you pointed out.
  
  Thank you !

Hisaya