SasView / sasmodels

Package for calculation of small angle scattering models using OpenCL.
BSD 3-Clause "New" or "Revised" License
15 stars 27 forks source link

Limiting cases of cylinder model (Trac #702) #109

Open sasview-bot opened 5 years ago

sasview-bot commented 5 years ago

The cylinder model should give the formfactor of a long, infinitely thin rod or thin disk if diameter or length is set to zero, respectively.

pkienzle commented 5 years ago

Trac update at 2017/06/29 16:45:17: pkienzle changed attachment from "" to "I-q-theta.png"

pkienzle commented 5 years ago

Trac update at 2017/06/29 16:45:41: pkienzle changed attachment from "" to "I-q-integrated.png"

pkienzle commented 5 years ago

More practically, the cylinder model does not support carbon nanotubes, with length 10 um and diameter 1 nm.

Calculations for different numbers of integration steps attached. First image shows the highly oscillatory function that we are integrating at several q points. The second image shows the results for a few different optimization strategies. Trapezoidal method for 65000 points and 525000 points are indistinguishable on the graph, and so that is likely the true value.

Repeating the tests with different lengths, it seems that the current code with the 76 point Gaussian integration supports lengths up to 0.1 um. Switching to a 150 point Gaussian will allow up to 1-2 um. Using Gaussian integration with 1024 points (not shown) gives results within 1.5% of the 525000 point trapz. [1024 is a nicer number for GPUs to work with, though any multiple of 4 ought to be fine.]

Simulations were run with explore/symint.py in the ticket-776-orientation branch.

[[Image(I-q-theta.png, 700px)]] [[Image(I-q-integrated.png, 700px)]]

pkienzle commented 5 years ago

Trac update at 2017/06/30 15:57:44: pkienzle changed priority from "minor" to "major"

pkienzle commented 5 years ago

Trac update at 2017/06/30 15:57:54: pkienzle changed type from "enhancement" to "defect"

pkienzle commented 5 years ago

[http://dx.doi.org/10.1246/cl.2005.524 Inada 2005] (supplemental) gives the following for an infinite core-shell cylinder with core radius=0:

    I(q) = pi L/q [drho V 2 J1(q r)/(q r)]^2 

This equation gives the same curve shape as the finite cylinder, but the scale is off. Instead use:

    I(q) = pi/L V/q [drho 2 J1(q r)/(q r)]^2

This matches the peaks well, but underestimates the dips. With minimal polydispersity or resolution the precise value of the dips won't matter and this approximation will be good enough. It breaks down at low q for shorter cylinder lengths.

Note: sasmodels kernels use V rather than V² because the polydispersity loop does volume weighted normalization, which still doesn't explain the 1/L vs. L difference.


[Update: 2024-09-05 PAK]

The above expression seems to be a simplified to a simple rod using ρ:shell = ρ:solvent. The full expression from the paper (Eq S2) is:

I(q) = π Lc / q { Vc/Vs (ρc - ρs) 2 J1(q rc)/(q rc) + Vs (ρs - ρsolvent) 2 J1(q(rc+ts)) / (q(rc + ts)) }²

where

Lc = length of cylinder
Vc, Vs = volume of core and shell+core
rc, ts = core radius and shell thickness
ρc, ρs, ρsolvent = SLD of core, shell and solvent

This equation can't be right because the units don't match: in the first term Vc/Vs is unitless, and the second term Vs has length cubed; it should probably be Vc. Also, the scale factor Lc/q has units of length squared where it should be unitless to form the correct dimensionality for I(q).

pkienzle commented 5 years ago

Infinitely thin rod:

2Si(qL)/(qL) - [sin(qL/2)/(qL/2)]^2

Infinitely thin disk:

2/(qR)^2 [ 1 - 2 J1(2qR)/2qR ]

Pedersen, J.S., 1997. Analysis of small-angle scattering data from colloids and polymer solutions: modeling and least-squares fitting. Advances in Colloid and Interface Science 70, 171–210. doi:10.1016/S0001-8686(97)00312-6

butlerpd commented 5 years ago

Trac update at 2018/02/13 02:41:15: butler changed milestone from "SasView 4.2.0" to "SasView 4.3.0"

butlerpd commented 5 years ago

Trac update at 2019/02/24 18:34:08: butler changed workpackage from "SasModels Redesign" to "SasModels New Model"

butlerpd commented 5 years ago

Trac update at 2019/03/03 00:49:59: butler changed workpackage from "SasModels New Model" to "SasModels Model Issues"

pkienzle commented 4 years ago

The formulas above give <F²>, but for β approximation we need <F> as well.

We could return <F> = NaN for the limiting cases since the usual structure factor models won't apply anyway.