Changeset 3556ad7 in sasmodels for sasmodels/models/ellipsoid.py
- Timestamp:
- Mar 20, 2016 6:24:32 AM (8 years ago)
- Branches:
- master, core_shell_microgels, costrafo411, magnetic_model, release_v0.94, release_v0.95, ticket-1257-vesicle-product, ticket_1156, ticket_1265_superball, ticket_822_more_unit_tests
- Children:
- e796fcb
- Parents:
- 09d7a54
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sasmodels/models/ellipsoid.py
rcedad32 r3556ad7 2 2 # Note: model title and parameter table are inserted automatically 3 3 r""" 4 The form factor is normalized by the particle volume .4 The form factor is normalized by the particle volume 5 5 6 6 Definition … … 31 31 32 32 $\alpha$ is the angle between the axis of the ellipsoid and $\vec q$, 33 $V $ is the volume of the ellipsoid, $R_p$ is the polar radius along the33 $V = (4/3)\pi R_pR_e^2$ is the volume of the ellipsoid , $R_p$ is the polar radius along the 34 34 rotational axis of the ellipsoid, $R_e$ is the equatorial radius perpendicular 35 35 to the rotational axis of the ellipsoid and $\Delta \rho$ (contrast) is the … … 41 41 :ref:`cylinder orientation figure <cylinder-angle-definition>`. 42 42 For the ellipsoid, $\theta$ is the angle between the rotational axis 43 and the $z$ -axis.43 and the $z$ -axis. 44 44 45 45 NB: The 2nd virial coefficient of the solid ellipsoid is calculated based … … 54 54 .. figure:: img/ellipsoid_angle_projection.jpg 55 55 56 The angles for oriented ellipsoid .56 The angles for oriented ellipsoid, shown here as oblate, $a$ = $R_p$ and $b$ = $R_e$ 57 57 58 58 Validation … … 74 74 calculated from our 2D model and the intensity from the NIST SANS 75 75 analysis software. The parameters used were: *scale* = 1.0, 76 *r polar* = 20 |Ang|, *requatorial* = 400 |Ang|,76 *r_polar* = 20 |Ang|, *r_equatorial* = 400 |Ang|, 77 77 *contrast* = 3e-6 |Ang^-2|, and *background* = 0.0 |cm^-1|. 78 78 … … 102 102 description = """\ 103 103 P(q.alpha)= scale*f(q)^2 + background, where f(q)= 3*(sld 104 - s olvent_sld)*V*[sin(q*r(Rp,Re,alpha))104 - sld_solvent)*V*[sin(q*r(Rp,Re,alpha)) 105 105 -q*r*cos(qr(Rp,Re,alpha))] 106 106 /[qr(Rp,Re,alpha)]^3" … … 110 110 111 111 sld: SLD of the ellipsoid 112 s olvent_sld: SLD of the solvent112 sld_solvent: SLD of the solvent 113 113 V: volume of the ellipsoid 114 114 Rp: polar radius of the ellipsoid … … 120 120 parameters = [["sld", "1e-6/Ang^2", 4, [-inf, inf], "", 121 121 "Ellipsoid scattering length density"], 122 ["s olvent_sld", "1e-6/Ang^2", 1, [-inf, inf], "",122 ["sld_solvent", "1e-6/Ang^2", 1, [-inf, inf], "", 123 123 "Solvent scattering length density"], 124 ["r polar", "Ang", 20, [0, inf], "volume",124 ["r_polar", "Ang", 20, [0, inf], "volume", 125 125 "Polar radius"], 126 ["r equatorial", "Ang", 400, [0, inf], "volume",126 ["r_equatorial", "Ang", 400, [0, inf], "volume", 127 127 "Equatorial radius"], 128 128 ["theta", "degrees", 60, [-inf, inf], "orientation", … … 134 134 source = ["lib/sph_j1c.c", "lib/gauss76.c", "ellipsoid.c"] 135 135 136 def ER(r polar, requatorial):136 def ER(r_polar, r_equatorial): 137 137 import numpy as np 138 138 139 ee = np.empty_like(r polar)140 idx = r polar > requatorial141 ee[idx] = (r polar[idx] ** 2 - requatorial[idx] ** 2) / rpolar[idx] ** 2142 idx = r polar < requatorial143 ee[idx] = (r equatorial[idx] ** 2 - rpolar[idx] ** 2) / requatorial[idx] ** 2144 idx = r polar == requatorial145 ee[idx] = 2 * r polar[idx]146 valid = (r polar * requatorial != 0)139 ee = np.empty_like(r_polar) 140 idx = r_polar > r_equatorial 141 ee[idx] = (r_polar[idx] ** 2 - r_equatorial[idx] ** 2) / r_polar[idx] ** 2 142 idx = r_polar < r_equatorial 143 ee[idx] = (r_equatorial[idx] ** 2 - r_polar[idx] ** 2) / r_equatorial[idx] ** 2 144 idx = r_polar == r_equatorial 145 ee[idx] = 2 * r_polar[idx] 146 valid = (r_polar * r_equatorial != 0) 147 147 bd = 1.0 - ee[valid] 148 148 e1 = np.sqrt(ee[valid]) … … 152 152 delta = 0.75 * b1 * b2 153 153 154 ddd = np.zeros_like(r polar)155 ddd[valid] = 2.0 * (delta + 1.0) * r polar * requatorial ** 2154 ddd = np.zeros_like(r_polar) 155 ddd[valid] = 2.0 * (delta + 1.0) * r_polar * r_equatorial ** 2 156 156 return 0.5 * ddd ** (1.0 / 3.0) 157 157 158 158 159 159 demo = dict(scale=1, background=0, 160 sld=6, s olvent_sld=1,161 r polar=50, requatorial=30,160 sld=6, sld_solvent=1, 161 r_polar=50, r_equatorial=30, 162 162 theta=30, phi=15, 163 r polar_pd=.2, rpolar_pd_n=15,164 r equatorial_pd=.2, requatorial_pd_n=15,163 r_polar_pd=.2, r_polar_pd_n=15, 164 r_equatorial_pd=.2, r_equatorial_pd_n=15, 165 165 theta_pd=15, theta_pd_n=45, 166 166 phi_pd=15, phi_pd_n=1) 167 167 oldname = 'EllipsoidModel' 168 168 oldpars = dict(theta='axis_theta', phi='axis_phi', 169 sld='sldEll', s olvent_sld='sldSolv',170 r polar='radius_a', requatorial='radius_b')169 sld='sldEll', sld_solvent='sldSolv', 170 r_polar='radius_a', r_equatorial='radius_b')
Note: See TracChangeset
for help on using the changeset viewer.