Neutron charge exchange cross section

I counted experimentally the various isotopes produced by neutron irradiation of iron (natural isotopic composition) at a reactor, and I would like to compare the data with a Geant4 simulation.
I do know the energy spectrum of the incident neutrons and I reproduced it in Geant4 using the G4GeneralParticleSource class.
The first thing that I did was to compare the ratio of the number of 54Mn isotopes created with the number of 59Fe isotopes produced. I found that the ratio of 54Mn/59Fe calculated by Geant4 is orders of magnitudes higher than the one observed experimentally.
59Fe is produced by neutron capture on 58Fe, whereas 54Mn is produced by (n,p) on 54Fe. This latter process is named “charge exchange” in Geant4.
I looked at the cross section for neutron capture on Fe in Geant4 (using G4HadronicProcessStore::GetCaptureCrossSectionPerAtom() ) and found it consistent with the radiative neutron capture cross section in ENDF.
I then looked at the charge exchange cross section on Fe used in Geant4 (using G4HadronicProcessStore::GetChargeExchangeCrossSectionPerAtom() ) and found values that are extremely high, much higher than the ENDF Fe(N,P) cross section.
I am attaching the plots of the charge exchange cross section from G4. The corresponding N,P cross section from ENDF can be retrieved from ENDF: Evaluated Nuclear Data File (new users can only embed one item in their posts!).
Please let me know if I am missing something. This is the list of processes and xsections enabled for neutrons in my Physics List.

                       Hadronic Processes for neutron

Process: hadElastic
Model: hElasticCHIPS: 19.5 MeV —> 100 TeV
Model: NeutronHPElastic: 4 eV —> 20 MeV
Model: NeutronHPThermalScattering: 0 eV —> 4 eV
Cr_sctns: NeutronHPThermalScatteringData: 0 eV —> 4 eV

 Cr_sctns:        NeutronHPElasticXS: 0 eV  ---> 20 MeV

 Cr_sctns:        G4NeutronElasticXS: 0 eV  ---> 100 TeV

Process: chargeExchange
Model: Charge Exchange: 0 eV —> 100 TeV
Cr_sctns: G4NeutronElasticXS: 0 eV —> 100 TeV

Process: neutronInelastic
Model: FTFP: 3 GeV —> 100 TeV
Model: BertiniCascade: 19.9 MeV —> 6 GeV
Model: NeutronHPInelastic: 0 eV —> 20 MeV
Cr_sctns: NeutronHPInelasticXS: 0 eV —> 20 MeV

 Cr_sctns: JENDLHEInelasticCrossSection: 0 eV  ---> 100 TeV

 Cr_sctns:      G4NeutronInelasticXS: 0 eV  ---> 100 TeV

Process: nCapture
Model: NeutronHPCapture: 0 eV —> 20 MeV
Model: nRadCapture: 19.9 MeV —> 100 TeV
Cr_sctns: NeutronHPCaptureXS: 0 eV —> 20 MeV

 Cr_sctns:        G4NeutronCaptureXS: 0 eV  ---> 100 TeV

Process: nFission
Model: NeutronHPFission: 0 eV —> 20 MeV
Model: G4LFission: 19.9 MeV —> 100 TeV
Cr_sctns: NeutronHPFissionXS: 0 eV —> 20 MeV

 Cr_sctns:                    ZeroXS: 0 eV  ---> 100 TeV

Thank you,


Which physics lists are you using?
Geant4 provides severeal physics lists and some might be better for your case.

