Hello. There is an incorrect level evaluation in G4NeutronHPInelasticCompFS. Due to inconsistency in level structure between data in G4NDL and inelastic gammas specified in text files under $G4NEUTRONHPDATA/Inelastic/Gammas in some cases level number is shifted by 1. For example inspect (n,n')-reaction on carbon: if exit channel it==2 (i.e. MT=52) G4NeutronHPInelasticCompFS::CompositeApply deexcitates nuclei with 4.43 MeV instead of 2 gammas - 3.21 and 4.43 MeV, if it==3 we have 3.21 and 4.43 MeV instead of 9.64 MeV. Please, consider the replacement at http://www-geant4.kek.jp/lxr/source/processes/hadronic/models/neutron_hp/src/G4NeutronHPInelasticCompFS.cc#L374 . This if-block: if ( eExcitation < theGammas.GetLevel(iLevel)->GetLevelEnergy() ) { find = true; iLevel--; // very small eExcitation, iLevel becomes -1, this is protected below. if ( iLevel == -1 ) iLevel = 0; // But cause energy trouble. break; } with this: G4double level_tollerance = 100*keV; // maybe too high? if ( std::abs(eExcitation - theGammas.GetLevel(iLevel)->GetLevelEnergy()) < level_tollerance ) { find = true; break; } else if ( eExcitation < theGammas.GetLevel(iLevel)->GetLevelEnergy() ) { find = true; iLevel--; // very small eExcitation, iLevel becomes -1, this is protected below. if ( iLevel == -1 ) iLevel = 0; // But cause energy trouble. break; }
*** Problem 1790 has been marked as a duplicate of this problem. ***
*** Problem 1791 has been marked as a duplicate of this problem. ***
Thank you for reporting problem. It looks like that #1790 and 1791 claimes same issue from same reporter. I will only responce this thread in future and close rest of them.
Well, now I think that proposed fix is only a partial solution to this problem because it is not so easy to adjust level_tollerance in a way that it will be valid for any given nuclei.
(In reply to comment #4) One way to deal with the situation withoun modification of the source code is to define levels in $G4NEUTRONHPDATA/Inelastic/Gammas as levels in G4NDL minus some small value.
Partial fix made as suggested. Instead of 100 keV tolerance, use 1 keV, as suggested by T. Koi. Full fix cannot be made without major reworking of code or database.