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.
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.