QGSP_BIC_AllHP makes use of neutron evaluated cross section files from a library of your choosing.
You can use the TENDL cross section library, which are cross sections computated by TALYS code
You can get it from the offical homepage
Download Geant4-11.1.1 - Geant4 (
but you need to set the environmental variable G4PARTICLEHPDATA to where the library is.

Or you can change the Neutron cross-sections and final states library from G4NDL to some of these
GEANT 4 Libraries (
but you need to change where the environmental variable G4NEUTRONHPDATA is pointing to.

I dont know if any of them is obsolete…

Regards Max

PS: The current version of the G4TENDL1.4 from the official website says “These data sets derive mostly from TENDL-2019” in its README, while the Credit/Citation page Credit/Citations for Data Files distributed with Geant4 - Geant4 ( says “Database translated from the TENDL-2014…” … is this a typo? anyone else noticed?

I ran example Hadr03 with attached macro : neutrons, 2 MeV, on Fe54 alone.
As you can see on the printout, total cross section is ~ 726 mbarn.
The charge-exchange rate is 2303/100000, which gives ~16.7 mbarn.

elena.mac.txt (281 Bytes)
elena.out.txt (3.6 KB)

Thank you very much.
I tried to run Hadr03 with the macro that you provided, and noticed that I obtain different results from yours. I have attached my output: the reactions happening in the 54Fe are totally different. The mean free path and cross sections listed are different.
There is this statement in my output that is not present in yours:
“Verification: crossSections from G4HadronicProcessStore not available”

The data libraries that I use are the default ones that came with my Geant4 distribution.
I am running on a Mac and I obtain similar results on two different Mac computers, therefore I would tend to exclude hardware issues.

I am using Geant4 version 11.1.0 with the following environmental variables defined:


Finally, I am running the code on 16 cores in parallel.
Do you have any clue of what might be going on?


output.txt (5.2 KB)

Thank you, Max.
I tried your option #2 (libraries from the iaea website) and nothing changed.
I also tried running the hard03 example, as Michel suggested, and I verified that I obtain different results from what he obtains.
I tried hadr03 both with the default G4 libraries, and with the ENDF-VIII.0 libraries downloaded from the iaea website: no difference.
I therefore think that there is a problem either with the version of Geant4 that I am using ( version 11.1.0 ) or, somehow, with the way I am running it or the way I have compiled it, although I have no idea what could cause the problem I am having.
Any advice would help.

Thank you,


Did you change physics list as well?
Which physics list are you using?


When I run hadr03 I run the Physics list that is defined in the example.
It is a custom physics list that uses the following constructors for neutron interactions:

G4HadronInelasticQBBC for inelastic processes and
G4HadronElasticPhysicsXS for elastic processes

You can look at the example yourself, it is at $G4INSTALL/examples/extended/hadronic/Hadr03/

I can try changing the Physics List to a pre-defined one, but the fact that Michel Maire and I are obtaining different results when running exactly the same example software (with exactly the same Physics List), makes me think that the problem is not the Physics list…

Thank you,

Hello again,

the of this particular example changed from Geant4 V11.0.0beta to Geant4 V11.1.0 two months ago
examples/extended/hadronic/Hadr03/src/ · geant4-11.0-release · geant4 / geant4 · GitLab (
examples/extended/hadronic/Hadr03/src/ · master · geant4 / geant4 · GitLab (

Old one uses G4HadronElasticPhysicsHP as Hadron Elastic scattering and G4HadronPhysicsQGSP_BIC_HP as Hadron Inelastic physics

New one uses G4HadronElasticPhysicsXS and G4HadronInelasticQBBC

I found this because the “Hadronic Processes for neutron” differ in your and maire’s output files.

You could try changing these. I am currently travelling and not able to do it myself.


Indeed using G4HadronElasticPhysicsHP and G4HadronPhysicsQGSP_BIC_HP (the classes that were used in Geant4 V11.0.0beta and that are no longer used in Geant4 V11.1.0) in Hadr03 makes my results consistent with Maire’s.
I will see if using these classes help reproducing the experimental results that I have.
Thank you again for your help.


No problem! :slight_smile:

Geant4’s functionality to make your own physics list is sometimes a blessing and sometimes a curse.

Remember: You could also try out a to set standard physics list with all interactions enabled in your mainfile instead of a custom physicis list, like:

#include "QGSP_BIC_HP.hh" main function...
G4VModularPhysicsList* physicsList = new QGSP_BIC_HP;


In, select G4HadronPhysicsQGSP_BIC_HP instead of QBBC

I figured out the origin of the problem that I noticed initially, the fact that G4 was overestimating the production of Mn54 in Fe. The reason was that, in addition to registering a class for hadronic elastic physics and one for hadronic inelastic physics in my Physics list, I had also registered the class G4ChargeExchangePhysics. This class somehow produces the neutron charge exchange xsection on Fe that I included in my initial post, which is clearly wrong.
I just removed that class from my physics list and now everything looks reasonable.
Thank you,

1 Like