Ultra-Small-Angle X-ray Scattering Facility


Atomic scattering factors and attenuation using
Cromer-Liberman code for Igor Pro ver. 4.0 and higher

This package of Igor Pro (version 4.0 and higher) macros provides functions to calculate the X-ray atomic scattering factors (atomic form factors) and X-ray attenuation (mu/rho) using the Cromer-Liberman (energy-dependent) and Cromer-Mann (Q-dependent) code. This is a translation of C code translation of original Fortran code into Igor Pro macro language.

The code contains all necessary lookup tables for these functions. The Jensen correction is not included in this code.

Functions provided are:

Function Returns

Output is in [electron units]
except for mu/rho which is in [cm2/gram]

Get_f (AtomicSymbol, Qvalue, keV) f0 + fp + i* fpp
Get_fp (AtomicSymbol, keV) fp + i* fpp
Get_RealPartfp (AtomicSymbol, keV) fp
Get_ImagPartfpp (AtomicSymbol, keV) fpp
Get_f0 (AtomicSymbol,Qvalue) f0
Get_MuOverRho (AtomicSymbol, keV) mu over rho

List of atomic symbols allowed is included in the comments at the beginning of the procedure file. These atomic symbols may include selected ionization states.

keV is X-ray energy in [keV]

Qvalue = 2*pi/d = 4*pi*sin(theta)/lambda     in [A-1]


Note, that the full atomic form factor is

                                                                  f = f0 + fp + i * fpp

where fp is the real part of anomalous dispersion correction and fpp is the imaginary part of anomalous dispersion correction. This value is returned by Get_f() function.

Download version 1.8 of this package from Github depository


See comments in the procedure file for further details.


CROMER, D. T. and LIBERMAN, D. (1981). Acta Cryst, A37, 267-268.

CROMER, D. T. and WABER, J. T. (1965). Acta Cryst, 18, 104-109.

CROMER, D. T. and MANN, J. B. (1967). J Chem Phys, 47, 1892-1893.



I would like to thank for help in development of this code to Pete Jemian and Jon Tischler, who provided both Fortran code, C code, and a lot of help in development and testing of this package…


Jan Ilavsky, 5-13-2020

Version info:

Version 1.8

Minor fixes for Igor 8.

Version 1.7

Fix for bug, which did not allow user to control precision of calculations. Fixed.

Version 1.6

Fix for internal code typo – sometimes I used Q and sometimes S for scattering vector.  Fixed.

Version 1.5

Fix for major bug, when input for Cromer Mann calculations f0(Qvalue) was indicated as 2*pi/d = 4*pi*sin(theta)/lambda in [A-1], but was in the code incorrectly used. This caused error in output (input values for Cromer Mann were factor of 4*pi off)… Increased number of stored data in the buffer to 200.