Thermal neutron capture gamma spectra give major disagreement with NNDC data base for some isotopes

As a follow up to a question asked about a month ago (Question in neutron capture (Gd155(n, gamma)Gd156) reaction), I have been examining thermal neutron capture gamma ray spectra using a simple Geant4 program and geometry. I have found some disturbing disagreements between published experimental spectra and the simulation outputs.

The simulation has a very simple geometry. (See Figure - ignore blue box which wasn’t used. +X-axis is vertical along right hand edge of red box. +Z axis is horizontal to the right along the centers of the red, magenta and cyan solids.) The geometry consists of a 7.62cm diameter x 7.62cm length cylindrical detector (cyan) with symmetry axis in the X direction; a 30cm (X) x 30cm (Y) x 1cm (Z) box target (magenta) and a surrounding 4m (X) x 4m (Y) x 2m (Z) box (red). The target material was varied but everything else was G4_Galactic (vacuum). The thickness (Z direction) of the target was kept deliberately thin (1cm except as noted below) so that scattering and absorption of gamma rays and X-rays were minimized. I fired 10^8 thermal neutrons per simulation (except as noted) with nominal ‘thermal’ energy of 0.025 eV from an isotropically emitting GPS point source placed 7.5cm along the +Z axis from the front face of the target. The detector was 20 cm behind (to the left of) the back (left hand) face of the target centered on the target Z-axis. Any gamma entering the detector volume was scored in a Root TTree. Sample spectra are shown in the following Figure for 60Ni.


60Ni 1cm thick spectrum:

For reference, I am using Geant4 10.7.2 multithreaded with the neutron data base G4NDL4.6 (I use physics list QGSP_BERT_HP). I have the following flags set:

export AllowForHeavyElements=1

All gammas, then, should correspond to thermal neutron capture on the target material and characteristic X-rays with a small continuum of scattered photon energies. Intensities should roughly, at least, agree with verified published experimental values, such as those from the Brookhaven USA’s National Nuclear Data Center NNDC (Thermal Neutron Capture Gamma-Rays (CapGam)). Or so I thought…

For a 14N target with a density of 2 g/cm3 (boosted artificially to get an acceptable count rate), simulation and NNDC data agreed reasonably well (see screen shot of spreadsheet below). Likewise, 60Ni gave reasonable agreement (see screen shot of spreadsheet).

14N 1cm thick target comparison of simulation and NNDC energies and relative intensities:

60Ni 1 cm thick target comparison of simulation and NNDC energies and relative intensities:

Next I ran a 1cm thick 155Gd. Because of its huge capture cross section, high Z and density, I used a target thickness of 1mm to reduce self shielding. NNDC catalogues 1009 capture gamma rays. I matched about 200 in energy, but the intensities were not even close to those of NNDC. I got similar results with 157Gd. (I have the comparisons on a spreadsheet, but this forum does not accept that file format and the spreadsheets are far too big for a screen shot. I can email them on request.)

Last, I ran 1cm thick and 1mm thick 58Ni targets. I expected good agreement like there was for 60Ni, since they have similar capture cross sections, the same or less thickness as 60Ni, same atomic charge, mass density and very similar atomic masses. However, only a few of the gamma energies matched NNDC and the intensities were not at all close. In fact, no energies above about 2.6 MeV were found, even though the 8.534 and 8.999 MeV gammas are major lines which should have relative intensities of 47% and 100% respectively. I have attached a screen capture of the spreadsheet and the spectrum for the 1mm thick target.

58Ni 1mm thick target comparison of simulation and NNDC energies and relative intensities:

58Ni 1mm thick target spectrum:

This suggests that there is definitely something wrong in the G4NDL4.6 data base for thermal neutron capture on 58Ni and possibly also for 155Gd and 157Gd. Have I missed something obvious?


I have been investigating this further and I am getting more and more puzzled. Based on some work I did regarding another post Why is there difference between simulation results and theory in gamma-ray distribution from the deexcitation of Cd-114, I thought that the NeutronHP parameters might be affecting agreement between the NNDC data (which are essentially adjusted and raw experimental values) and the Geant4 simulations. My original results as mentioned above used the following parameters:

====== ParticleHP Physics Parameters ========

UseOnlyPhotoEvaporation ? 1
SkipMissingIsotopes ? 1
NeglectDoppler ? 1
DoNotAdjustFinalState ? 1
ProduceFissionFragments ? 0
UseWendtFissionModel ? 0
UseNRESP71Model ? 0

I tried varying all of the parameters for several nuclei and, as expected, the only one that seemed to have an effect on results was UseOnlyPhotoEvaporation. So I did another set of runs with UseOnlyPhotoEvaporation set to 0. (Geometry is the same. Sample thickness is 1 cm, all materials other than target are still G4_Galactic.):

====== ParticleHP Physics Parameters ========

