Problem 1838

Summary: yet another 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.2   
Hardware: All   
OS: All   
See Also: http://bugzilla-geant4.kek.jp/show_bug.cgi?id=1789

Description Artem Zontikov 2016-03-06 18:49:45 CET
Hello.

G4ParticleHPInelasticCompFS::CompositeApply performs wrong level evaluation for incident neutron reactions with emission of charged particles. For example: O-16(n, a_0)C-13 (i.e. MT==800) reaction comes with photons from MT==801 (while there should not be any photons present) and reactions with MT==801, 802 and 803 come with photons from MT==803. This is caused by wrong definition of excitation here http://www-geant4.kek.jp/lxr/source/processes/hadronic/models/particle_hp/src/G4ParticleHPInelasticCompFS.cc#L384

Possible solution is to define excitation at line 384 as 
eExcitation = -QI[it] + QI[0];

And assuming that bug #1789 is fixed somehow, one could remove line 402:

// very small eExcitation, iLevel becomes -1, this is protected below.
if ( iLevel == -1 ) iLevel = 0; // But cause energy trouble. 

However, I am not sure that proposed solution will be valid for incident particles other than neutron.
Comment 1 Artem Zontikov 2016-03-09 19:32:03 CET
Or maybe rewrite line 402 as:

if (theTrack.GetDefinition() == aDefinition) {
   if ( iLevel == -1 ) iLevel = 0;
}
Comment 2 dennis.herbert.wright 2019-05-09 00:16:03 CEST
Fix was made according to last post by Artem Zontikov.
Comment 3 Artem Zontikov 2020-02-04 19:57:56 CET
It has not been fixed yet. 

I noticed that now G4ParticleHPInelasticCompFS uses QM-values which were introduced in version 10.6 (line #412-413 and #599-600). These values do not match with QM-values from evaluated data on which G4NDL is based. The trick with tolerance surely would not help here. Moreover, there is no need to perform the calculation of QM since it is already available in the data. I still think that definition of excitation as QI[0]-QI[it] is a robust solution. 

The other problem is that G4ParticleHPInelasticCompFS deals with two types of reactions: 
1. incident particle and outgoing particle are the same, e.g. (n,n_k), where k>0 is a level number. Otherwise (k=0) it would be an elastic scattering. 
2. incident particle and outgoing particle are not the same, e.g  (n,a_k), where k is a level number which could be equal to 0 (ground state). 

That is why I proposed earlier to rewrite line 442 as: 
if (theTrack.GetDefinition() == aDefinition) {
   if ( iLevel == -1 ) iLevel = 0;
} 

iLevel==-1 has no sense but GetDecayGammas() in this case would return zero pointer so there would be no gamma emission for nucleus in the ground state. 

But, of course, a reliable solution would be to shift the level numbering up so the ground state would have iLevel==0, the first excited state - iLevel==1 and so on. 

This would leave us only with theRestEnergy at line #479. The solution was proposed in problem 1790.
Comment 4 dennis.herbert.wright 2020-02-18 19:14:58 CET
Your changes have been implemented.