X-ray fluorescence/PIXE line energies


I am simulating x-ray fluorescence induced by electrons and I believe the energies of the low energy lines are not correct. There are rather larger discrepancies between the GEANT4 simulated values and the NIST data base (https://www.nist.gov/pml/x-ray-transition-energies-database).
A few examples:

Line NIST Energy [eV] GEANT4 Energy [eV] Difference [eV]
Mn Ka 5898.8 5858.68 40.12
Fe Ka 6404.01 6362.71 41.30
Ni Ka 7478.25 7435.78 42.47
Cu Ka 8047.82 8005.71 42.11
Zn Ka 8638.90 8596.40 42.50

Can someone explain to me the differences? Is the GEANT4 data base simply outdated? Or am I doing something wrong in the simulations? For context my setup: Electrons of 20keV are shot onto a target and produce fluorescence photons that are caught with a detector (these are the values in the ‘GEANT4 Energy’ column). I am using the packages livermore, fluo, PIXE and ANSTO.

Thank you,

This is just a shot in the dark, but could the difference in energy be caused by your geometry? For example, for Fe Kalpha if the emitted X-rays were Compton scattered by ~79 degrees before they hit the detector, they would be downshifted by ~41eV. To be fair, I do not know your geometry or how you are measuring the X-ray energies.

In addition, try to use Bearden energies, they are more accurate.

1 Like

I have changed the setup to be very simple without any angles and scattering possibilities, so the x-rays have a straight path to the detector. The energies are still the same as before.

The Bearden package does work!


When I use Bearden, the line energies are right, however, the transition probabilities are wrong. The ANSTO transition probabilities describe the line ratios better. Is it possible to use ANSTO for the transition probabilities and Bearden for the binding energies? I already tried to copy the Bearden binding energy file to the EADL data directory (/Programs/GEANT4/geant4-v11.0.3-install/share/Geant4-11.0.3/data/G4EMLOW8.0/fluor_ …) because I thought ANSTO would use EADL binding energies. But that didn’t work. I also tried “make install” in the GEANT4 build again folder but it keeps downloading the original EADL binding energy file.
Any ideas how to solve this problem?

You can use the ANSTO Fluo data libraries and the Bearden binding energies. In addition, please, once you have it, could you send me the summary of your results with ANSTO and EADL data libraries? ANSTO data libraries are new in geant4 and to have some feedback it would really be helpful. Thank you. my e-mail is susanna@uow.edu.au

is there a code example for this situation (electrons onto target, measuring the energy of produced photons)? Also wrt to these mentioned packages?

How can I use ANSTO and Bearden together? Are there UI commands for that?

I haven’t found an example in the GEANT4 examples so far. The closest are /examples/advanced/xray_fluorescence and /examples/advanced/eRosita, but they are not quite what I want.

Also they don’t show how to use ANSTO and Bearden data bases together.

1 Like

example TestEm5 + pixe_ANSTO.mac
for Bearden, I do not know …

1 Like

As @maire said, please refer to TestEm5. to activate Bearden:

or using UI command:
/process/em/fluoBearden true

It should work

unfortunately, it doesn’t work. So in my main .cc file I initialize the RunManager with “runManager->Initialize();”, and afterwards, this macro is executed:

/process/em/pixeXSmodel ECPSSR_ANSTO
/process/em/fluoANSTO true
/process/em/fluoBearden true

/gun/energy 20 keV
/run/beamOn 1000000

I have tried all possible combinations and orders of the 3 /process/em/ commands, but whenever fluoANSTO and fluoBearden are called together, the ANSTO files are used (right transition probablilities and the wrong binding energies). Only when I use fluoBearden alone, the binding energies are right.
Does anybody know why this is happening?

The “G4AtomicTransitionManager::Instance()->SetFluoDirectory(“/fluor_Bearden”);” command unfortunately doesn’t work, the same for the equivalent ANSTO lines. I am probably inserting the command at the wrong place or something.

Thank you Katharina, I thought they would work together. I will investigate this. In the meantime, probably the best solution is to “substitute” the default data library with the Bearden binding energies.

Could you please try to include in the physics list:

and then activate ANSTO data library via UI command? could you please tell me how it goes?


Hi thank you for your answer. When I try G4AtomicTransitionManager::Instance()->SetFluoDirectory(“/fluor_Bearden”); in my code, I get an error:
error: ‘class G4AtomicTransitionManager’ has no member named ‘SetFluoDirectory’
And I also don’t find a function “SetFluoDirectory” in the G4AtomicTransitionManager.hh. I use GEANT4 version 11.0.3. Maybe this was only in an older version?

I already tried to substitute (copy and overwrite) the fluo_Bearden/binding.dat file to fluor and fluor_XDB_EADL because I wasn’t sure which one was the default one.
That didn’t work, then, I reinstalled Geant4 (via cmake3) with the download data packages option off and did again “make” and “make install”. It still didn’t work.
Are the data packages compiled at runtime like a dll or before when I install Geant4?

Anyways nothing seemed to work so far unfortunately.


I checked the code and the libraries. Unfortunately it is not possible to have both ANSTO and Bearden at the same time (as you correctly pointed out). To make that possible requires some work to do , it seem to me it is not a straightforward fix. I need to discuss this requirement at the level of the EM Physics Working Group.
In the mean time, probably, what you could do is to use ANSTO data libraries, but then comment that with the Bearden you get better position of the X-ray lines. Probably the best is to run both configurations.

Thank you very much for looking into it! Too bad that it is not possible to use both packages together. Please let me know in case there is a solution in a new version of GEANT4.
In the meantime I will probably use the ANSTO libraries.

I was wondering whether there has been any progress on the topic? In the newest GEANT version I think there are some changes in the G4AtomicTransitionManager class. Is it possible now to use ANSTO cross sections and Bearden line energies?

Dear Katharina

unfortunately no, there has no been any progress. I bring this requirement at the attention of @civanch