UseOnlyPhotoEvaporation ? 0
SkipMissingIsotopes ? 0
NeglectDoppler ? 0
DoNotAdjustFinalState ? 1
ProduceFissionFragments ? 0
UseWendtFissionModel ? 0
UseNRESP71Model ? 0

This made results for most light nuclei significantly better but those for some heavier ones worse. Specifically, with UseOnlyPhotoEvaporation=1:

Isotope Agreement with NNDC

Li-6 Poor
Li-7 Poor
Be-9 Fair
B-10 Fair
C natural Good
N-14 Good
Al-27 Fair
Ni-58 Poor
Ni-60 Good
Gd-155 Fair

Good means gamma ray energies and intensity ratios agree well with NNDC data. Fair means energies mainly agree but intensities do not. Poor means neither do. I have the details in spreadsheets, but I cannot upload them since this forum does not accept the file format (LibreOffice .ods).

With UseOnlyPhotoEvaporation=0, I got:

Isotope Agreement with NNDC

Li-6 Good
Li-7 Good
Be-9 Good
B-10 Good
C natural Good
N-14 Good
Al-27 Good
Ni-58 Fair
Ni-60 Fair
Gd-155 Poor

Additionally some weird results occurred with UseOnlyPhotoEvaporation=0. Even though the peaks in the Ni-58 and Ni-60 spectra were at the correct energies, they all had saw-tooth shapes about 100 keV wide:


Other spectra, such as for Co-59 were blocky and lacked distinct peaks.


I can find very little documentation on the proper use of the ParticleHP parameters. There seems to be no detailed description of how to properly select the correct values for UseOnlyPhotoEvaporation orDoNotAdjustFinalState for a particular nucleus in advance. Is anyone aware that such a description even exists?

Hello John,
I also encountered a similar problem when matching the capture of Ca. There was a big difference, and the characteristic peak of capture gamma could not be observed. Do you know the reason now?

Hi Lydia,

I have done some more work after upgrading to Geant4 11.0.2 and G4NDL 4.6. (My previous work was with Geant4 10.7.2 and G4NDL 4.6). I have found best results with UseOnlyPhotoEvaporation = true. (As highly recommended in the Book For Application Developers on page 232, I always now set SkipMissingIsotopes = true and DoNotAdjustFinalState = true.) With these settings, I have found that for individual neutron capture events, energy is always conserved (sum of capture gamma ray energies plus residual nucleus recoil energy is equal to incident neutron energy plus Q-value). Also, I have obtained good agreement between gamma ray spectra energies and intensities and NNDC energies and intensities for Ar36, Ar40 and excellent agreement for Cl35. I have not yet checked that I get the same results with Geant4 11.0.2 for the nuclei previously discussed in this thread using Geant4 10.7.2.

One interesting aspect of this choice of parameters is that the spectra contain many lines that do NOT appear in the NNDC data base. These gammas seem to be manufactured in individual neutron capture processes to conserve energies. I have spreadsheets to show all this. I can email them to you if you wish.

I can still not find nay detailed description of how to properly select in advance the correct values for UseOnlyPhotoEvaporation or DoNotAdjustFinalState for a particular nucleus. Thus, I think it is still wise to run a check on any new nucleus to ensure that the spectra are correct for a chosen set of ParticleHP Physics Parameters before carrying out any further simulation using the nucleus.

Hi, as you say the extra gammas are manufactured by particleHP to conserve energy event by event. En geant4.11 you must use /command /process/had/particle_hp/do_not_adjust_final_state" to switch it off

Hi, So just to be clear, I am using DoNotAdjustFinalState = true and I am getting the additional “manufactured” gamma rays which conserve the capture process energy. This seems to be the OPPOSITE of what the manual states.

I do not wish to belabour this point, but when I run a Ni58 target, I get the same result whether DoNotAdjustFinalState = true or false. (The state of the parameter is verified in my terminal output file.) In EITHER case, I get additional gamma rays being “manufactured” that are not in the NNDC data base in order to conserve energy for individual capture processes. This contradicts the documentation (page 233 of Book for Application Developers Geant4 11.0). It says that with the parameter set to true, energy may not be conserved in individual capture processes, but the average capture spectrum should be that of the G4NDL (essentially NNDC) data base and it should not contain the “manufactured” gamma rays.

This seems like a bug. Should I report it?

