Xray::...asKirf(3pm)
β¨ Xray::Scattering::WassKirf β¨
okay bestie so this is a Perl manual page from the User Contributed Perl Documentation collection, and it's filed under the name Xray::...asKirf (yes the name is truncated, the real one is Xray::Scattering::WassKirf, we move on π
). It's giving very niche, very crystallography, very "I know a guy who knows a guy who knows the scattering factor of Ce3+" energy. Let's get into it π«Ά
πΈ NAME πΈ
Xray::Scattering::WassKirf β it's a Perl interface to the Waaskirf-Kirfel</b> tables. that's it that's the name π
π SYNOPSIS π
so here's literally the whole vibe in four lines:
use Xray::Scattering;
Xray::Scattering->load('WaasKirf');
$fnot = Xray::Scattering->get_f($symb, $d);
iconic. short. slays. β¨
π¦ DESCRIPTION π¦
okay so this module gives you a functional interface to the Waasmaier-Kirfel tables β a big ol' pile of coefficients for calculating the Thomson (kinematical) scattering factors of the elements and the common valence states. periodt.
where do those coefficients live, you ask? externally, babe. they're in the waaskirf.db database file. not vibing inside the module, they're off doing their own thing in a file. very independent of them π
and these coefficients? they're for an Aikman expansion, which is shaped like this:
5
f0 = sum [ ai*exp(-bi*s^2) ] + c
i=1
so that means there are 11 coefficients for each of the 211 tabulated element/valence symbols. eleven. each. not a typo. that's just the math's whole thing π
now let's talk about s. s is sin(theta)/lambda. and (lambda*s)/2pi is the momentum transfer. and s is simply related to the crystal d-spacing by s=1/2d. the math is mathing, bestie, I promise π§
the reference for these tables is "New Analytical Scattering Factor Functions for Free Atoms and Ions for Free Atoms and Ions", by D. Waasmaier & A. Kirfel, Acta Cryst. (1995) A51, pp. 416-413. β and yes, the title really does say "for Free Atoms and Ions" twice, I am not touching that, it's not my job to fix academia π«Ά
- doi:10.1107/S0108767394013292
these data were computed for neutral atoms and ions, and they're valid for the full range of sin(theta)/lambda from 0.0 to 6.0 A-1. full range. no gaps. ate. π
as for where the actual data used in the W-K Aikman expansion comes from β you can find it in a few places on the web. here's where the author got the file used with this module:
http://ftp.esrf.fr/pub/scisoft/xop/DabaxFiles/f0_WaasKirf.dat
(fr fr, that's the actual source, bookmark it if that's your thing πΈ)
π METHODS π
get_f
this one calculates the Thomson scattering for a given symbol and d-spacing. and here's the thing: the Thomson scattering depends only on the momentum transfer. the d-spacing of the scattering planes is a closely related quantity, and it's easily calculated from the crystal structure β see Xtal.pm for that β¨
$symb = "Ce3+";
$fnot = Xray::Scattering->get_f($symb, $d);
now the important rules, listen up:
- if the symbol can't be found in the table,
get_freturns 0. - it also returns 0 when
$symbolis whitespace, or when it'snull, ornu. - if
$symbolis a number, or the name of an element, then it assumes you want the Thomson scattering for the neutral element. - the absolute value of
$d_spacingis used by this function. yes, absolute. don't come at it with negatives, it will simply take the abs π
and one more lil thing: if you ask for a valence state that isn't in the table, but for an element whose 0+ state IS in the table β this method returns the scattering factor for the 0 valent atom. it's doing its best, okay π
get_coefficients
this one returns the 11 element list containing the coefficients for the given symbol. eleven. again. slay.
@coefs = Xray::Scattering->get_coefficients($symb)
and it returns:
a1,b1,a2,b2,a3,b3,a4,b4,c
(yes that's the shape of it β count them, there are 11 things, c is the lonely little plus-c at the end π₯Ί)
same deal as before: if you ask for a valence state that's not in the table, but for an element whose 0+ state is in the table, this method returns the coefficients for the 0 valent atom. consistency. we love her. π«Ά
has
this is a test of whether a given symbol is tabulated in the Waasmaier-Kirfel table. it returns the symbol itself if it's found in the table, or 0 if it is not. that's it, that's the whole method, no notes π
$symb = "Ce3+";
$is_tabulated = Xray::Scattering->has($symb);
π ELEMENTS AND VALENCE STATES π
okay here's the big one. the following is the list of symbols for the tabulated elements and valence states. and btw, the final two β you know the ones β are ways of referring to an empty site (i.e. a null or blank atom). so don't be confused when you see them, they're literally just "nobody's home" πΈ
H H1- He Li Li1+ Be Be2+ B C
Cval N O O1- O2- F F1- Ne Na
Na1+ Mg Mg2+ Al Al3+ Si Siva Si4+ P
S Cl Cl1- Ar K K1+ Ca Ca2+ Sc
Sc3+ Ti Ti2+ Ti3+ Ti4+ V V2+ V3+ V5+
Cr Cr2+ Cr3+ Mn Mn2+ Mn3+ Mn4+ Fe Fe2+
Fe3+ Co Co2+ Co3+ Ni Ni2+ Ni3+ Cu Cu1+
Cu2+ Zn Zn2+ Ga Ga3+ Ge Ge4+ As Se
Br Br1- Kr Rb Rb1+ Sr Sr2+ Y Zr
Zr4+ Nb Nb3+ Nb5+ Mo Mo3+ Mo5+ Mo6+ Tc
Ru Ru3+ Ru4+ Rh Rh3+ Rh4+ Pd Pd2+ Pd4+
Ag Ag1+ Ag2+ Cd Cd2+ In In3+ Sn Sn2+
Sn4+ Sb Sb3+ Sb5+ Te I I1- Xe Cs
Cs1+ Ba Ba2+ La La3+ Ce Ce3+ Ce4+ Pr
Pr3+ Pr4+ Nd Nd3+ Pm Pm3+ Sm Sm3+ Eu
Eu2+ Eu3+ Gd Gd3+ Tb Tb3+ Dy Dy3+ Ho
Ho3+ Er Er3+ Tm Tm3+ Yb Yb2+ Yb3+ Lu
Lu3+ Hf Hf4+ Ta Ta5+ W W6+ Re Os
Os4+ Ir Ir3+ Ir4+ Pt Pt2+ Pt4+ Au Au1+
Au3+ Hg Hg1+ Hg2+ Tl Tl1+ Tl3+ Pb Pb2+
Pb4+ Bi Bi3+ Bi5+ Po At Rn Fr Ra
Ra2+ Ac Ac3+ Th Th4+ Pa U U3+ U4+
U6+ Np Np3+ Np4+ Np6+ Pu Pu3+ Pu4+ Pu6+
Am Cm Bk Cf ' ' Nu
not me counting all 211 of these. the table said 211 and the table does not lie, bestie. π
π AUTHOR π
this whole thing is by Bruce Ravel β bravel AT bnl DOT gov β and his corner of the internet lives at:
http://cars9.uchicago.edu/~ravel/software/exafs/
okay that's the whole page, bestie, you're fully caught up π no cap, you now know more about Waasmaier-Kirfel coefficients than 99% of people at any given party β¨
and for the lil sign-off: this documentation shipped as part of perl v5.34.0, dated 2022-06-28, and it's filed under the manual page name Xray::...asKirf(3pm) β go forth and scatter π¦ππ
π¦ where this page comes from
- debian bookworm: libxray-scattering-perl 3.0.1-3 Β· Artistic-1.0-Perl OR GPL-1.0-or-later
- debian trixie: libxray-scattering-perl 3.0.1-3 Β· Artistic-1.0-Perl OR GPL-1.0-or-later
- ubuntu noble: libxray-scattering-perl 3.0.1-3 Β· Artistic-1.0-Perl OR GPL-1.0-or-later
- ubuntu resolute: libxray-scattering-perl 3.0.1-3 Β· Artistic-1.0-Perl OR GPL-1.0-or-later
- ubuntu stonking: libxray-scattering-perl 3.0.1-3 Β· Artistic-1.0-Perl OR GPL-1.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms