Dear Topas users,
thanks to your helpful input, I've now come up
with a (probably clumsy) solution to achieve my
goal (see my original post far down below).
For those who are interested, I'll explain it
in relatively high detail, but before I do so,
I want to make some statements to prevent
The reasoning behind my doing is the following:
Investigating a large series of similar but
somehow variable samples, my goal is to derive
numerical parameters for each sample from its
powder XRD. Using these parameters, I can compare
and group samples, e.g. by making statements
like "sample A and B are similar (or dissimilar)
with respect to this parameter". Thus, the primary
task is to "parametrize" the XRD results. Ideally,
such parameters would have some physical meaning,
like lattice parameters, crystallite size etc.
However, this does not necessarily mean that I
would interpret or trust parameters like e.g.
LVol-IB on an absolute scale!!! After all, it
is mainly relative trends I'm interested in.
LVol-IB is is one of the parameters I get and
tabulate if the peak broadening can be successfully
described as isotropic size broadening.
[For details on LVol-IB, see Topas (v3) Users
Manual, sections 3.4.1 and 3.4.2)]
If, however, the peak broadening is clearly
anisotropic, applying the isotropic model gives
inferior fit results. LVol-IB is still calculated,
but more or less meaningless.
Thus, I wanted an anisotropic fit model that BOTH
(a) yields a satisfactory fit AND (b) still
delivers parameters with a similar meaning as
the isotropic LVol-IB.
Applying a spherical harmonics function satisfied
condition (a), but not (b) (maybe just due to my
lack in mathematical insight).
Applying Peter Stephens' code (but modified for
size broadening) met condition (a) and brought
me halfway to reach condition (b). As I did not
find a way of "teaching" (coding) Topas to do
all calculations I wanted in the launch mode,
I developed a workaround to reach (b).
Now in detail:
The modified Stephens code I use looks like
prm s400 29.52196`_2.88202 min 0
prm s040 40.52357`_4.10160 min 0
prm s004 6631.09739`_227.63909 min 0
prm s220 54.23582`_13.82762
prm s202 1454.83518`_489.04664
prm s022 5423.10499`_765.48349
prm mhkl = H^4 s400 + K^4 s040 + L^4 s004 + H^2 K^2 s220 + H^2
L^2 s202 + K^2 L^2 s022;
lor_fwhm = (D_spacing^2 * Sqrt(Max(0,mhkl)) / 10000) / Cos(Th);
Compared to Peters original code, I have changed
the strain dependence "* Tan(Th)" into the size
dependence "/ Cos(Th)" and re-arranged the remaining
terms in that line of code.
[Peter has mentioned that from the fundamental
theoretical point of view, spherical harmonics
might be better justified then his formula
for the case of SIZE broadening. Anyway,
it works for me from the practical point of
view, thus I'll use it.]
This rearrangement emphasizes the analogy between
the isotropic case "c / Cos(Th)" (where c is valid
for ALL peaks) and the anisotropic one, where
c is replaced by the hkl dependent term
(D_spacing^2 * Sqrt(Max(0,mhkl)) / 10000).
Thus, I freely interpret this term as some
sort of c(hkl), which I will use for some
specific values of hkl to derive hkl dependent
analogues of LVol-IB.
The first step of this calculation I managed
to code for Topas based on Peters equations,
but for specifc hkl values:
prm ch00 = (Lpa^2 * Sqrt(s400) / 10000); : 0.24382`_0.01190
prm c0k0 = (Lpb^2 * Sqrt(s040) / 10000); : 0.45185`_0.02287
prm c00l = (Lpc^2 * Sqrt(s004) / 10000); : 0.13114`_0.00225
As you can see, the "c(hkl)" term becomes
very simple for the cases hkl = 100, 010
and 001. For these reflections, the
"D_spacing" can be replaced with the
corresponding reserved variables for the
Now, I want to calculate something like
"LVol-IB(hkl)" from these "c(hkl)" values.
I still don't know how to code this in launch
mode, so I developed a workaround and switch
back to GUI mode.
In the GUI, I do the following:
1) I fix the lattice parameters to the
values obtained after running the anisotropic
fit in launch mode.
2) I deactivate the "Cry Size L" parameter on
the "Structure" tab and add a Lorentzian type
1/Cos(Th) convolution on the "Additional
Convolutions" tab instead. Both do the same
thing, but only the latter has the input format
3) I paste one of the "c(hkl)" values from
the *.out file of the anisotropic refinement,
e.g. the value calculated for ch00, into the
"Value" box of that convolution and keep
it fixed. Then I start the refinement.
Since lattice parameters and peak shape
are fixed, there is not much to be refined.
Not surprisingly, I obtain an ugly looking
fit in which only few reflections are
adequately described (e.g. the h00 series in
4) I use the "Capture" option to grab the
calculated pattern which is then inserted as
a new range. I export this range as a separate
RAW file, then I delete the range again.
5) I repeat steps 3 and 4 for c0k0 and c00l.
6) I delete the additional convolution
again and re-activate the "Cry Size L" parameter
instead. I make sure that the check box for
calculating LVol-IB is activated.
7) I replace the measured range with one of
the previously exported calculated ranges
and start the refinement. After convergence,
I obtain the LVol-IB value for this particular
crystal direction and write it down.
[Of course, this fit will be a "perfect" one,
which unfortunately means that the
LVol-IB(hkl) parameter obtained will have
an error calculated as zero.]
8) I repeat step 7 for the remaining two
calculated patterns/crystal directions.
Finally, I have three parameters
LVol-IB(h00), LVol-IB(0k0) and LVol-IB(00l),
which I freely interpret as "anisotropic
equivalents" of the isotropic LVol-IB, which
is exactly what I originally wanted.
PLEASE NOTE: I definitely do NOT claim that
these parameters have any real physical
meaning. I just use them to "parametrize"
sample XRDs exhibiting anisotropic size
broadening. I have chosen this particular
approach because I consider it intuitive
(and I'm an intuitive guy).
Of course, I will try in the future to see
if there are correlations between these
anisotropic "size" parameters and other
experimental results, especially from
the shape analysis of electron microscopy.
I hope that my lengthy explanations are
clear enough and maybe useful for some
Thanks again to all people who sent
replies, especially to Peter Stephens!
Of course, If someone could teach me
how to replace my clumsy GUI workaround
with some nice launch mode code, I'd
really appreciate that...
Frank Girgsdies wrote:
Dear Topas experts,
this is my first email to the list, so if you would like
to know something about my background, please refer to
the "about me" section at the end of this mail.
My question is concerning advanced modeling of anisotropic
peak broadening with Alan Coelhos program "Topas".
I'm working on a transition metal mixed oxide phase of
orthorhombic symmetry. Composition, lattice parameters,
crystallite size etc. may vary from sample to sample.
I'm using Topas to fit the powder patterns with a
"structure phase". If the peaks exhibit more or less
homogeneous peak widths, I refine the "Cry Size L"
and/or "Cry Size G" parameters to model the peak
shapes. Thus, I can obtain the LVol-IB as a measure
for the average crystallite size.
In some cases, however, I observe strongly anisotropic
peak broadening, with the 00l series of reflections
being much sharper then the hk0 and hkl reflections.
This observation fits nicely with the electron
microscopy results, where the crystals are needles of
high aspect ratio, the long axis being the c-axis of
the crystal (thus, I assume that the peak broadening
is dominated by the crystallite size effect, so
let us ignore the possibility of strain etc.).
In such case, I leave the GUI and switch to launch mode,
where I can successfully model the anisotropic peak
broadening with a second order spherical harmonics
function, following section 7.6.2. of the Topas (v3.0)
Technical Reference. So far, so good.
However, since the peak width is now primarily a
function of hkl (i.e. the crystallographic direction)
instead of a function of 1/cos(theta), I lose the size
related information. Of course, I'm aware of the
fact that the LVol-IB parameter is based on the
1/cos(theta) dependence and thus cannot be calculated
for a spherical harmonics model.
But the peaks still have a width, so it should be
possible somehow to calculate hkl-dependent size
parameters. And this is the point where I'm hoping
for some input from more experienced Topas users.
I could imagine three directions of approach:
A) The refined spherical harmonics functions
yields a set of coefficients. I'm not a mathematician,
so how to make use of these coefficients for my
purpose is beyond my comprehension.
I imagine the refined spherical harmonics function
as a 3-dimensional correction or scaling function,
which yields different values (scaling factors)
for different crystallographic directions.
Thus, it should be possible to calculate the
values for certain directions, e.g. 001 and 100.
I would expect that the ratio of these two values
is somehow correlated with the physically observed
aspect ratio of the crystal needles, or at least a
measure to quantify the "degree of anisotropy".
Is there a recipe to re-calculate (or output) these
values for certain hkl values from the set of
B) As far as I understand the spherical harmonics
approach as given in the Topas manual, it REPLACES
the Cry Size approach. However, it might be possible
to COMBINE both functionalities instead. Within a
given series of reflections (e.g. 00l) the
1/cos(theta) dependence might still be valid.
I could imagine that the spherical harmonics model
might be used as a secondary correction function
on top of a 1/cos(theta) model.
I think such approach would be analogous to the use
of spherical harmonics in a PO model, where the
reflection intensities are first calculated from
the crystal structure model and then re-scaled
with a spherical harmonics function to account for
If such an approach would be feasible, it should
be possible to extract not only relative (e.g. aspect
ratio) information as in A), but direction dependent
analogues of LVol-IB, e.g. LVol-IB(a), LVol-IB(b)
and LVol-IB(c) for an orthorhombic case.
C) One could leave the spherical harmonics approach
and go to a user defined model, which refines different
Cry Size parameters for different crystal directions.
In my case, two parameters would probably be sufficient,
one for the c-direction, and a common one for the a- and
The Topas Technical Reference, section 7.6.3. gives a
similar example of a user defined peak broadening function,
depending on the value of l in hkl.
I could probably come up with an analogous solution
which has a 1/cos(theta) dependence and two parameters,
one for the 00l and one for the hk0 case.
My problem with this approach is how to treat the
mixed reflections hkl. I suppose they should be
scaled with a somehow weighted mix of the two
parameters, where the weighting depends on the
angle between the specific hkl and the c-axis.
However, I no idea how a physically reasonable
weighting scheme (and the corresponding Topas syntax)
should look like.
So, if anyone has a suggestion how to realize one
or another approach to model anisotropic peak
broadening AND extract size-related parameters
using Topas, I'd be very grateful.
Please mention the letter of the approach (A, B, C)
you are referring to in your reply.
And now, as this is my first mail to the list,
a brief introduction about myself:
I'm an inorganic chemist who became interested
in crystal structures and has picked up some
crystallography knowledge here and there.
I did my diploma in solid state chemistry,
using powder diffraction on perowskite-related
For my Ph.D. I turned to organometallic chemistry
to learn single crystal structure analysis on
molecular compounds, solving around 100 small
molecule crystal structures.
Now, I'm back to solid state chemistry and powder
diffraction in the context of heterogeneous
catalysis. Exploiting the structure solution
approach of the Topas software, I even managed to
solve two inorganic structures from powder data
(mainly by trial-and-error), thus bridging between
my current and former occupation.
I am a pragmatically oriented guy, i.e. I am a
"structure solver", not a real crystallographer,
because I lack the deep and thorough training
of a real crystallographer. My mathematical
and programming skills are just basic.
I tend to dive into such things just as deep as
necessary to achieve my goals.
I hope that you do not think by now that I am a
"I just push the button on that black box"
type of guy. I'm fully aware of the fact that
some insight into the things that go on inside
the "black box" is necessary to evaluate the
results for their physical relevance.
However, as my emphasis is on application of
XRD in chemistry and not on its fundamentals,
my insight naturally has its limitations.
Department of Inorganic Chemistry
Fritz Haber Institute (Max Planck Society)