[0d0aee1] | 1 | r""" |
---|
| 2 | |
---|
| 3 | This model provides the form factor, $P(q)$, for a micelle with a spherical |
---|
[db74c47] | 4 | core and Gaussian polymer chains attached to the surface, thus may be applied |
---|
[40a87fa] | 5 | to block copolymer micelles. To work well the Gaussian chains must be much |
---|
| 6 | smaller than the core, which is often not the case. Please study the |
---|
| 7 | reference carefully. |
---|
[0d0aee1] | 8 | |
---|
| 9 | Definition |
---|
| 10 | ---------- |
---|
| 11 | |
---|
| 12 | The 1D scattering intensity for this model is calculated according to |
---|
[bba9361] | 13 | the equations given by Pedersen (Pedersen, 2000), summarised briefly here. |
---|
| 14 | |
---|
| 15 | The micelle core is imagined as $N\_aggreg$ polymer heads, each of volume $v\_core$, |
---|
| 16 | which then defines a micelle core of $radius\_core$, which is a separate parameter |
---|
| 17 | even though it could be directly determined. |
---|
[404ebbd] | 18 | The Gaussian random coil tails, of gyration radius $rg$, are imagined uniformly |
---|
[bba9361] | 19 | distributed around the spherical core, centred at a distance $radius\_core + d\_penetration.rg$ |
---|
| 20 | from the micelle centre, where $d\_penetration$ is of order unity. |
---|
| 21 | A volume $v\_corona$ is defined for each coil. |
---|
| 22 | The model in detail seems to separately parametrise the terms for the shape of I(Q) and the |
---|
| 23 | relative intensity of each term, so use with caution and check parameters for consistency. |
---|
| 24 | The spherical core is monodisperse, so it's intensity and the cross terms may have sharp |
---|
| 25 | oscillations (use q resolution smearing if needs be to help remove them). |
---|
| 26 | |
---|
| 27 | .. math:: |
---|
| 28 | P(q) = N^2\beta^2_s\Phi(qR)^2+N\beta^2_cP_c(q)+2N^2\beta_s\beta_cS_{sc}s_c(q)+N(N-1)\beta_c^2S_{cc}(q) |
---|
[404ebbd] | 29 | |
---|
[bba9361] | 30 | \beta_s = v\_core(sld\_core - sld\_solvent) |
---|
[404ebbd] | 31 | |
---|
[bba9361] | 32 | \beta_c = v\_corona(sld\_corona - sld\_solvent) |
---|
| 33 | |
---|
[404ebbd] | 34 | where $N = n\_aggreg$, and for the spherical core of radius $R$ |
---|
[bba9361] | 35 | |
---|
[404ebbd] | 36 | .. math:: |
---|
[bba9361] | 37 | \Phi(qR)= \frac{\sin(qr) - qr\cos(qr)}{(qr)^3} |
---|
| 38 | |
---|
| 39 | whilst for the Gaussian coils |
---|
| 40 | |
---|
| 41 | .. math:: |
---|
| 42 | |
---|
| 43 | P_c(q) &= 2 [\exp(-Z) + Z - 1] / Z^2 |
---|
| 44 | |
---|
| 45 | Z &= (q R_g)^2 |
---|
| 46 | |
---|
| 47 | The sphere to coil ( core to corona) and coil to coil (corona to corona) cross terms are |
---|
| 48 | approximated by: |
---|
| 49 | |
---|
| 50 | .. math:: |
---|
[404ebbd] | 51 | |
---|
[bba9361] | 52 | S_{sc}(q)=\Phi(qR)\psi(Z)\frac{sin(q(R+d.R_g))}{q(R+d.R_g)} |
---|
[404ebbd] | 53 | |
---|
[bba9361] | 54 | S_{cc}(q)=\psi(Z)^2\left[\frac{sin(q(R+d.R_g))}{q(R+d.R_g)} \right ]^2 |
---|
[404ebbd] | 55 | |
---|
[bba9361] | 56 | \psi(Z)=\frac{[1-exp^{-Z}]}{Z} |
---|
[0d0aee1] | 57 | |
---|
| 58 | Validation |
---|
| 59 | ---------- |
---|
| 60 | |
---|
[bba9361] | 61 | $P(q)$ above is multiplied by $ndensity$, and a units conversion of 10^{-13}, so $scale$ |
---|
[404ebbd] | 62 | is likely 1.0 if the scattering data is in absolute units. This model has not yet been |
---|
[bba9361] | 63 | independently validated. |
---|
[0d0aee1] | 64 | |
---|
| 65 | |
---|
[db74c47] | 66 | References |
---|
| 67 | ---------- |
---|
[0d0aee1] | 68 | |
---|
| 69 | J Pedersen, *J. Appl. Cryst.*, 33 (2000) 637-640 |
---|
| 70 | |
---|
| 71 | """ |
---|
| 72 | |
---|
[404ebbd] | 73 | from numpy import inf, pi |
---|
[0d0aee1] | 74 | |
---|
[1e9a108] | 75 | name = "polymer_micelle" |
---|
| 76 | title = "Polymer micelle model" |
---|
[0d0aee1] | 77 | description = """ |
---|
[bba9361] | 78 | This model provides the form factor, $P(q)$, for a micelle with a spherical |
---|
| 79 | core and Gaussian polymer chains attached to the surface, thus may be applied |
---|
| 80 | to block copolymer micelles. To work well the Gaussian chains must be much |
---|
| 81 | smaller than the core, which is often not the case. Please study the |
---|
[404ebbd] | 82 | reference to Pedersen and full documentation carefully. |
---|
[0d0aee1] | 83 | """ |
---|
[bba9361] | 84 | |
---|
| 85 | |
---|
[1e9a108] | 86 | category = "shape:sphere" |
---|
[0d0aee1] | 87 | |
---|
| 88 | # pylint: disable=bad-whitespace, line-too-long |
---|
| 89 | # ["name", "units", default, [lower, upper], "type","description"], |
---|
| 90 | parameters = [ |
---|
| 91 | ["ndensity", "1e15/cm^3", 8.94, [0.0, inf], "", "Number density of micelles"], |
---|
[db74c47] | 92 | ["v_core", "Ang^3", 62624.0, [0.0, inf], "", "Core volume "], |
---|
[0d0aee1] | 93 | ["v_corona", "Ang^3", 61940.0, [0.0, inf], "", "Corona volume"], |
---|
[42356c8] | 94 | ["sld_solvent", "1e-6/Ang^2", 6.4, [0.0, inf], "sld", "Solvent scattering length density"], |
---|
| 95 | ["sld_core", "1e-6/Ang^2", 0.34, [0.0, inf], "sld", "Core scattering length density"], |
---|
| 96 | ["sld_corona", "1e-6/Ang^2", 0.8, [0.0, inf], "sld", "Corona scattering length density"], |
---|
[a807206] | 97 | ["radius_core", "Ang", 45.0, [0.0, inf], "", "Radius of core ( must be >> rg )"], |
---|
| 98 | ["rg", "Ang", 20.0, [0.0, inf], "", "Radius of gyration of chains in corona"], |
---|
[0d0aee1] | 99 | ["d_penetration", "", 1.0, [-inf, inf], "", "Factor to mimic non-penetration of Gaussian chains"], |
---|
| 100 | ["n_aggreg", "", 6.0, [-inf, inf], "", "Aggregation number of the micelle"], |
---|
| 101 | ] |
---|
| 102 | # pylint: enable=bad-whitespace, line-too-long |
---|
| 103 | |
---|
[d2d6100] | 104 | single = False |
---|
| 105 | |
---|
[925ad6e] | 106 | source = ["lib/sas_3j1x_x.c", "polymer_micelle.c"] |
---|
[0d0aee1] | 107 | |
---|
[404ebbd] | 108 | def random(): |
---|
| 109 | import numpy as np |
---|
| 110 | radius_core = 10**np.random.uniform(1, 3) |
---|
| 111 | rg = radius_core * 10**np.random.uniform(-2, -0.3) |
---|
| 112 | d_penetration = np.random.randn()*0.05 + 1 |
---|
| 113 | n_aggreg = np.random.randint(3, 30) |
---|
| 114 | # volume of head groups is the core volume over the number of groups, |
---|
| 115 | # with a correction for packing fraction of the head groups. |
---|
| 116 | v_core = 4*pi/3*radius_core**3/n_aggreg * 0.68 |
---|
| 117 | # Rg^2 for gaussian coil is a^2n/6 => a^2 = 6 Rg^2/n |
---|
| 118 | # a=2r => r = Rg sqrt(3/2n) |
---|
| 119 | # v = 4/3 pi r^3 n => v = 4/3 pi Rg^3 (3/2n)^(3/2) n = pi Rg^3 sqrt(6/n) |
---|
| 120 | tail_segments = np.random.randint(6, 30) |
---|
| 121 | v_corona = pi * rg**3 * np.sqrt(6/tail_segments) |
---|
| 122 | V = 4*pi/3*(radius_core + rg)**3 |
---|
| 123 | pars = dict( |
---|
| 124 | background=0, |
---|
| 125 | scale=1e7/V, |
---|
| 126 | ndensity=8.94, |
---|
| 127 | v_core=v_core, |
---|
| 128 | v_corona=v_corona, |
---|
| 129 | radius_core=radius_core, |
---|
| 130 | rg=rg, |
---|
| 131 | d_penetration=d_penetration, |
---|
| 132 | n_aggreg=n_aggreg, |
---|
| 133 | ) |
---|
| 134 | return pars |
---|
[0d0aee1] | 135 | |
---|
| 136 | tests = [ |
---|
| 137 | [{}, 0.01, 15.3532], |
---|
| 138 | ] |
---|
[40a87fa] | 139 | # RKH 20Mar2016 - need to check whether the core & corona volumes are per |
---|
| 140 | # monomer ??? and how aggregation number works! |
---|
| 141 | # renamed from micelle_spherical_core to polymer_micelle, |
---|
| 142 | # moved from shape-independent to spheres section. |
---|
| 143 | # Ought to be able to add polydisp to core? And add ability to x by S(Q) ? |
---|