Casein Micelle Bouchoux - Bouchoux_casein_micelle.py
r"""
Definition
----------
This model comprises three populations of polydisperse hard spheres,
corresponding to, from the largest to smallest size:
Level0 - The casein micelle, around 100 nm in diameter.
Level1 - Hard regions that resist compression and contain the nanoclusters,
10-40 nm in diameter.
Level2 - CaP nanoclusters serving as anchors for the casein molecules.
The scattering intensity $I(q)$ is the sum of the intensities scattered
by the three levels and is calculated as:
$I(q) = c \left[ \phi _0 v_0 \left( \Delta p_0 \right) ^2 P_0 \left( q \right) + \phi _1 v_1 \left( \Delta p_1 \right) ^2 P_1 \left( q \right) + \phi _2 v_2 \left( \Delta p_2 \right) ^2 P_2 \left( q \right) \right]$
where $c$ is a constant accounting for the total concentration of the caseins.
$\phi _n$ is the volume fraction occupied by the structural element $n$ in the
dispersion, while $v_n$ and $\Delta p_n$ are its volume and average scattering
contrast, respectively. $P_n \left( q \right)$ are the form factors of each
object which are modelled using the expression of Aragon et al. (1976).
The form factors are calculated as:
$P_n\left(q\right) = \frac{9z!\left(z+1\right)^6}{X^6\left(z+6\right)!}\left[\frac{1}{2}+\frac{1}{2}\left(\frac{z+2}{z+1}\right)X^2+\left[G\left(2X\right)^\left(1/2\right)\left(z+1\right)\times Q \left(X\right)\right]\right]$
where $z = \left(\frac{1}{\sigma}\right)^2 - 1 $
with $\sigma$ being the polydispersity and
the functions $G\left(y\right)$ and $Q\left(y\right)$ are:
$G\left(y\right) = \frac{\left(z+1\right)^2}{\left(z+1\right)^2 + y^2}$ ; $F\left(y\right) = \arctan\left[y/\left(z + 1\right)\right]$
and
$Q\left(X\right) = - \frac{1}{2}\cos\left[\left(z + 1\right)F\left(2X\right)\right] - XG^\frac{1}{2}\left(2X\right)\sin\left[\left(z + 2\right)F\left(2X\right)\right] + \frac{1}{2}X^2\left(\frac{z + 2}{z + 1}\right)G\left(2X\right)\cos\left[\left(z + 3\right)F\left(2X\right)\right] $
References
----------
Bouchoux, A., Gesan-Guiziou, G., Perez, J. and Cabane, B. (2010). How to
Squeeze a Sponge: Casein Micelles under Osmotic Stress, a SAXS Study.
Biophysical Journal 99, 3754-3762.
Aragon, S. R. and R. Pecora. (1976). Theory of dynamic light scattering
from polydisperse systems. J. Chem. Phys. 64:2395-2404.
----------------------------
* **Last Modified by:** Jared Raynes **Date:** August 06, 2018
* **Last Reviewed by:** N/A **Date:** July 18, 2018
"""
from numpy import inf, errstate, sin, cos, sqrt, log, exp, pi, square, arctan
from scipy.special import gammaln
name = "bouchoux_casein_micelle"
title = "Three population casein micelle model"
description = """\
Calculates the scattering of a casein micelle
I(q) = a(P0) + b(P1) + c(P2)
a = prefactor
P0 = form factor of micelle
b = prefactor
P1 form factor of hard regions
c = prefactor
P2 = form factor of CaP nanoclusters
"""
category = "shape:sphere"
# Parameter defaults are from Bouchoux et al Table S5 and use x-ray SLDs
# pylint: disable=bad-whitespace, line-too-long
# ["name", "units", default, [min, max], "type", "description"],
parameters = [
["radius_0", "Ang", 417.1, [0, inf], "volume", "Level0 Sphere radius"],
["cste", "", 0.000234414, [0, inf], "", "Overall Constant"],
["sld_solvent_0", "/Ang^2", 9.40e-6, [-inf, inf], "sld", "Level0 Solvent Scattering Length Density"],
["sld_0", "/Ang^2", 9.89e-6, [-inf, inf], "sld", "Level0 Scattering Length Density"],
["sigma_0", "", 0.33, [0, 1], "", "Level0 polydispersity"],
["na", "", 1.0, [-inf, inf], "", "Relative number density of Level0"],
["radius_1", "Ang", 100.8, [0, inf], "volume", "Level1 Sphere radius"],
["sld_1", "/Ang^2", 10.71e-6, [-inf, inf], "sld", "Level1 Layer scattering length density"],
["sigma_1", "", 0.33, [0, 1], "", "Level1 polydispersity"],
["nb", "", 2.713976715351685, [-inf, inf], "", "Relative number density of Level1"],
["radius_2", "Ang", 15.4, [0, inf], "volume", "Level2 Sphere radius"],
["sld_2", "/Ang^2", 15.14e-6, [-inf, inf], "sld", "Level2 Layer scattering length density"],
["sigma_2", "", 0.20, [0, 1], "", "Level2 polydispersity"],
["nc", "", 168.3, [-inf, inf], "", "Relative number density of Level2"]
]
def sphere_form_volume(radius):
'''
'''
return (4.0/3.0)*pi*radius**3.0
def sld_converter(sld):
'''
convert sld in A-2 to e-A-1
>>>sld_converter(9.40e-6)
0.335
'''
e_A = round(sld / 0.0000281, 3)
return e_A
def prefactor(sld, sld_solvent, radius, cste, n):
'''
n = number of casein micelles, assumed constant so set to 1
'''
Vma = sphere_form_volume(radius/10.0)
Dpa = sld_converter(sld) - sld_converter(sld_solvent)
prefactor = cste * n * (Dpa * Vma)**2
return prefactor
def aragon(q, radius, sigma):
'''
>>> aragon(0.0013, 15.4, 0.20)
0.9998796784502213
'''
dia = radius * 2
z = (1/((sigma)**2))-1
b = dia/(z + 1)
c = z + 1
d = z + 2
e = z + 3
two_X = q * dia
g_2X = (c**2) / ((c**2)+(two_X**2))
f_2X = arctan(two_X / c)
q_X = (-0.5 * cos(c * f_2X))-(((0.5 * two_X) * (g_2X**0.5)) * sin(d * f_2X))+((0.5 * ((0.5 * two_X)**2)) * (d / c) * g_2X * cos(f_2X * e))
p1 = (9 * exp(gammaln(c)) * (c**6)) / (((0.5*two_X)**6) * exp(gammaln(z + 7)))
p2 = 0.5 + (0.5 * (d / c) * (( 0.5 * two_X )**2)) + (q_X * (g_2X**(0.5 * c)))
PX = p1 * p2
return PX
def Iq(q,
radius_0, cste, sld_solvent_0, sld_0, sigma_0, na,
radius_1, sld_1, sigma_1, nb,
radius_2, sld_2, sigma_2, nc):
'''
>>>Iq(0.0013, 417.1, 0.000234414, 9.40e-6, 9.84e-6, 0.33, 1,
100.8, 10.87e-6, 0.33, 2.713976715351685,
15.4, 1514e-6, 0.20, 168.3)
5290.302200205034
Calculate the overall combined scattering
Calculate prefactors first and then the population scattering
'''
Pre_a = prefactor(sld_0, sld_solvent_0, radius_0, cste, na)
P0 = aragon(q, radius_0, sigma_0)
Pre_b = prefactor(sld_1, sld_0, radius_1, cste, nb)
P1 = aragon(q, radius_1, sigma_1)
Pre_c = prefactor(sld_2, sld_1, radius_2, cste, nc)
P2 = aragon(q, radius_2, sigma_2)
inten = (Pre_a * P0) + (Pre_b * P1) + (Pre_c * P2)
return inten
Iq.vectorized = True # Iq accepts an array of q values
tests = [
[{}, 0.0013, 5290.302200205034]
]
demo = dict(scale=1, background=0,
radius_0=417.3, cste=0.000234414, sld_solvent_0=9.40e-6, sld_0=9.84e-6, sigma_0=0.33, na=1.0,
radius_1=100.8, sld_1=10.87e-5, sigma_1=0.33, nb=2.713976715351685,
radius_2=15.4, sld_2=15.15e-5, sigma_2=0.20, nc=168.3)
Back to Model
Download