• topas
  • arbitrary scattering factor for Rietveld refinement of TOF NPD

Dear Topas users,
I am doing Rietveld refinement of a TOF neutron powder diffraction pattern of an inclusion compound that contains D2 molecules. I suspect that they are rotating freely in the crystal structure.
I have calculated scattering factor of such a freely rotating D2 molecule and would like to refine it using Topas. The problem is that I do not know how to input my scattering factor (even fitted with 5 exponentials like the scattering factors of atoms and ions for X-ray diffraction that are stored in the ATMSCAT.CPP file). I have created a fake isotope placed it in the isotopes.txt file, and input the scattering factor into the neutscat.cpp file but it seems that it does not work. Is what I want to do feasible at all with TOPAS?
I will be grateful for your help.
With kind regards,
Piotr Guńka

Hi Piotr

To refine on the neutron scattering length use:

f0_f1_f11_atom f0 Ca @ 0.47

Search for f0_f1_f11_atom in the Tehcnical_Reference.PDF.

Note, for neutron data the occupancy is 100% correlated with f0. You could in fact refine on the occ parameter instead.

Dear Alan,
thank you for your suggestion. I am afraid this won't work since the scattering factor is not constant for a freely rotating molecule. The formula is C1 * sin(Q* C2) / Q, where C1 and C2 are some constants.
It can be fitted nicely with a f0[k] = c + [SUM a_iEXP(-b_i(k2)), i=1,5 like atomic scattering factor for X-rays.

Is there a way to input such a scattering factor for refinement against neutron data?

Maybe something like

prm A 1 min 0 max 10
prm B 0.1 min 0 max 1
f0_f1_f11_atom f0 Ca = A D_spacing Sin( B / D_spacing );

There is a section on refining on X-ray and neutron form factors in the technical reference, which, I think, would help in what you're doing.

Yes, that's exactly what I'm looking for. Thank you! I found it in the TechnicalReference.pdf.
My input is:
'Here I input the scattering factor for a freely rotating D2 molecule
prm !C1 31.0801
prm !C2 0.37075
f0_f1_f11_atom f0 D = C1 Sin( C2 D_spacing ) / D_spacing;
report_on_str

This gives me an error though:
*** Error loading sstring_in at
{ D }
unknown or misplaced keyword.
at LINE 147
lines 147 contains f0_f1_f11_atom f0 D = C1 Sin( C2 D_spacing ) / D_spacing;
Could you help me to find the reason for this error?

OK. I found the error.
Line 147 should read
f0_f1_f11_atom D f0 = C1 Sin( C2 D_spacing ) / D_spacing;
Thank you, @alan-coelho and @rowlesmr for your help

These two equations aren't equivalent:

C1 * sin(Q* C2) / Q

f0 = C1 Sin( C2 D_spacing ) / D_spacing;

Do you mean that Q = 2pi/D_spacing? If so, I took this into account and my line looks like this:
f0_f1_f11_atom D f0 = C1 D_spacing Sin( C2 / D_spacing );

    @rowlesmr just to be sure, what is the relationship between Q and D_spacing implemented in Topas? Q = 2pi/D_spacing or Q = 1/D_spacing?

    I'm pretty sure its 2*pi. You can double check in tech ref, or by toggling 2th/d/q scales in the gui.

      6 days later

      I took me some time but I finally figured that Topas does not work as expected (at least by me). With this input:
      `f0_f1_f11_atom D f0 = C1 D_spacing Sin( C2 / D_spacing );
      Topas takes f0 for Q vector equal to zero and uses this one value of f0 for all Q vectors i.e. for all D_spacings.
      This is not what I wanted as I wanted a scattering factor that is different for different D_spacings. I tried inputting the variable scattering factor using the table method described in chapter 17.13.1 of the technical reference but this does not work properly either.
      Is there any way to force Topas to use variable scattering length for neutron diffraction data (meaning that the scattering length of the defined object is not Q vector length independent)?

      If neutron_data then only f0 is used and only one value for all D_spacings. Can I ask why you would want to use different f0 values for D_spacings for neutron_data.

      Anyway, to do what you want then there are two ways:

      1) Don't use the neutron_data keyword and instead input f0, f1 and f11 values for all atoms; ie. simply set f1 and f11 to zero for example.

      2) Use scale_occ, see page 196 of the Technical_Reference.PDF or search for scale_occ. Note, scale_occ can be used as the scattering power for neutron_data on a particalar site is simply occ multiplied by and f0.

      I would use case (2).

      cheers
      alan

      Dear Alan,
      thank you for your answer. I will give it a shot soon and let you know how it goes.
      I want to use different f- values for different D_spacings, because I suspect that there is a freely rotating D2 molecule in the crystal structure. I have calculated scattering factor of such an entity and I want to use the calculated scattering factor in Topas.
      Cheers,
      Piotr

      Unfortunately, I only have license for Topas 5 available and I cannot use the scale_occ keyword. I am not sure if I can use option 1, because I have TOF NPD data. I will ask my collaborators to try out the scale_occ keyword.

      Dear Alan,
      the scale_occ keyword does what I wanted.
      Thank you for your help.
      Cheers,
      Piotr