Problem 1323

Summary: PiMinusAbsorptionBertini duplicates projectile pi- on secondary list if not captured
Product: Geant4 Reporter: Michael Kelsey <kelsey>
Component: processes/hadronic/stoppingAssignee: dennis.herbert.wright
Status: RESOLVED FIXED    
Severity: major    
Priority: P5    
Version: 9.5   
Hardware: All   
OS: All   

Description Michael Kelsey 2012-06-12 07:27:28 CEST
A user reported in Hypernews (http://hypernews.slac.stanford.edu/HyperNews/geant4/get/hadronprocess/1251.html) that with PiMinusAbsorptionBertini, a low-energy pi- beam on deuterium (G4_D2) produced anomalous secondary pi- after capture, without producing the expected neutron and proton absorption fragments.  

The 9.5 release version of G4PiMinusAbsorptionBertini.cc does properly handle the situation where Bertini returns a no-interaction final state (http://www-geant4.kek.jp/lxr/source/processes/hadronic/stopping/src/G4PiMinusAbsorptionBertini.cc#L159):

159     if(result->GetStatusChange() == isAlive) {
160         G4DynamicParticle* dp = new G4DynamicParticle(*(track.GetDynamicParticle()));
161         G4Track* tr = new G4Track(dp,track.GetGlobalTime(),track.GetPosition());
162         tr->SetKineticEnergy(result->GetEnergyChange());
163         tr->SetMomentumDirection(result->GetMomentumChange());
164         aParticleChange.AddSecondary(tr);
165     }

This is not correct.  In the code, aParticleChange is already initialized with the projectile's state; if Bertini returns "isAlive", then aParticleChange should be returned untouched.
Comment 1 Michael Kelsey 2012-06-12 23:47:25 CEST
In G4PiMinusAbsorptionBertini.cc, line 147 should be replaced with

    if (result->GetStatusChange() == isAlive) {
      result->Clear();
      return &aParticleChange;
    }

I have fixed this in a branch tag hadr-stopping-V09-04-08, for use with a future 9.5-patch-02 release.  

In the 9.5 development tree (trunk), this code no longer exists, having been replaced by a subclass of G4HadronicStoppingProcess, which already handles a no-interaction result properly.