Problem 1838 - yet another incorrect level evaluation in G4NeutronHPInelasticCompFS
Summary: yet another incorrect level evaluation in G4NeutronHPInelasticCompFS
Status: RESOLVED FIXED
Alias: None
Product: Geant4
Classification: Unclassified
Component: processes/hadronic/models/neutron_hp (show other problems)
Version: 10.2
Hardware: All All
: P5 trivial
Assignee: dennis.herbert.wright
URL:
Depends on:
Blocks:
 
Reported: 2016-03-06 18:49 CET by Artem Zontikov
Modified: 2020-02-18 19:14 CET (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this problem.
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.