Changes in / [190fc2b:ed82794] in sasmodels
- Location:
- sasmodels/models
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
sasmodels/models/be_polyelectrolyte.py
r841753c r168052c 44 44 J F Joanny, L Leibler, *Journal de Physique*, 51 (1990) 545 45 45 46 A Moussaid, F Schosseler, J P Munch, S Candau, *J. Journal de Physique II France*, 3 (1993) 573 46 A Moussaid, F Schosseler, J P Munch, S Candau, 47 *J. Journal de Physique II France*, 3 (1993) 573 47 48 48 49 E Raphael, J F Joanny, *Europhysics Letters*, 11 (1990) 179 … … 55 56 title = "Polyelectrolyte with the RPA expression derived by Borue and Erukhimovich" 56 57 description = """ 57 Evaluate58 F(x) = K 1/(4 pi Lb (alpha)^(2)) (q^(2)+k2)/(1+(r02)^(2))59 (q^(2)+k2) (q^(2)-(12 h C/b^(2)))58 Evaluate 59 F(x) = K 1/(4 pi Lb (alpha)^(2)) (q^(2)+k2)/(1+(r02)^(2)) 60 (q^(2)+k2) (q^(2)-(12 h C/b^(2))) 60 61 61 has 3 internal parameters :62 The inverse Debye Length: K2 = 4 pi Lb (2 Cs+alpha C)63 r02 =1/alpha/Ca^(0.5) (B/(48 pi Lb)^(0.5))64 Ca = 6.022136e-4 C65 """62 has 3 internal parameters : 63 The inverse Debye Length: K2 = 4 pi Lb (2 Cs+alpha C) 64 r02 =1/alpha/Ca^(0.5) (B/(48 pi Lb)^(0.5)) 65 Ca = 6.022136e-4 C 66 """ 66 67 category = "shape-independent" 67 68 68 # pylint: disable=bad-whitespace, line-too-long69 # ["name", 69 # pylint: disable=bad-whitespace, line-too-long 70 # ["name", "units", default, [lower, upper], "type", "description"], 70 71 parameters = [ 71 ["contrast_factor", "barns", 72 ["bjerrum_length", "Ang", 73 ["virial_param", "1/Ang^2", 74 ["monomer_length", "Ang", 75 ["salt_concentration", "mol/L", 76 ["ionization_degree", "", 77 ["polymer_concentration", "mol/L", 72 ["contrast_factor", "barns", 10.0, [-inf, inf], "", "Contrast factor of the polymer"], 73 ["bjerrum_length", "Ang", 7.1, [0, inf], "", "Bjerrum length"], 74 ["virial_param", "1/Ang^2", 12.0, [-inf, inf], "", "Virial parameter"], 75 ["monomer_length", "Ang", 10.0, [0, inf], "", "Monomer length"], 76 ["salt_concentration", "mol/L", 0.0, [-inf, inf], "", "Concentration of monovalent salt"], 77 ["ionization_degree", "", 0.05, [0, inf], "", "Degree of ionization"], 78 ["polymer_concentration", "mol/L", 0.7, [0, inf], "", "Polymer molar concentration"], 78 79 ] 79 # pylint: enable=bad-whitespace, line-too-long80 # pylint: enable=bad-whitespace, line-too-long 80 81 81 82 82 83 def Iq(q, 83 contrast_factor, 84 bjerrum_length, 85 virial_param, 86 monomer_length, 87 salt_concentration, 88 ionization_degree, 89 polymer_concentration): 84 contrast_factor=10.0, 85 bjerrum_length=7.1, 86 virial_param=12.0, 87 monomer_length=10.0, 88 salt_concentration=0.0, 89 ionization_degree=0.05, 90 polymer_concentration=0.7): 91 """ 92 :param q: Input q-value 93 :param contrast_factor: Contrast factor of the polymer 94 :param bjerrum_length: Bjerrum length 95 :param virial_param: Virial parameter 96 :param monomer_length: Monomer length 97 :param salt_concentration: Concentration of monovalent salt 98 :param ionization_degree: Degree of ionization 99 :param polymer_concentration: Polymer molar concentration 100 :return: 1-D intensity 101 """ 90 102 91 103 concentration = polymer_concentration * 6.022136e-4 92 104 93 105 k_square = 4.0 * pi * bjerrum_length * (2*salt_concentration + 94 ionization_degree * concentration)106 ionization_degree * concentration) 95 107 96 108 r0_square = 1.0/ionization_degree/sqrt(concentration) * \ 97 (monomer_length/sqrt((48.0*pi*bjerrum_length)))109 (monomer_length/sqrt((48.0*pi*bjerrum_length))) 98 110 99 111 term1 = contrast_factor/(4.0 * pi * bjerrum_length * 100 ionization_degree**2) * (q**2 + k_square)112 ionization_degree**2) * (q**2 + k_square) 101 113 102 114 term2 = 1.0 + r0_square**2 * (q**2 + k_square) * \ … … 109 121 110 122 def Iqxy(qx, qy, *args): 111 return Iq(sqrt(qx**2 + qy**2), *args) 123 """ 124 :param qx: Input q_x-value 125 :param qy: Input q_y-value 126 :param args: Remaining arguments 127 :return: 2D-Intensity 128 """ 129 iq = Iq(sqrt(qx**2 + qy**2), *args) 130 return iq 112 131 113 132 Iqxy.vectorized = True # Iqxy accepts an array of qx, qy values … … 134 153 polymer_concentration='c') 135 154 136 # pylint: disable=bad-whitespace137 155 tests = [ 156 138 157 # Accuracy tests based on content in test/utest_other_models.py 139 158 [{'contrast_factor': 10.0, … … 176 195 }, 200., 1.80664667511e-06], 177 196 ] 178 # pylint: enable=bad-whitespace -
sasmodels/models/flexible_cylinder.py
rf94d8a2 r168052c 1 1 r""" 2 This model provides the form factor, $P(q)$, for a flexible cylinder where the form factor3 is normalized by the volume of the cylinder.2 This model provides the form factor, $P(q)$, for a flexible cylinder 3 where the form factor is normalized by the volume of the cylinder. 4 4 **Inter-cylinder interactions are NOT provided for.** 5 5 … … 8 8 P(q) = \text{scale} \left<F^2\right>/V + \text{background} 9 9 10 where the averaging $\left<\ldots\right>$ is applied only for the 1D calculation 10 where the averaging $\left<\ldots\right>$ is applied only for the 1D 11 calculation 11 12 12 The 2D scattering intensity is the same as 1D, regardless of the orientation of the q vector which is defined as 13 The 2D scattering intensity is the same as 1D, regardless of the orientation of 14 the q vector which is defined as 13 15 14 16 .. math:: … … 22 24 23 25 24 The chain of contour length, $L$, (the total length) can be described as a chain of some number of 25 locally stiff segments of length $l_p$, the persistence length (the length along the cylinder over 26 which the flexible cylinder can be considered a rigid rod). 26 The chain of contour length, $L$, (the total length) can be described as a 27 chain of some number of locally stiff segments of length $l_p$, the persistence 28 length (the length along the cylinder over which the flexible cylinder can be 29 considered a rigid rod). 27 30 The Kuhn length $(b = 2*l_p)$ is also used to describe the stiffness of a chain. 28 31 29 32 The returned value is in units of $cm^-1$, on absolute scale. 30 33 31 In the parameters, the sldCyl and sldSolv represent the SLD of the chain/cylinder and solvent respectively. 34 In the parameters, the sldCyl and sldSolv represent the SLD of the chain/cylinder 35 and solvent respectively. 32 36 33 37 … … 37 41 38 42 39 Our model uses the form factor calculations implemented in a c-library provided by the NIST Center40 for Neutron Research (Kline, 2006).43 Our model uses the form factor calculations implemented in a c-library provided 44 by the NIST Center for Neutron Research (Kline, 2006). 41 45 42 46 … … 45 49 'Method 3 With Excluded Volume' is used. 46 50 The model is a parametrization of simulations of a discrete representation 47 of the worm-like chain model of Kratky and Porod applied in the pseudocontinuous limit. 51 of the worm-like chain model of Kratky and Porod applied in the 52 pseudocontinuous limit. 48 53 See equations (13,26-27) in the original reference for the details. 49 54 … … 51 56 ---------- 52 57 53 J S Pedersen and P Schurtenberger. *Scattering functions of semiflexible polymers with and 54 without excluded volume effects.* Macromolecules, 29 (1996) 7602-7612 58 J S Pedersen and P Schurtenberger. *Scattering functions of semiflexible 59 polymers with and without excluded volume effects.* Macromolecules, 60 29 (1996) 7602-7612 55 61 56 62 Correction of the formula can be found in 57 63 58 W R Chen, P D Butler and L J Magid, *Incorporating Intermicellar Interactions in the Fitting of 59 SANS Data from Cationic Wormlike Micelles.* Langmuir, 22(15) 2006 6539-6548 64 W R Chen, P D Butler and L J Magid, *Incorporating Intermicellar Interactions 65 in the Fitting of SANS Data from Cationic Wormlike Micelles.* Langmuir, 66 22(15) 2006 6539-6548 60 67 """ 61 68 from numpy import inf 62 69 63 70 name = "flexible_cylinder" 64 title = "Flexible cylinder where the form factor is normalized by the volume of the cylinder." 65 description = """Note : scale and contrast=sld-solvent_sld are both multiplicative factors in the 66 model and are perfectly correlated. One or 67 both of these parameters must be held fixed 71 title = "Flexible cylinder where the form factor is normalized by the volume" \ 72 "of the cylinder." 73 description = """Note : scale and contrast=sld-solvent_sld are both 74 multiplicative factors in the model and are perfectly 75 correlated. One or both of these parameters must be held fixed 68 76 during model fitting. 69 77 """ … … 71 79 category = "shape:cylinder" 72 80 81 # pylint: disable=bad-whitespace, line-too-long 73 82 # ["name", "units", default, [lower, upper], "type", "description"], 74 83 parameters = [ 75 76 77 78 79 80 81 84 ["length", "Ang", 1000.0, [0, inf], "volume", "Length of the flexible cylinder"], 85 ["kuhn_length", "Ang", 100.0, [0, inf], "volume", "Kuhn length of the flexible cylinder"], 86 ["radius", "Ang", 20.0, [0, inf], "volume", "Radius of the flexible cylinder"], 87 ["sld", "1e-6/Ang^2", 1.0, [-inf, inf], "", "Cylinder scattering length density"], 88 ["solvent_sld", "1e-6/Ang^2", 6.3, [-inf, inf], "", "Solvent scattering length density"], 89 ] 90 # pylint: enable=bad-whitespace, line-too-long 82 91 source = ["lib/J1.c", "lib/wrc_cyl.c", "flexible_cylinder.c"] 83 92 … … 94 103 95 104 tests = [ 96 97 98 99 100 101 102 103 104 105 # Accuracy tests based on content in test/utest_other_models.py 106 # Currently fails in OCL 107 # [{'length': 1000.0, 108 # 'kuhn_length': 100.0, 109 # 'radius': 20.0, 110 # 'sld': 1.0, 111 # 'solvent_sld': 6.3, 112 # 'background': 0.0001, 113 # }, 0.001, 3509.2187], 105 114 106 107 [{'length':1000.0,108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 115 # Additional tests with larger range of parameters 116 [{'length': 1000.0, 117 'kuhn_length': 100.0, 118 'radius': 20.0, 119 'sld': 1.0, 120 'solvent_sld': 6.3, 121 'background': 0.0001, 122 }, 1.0, 0.000595345], 123 [{'length': 10.0, 124 'kuhn_length': 800.0, 125 'radius': 2.0, 126 'sld': 6.0, 127 'solvent_sld': 12.3, 128 'background': 0.001, 129 }, 0.1, 1.55228], 130 [{'length': 100.0, 131 'kuhn_length': 800.0, 132 'radius': 50.0, 133 'sld': 0.1, 134 'solvent_sld': 5.1, 135 'background': 0.0, 136 }, 1.0, 0.000938456] 137 ] 129 138 -
sasmodels/models/gauss_lorentz_gel.py
r07a6700 r168052c 42 42 ---------- 43 43 44 G Evmenenko, E Theunissen, K Mortensen, H Reynaers, *Polymer*, 42 (2001) 2907-2913 44 G Evmenenko, E Theunissen, K Mortensen, H Reynaers, *Polymer*, 45 42 (2001) 2907-2913 45 46 46 47 """ 47 48 48 from numpy import inf, pi,sqrt, exp49 from numpy import inf, sqrt, exp 49 50 50 51 name = "gauss_lorentz_gel" … … 63 64 """ 64 65 category = "shape-independent" 65 66 # pylint: disable=bad-whitespace, line-too-long 66 67 # ["name", "units", default, [lower, upper], "type", "description"], 67 68 parameters = [["gauss_scale_factor", "", 100.0, [-inf, inf], "", "Gauss scale factor"], … … 69 70 ["lorentz_scale_factor", "", 50.0, [-inf, inf], "", "Lorentzian scale factor"], 70 71 ["dynamic_cor_length", "Ang", 20.0, [0, inf], "", "Dynamic correlation length"], 71 72 72 ] 73 # pylint: enable=bad-whitespace, line-too-long 73 74 74 75 def Iq(q, 75 gauss_scale_factor, 76 static_cor_length, 77 lorentz_scale_factor, 78 dynamic_cor_length): 76 gauss_scale_factor=100.0, 77 static_cor_length=100.0, 78 lorentz_scale_factor=50.0, 79 dynamic_cor_length=20.0): 80 """ 79 81 80 term1 = gauss_scale_factor *\ 81 exp(-1.0*q*q*static_cor_length*static_cor_length/2.0) 82 term2 = lorentz_scale_factor /\ 83 (1.0+(q*dynamic_cor_length)*(q*dynamic_cor_length)) 82 :param q: Input q-value 83 :param gauss_scale_factor: Gauss scale factor 84 :param static_cor_length: Static correlation length 85 :param lorentz_scale_factor: Lorentzian scale factor 86 :param dynamic_cor_length: Dynamic correlation length 87 :return: 1-D intensity 88 """ 84 89 85 return term1 + term2 90 term1 = gauss_scale_factor *\ 91 exp(-1.0*q*q*static_cor_length*static_cor_length/2.0) 92 term2 = lorentz_scale_factor /\ 93 (1.0+(q*dynamic_cor_length)*(q*dynamic_cor_length)) 94 95 return term1 + term2 86 96 87 97 Iq.vectorized = True # Iq accepts an array of q values … … 89 99 90 100 def Iqxy(qx, qy, *args): 91 iq = Iq(sqrt(qx**2 + qy**2), *args) 101 """ 102 :param qx: Input q_x-value 103 :param qy: Input q_y-value 104 :param args: Remaining aruments 105 :return: 2-D intensity 106 """ 92 107 93 return iq108 return Iq(sqrt(qx**2 + qy**2), *args) 94 109 95 110 Iqxy.vectorized = True # Iqxy accepts an array of qx, qy values … … 111 126 112 127 tests = [ 113 # Accuracy tests based on content in test/utest_extra_models.py114 [{'gauss_scale_factor': 100.0,115 'static_cor_length': 100.0,116 'lorentz_scale_factor': 50.0,117 'dynamic_cor_length': 20.0,118 }, 0.001, 149.481],119 128 120 [{'gauss_scale_factor': 100.0, 121 'static_cor_length': 100.0, 122 'lorentz_scale_factor': 50.0, 123 'dynamic_cor_length': 20.0, 124 }, 0.105363, 9.1903], 129 # Accuracy tests based on content in test/utest_extra_models.py 130 [{'gauss_scale_factor': 100.0, 131 'static_cor_length': 100.0, 132 'lorentz_scale_factor': 50.0, 133 'dynamic_cor_length': 20.0, 134 }, 0.001, 149.481], 125 135 126 127 128 129 130 }, 0.441623, 0.632811],136 [{'gauss_scale_factor': 100.0, 137 'static_cor_length': 100.0, 138 'lorentz_scale_factor': 50.0, 139 'dynamic_cor_length': 20.0, 140 }, 0.105363, 9.1903], 131 141 132 # Additional tests with larger range of parameters 133 [{'gauss_scale_factor': 10.0, 134 'static_cor_length': 100.0, 135 'lorentz_scale_factor': 3.0, 136 'dynamic_cor_length': 1.0, 137 }, 0.1, 2.9702970297], 142 [{'gauss_scale_factor': 100.0, 143 'static_cor_length': 100.0, 144 'lorentz_scale_factor': 50.0, 145 'dynamic_cor_length': 20.0, 146 }, 0.441623, 0.632811], 138 147 139 [{'gauss_scale_factor': 10.0,140 'static_cor_length': 100.0,141 'lorentz_scale_factor': 3.0,142 'dynamic_cor_length': 1.0,143 'background': 100.0144 }, 5.0, 100.115384615],148 # Additional tests with larger range of parameters 149 [{'gauss_scale_factor': 10.0, 150 'static_cor_length': 100.0, 151 'lorentz_scale_factor': 3.0, 152 'dynamic_cor_length': 1.0, 153 }, 0.1, 2.9702970297], 145 154 146 [{'gauss_scale_factor': 10.0, 147 'static_cor_length': 100.0, 148 'lorentz_scale_factor': 3.0, 149 'dynamic_cor_length': 1.0, 150 }, 200., 7.49981250469e-05], 151 ] 155 [{'gauss_scale_factor': 10.0, 156 'static_cor_length': 100.0, 157 'lorentz_scale_factor': 3.0, 158 'dynamic_cor_length': 1.0, 159 'background': 100.0 160 }, 5.0, 100.115384615], 161 162 [{'gauss_scale_factor': 10.0, 163 'static_cor_length': 100.0, 164 'lorentz_scale_factor': 3.0, 165 'dynamic_cor_length': 1.0, 166 }, 200., 7.49981250469e-05], 167 ] -
sasmodels/models/gel_fit.py
r513efc5 r168052c 7 7 in the position of the polymer chains that ensure thermodynamic equilibrium, 8 8 and a longer distance (denoted here as $a2$ ) needed to account for the static 9 accumulations of polymer pinned down by junction points or clusters of such points.10 The latter is derived from a simple Guinier function.9 accumulations of polymer pinned down by junction points or clusters of such 10 points. The latter is derived from a simple Guinier function. 11 11 12 12 … … 40 40 --------- 41 41 42 Mitsuhiro Shibayama, Toyoichi Tanaka, Charles C Han, J. Chem. Phys. 1992, 97 (9),43 6829-684142 Mitsuhiro Shibayama, Toyoichi Tanaka, Charles C Han, 43 *J. Chem. Phys.* 1992, 97 (9), 6829-6841 44 44 45 45 Simon Mallam, Ferenc Horkay, Anne-Marie Hecht, Adrian R Rennie, Erik Geissler, 46 Macromolecules1991, 24, 543-54846 *Macromolecules* 1991, 24, 543-548 47 47 48 48 """ … … 62 62 category = "shape-independent" 63 63 64 # pylint: disable=bad-whitespace, line-too-long 64 65 # ["name", "units", default, [lower, upper], "type","description"], 65 66 parameters = [["guinier_scale", "cm^{-1}", 1.7, [-inf, inf], "", "Guinier length scale"], … … 68 69 ["fractal_exp", "", 2.0, [0, inf], "", "Fractal exponent"], 69 70 ["cor_length", "Ang", 16.0, [0, inf], "", "Correlation length"] 70 71 71 ] 72 # pylint: enable=bad-whitespace, line-too-long 72 73 73 74 source = ["gel_fit.c"] … … 92 93 'fractal_exp': 10.0, 93 94 'cor_length': 20.0 94 95 }, 0.1, 0.716532], 95 96 96 97 [{'guinier_scale': 4.0, … … 100 101 'cor_length': 20.0, 101 102 'background': 20.0, 102 }, 5.0, 20.1224653026], 103 104 ] 103 }, 5.0, 20.1224653026], 104 ] -
sasmodels/models/mass_fractal.py
r87edabf r168052c 52 52 --------- 53 53 54 D Mildner and P Hall, *J. Phys. D: Appl. Phys.*, 19 (1986) 1535-1545 Equation(9) 54 D Mildner and P Hall, *J. Phys. D: Appl. Phys.*, 55 19 (1986) 1535-1545 Equation(9) 55 56 56 57 … … 79 80 category = "shape-independent" 80 81 82 # pylint: disable=bad-whitespace, line-too-long 81 83 # ["name", "units", default, [lower, upper], "type","description"], 82 84 parameters = [["radius", "Ang", 10.0, [0.0, inf], "", "Particle radius"], 83 85 ["mass_dim", "", 1.9, [1.0, 6.0], "", "Mass fractal dimension"], 84 86 ["cutoff_length", "Ang", 100.0, [0.0, inf], "", "Cut-off length"], 85 86 87 ] 88 # pylint: enable=bad-whitespace, line-too-long 87 89 88 90 source = ["lib/sph_j1c.c", "lib/lanczos_gamma.c", "mass_fractal.c"] … … 99 101 100 102 tests = [ 101 # Accuracy tests based on content in test/utest_other_models.py102 [{'radius': 10.0,103 'mass_dim': 1.9,104 'cutoff_length': 100.0,105 }, 0.05, 279.59322],106 103 107 # Additional tests with larger range of parameters108 [{'radius': 2.0,109 'mass_dim': 3.3,110 'cutoff_length': 1.0,111 }, 0.5, 1.29016774904],104 # Accuracy tests based on content in test/utest_other_models.py 105 [{'radius': 10.0, 106 'mass_dim': 1.9, 107 'cutoff_length': 100.0, 108 }, 0.05, 279.59322], 112 109 113 [{'radius': 1.0,114 'mass_dim': 1.3,115 'cutoff_length': 1.0,116 'background': 0.8,117 }, 0.001, 1.69747015932],110 # Additional tests with larger range of parameters 111 [{'radius': 2.0, 112 'mass_dim': 3.3, 113 'cutoff_length': 1.0, 114 }, 0.5, 1.29016774904], 118 115 119 [{'radius': 1.0, 120 'mass_dim': 2.3, 121 'cutoff_length': 1.0, 122 'scale': 10.0, 123 }, 0.051, 11.6227966145], 124 ] 116 [{'radius': 1.0, 117 'mass_dim': 1.3, 118 'cutoff_length': 1.0, 119 'background': 0.8, 120 }, 0.001, 1.69747015932], 121 122 [{'radius': 1.0, 123 'mass_dim': 2.3, 124 'cutoff_length': 1.0, 125 'scale': 10.0, 126 }, 0.051, 11.6227966145], 127 ] -
sasmodels/models/mass_surface_fractal.py
r07a6700 r168052c 54 54 P Schmidt, *J Appl. Cryst.*, 24 (1991) 414-435 Equation(19) 55 55 56 A J Hurd, D W Schaefer, J E Martin, *Phys. Rev. A*, 35 (1987) 2361-2364 Equation(2) 56 A J Hurd, D W Schaefer, J E Martin, *Phys. Rev. A*, 57 35 (1987) 2361-2364 Equation(2) 57 58 58 59 """ … … 79 80 category = "shape-independent" 80 81 82 # pylint: disable=bad-whitespace, line-too-long 81 83 # ["name", "units", default, [lower, upper], "type","description"], 82 84 parameters = [["mass_dim", "", 1.8, [1e-16, 6.0], "", … … 88 90 ["primary_rg", "Ang", 4000., [0.0, inf], "", 89 91 "Primary particle radius of gyration"], 90 91 92 ] 93 # pylint: enable=bad-whitespace, line-too-long 92 94 93 95 source = ["mass_surface_fractal.c"] … … 107 109 108 110 tests = [ 109 # Accuracy tests based on content in test/utest_other_models.py110 [{'mass_dim': 1.8,111 'surface_dim': 2.3,112 'cluster_rg': 86.7,113 'primary_rg': 4000.0,114 }, 0.05, 1.77537e-05],115 111 116 # Additional tests with larger range of parameters117 [{'mass_dim': 3.3,118 'surface_dim': 1.0,119 'cluster_rg': 90.0,120 121 }, 0.001, 0.18462699016],112 # Accuracy tests based on content in test/utest_other_models.py 113 [{'mass_dim': 1.8, 114 'surface_dim': 2.3, 115 'cluster_rg': 86.7, 116 'primary_rg': 4000.0, 117 }, 0.05, 1.77537e-05], 122 118 123 [{'mass_dim': 1.3,124 'surface_dim': 1.0,125 'cluster_rg': 90.0,126 'primary_rg': 2000.0,127 'background': 0.8,128 }, 0.001, 1.16539753641],119 # Additional tests with larger range of parameters 120 [{'mass_dim': 3.3, 121 'surface_dim': 1.0, 122 'cluster_rg': 90.0, 123 'primary_rg': 4000.0, 124 }, 0.001, 0.18462699016], 129 125 130 [{'mass_dim': 2.3, 131 'surface_dim': 1.0, 132 'cluster_rg': 90.0, 133 'primary_rg': 1000.0, 134 'scale': 10.0, 135 }, 0.051, 0.000169548800377], 136 ] 126 [{'mass_dim': 1.3, 127 'surface_dim': 1.0, 128 'cluster_rg': 90.0, 129 'primary_rg': 2000.0, 130 'background': 0.8, 131 }, 0.001, 1.16539753641], 132 133 [{'mass_dim': 2.3, 134 'surface_dim': 1.0, 135 'cluster_rg': 90.0, 136 'primary_rg': 1000.0, 137 'scale': 10.0, 138 }, 0.051, 0.000169548800377], 139 ] -
sasmodels/models/polymer_excl_volume.py
r07a6700 r168052c 113 113 category = "shape-independent" 114 114 115 # pylint: disable=bad-whitespace, line-too-long 115 116 # ["name", "units", default, [lower, upper], "type", "description"], 116 117 parameters = [["rg", "Ang", 60.0, [0, inf], "", "Radius of Gyration"], 117 118 ["porod_exp", "", 3.0, [-inf, inf], "", "Porod exponent"], 118 ] 119 ] 120 # pylint: enable=bad-whitespace, line-too-long 119 121 120 122 121 def Iq(q, rg, porod_exp): 122 123 def Iq(q, 124 rg=60.0, 125 porod_exp=3.0): 123 126 """ 124 127 :param q: Input q-value (float or [float, float]) … … 131 134 o2nu = 1.0/(2.0*nu) 132 135 133 intensity = ((1.0/(nu*power(u, o2nu))) * (gamma(o2nu)*gammainc(o2nu, u) - 136 intensity = ((1.0/(nu*power(u, o2nu))) * 137 (gamma(o2nu)*gammainc(o2nu, u) - 134 138 1.0/power(u, o2nu) * gamma(porod_exp) * 135 139 gammainc(porod_exp, u))) * (q > 0) + 1.0*(q <= 0) … … 141 145 142 146 def Iqxy(qx, qy, *args): 143 iq = Iq(sqrt(qx**2 + qy**2), *args) 147 """ 148 :param qx: Input q_x-value 149 :param qy: Input q_y-value 150 :param args: Remaining arguments 151 :return: 2D-Intensity 152 """ 144 153 145 return iq154 return Iq(sqrt(qx**2 + qy**2), *args) 146 155 147 156 Iqxy.vectorized = True # Iqxy accepts an array of qx, qy values … … 158 167 159 168 tests = [ 160 161 162 163 169 # Accuracy tests based on content in test/polyexclvol_default_igor.txt 170 [{'rg': 60, 'porod_exp': 3.0}, 0.001, 0.998801], 171 [{'rg': 60, 'porod_exp': 3.0}, 0.105363, 0.0162751], 172 [{'rg': 60, 'porod_exp': 3.0}, 0.665075, 6.56261e-05], 164 173 165 166 167 168 169 170 174 # Additional tests with larger range of parameters 175 [{'rg': 10, 'porod_exp': 4.0}, 0.1, 0.723436675809], 176 [{'rg': 2.2, 'porod_exp': 22.0, 'background': 100.0}, 5.0, 100.0], 177 [{'rg': 1.1, 'porod_exp': 1, 'background': 10.0, 'scale': 1.25}, 178 20000., 10.0000712097] 179 ] -
sasmodels/models/star_polymer.py
r55b283e8 r168052c 55 55 """ 56 56 category = "shape-independent" 57 57 # pylint: disable=bad-whitespace, line-too-long 58 58 # ["name", "units", default, [lower, upper], "type","description"], 59 59 parameters = [["radius2", "Ang", 100.0, [0.0, inf], "", "Ensemble radius of gyration squared of an arm"], 60 60 ["arms", "", 3, [1.0, 6.0], "", "Number of arms in the model"], 61 62 61 ] 62 # pylint: enable=bad-whitespace, line-too-long 63 63 64 64 source = ["star_polymer.c"] … … 75 75 tests = [[{'radius2': 2.0, 76 76 'arms': 3.3, 77 77 }, 0.5, 0.850646091108], 78 78 79 79 [{'radius2': 1.0, 80 80 'arms': 2.0, 81 81 'background': 1.8, 82 83 82 }, 1.0, 2.53575888234], 83 ] -
sasmodels/models/surface_fractal.py
r07a6700 r168052c 80 80 category = "shape-independent" 81 81 82 # pylint: disable=bad-whitespace, line-too-long 82 83 # ["name", "units", default, [lower, upper], "type","description"], 83 84 parameters = [["radius", "Ang", 10.0, [0, inf], "", … … 87 88 ["cutoff_length", "Ang", 500., [0.0, inf], "", 88 89 "Cut-off Length"], 89 90 90 ] 91 # pylint: enable=bad-whitespace, line-too-long 91 92 92 93 source = ["lib/sph_j1c.c", "lib/lanczos_gamma.c", "surface_fractal.c"] … … 101 102 102 103 tests = [ 103 # Accuracy tests based on content in test/utest_other_models.py 104 [{'radius': 10.0, 'surface_dim': 2.0, 'cutoff_length': 500.0, 105 }, 0.05, 301428.65916], 104 # Accuracy tests based on content in test/utest_other_models.py 105 [{'radius': 10.0, 106 'surface_dim': 2.0, 107 'cutoff_length': 500.0, 108 }, 0.05, 301428.65916], 106 109 107 # Additional tests with larger range of parameters 108 [{'radius': 1.0, 'surface_dim': 1.0, 'cutoff_length': 10.0, 109 }, 0.332070182643, 1125.00321004], 110 # Additional tests with larger range of parameters 111 [{'radius': 1.0, 112 'surface_dim': 1.0, 113 'cutoff_length': 10.0, 114 }, 0.332070182643, 1125.00321004], 110 115 111 [{'radius': 3.5, 'surface_dim': 0.1, 'cutoff_length': 30.0, 112 'background': 0.01, 113 }, 5.0, 0.00999998891322], 116 [{'radius': 3.5, 117 'surface_dim': 0.1, 118 'cutoff_length': 30.0, 119 'background': 0.01, 120 }, 5.0, 0.00999998891322], 114 121 115 [{'radius': 3.0, 'surface_dim': 1.0, 'cutoff_length': 33.0, 116 'scale': 0.1, 117 }, 0.51, 2.50020147004], 118 ] 122 [{'radius': 3.0, 123 'surface_dim': 1.0, 124 'cutoff_length': 33.0, 125 'scale': 0.1, 126 }, 0.51, 2.50020147004], 127 ] -
sasmodels/models/two_lorentzian.py
r07a6700 r168052c 54 54 category = "shape-independent" 55 55 56 # pylint: disable=bad-whitespace, line-too-long 56 57 # ["name", "units", default, [lower, upper], "type", "description"], 57 parameters = [["lorentz_scale_1", "", 10.0, [-inf, inf], "", 58 "First power law scale factor"], 59 ["lorentz_length_1", "Ang", 100.0, [-inf, inf], "", 60 "First Lorentzian screening length"], 61 ["lorentz_exp_1", "", 3.0, [-inf, inf], "", 62 "First exponent of power law"], 63 ["lorentz_scale_2", "", 1.0, [-inf, inf], "", 64 "Second scale factor for broad Lorentzian peak"], 65 ["lorentz_length_2", "Ang", 10.0, [-inf, inf], "", 66 "Second Lorentzian screening length"], 67 ["lorentz_exp_2", "", 2.0, [-inf, inf], "", 68 "Second exponent of power law"], 69 ] 58 parameters = [["lorentz_scale_1", "", 10.0, [-inf, inf], "", "First power law scale factor"], 59 ["lorentz_length_1", "Ang", 100.0, [-inf, inf], "", "First Lorentzian screening length"], 60 ["lorentz_exp_1", "", 3.0, [-inf, inf], "", "First exponent of power law"], 61 ["lorentz_scale_2", "", 1.0, [-inf, inf], "", "Second scale factor for broad Lorentzian peak"], 62 ["lorentz_length_2", "Ang", 10.0, [-inf, inf], "", "Second Lorentzian screening length"], 63 ["lorentz_exp_2", "", 2.0, [-inf, inf], "", "Second exponent of power law"], 64 ] 65 # pylint: enable=bad-whitespace, line-too-long 70 66 71 67 72 68 def Iq(q, 73 lorentz_scale_1 ,74 lorentz_length_1 ,75 lorentz_exp_1 ,76 lorentz_scale_2 ,77 lorentz_length_2 ,78 lorentz_exp_2 ):69 lorentz_scale_1=10.0, 70 lorentz_length_1=100.0, 71 lorentz_exp_1=3.0, 72 lorentz_scale_2=1.0, 73 lorentz_length_2=10.0, 74 lorentz_exp_2=2.0): 79 75 80 76 """ … … 88 84 :return: Calculated intensity 89 85 """ 90 86 # pylint: disable=bad-whitespace 91 87 intensity = lorentz_scale_1/(1.0 + 92 88 power(q*lorentz_length_1, lorentz_exp_1)) 93 89 intensity += lorentz_scale_2/(1.0 + 94 90 power(q*lorentz_length_2, lorentz_exp_2)) 91 # pylint: enable=bad-whitespace 95 92 96 93 return intensity … … 100 97 101 98 def Iqxy(qx, qy, *args): 102 iq = Iq(sqrt(qx**2 + qy**2), *args) 99 """ 100 :param qx: Input q_x-value 101 :param qy: Input q_y-value 102 :param args: Remaining arguments 103 :return: 2D-Intensity 104 """ 103 105 104 return iq106 return Iq(sqrt(qx**2 + qy**2), *args) 105 107 106 108 Iqxy.vectorized = True # Iqxy accepts an array of qx, qy values … … 108 110 109 111 demo = dict(scale=1, background=0.1, 110 lorentz_scale_1=10, lorentz_length_1=100.0, lorentz_exp_1=3.0, 111 lorentz_scale_2=1, lorentz_length_2=10, lorentz_exp_2=2.0) 112 lorentz_scale_1=10, 113 lorentz_length_1=100.0, 114 lorentz_exp_1=3.0, 115 lorentz_scale_2=1, 116 lorentz_length_2=10, 117 lorentz_exp_2=2.0) 112 118 113 119 oldname = "TwoLorentzianModel" 114 120 oldpars = dict(background='background', 115 lorentz_scale_1='scale_1', lorentz_scale_2='scale_2', 116 lorentz_length_1='length_1', lorentz_length_2='length_2', 117 lorentz_exp_1='exponent_1', lorentz_exp_2='exponent_2') 121 lorentz_scale_1='scale_1', 122 lorentz_scale_2='scale_2', 123 lorentz_length_1='length_1', 124 lorentz_length_2='length_2', 125 lorentz_exp_1='exponent_1', 126 lorentz_exp_2='exponent_2') 118 127 119 128 tests = [ 120 # Accuracy tests based on content in test/utest_extra_models.py121 [{'lorentz_scale_1': 10.0,122 'lorentz_length_1': 100.0,123 'lorentz_exp_1': 3.0,124 'lorentz_scale_2': 1.0,125 'lorentz_length_2': 10.0,126 'lorentz_exp_2': 2.0,127 'background': 0.1,128 }, 0.001, 11.08991],129 129 130 [{'lorentz_scale_1': 10.0, 131 'lorentz_length_1': 100.0, 132 'lorentz_exp_1': 3.0, 133 'lorentz_scale_2': 1.0, 134 'lorentz_length_2': 10.0, 135 'lorentz_exp_2': 2.0, 136 'background': 0.1, 137 }, 0.150141, 0.410245], 130 # Accuracy tests based on content in test/utest_extra_models.py 131 [{'lorentz_scale_1': 10.0, 132 'lorentz_length_1': 100.0, 133 'lorentz_exp_1': 3.0, 134 'lorentz_scale_2': 1.0, 135 'lorentz_length_2': 10.0, 136 'lorentz_exp_2': 2.0, 137 'background': 0.1, 138 }, 0.001, 11.08991], 138 139 139 140 141 142 143 144 145 146 }, 0.442528, 0.148699],140 [{'lorentz_scale_1': 10.0, 141 'lorentz_length_1': 100.0, 142 'lorentz_exp_1': 3.0, 143 'lorentz_scale_2': 1.0, 144 'lorentz_length_2': 10.0, 145 'lorentz_exp_2': 2.0, 146 'background': 0.1, 147 }, 0.150141, 0.410245], 147 148 148 # Additional tests with larger range of parameters149 [{'lorentz_scale_1': 10.0,150 'lorentz_length_1': 100.0,151 'lorentz_exp_1': 3.0,152 'lorentz_scale_2': 1.0,153 'lorentz_length_2': 10.0,154 'lorentz_exp_2': 2.0,155 }, 0.000332070182643, 10.9996228107],149 [{'lorentz_scale_1': 10.0, 150 'lorentz_length_1': 100.0, 151 'lorentz_exp_1': 3.0, 152 'lorentz_scale_2': 1.0, 153 'lorentz_length_2': 10.0, 154 'lorentz_exp_2': 2.0, 155 'background': 0.1, 156 }, 0.442528, 0.148699], 156 157 157 [{'lorentz_scale_1': 0.0,158 'lorentz_length_1':0.0,159 'lorentz_exp_1':0.0,160 'lorentz_scale_2': 0.0,161 'lorentz_length_2': 0.0,162 'lorentz_exp_2':0.0,163 'background': 100.0164 }, 5.0, 100.0],158 # Additional tests with larger range of parameters 159 [{'lorentz_scale_1': 10.0, 160 'lorentz_length_1': 100.0, 161 'lorentz_exp_1': 3.0, 162 'lorentz_scale_2': 1.0, 163 'lorentz_length_2': 10.0, 164 'lorentz_exp_2': 2.0, 165 }, 0.000332070182643, 10.9996228107], 165 166 166 [{'lorentz_scale_1': 200.0, 167 'lorentz_length_1': 10.0, 168 'lorentz_exp_1': 0.1, 169 'lorentz_scale_2': 0.1, 170 'lorentz_length_2': 5.0, 171 'lorentz_exp_2': 2.0 172 }, 20000., 45.5659201896], 173 ] 167 [{'lorentz_scale_1': 0.0, 168 'lorentz_length_1': 0.0, 169 'lorentz_exp_1': 0.0, 170 'lorentz_scale_2': 0.0, 171 'lorentz_length_2': 0.0, 172 'lorentz_exp_2': 0.0, 173 'background': 100.0 174 }, 5.0, 100.0], 175 176 [{'lorentz_scale_1': 200.0, 177 'lorentz_length_1': 10.0, 178 'lorentz_exp_1': 0.1, 179 'lorentz_scale_2': 0.1, 180 'lorentz_length_2': 5.0, 181 'lorentz_exp_2': 2.0 182 }, 20000., 45.5659201896], 183 ]
Note: See TracChangeset
for help on using the changeset viewer.