Problem 1132

Summary: Unreliable radioactive decays if G4ParticleDefinition::SetPDGStable(false) is not called
Product: Geant4 Reporter: Alexis Schubert <alexis3>
Component: processes/decayAssignee: kurasige
Status: RESOLVED FIXED    
Severity: trivial    
Priority: P5    
Version: 9.3   
Hardware: Apple   
OS: Mac OS X   

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