Changeset 934a001 in sasmodels
 Timestamp:
 Mar 30, 2019 6:43:50 AM (8 months ago)
 Branches:
 master, ticket_1156, ticket_822_more_unit_tests
 Children:
 adb84f6
 Parents:
 db3947c
 File:

 1 edited
Legend:
 Unmodified
 Added
 Removed

sasmodels/models/sphere.py
rdb3947c r934a001 36 36 References 37 37  38 39 .. [#] A Guinier and G. Fournet, *SmallAngle Scattering of XRays*, John Wiley and Sons, New York, (1955) 38 39 .. [#] A Guinier and G. Fournet, *SmallAngle Scattering of XRays*, 40 John Wiley and Sons, New York, (1955) 40 41 41 42 Source … … 90 91 ) 91 92 return pars 92 93 #2345678901234567890123456789012345678901234567890123456789012345678901234567890 93 94 tests = [ 94 [{}, 0.2, 0.726362], # each test starts with default parameter values inside { }, unless modified. Then Q and expected value of I(Q) 95 [{}, 0.2, 0.726362], # each test starts with default parameter values 96 # inside { }, unless modified. Then Q and expected value of I(Q) 97 # putting None for an expected result will pass the test if there are no 98 # errors from the routine, but without any check on the value of the result 99 [{"scale": 1., "background": 0., "sld": 6., "sld_solvent": 1., 100 "radius": 120.}, [0.01,0.1,0.2], 101 [1.34836265e+04, 6.20114062e+00, 1.04733914e01]], 95 102 [{"scale": 1., "background": 0., "sld": 6., "sld_solvent": 1., 96 "radius": 120.}, [0.01,0.1,0.2], [1.34836265e+04, 6.20114062e+00, 1.04733914e01]], # each test starts with default parameter values inside { }, unless modified. Then Q and expected value of I(Q) 97 [{"scale": 1., "background": 0., "sld": 6., "sld_solvent": 1., # careful tests here R=120 Pd=.2, 98 # then with S(Q) at default Reff=50 (but this gets changeded to 120) phi=0,2 103 # careful tests here R=120 Pd=.2, then with S(Q) at default Reff=50 104 # (but this gets changed to 120) phi=0,2 99 105 "radius": 120., "radius_pd": 0.2, "radius_pd_n":45}, 100 [0.01,0.1,0.2], [1.74395295e+04, 3.68016987e+00, 2.28843099e01]], # a list of Q values and list of expected results is also possible 101 [{"scale": 1., "background": 0., "sld": 6., "sld_solvent": 1.,"radius": 120., "radius_pd": 0.2, "radius_pd_n":45}, 102 0.01, 335839.88055473, 1.41045057e+11, 120.0, 8087664.122641933, 1.0], # the longer list here checks F1, F2, R_eff, volume, volume_ratio = call_Fq(kernel, pars) 106 [0.01,0.1,0.2], [1.74395295e+04, 3.68016987e+00, 2.28843099e01]], 107 # a list of Q values and list of expected results is also possible 108 [{"scale": 1., "background": 0., "sld": 6., "sld_solvent": 1., 109 "radius": 120., "radius_pd": 0.2, "radius_pd_n":45}, 110 0.01, 335839.88055473, 1.41045057e+11, 120.0, 8087664.122641933, 1.0], 111 # the longer list here checks F1, F2, R_eff, volume, volume_ratio 103 112 [{"radius": 120., "radius_pd": 0.2, "radius_pd_n":45}, 104 0.1, 482.93824329, 29763977.79867414, 120.0, 8087664.122641933, 1.0], # the longer list here checks F1, F2, R_eff, volume, volume_ratio = call_Fq(kernel, pars)113 0.1, 482.93824329, 29763977.79867414, 120.0, 8087664.122641933, 1.0], 105 114 [{"radius": 120., "radius_pd": 0.2, "radius_pd_n":45}, 106 0.2, 1.23330406, 1850806.1197361, 120.0, 8087664.122641933, 1.0], # the longer list here checks F1, F2, R_eff, volume, volume_ratio = call_Fq(kernel, pars)115 0.2, 1.23330406, 1850806.1197361, 120.0, 8087664.122641933, 1.0], 107 116 # But note P(Q) = F2/volume 108 # F and F^2 are "unscaled", with for n <F F*>S(q) or for beta approx I(q) = n [<F F*> + <F><F*> (S(q)  1)] 109 # for n the number density and <.> the orientation average, and F = integral rho(r) exp(i q . r) dr. 117 # F and F^2 are "unscaled", with for n <F F*>S(q) or for beta approx 118 # I(q) = n [<F F*> + <F><F*> (S(q)  1)] 119 # for n the number density and <.> the orientation average, and 120 # F = integral rho(r) exp(i q . r) dr. 110 121 # The number density is volume fraction divided by particle volume. 111 # Effectively, this leaves F = V drho form, where form is the usual 3 j1(qr)/(qr) or whatever depending on the shape. 112 # NOTE the @S multiplication by S(Q) also multiplies the answer by volfraction, thus you may like to put in scale at 1/volfraction 122 # Effectively, this leaves F = V drho form, where form is the usual 123 # 3 j1(qr)/(qr) or whatever depending on the shape. 124 # @S RESULTS using F1 and F2 from the longer test strng above: 125 # 126 # I(Q) = (F2 + F1^2*(S(Q) 1))*volfraction*scale/Volume + background 127 # 128 # with by default scale=1.0, background=0.001 129 # NOTE currently S(Q) volfraction is also included in scaling 130 # structure_factor_mode 0 = normal decoupling approx, 131 # 1 = beta(Q) approx 132 # radius_effective_mode 0 is for free choice, 133 # 1 is use radius from F2(Q) 134 # (sphere only has two choices, other models may have more) 135 [{"@S": "hardsphere", 136 "radius": 120., "radius_pd": 0.2, "radius_pd_n":45,"volfraction":0.2, 137 #"radius_effective":50.0, # hard sphere structure factor 138 "structure_factor_mode": 1, # mode 0 = normal decoupling approx, 139 # 1 = beta(Q) approx 140 "radius_effective_mode": 0 # this used default hardsphere Reff=50 141 }, [0.01,0.1,0.2], [1.32473756e+03, 7.36633631e01, 4.67686201e02] ], 113 142 [{"@S": "hardsphere", 114 143 "radius": 120., "radius_pd": 0.2, "radius_pd_n":45, 115 144 "volfraction":0.2, 116 "radius_effective":45.0, # uses this as gives different answer to either 50 or 120 (check)117 "structure_factor_mode": 1, # 0 = normal decoupling approximation, 1 = beta(Q)approx118 "radius_effective_mode": 0 # equivalent sphere, there is only one valid mode for sphere. says this used r_eff =0 or default 50?145 "radius_effective":45.0, # explicit Reff over rides either 50 or 120 146 "structure_factor_mode": 1, # beta approx 147 "radius_effective_mode": 0 # 119 148 }, 0.01, 1316.2990966463444 ], 120 149 [{"@S": "hardsphere", 121 150 "radius": 120., "radius_pd": 0.2, "radius_pd_n":45, 122 151 "volfraction":0.2, 123 #"radius_effective":50.0, # hard sphere structure factor 124 "structure_factor_mode": 1, # 0 = normal decoupling approximation, 1 = beta(Q) approx 125 "radius_effective_mode": 0 # this used default 50? 126 }, [0.01,0.1,0.2], [1.32473756e+03, 7.36633631e01, 4.67686201e02] ], 127 [{"@S": "hardsphere", 128 "radius": 120., "radius_pd": 0.2, "radius_pd_n":45, 129 "volfraction":0.2, 130 "radius_effective":120.0, # hard sphere structure factor 131 "structure_factor_mode": 1, # 0 = normal decoupling approximation, 1 = beta(Q) approx 132 "radius_effective_mode": 0 # 1 uses 120, 152 "radius_effective":120.0, # over ride Reff 153 "structure_factor_mode": 1, # beta approx 154 "radius_effective_mode": 0 # (mode=1 here also uses 120) 133 155 }, [0.01,0.1,0.2], [1.57928589e+03, 7.37067923e01, 4.67686197e02 ]], 134 156 [{"@S": "hardsphere", 135 157 "radius": 120., "radius_pd": 0.2, "radius_pd_n":45, 136 158 "volfraction":0.2, 137 #"radius_effective":120.0, 138 "structure_factor_mode": 0, # 0 = normal decoupling approximation, 1 = beta(Q) approx139 "radius_effective_mode": 1 # this use d120 from the form factor159 #"radius_effective":120.0, # hard sphere structure factor 160 "structure_factor_mode": 0, # normal decoupling approximation 161 "radius_effective_mode": 1 # this uses 120 from the form factor 140 162 }, [0.01,0.1,0.2], [1.10112335e+03, 7.41366536e01, 4.66630207e02]], 141 163 [{"@S": "hardsphere", 142 164 "radius": 120., "radius_pd": 0.2, "radius_pd_n":45, 143 165 "volfraction":0.2, 144 #"radius_effective":50.0, 145 "structure_factor_mode": 0, # 0 = normal decoupling approximation, 1 = beta(Q) approx166 #"radius_effective":50.0, # hard sphere structure factor 167 "structure_factor_mode": 0, # normal decoupling approximation 146 168 "radius_effective_mode": 0 # this used 50 the default for hardsphere 147 169 }, [0.01,0.1,0.2], [7.82803598e+02, 6.85943611e01, 4.71586457e02 ]] 148 ]# putting None for expected result will pass the test if there are no errors from the routine, but without any check on the value of the result 170 ] 171 #
Note: See TracChangeset
for help on using the changeset viewer.