Problem 1789

Summary: incorrect level evaluation in G4NeutronHPInelasticCompFS
Product: Geant4 Reporter: Artem Zontikov <zontikov.a>
Component: processes/hadronic/models/neutron_hpAssignee: dennis.herbert.wright
Status: RESOLVED FIXED    
Severity: trivial CC: dennis.herbert.wright
Priority: P5    
Version: 10.1   
Hardware: All   
OS: All   
See Also: http://bugzilla-geant4.kek.jp/show_bug.cgi?id=1738

Description Artem Zontikov 2015-10-01 21:08:14 CEST
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;
}
Comment 1 tkoi 2015-11-14 04:53:58 CET
*** Problem 1790 has been marked as a duplicate of this problem. ***
Comment 2 tkoi 2015-11-14 04:54:05 CET
*** Problem 1791 has been marked as a duplicate of this problem. ***
Comment 3 tkoi 2015-11-14 04:55:13 CET
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.
Comment 4 Artem Zontikov 2015-11-23 18:32:01 CET
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.
Comment 5 Artem Zontikov 2016-02-06 23:58:56 CET
(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.
Comment 6 dennis.herbert.wright 2018-08-25 00:23:18 CEST
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.