This is not what I find. I run example Hadr3, 1 Mev neutron on Ni58 and the command produces no extra gamma with
/process/had/particle_hp/do_not_adjust_final_state true
I did not write the code but to my understanding G4ParticleInelasticCompFS / BaseFS only create extra photons because there is isotope decay or because G4ParticleHPFinalState::adjust_final_state() is called (you may uncomment the printings in these classes, specially the “Add secondary” ones
Did you check that you have not set environmental variable G4PHP_DO_NOT_ADJUST_FINAL_STATE at the same time?

I am not using the UI commands e.g., /process/had/particle_hp/do_not_adjust_final_state. Rather I have set the state variables in my main program, e.g.,
G4ParticleHPManager::GetInstance()->SetDoNotAdjustFinalState( true );

I thought that the two ways were equivalent, although I cannot find mention of the C++ way in any of the 11.0. manuals. However, the C++ way does indeed seem to change the parameters, according to my terminal printouts.

I will try Hadr03 to see if I get similar results to yours.

I have been running the Hadr03 example (Geant4 11.0.2) with the attached macro
Ni58_nCapture.mac.txt (1.6 KB). I am using 0.025 eV neutrons (i.e., monoenergetic, nominally thermal energy). Setting parameters use_photo_evaporation, skip_missing_isotopes, do_not_adjust_final_state, neglect_Doppler_broadening all true, I get a spectrum that contains most if not all of the NNDC energies. The relative intensities

are nowhere near those of NNDC

. There are also many “extra” gamma rays (ones that do not match NNDC energies) which are being used to force energy conservation in the capture processes (all have energy conserved).

I have not yet tried it with 1 MeV neutrons.

Other combinations of the four parameters give the same or worse results. I will write a summary of those and post it soon.

I have summarized my findings of the effects of varying HP process parameters on 58Ni thermal neutron capture gamma ray results from distribution example Hadr03. I have attached the detailed description
Summary_of_results.txt (4.4 KB). To sum up:

  1. There is good agreement between Geant4 and NNDC thermal neutron capture gamma ray energies ONLY when use_photo_evaporation is true.

  2. There is very poor agreement between Geant4 and NNDC gamma ray relative intensities for all combination of HP process parameters.

  3. Energy conservation of individual neutron capture gamma ray processes happens 100% of the time ONLY when all HP process parameters are true.

  4. ‘Fictional’ gamma rays are produced for all combinations of HP process parameters, regardless of whether energy conservation occurs or not.

  5. I do not know what the default values of the HP process parameters are, but they are not all false as stated in the documentation (p.60 11.0 Guide for Physics Lists).

Finally, my previous post showed the best spectrum that Hadr03 could produce for 58Ni(n,g). I have attached one with use_photo_evaporation and do_not_adjust_final_state false and other parameters true to show what a “bad” spectrum looks like.

Hi John,
I used Geant4 10.07.p03 with G4NDL4.6 to simulate Gd’s thermal neutron(0.025eV) capture gamma energy spectrum. I set the parameters you mentioned above, but I still got some extra peaks compared with the IAEA database. After you upgrade the version of geant4, have you simulated the capture gamma of Gd155 or Gd 157?
Best wishes


No, I haven’t tried either Gd155 or 157 since upgrading to Geant4 11.0. I will try them, however, and get back to you.

I did a couple of quick runs using Hadr03 with Geant4 11.0.2. I am using the QGSP_BIC_HP physics list. For Gd155:

and for Gd157 (which I think is what you are showing in your post):

The Gd157 result is similar, but not identical to yours (but then I do not know exactly what your geometry, scoring, etc. is). The different physics list should not matter for 25 meV neutrons. Without doing a detailed analysis, it seems in both cases as though many spectral lines match in energy the NNDC data base, but the intensities are not even close.

Hi John,
Thank you very much for your time! The element in my simulation is G4_Gd, so my energy spectrum contains contributions from Gd155 and Gd157. And the figure with the title “database” also contains contributions from Gd155 and Gd157. So I think the results simulated with Geant4 11.0 are similar to what I got with 10.07.

Hi, I just ran G4_Gd and my spectrum is almost identical to yours.

As you said before, the gamma intensity is not the same as the database. In order to get the same intensity, can I modify the intensity of the gamma ray in the step action? For example for 3700keV, the cross-section is actually only 99b, I will kill secondary gamma rays with the energy of 3700keV in step action with a certain probability to reduce the equivalent gamma intensity. I don’t know if this is helpful.

That might solve your specific problem, but it would be onerous to generalize it. Such conditionals in the user Stepping Action would be required for each specific problematic material (with possibly many energies per material). Although I am not sure, I imagine that the additional stepping actions would slow things down too.

It would be better if the neutron capture processes and data bases were modified to better reflected reality.

Hi @John_McFee, I am quite new to Geant4 and am very much a beginner - I was wondering how you edited the Hadr03 example and corresponding macro(s) to obtain the Gd157 spectrum? I am just trying to simulate a basic gadolinium spectrum and was wondering if you could help?
I am using version 11.0.0 of Geant and ROOT 6.26/06, and the examples do run successfully on my machine. Thank you! :slight_smile:

Hi @avmc1,

I used the QGSP_BIC_HP physics list instead of the default. So in, you have to comment out line:
RegisterPhysics( new G4HadronInelasticQBBC(verb));

and uncomment line:
RegisterPhysics( new G4HadronPhysicsQGSP_BIC_HP(verb));

then recompile.

Here is the macro I used for thermal neutron capture on Gd157:
Gd157_nCapture.mac.txt (1.6 KB)

The README file in the distribution example explains how to run Hadr03 with a macro (.mac) file.

Hope it helps.