Functions to calculate the total scattering structure function

Description

Functions to calculate the total scattering structure function given a matrix in which each row represents the position of an atom or to simulate it in the SAS region using particle lattice and size parameters.

Usage

1
2
3
4
5
6
7
calcTotalScatt(nanop, dQ=.01, minQ=0.771, maxQ=35, type="neutron", 
    scatterFactor=NA, scatterLength=NA, sigma=NA, n=0, 
    delta=0, kind="fastHist", dr = 0.001,  del = 0.01, eps=1e-3)               
IqSAS(Q, Rcore=NA, Rpart, latticep, latticepShell=NA, 
    scatterLength, N1, N2=NA, pDimer=0, sym, symShell=NA)	
IqSASP(Q, shell=NA, Rpart, latticep, latticepShell=NA, 
    scatterLength, N1, N2=NA, pDimer=0, sym, symShell=NA, rsigma)

Arguments

nanop

numeric matrix in which each row gives the coordinates of an atomic position in the nanoparticle. If nanop is not an object returned by simPart or displacePart then attributes dimer, nAtomTypes, atomType, layer_start, layer_end, layerS_start, layerS_end, r and rcore should be set manually; see simPart.

dQ

numeric indicating the desired step size in Q.

minQ

numeric indicating the minimum value of Q for which the function should be evaluated.

maxQ

numeric indicating the maximum value of Q for which the function should be evaluated.

type

character indicating type of scattering. Either "X-ray" or "neutron".

scatterFactor

list containing X-ray scattering factor parameters; see details. If NA the value is sought in nanop attributes.

scatterLength

in calcTotalScatt function call, numeric vector describing neutron scattering lengths for all atom types in the particles. If NA the value is sought in nanop attributes. In IqSAS and IqSASP calls, numeric vector describing average neutron scattering length for the particle core and shell; see examples.

sigma

numeric vector which, if not NA, determines the variances of the Gaussian displacements from the mean atomic positions throughout the nanoparticle. If NA the value is sought in nanop attributes. See simPart for details.

n, delta

numerics describing the correlation parameters n and δ for thermal atomic displacements; see details.

kind

character, can be set to "exact", "fast", "fast_av" or "fastHist". If "exact" the Debye sum is calculated as is, that can be relatively time-consuming. If "fast", "fast_av" or "fastHist" then the pseudogrid approach (Cervellino et al., 2006) is used. If "fastHist" the histogram bin approach is used to calculate interatomic distances and their multiplicities. Option "fast_av" should be used if nanop attribute "r" length greater than 1, i.e. for polydisperse particles . Nonzero dr value in that case switches computational scheme to histogram bin approach. In most case "fastHist" is recommended for better performance.

dr

numeric. If kind="fastHist" or "fast_av" describes histogram bin width.

del

numeric. If kind="fast" or "fast_av" describes the pseudolattice parameter Δ.

eps

numeric. If kind="fast" or "fast_av" describes the step size ε for interatomic distances.

Q

numeric vector, contains grid points on which the total scattering structure function should be evaluated.

N1, N2

numerics indicating number of atoms within the unit cell in the particle core and shell.

Rcore

numeric which, if not NA, determines the radius of the core.

Rpart

numeric indicating the radius of the nanoparticle

latticep, latticepShell

numeric vectors indicating the lattice parameter(s) for the core (shell); see simPart.

pDimer

numeric indicating probability of atom to form a cluster with its neighbour.

sym, symShell

characters describing the structure to be used; see simPart.

shell

numeric indicating shell thickness for the core/shell particle. For polydisperse particles shell is supposed to be of constant thickness.

rsigma

numeric indicating standard deviation in the log normal distribution of the particle (core) radius.

Details

The X-ray scattering factor is approximated by the function

f(s)=a_1 * exp(-b_1 s) + a_2 * exp(-b_2 s) + a_3 * exp(-b_3 s) + a_4 * exp(-b_4 s) + c

where s = (\frac{Q}{4π})^2. The constants in the function are possible to specify as arguments. In that case scatterFactor parameter should contain vectors a1, b1, a2, b2, a3, b3, a4, b4, a5, b5 and c. Their default values correspond to the values for Au and Pd atoms.

The correlated atomic displacement parameter for the atoms μ and ν is calculated as

σ^2_{μ, ν} = (σ^2_{μ} + σ^2_{ν} ) [ 1 - \frac{δ}{r^n}].

Value

calcTotalScatt: list with elements

Q

numeric vector of values at which the function was evaluated,

gQ

numeric vector of function values.

IqSAS and IqSASP: numeric vector of function values.

Note

IqSASP function calculates total scattering function for the polydisperse uniform particles and polydisperse core/shell particles with constant shell thickness.

References

Cervellino A, Giannini C, Guagliardi A. (2006): On the efficient evaluation of Fourier patterns for nanoparticles and clusters. J. Comput. Chem. 27, 995–1008.

See Also

simPart, displacePart

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
## simulate particle
Au <- createAtom("Cu")
Au$name <- "Au"
Pd <- createAtom("Cu")
Pd$name <- "Pd"

part <- simPart(list(Au), atomsShell=list(Pd), r=10, rcore=8)
gQ <- calcTotalScatt(part, type="neutron", sigma=c(.08, .012), 
    kind="fast", del=5e-4)
plot(gQ$Q, gQ$gQ, type="l")

## "fast_av" option to calculate scattering function
## for the array of polydisperse particles:
Zn <- createAtom("Zn")
S <- createAtom("S")
part <- simPart(atoms=list(Zn, S), r=c(8, 10, 11.2, 13.4, 14), 
    sym="hcp", latticep=c(4.3, 7.02))
gQ <- calcTotalScatt(part, type="neutron", sigma=c(.08, .012), 
    kind="fast_av")
plot(gQ$Q, gQ$gQ, type="l")

## total scattering function in small-angle region using 
##  parametric model:
Q=seq(0.001, 0.771, 0.005)
gQSAS <- IqSAS(Q=Q, Rpart=26, latticep=c(3.21, 5.21), 
    scatterLength=7.1, N1=2, sym="hcp")
plot(Q, log(abs(gQSAS)), type="l")

## total scattering function for polydisperse sample with 
## lognormal distribution
gQSAS2 <- IqSASP(Q=Q, shell=2.8, Rpart=11.2, latticep=c(4.08), 
    latticepShell=3.89, N1=4, N2=4, scatterLength=c(7.1, 8.3),
    sym="fcc", symShell="fcc", rsigma=1.1)
plot(Q, log(abs(gQSAS2)), type="l")