Changes in / [f4878dc:d8509a6] in sasmodels
- Files:
-
- 1 added
- 2 deleted
- 55 edited
Legend:
- Unmodified
- Added
- Removed
-
doc/genmodel.py
r70bbb74 raa2edb2 25 25 'xscale' : 'log', 26 26 'yscale' : 'log' if not info['structure_factor'] else 'linear', 27 'qmin' : 0.00 5,27 'qmin' : 0.001, 28 28 'qmax' : 1.0, 29 29 'nq' : 1000, … … 68 68 fig = plt.figure() 69 69 ax = fig.add_subplot(1,1,1) 70 ax.plot(q, Iq1D, color='blue', lw=2, label= model_name)70 ax.plot(q, Iq1D, color='blue', lw=2, label=info['name']) 71 71 ax.set_xlabel(r'$Q \/(\AA^{-1})$') 72 72 ax.set_xscale(opts['xscale']) … … 101 101 docstr = docstr1 + captionstr + docstr2 102 102 else: 103 print '------------------------------------------------------------------' 103 104 print 'References NOT FOUND for model: ', model_name 105 print '------------------------------------------------------------------' 104 106 docstr = docstr + captionstr 105 107 -
example/sesans_parameters_css-hs.py
ra98958b r84db7a5 8 8 # Enter the model name to use 9 9 model_name = "core_shell_sphere*hardsphere" 10 11 # DO NOT MODIFY THIS LINE 12 model = sesansfit.get_bumps_model(model_name) 10 13 11 14 # Enter any custom parameters … … 19 22 # Initial parameter values (if other than defaults) 20 23 initial_vals = { 21 "scale" : 0.09,22 24 "core_sld" : 1.0592, 23 25 "solvent_sld" : 2.88, 24 "shell_sld" : 2.88,25 26 "radius" : 890, 26 "thickness" : 130, 27 "volfraction" : 0.45 27 "thickness" : 130 28 28 } 29 29 … … 36 36 } 37 37 38 # Constraints 39 # model.param_name = f(other params) 40 # EXAMPLE: model.scale = model.radius*model.radius*(1 - phi) - where radius and scale are model functions and phi is 41 # a custom parameter 42 model.scale = phi*(1-phi) 43 model.volfraction = phi 44 model.shell_sld = pen*2.88 45 38 46 # Send to the fitting engine 39 47 problem = sesansfit.sesans_fit(sesans_file, model_name, initial_vals, custom_params, param_range) -
example/sesans_parameters_sphere.py
ra98958b r84db7a5 9 9 model_name = "sphere" 10 10 11 # DO NOT MODIFY THIS LINE 12 model = sesansfit.get_bumps_model(model_name) 13 11 14 # Enter any custom parameters 15 # name = Parameter(initial_value, name='name') 12 16 phi = Parameter(0.10, name='phi') 17 # Add the parameters to this list that should be displayed in the fitting window 13 18 custom_params = {"phi" : phi} 14 19 15 # SESANS data file 20 # SESANS data file name 16 21 sesans_file = "sphere.ses" 17 22 18 23 # Initial parameter values (if other than defaults) 24 # "model_parameter_name" : value 19 25 initial_vals = { 20 "scale" : phi*(1 - phi),21 26 "sld" : 7.0, 27 "radius" : 1000, 22 28 "solvent_sld" : 1.0, 23 "radius" : 1000,24 29 } 25 30 26 31 # Ranges for parameters if other than default 32 # "model_parameter_name" : [min, max] 27 33 param_range = { 28 34 "phi" : [0.001, 0.5], … … 30 36 } 31 37 38 # Constraints 39 # model.param_name = f(other params) 40 # EXAMPLE: model.scale = model.radius*model.radius*(1 - phi) - where radius and scale are model functions and phi is 41 # a custom parameter 42 model.scale = phi*(1-phi) 43 32 44 # Send to the fitting engine 33 problem = sesansfit.sesans_fit(sesans_file, model_name, initial_vals, custom_params, param_range) 45 # DO NOT MODIFY THIS LINE 46 problem = sesansfit.sesans_fit(sesans_file, model, initial_vals, custom_params, param_range) 47 -
example/sesansfit.py
ra98958b r84db7a5 1 #TODO: Convert units properly (nm -> A)2 #TODO: Implement constraints3 4 1 from bumps.names import * 5 from sasmodels import core, bumps_model 2 from sasmodels import core, bumps_model, sesans 6 3 7 4 HAS_CONVERTER = True … … 11 8 HAS_CONVERTER = False 12 9 13 def sesans_fit(file, model_name, initial_vals={}, custom_params={}, param_range=[]): 10 def get_bumps_model(model_name): 11 kernel = core.load_model(model_name) 12 model = bumps_model.Model(kernel) 13 return model 14 15 def sesans_fit(file, model, initial_vals={}, custom_params={}, param_range=[]): 14 16 """ 15 16 17 @param file: SESANS file location 17 @param model _name: model name string- can be model, model_1 * model_2, and/or model_1 + model_218 @param model: Bumps model object or model name - can be model, model_1 * model_2, and/or model_1 + model_2 18 19 @param initial_vals: dictionary of {param_name : initial_value} 19 20 @param custom_params: dictionary of {custom_parameter_name : Parameter() object} 20 21 @param param_range: dictionary of {parameter_name : [minimum, maximum]} 22 @param constraints: dictionary of {parameter_name : constraint} 21 23 @return: FitProblem for Bumps usage 22 24 """ … … 29 31 default_unit = "A" 30 32 data_conv_q = Converter(data._xunit) 33 for x in data.x: 34 print x 31 35 data.x = data_conv_q(data.x, units=default_unit) 36 for x in data.x: 37 print x 32 38 data._xunit = default_unit 33 39 … … 51 57 data = SESANSData1D() 52 58 53 radius = 1000 59 if "radius" in initial_vals: 60 radius = initial_vals.get("radius") 61 else: 62 radius = 1000 54 63 data.Rmax = 3*radius # [A] 55 64 56 kernel = core.load_model(model_name)57 model = bumps_model.Model(kernel)65 if isinstance(model, basestring): 66 model = get_bumps_model(model) 58 67 59 # Load custom parameters, initial values and parameter constraints68 # Load custom parameters, initial values and parameter ranges 60 69 for k, v in custom_params.items(): 61 70 setattr(model, k, v) … … 69 78 setattr(param.bounds, "limits", v) 70 79 71 if False: # have sans data80 if False: # for future implementation 72 81 M_sesans = bumps_model.Experiment(data=data, model=model) 73 82 M_sans = bumps_model.Experiment(data=sans_data, model=model) -
example/sesansfit.sh
- Property mode changed from 100644 to 100755
-
sasmodels/compare.py
rfcd7bbd rd6850fa 301 301 pars['Phi'+c] /= total 302 302 303 def parlist( pars):303 def parlist(model_info, pars, is2d): 304 304 """ 305 305 Format the parameter list for printing. 306 306 """ 307 active = None 308 fields = {} 307 if is2d: 308 exclude = lambda n: False 309 else: 310 partype = model_info['partype'] 311 par1d = set(partype['fixed-1d']+partype['pd-1d']) 312 exclude = lambda n: n not in par1d 309 313 lines = [] 310 for k, v in sorted(pars.items()): 311 parts = k.split('_pd') 312 #print(k, active, parts) 313 if len(parts) == 1: 314 if active: lines.append(_format_par(active, **fields)) 315 active = k 316 fields = {'value': v} 317 else: 318 assert parts[0] == active 319 if parts[1]: 320 fields[parts[1][1:]] = v 321 else: 322 fields['pd'] = v 323 if active: lines.append(_format_par(active, **fields)) 314 for p in model_info['parameters']: 315 if exclude(p.name): continue 316 fields = dict( 317 value=pars.get(p.name, p.default), 318 pd=pars.get(p.name+"_pd", 0.), 319 n=int(pars.get(p.name+"_pd_n", 0)), 320 nsigma=pars.get(p.name+"_pd_nsgima", 3.), 321 type=pars.get(p.name+"_pd_type", 'gaussian')) 322 lines.append(_format_par(p.name, **fields)) 324 323 return "\n".join(lines) 325 324 … … 837 836 constrain_new_to_old(model_info, pars) 838 837 if opts['show_pars']: 839 print(str(parlist( pars)))838 print(str(parlist(model_info, pars, opts['is2d']))) 840 839 841 840 # Create the computational engines -
sasmodels/convert.py
r228cbd3 r78d3341 72 72 new model definition end with sld. 73 73 """ 74 return dict((p, (v*1e-6 if p. endswith('sld')74 return dict((p, (v*1e-6 if p.startswith('sld') or p.endswith('sld') 75 75 else v*1e15 if 'ndensity' in p 76 76 else v)) -
sasmodels/data.py
r7824276 r84db7a5 440 440 441 441 if use_data or use_theory: 442 is_tof = np.any(data.lam!=data.lam[0]) 442 443 if num_plots > 1: 443 444 plt.subplot(1, num_plots, 1) 444 445 if use_data: 445 plt.errorbar(data.x, data.y, yerr=data.dy) 446 if is_tof: 447 plt.errorbar(data.x, np.log(data.y)/(data.lam*data.lam), yerr=data.dy/data.y/(data.lam*data.lam)) 448 else: 449 plt.errorbar(data.x, data.y, yerr=data.dy) 446 450 if theory is not None: 447 plt.plot(data.x, theory, '-', hold=True) 451 if is_tof: 452 plt.plot(data.x, np.log(theory)/(data.lam*data.lam), '-', hold=True) 453 else: 454 plt.plot(data.x, theory, '-', hold=True) 448 455 if limits is not None: 449 456 plt.ylim(*limits) 450 plt.xlabel('spin echo length (nm)') 451 plt.ylabel('polarization (P/P0)') 457 458 plt.xlabel('spin echo length ({})'.format(data._xunit)) 459 if is_tof: 460 plt.ylabel('(Log (P/P$_0$))/$\lambda^2$') 461 else: 462 plt.ylabel('polarization (P/P0)') 463 452 464 453 465 if resid is not None: … … 455 467 plt.subplot(1, num_plots, (use_data or use_theory) + 1) 456 468 plt.plot(data.x, resid, 'x') 457 plt.xlabel('spin echo length ( nm)')469 plt.xlabel('spin echo length ({})'.format(data._xunit)) 458 470 plt.ylabel('residuals (P/P0)') 459 471 -
sasmodels/generate.py
rfcd7bbd r78d3341 91 91 in *Iqxy* and *Imagnetic*. "magnetic* parameters will be used in 92 92 *Imagnetic* only. If *type* is the empty string, the parameter will 93 be used in all of *Iq*, *Iqxy* and *Imagnetic*. 93 be used in all of *Iq*, *Iqxy* and *Imagnetic*. "sld" parameters 94 can automatically be promoted to magnetic parameters, each of which 95 will have a magnitude and a direction, which may be different from 96 other sld parameters. 94 97 95 98 *description* is a short description of the parameter. This will … … 216 219 import re 217 220 import string 221 import warnings 218 222 from collections import namedtuple 219 223 … … 604 608 """ 605 609 partype = { 606 'volume': [], 'orientation': [], 'magnetic': [], ' ': [],610 'volume': [], 'orientation': [], 'magnetic': [], 'sld': [], '': [], 607 611 'fixed-1d': [], 'fixed-2d': [], 'pd-1d': [], 'pd-2d': [], 608 612 'pd-rel': set(), … … 618 622 elif p.type == 'orientation': 619 623 partype['pd-2d'].append(p.name) 620 elif p.type == '':624 elif p.type in ('', 'sld'): 621 625 partype['fixed-1d'].append(p.name) 622 626 partype['fixed-2d'].append(p.name) … … 632 636 """ 633 637 # convert parameters into named tuples 638 for p in model_info['parameters']: 639 if p[4] == '' and (p[0].startswith('sld') or p[0].endswith('sld')): 640 p[4] = 'sld' 641 # TODO: make sure all models explicitly label their sld parameters 642 #raise ValueError("%s.%s needs to be explicitly set to type 'sld'" %(model_info['id'], p[0])) 643 634 644 pars = [Parameter(*p) for p in model_info['parameters']] 635 645 # Fill in the derived attributes -
sasmodels/models/adsorbed_layer.py
r2f0c07d rf10bc52 17 17 I(q) = \text{scale} \cdot(\rho_\text{poly}-\rho_\text{solvent})^2 \left[\frac{6\pi\phi_\text{core}}{Q^2}\frac{\Gamma^2}{\delta_\text{poly}^2R_\text{core}} \exp(-Q^2\sigma^2)\right] + \text{background} 18 18 19 where *scale* is a scale factor, |rho|\ :sub:`poly` is the sld of the polymer (or surfactant) layer, |rho|\ :sub:`solv` is the sld of the solvent/medium and cores, |phi|\ :sub:`core` is the volume fraction of the core par aticles, |delta|\ :sub:`poly` is the bulk density of the polymer, |biggamma| is the adsorbed amount, and |sigma| is the second moment of the thickness distribution.19 where *scale* is a scale factor, |rho|\ :sub:`poly` is the sld of the polymer (or surfactant) layer, |rho|\ :sub:`solv` is the sld of the solvent/medium and cores, |phi|\ :sub:`core` is the volume fraction of the core particles, |delta|\ :sub:`poly` is the bulk density of the polymer, |biggamma| is the adsorbed amount, and |sigma| is the second moment of the thickness distribution. 20 20 21 21 Note that all parameters except the |sigma| are correlated so fitting more than one of these parameters will generally fail. Also note that unlike other shape models, no volume normalization is applied to this model (the calculation is exact). … … 46 46 ["density_poly", "g/cm3", 0.7, [0.0, inf], "", "Polymer density"], 47 47 ["radius", "Ang", 500.0, [0.0, inf], "", "Particle radius"], 48 ["vol _frac", "None", 0.14, [0.0, inf], "", "Particle vol fraction"],48 ["volfraction", "None", 0.14, [0.0, inf], "", "Particle vol fraction"], 49 49 ["polymer_sld", "1/Ang^2", 1.5e-06, [-inf, inf], "", "Polymer SLD"], 50 50 ["solvent_sld", "1/Ang^2", 6.3e-06, [-inf, inf], "", "Solvent SLD"]] … … 52 52 # NB: Scale and Background are implicit parameters on every model 53 53 def Iq(q, second_moment, adsorbed_amount, density_poly, radius, 54 vol _frac, polymer_sld, solvent_sld):54 volfraction, polymer_sld, solvent_sld): 55 55 # pylint: disable = missing-docstring 56 56 deltarhosqrd = (polymer_sld - solvent_sld) * (polymer_sld - solvent_sld) 57 numerator = 6.0 * pi * vol _frac* (adsorbed_amount * adsorbed_amount)57 numerator = 6.0 * pi * volfraction * (adsorbed_amount * adsorbed_amount) 58 58 denominator = (q * q) * (density_poly * density_poly) * radius 59 59 eterm = exp(-1.0 * (q * q) * (second_moment * second_moment)) … … 73 73 density_poly = 0.7, 74 74 radius = 500.0, 75 vol _frac= 0.14,75 volfraction = 0.14, 76 76 polymer_sld = 1.5e-06, 77 77 solvent_sld = 6.3e-06, … … 84 84 density_poly = 'density_poly', 85 85 radius = 'radius_core', 86 vol _frac= 'volf_cores',86 volfraction = 'volf_cores', 87 87 polymer_sld = 'sld_poly', 88 88 solvent_sld = 'sld_solv', 89 89 background = 'background') 90 90 91 # these unit test values taken from SasView 3.1.2 91 92 tests = [ 92 93 [{'scale': 1.0, 'second_moment': 23.0, 'adsorbed_amount': 1.9, 93 'density_poly': 0.7, 'radius': 500.0, 'vol _frac': 0.14,94 'density_poly': 0.7, 'radius': 500.0, 'volfraction': 0.14, 94 95 'polymer_sld': 1.5e-06, 'solvent_sld': 6.3e-06, 'background': 0.0}, 95 96 [0.0106939, 0.469418], [73.741, 9.65391e-53]], -
sasmodels/models/core_shell_parallelepiped.py
r6dd90c1 raa2edb2 92 92 by the NIST Center for Neutron Research (Kline, 2006). 93 93 94 REFERENCE 94 References 95 ---------- 95 96 96 97 P Mittelbach and G Porod, *Acta Physica Austriaca*, 14 (1961) 185-211 -
sasmodels/models/core_shell_sphere.py
r7d4b2ae raa2edb2 42 42 our model and the output of the NIST software. 43 43 44 .. figure:: img/core_shell_sphere_1d.jpg45 46 Comparison of the SasView scattering intensity for a core-shell sphere with47 the output of the NIST SANS analysis software. The parameters were set to:48 *scale* = 1.0, *radius* = 60 , *contrast* = 1e-6 |Ang^-2|, and49 *background* = 0.001 |cm^-1|.50 44 """ 51 45 -
sasmodels/models/correlation_length.py
r6dd90c1 raa2edb2 25 25 q = \sqrt{q_x^2 + q_y^2} 26 26 27 .. figure:: img/correlation_length_1d.jpg 27 References 28 ---------- 28 29 29 1D plot using the default values (w/500 data points).30 31 REFERENCE32 30 B Hammouda, D L Ho and S R Kline, Insight into Clustering in 33 31 Poly(ethylene oxide) Solutions, Macromolecules, 37 (2004) 6932-6937 -
sasmodels/models/cylinder.py
r6dd90c1 raa2edb2 60 60 ---------- 61 61 62 Validation of ourcode was done by comparing the output of the 1D model62 Validation of the code was done by comparing the output of the 1D model 63 63 to the output of the software provided by the NIST (Kline, 2006). 64 :num:`Figure #cylinder-compare` shows a comparison of 65 the 1D output of our model and the output of the NIST software. 66 67 .. _cylinder-compare: 68 69 .. figure:: img/cylinder_compare.jpg 70 71 Comparison of the SasView scattering intensity for a cylinder with the 72 output of the NIST SANS analysis software. 73 The parameters were set to: *scale* = 1.0, *radius* = 20 |Ang|, 74 *length* = 400 |Ang|, *contrast* = 3e-6 |Ang^-2|, and 75 *background* = 0.01 |cm^-1|. 76 77 In general, averaging over a distribution of orientations is done by 78 evaluating the following 64 The implementation of the intensity for fully oriented cylinders was done 65 by averaging over a uniform distribution of orientations using 79 66 80 67 .. math:: … … 86 73 where $p(\theta,\phi)$ is the probability distribution for the orientation 87 74 and $P_0(q,\alpha)$ is the scattering intensity for the fully oriented 88 system. Since we have no other software to compare the implementation of 89 the intensity for fully oriented cylinders, we can compare the result of 90 averaging our 2D output using a uniform distribution $p(\theta, \phi) = 1.0$. 91 :num:`Figure #cylinder-crosscheck` shows the result of 92 such a cross-check. 75 system, and then comparing to the 1D result. 93 76 94 .. _cylinder-crosscheck: 77 References 78 ---------- 95 79 96 .. figure:: img/cylinder_crosscheck.jpg 80 None 97 81 98 Comparison of the intensity for uniformly distributed cylinders99 calculated from our 2D model and the intensity from the NIST SANS100 analysis software.101 The parameters used were: *scale* = 1.0, *radius* = 20 |Ang|,102 *length* = 400 |Ang|, *contrast* = 3e-6 |Ang^-2|, and103 *background* = 0.0 |cm^-1|.104 82 """ 105 83 -
sasmodels/models/dab.py
r94bd809 raa2edb2 26 26 27 27 .. math:: q = \sqrt{q_x^2 + q_y^2} 28 29 .. figure:: img/dab_1d.jpg30 31 1D plot using the default values (w/200 data point).32 28 33 29 -
sasmodels/models/ellipsoid.py
r2f0c07d raa2edb2 59 59 ---------- 60 60 61 Validation of ourcode was done by comparing the output of the 1D model61 Validation of the code was done by comparing the output of the 1D model 62 62 to the output of the software provided by the NIST (Kline, 2006). 63 :num:`Figure ellipsoid-comparison-1d` below shows a comparison of64 the 1D output of our model and the output of the NIST software.65 63 66 .. _ellipsoid-comparison-1d: 64 The implementation of the intensity for fully oriented ellipsoids was 65 validated by averaging the 2D output using a uniform distribution 66 $p(\theta,\phi) = 1.0$ and comparing with the output of the 1D calculation. 67 67 68 .. figure:: img/ellipsoid_comparison_1d.jpg69 70 Comparison of the SasView scattering intensity for an ellipsoid71 with the output of the NIST SANS analysis software. The parameters72 were set to: *scale* = 1.0, *rpolar* = 20 |Ang|,73 *requatorial* =400 |Ang|, *contrast* = 3e-6 |Ang^-2|,74 and *background* = 0.01 |cm^-1|.75 76 Averaging over a distribution of orientation is done by evaluating the77 equation above. Since we have no other software to compare the78 implementation of the intensity for fully oriented ellipsoids, we can79 compare the result of averaging our 2D output using a uniform distribution80 $p(\theta,\phi) = 1.0$. :num:`Figure #ellipsoid-comparison-2d`81 shows the result of such a cross-check.82 68 83 69 .. _ellipsoid-comparison-2d: -
sasmodels/models/elliptical_cylinder.py
r5111921 raa2edb2 64 64 ---------- 65 65 66 Validation of our code was done by comparing the output of the 1D calculation to the angular average of the output of 67 the 2D calculation over all possible angles. The figure below shows the comparison where the solid dot refers to 68 averaged 2D values while the line represents the result of the 1D calculation (for the 2D averaging, values of 76, 180, 69 and 76 degrees are taken for the angles of |theta|, |phi|, and |bigpsi| respectively). 66 Validation of our code was done by comparing the output of the 1D calculation to the 67 angular average of the output of the 2D calculation over all possible angles. 70 68 71 .. figure:: img/elliptical_cylinder_validation_1d.png 72 73 Comparison between 1D and averaged 2D. 74 75 In the 2D average, more binning in the angle |phi| is necessary to get the proper result. The following figure shows 76 the results of the averaging by varying the number of angular bins. 69 In the 2D average, more binning in the angle |phi| is necessary to get the proper result. 70 The following figure shows the results of the averaging by varying the number of angular bins. 77 71 78 72 .. figure:: img/elliptical_cylinder_averaging.png -
sasmodels/models/flexible_cylinder.py
re7678b2 raa2edb2 34 34 In the parameters, the sldCyl and sldSolv represent the SLD of the chain/cylinder 35 35 and solvent respectively. 36 37 38 .. figure:: img/flexible_cylinder_1d.jpg39 40 1D plot using the default values (w/1000 data point).41 42 36 43 37 Our model uses the form factor calculations implemented in a c-library provided -
sasmodels/models/flexible_cylinder_ex.py
re7678b2 raa2edb2 70 70 71 71 **No inter-cylinder interference effects are included in this calculation.** 72 73 .. figure:: img/flexible_cylinder_ex_1d.jpg74 75 1D plot using the default values (w/1000 data point).76 72 77 73 References -
sasmodels/models/fractal_core_shell.py
r7d4b2ae raa2edb2 43 43 44 44 q = \sqrt{q_x^2 + q_y^2} 45 46 .. figure:: img/fractal_core_shell_1d.jpg47 48 1D plot using the default values (w/500 data point).49 45 50 46 Reference -
sasmodels/models/fuzzy_sphere.py
r8dca856 raa2edb2 48 48 49 49 q = \sqrt{{q_x}^2 + {q_y}^2} 50 51 52 .. figure:: img/fuzzy_sphere.jpg53 54 This example dataset is produced by running the FuzzySphereModel,55 using 200 data points, *qmin* = 0.001 -1,56 *qmax* = 0.7 |Ang^-1|, background = 0.001 |cm^-1| and the default values.57 58 50 59 51 -
sasmodels/models/gauss_lorentz_gel.py
r6dd90c1 raa2edb2 32 32 33 33 q = \sqrt{q_x^2 + q_y^2} 34 35 36 .. figure:: img/gauss_lorentz_gel_1d.jpg37 38 1D plot using the default values (w/500 data point).39 34 40 35 -
sasmodels/models/gaussian_peak.py
r13ed84c raa2edb2 21 21 q = \sqrt{q_x^2 + q_y^2} 22 22 23 24 .. figure:: img/gaussian_peak_1d.jpg25 26 1D plot using the default values (w/500 data points).27 23 28 24 References -
sasmodels/models/gel_fit.py
r6dd90c1 raa2edb2 32 32 ~2.6 to 2.8. 33 33 34 35 .. figure:: img/gel_fit_1d.png36 37 1D plot using the default values (with 300 data points).38 34 39 35 Reference -
sasmodels/models/guinier_porod.py
rfa8011eb raa2edb2 50 50 .. math:: 51 51 q = \sqrt{q_x^2+q_y^2} 52 53 .. figure:: img/guinier_porod_model.jpg54 55 Guinier-Porod model for $R_g=100$ |Ang|, $s=1$, $m=3$, and $background=0.1$.56 52 57 53 -
sasmodels/models/hardsphere.py
rd529d93 r3bcd03d 35 35 q = \sqrt{q_x^2 + q_y^2} 36 36 37 38 .. figure:: img/hardSphere_1d.jpg39 40 1D plot using the default values (in linear scale).41 37 42 38 References -
sasmodels/models/hayter_msa.py
rd529d93 r54954e1 51 51 # dp[2] = volfraction(); 52 52 # dp[3] = temperature(); 53 # dp[4] = salt conc();53 # dp[4] = salt_concentration(); 54 54 # dp[5] = dielectconst(); 55 55 … … 76 76 ["volfraction", "None", 0.0192, [0, 0.74], "", "volume fraction of spheres"], 77 77 ["temperature", "K", 318.16, [0, inf], "", "temperature, in Kelvin, for Debye length calculation"], 78 ["salt conc", "M", 0.0, [-inf, inf], "", "conc of salt, moles/litre, 1:1 electolyte, for Debye length"],78 ["salt_concentration", "M", 0.0, [-inf, inf], "", "conc of salt, moles/litre, 1:1 electolyte, for Debye length"], 79 79 ["dielectconst", "None", 71.08, [-inf, inf], "", "dielectric constant (relative permittivity) of solvent, default water, for Debye length"] 80 80 ] … … 96 96 oldname = 'HayterMSAStructure' 97 97 #oldpars = dict(effect_radius="radius_effective",effect_radius_pd="radius_effective_pd",effect_radius_pd_n="radius_effective_pd_n") 98 oldpars = dict(radius_effective="effect_radius",radius_effective_pd="effect_radius_pd",radius_effective_pd_n="effect_radius_pd_n" )98 oldpars = dict(radius_effective="effect_radius",radius_effective_pd="effect_radius_pd",radius_effective_pd_n="effect_radius_pd_n",salt_concentration="saltconc") 99 99 #oldpars = dict( ) 100 100 # default parameter set, use compare.sh -midQ -linear 101 101 # note the calculation varies in different limiting cases so a wide range of 102 102 # parameters will be required for a thorough test! 103 # odd that the default st has salt conczero103 # odd that the default st has salt_concentration zero 104 104 demo = dict(radius_effective=20.75, 105 105 charge=19.0, 106 106 volfraction=0.0192, 107 107 temperature=318.16, 108 salt conc=0.05,108 salt_concentration=0.05, 109 109 dielectconst=71.08, 110 110 radius_effective_pd=0.1, … … 120 120 'volfraction': 0.0192, 121 121 'temperature': 298.0, 122 'salt conc': 0,122 'salt_concentration': 0, 123 123 'dielectconst': 78.0, 124 124 'radius_effective_pd': 0}, … … 130 130 'volfraction': 0.0192, 131 131 'temperature': 298.0, 132 'salt conc': 0.05,132 'salt_concentration': 0.05, 133 133 'dielectconst': 78.0, 134 134 'radius_effective_pd': 0.1, -
sasmodels/models/hollow_rectangular_prism.py
r6dd90c1 raa2edb2 75 75 of the 1D model to the curves shown in (Nayuk, 2012). 76 76 77 REFERENCES 77 78 References 79 ---------- 78 80 79 81 R Nayuk and K Huber, *Z. Phys. Chem.*, 226 (2012) 837-854 -
sasmodels/models/hollow_rectangular_prism_infinitely_thin_walls.py
r6dd90c1 raa2edb2 67 67 of the 1D model to the curves shown in (Nayuk, 2012). 68 68 69 REFERENCES 69 70 References 71 ---------- 70 72 71 73 R Nayuk and K Huber, *Z. Phys. Chem.*, 226 (2012) 837-854 -
sasmodels/models/lamellar.py
r348557a raa2edb2 27 27 28 28 q = \sqrt{q_x^2 + q_y^2} 29 30 31 .. figure:: img/lamellar_1d.jpg32 33 1D plot using the default values (w/1000 data point).34 29 35 30 -
sasmodels/models/lamellarCaille.py
rec2ca99 raa2edb2 60 60 q = \sqrt{q_x^2 + q_y^2} 61 61 62 .. figure:: img/lamellarCaille_1d.jpg63 64 1D plot using the default values (w/6000 data point).65 62 66 63 References -
sasmodels/models/lamellarCailleHG.py
r652a78a raa2edb2 63 63 q = \sqrt{q_x^2 + q_y^2} 64 64 65 .. figure:: img/lamellarCailleHG_1d.jpg66 67 1D plot using the default values (w/6000 data point).68 65 69 66 References -
sasmodels/models/lamellarFFHG.py
r3eb6b90 raa2edb2 36 36 q = \sqrt{q_x^2 + q_y^2} 37 37 38 39 .. figure:: img/lamellarFFHG_1d.jpg40 41 1D plot using the default values (w/1000 data point).42 38 43 39 References -
sasmodels/models/lamellarPC.py
r13ed84c raa2edb2 84 84 85 85 86 .. figure:: img/lamellarPC_1d.jpg87 88 1D plot using the default values above (w/20000 data point).89 90 86 Reference 91 87 --------- -
sasmodels/models/lorentz.py
r6dd90c1 raa2edb2 16 16 .. math:: q=\sqrt{q_x^2 + q_y^2} 17 17 18 .. figure:: img/lorentz_1d.jpg19 20 1D plot using the default values (w/200 data point).21 18 22 19 References -
sasmodels/models/mass_fractal.py
r684eff9 r684eff9 45 45 $q$ range (see the reference for details). 46 46 47 .. figure:: img/mass_fractal_1d.jpg48 49 1D plot using the default values.50 47 51 48 Reference -
sasmodels/models/mass_surface_fractal.py
r6dd90c1 raa2edb2 45 45 $(surface_dim + mass_dim ) < 6$ . 46 46 47 .. figure:: img/mass_surface_fractal_1d.jpg48 49 1D plot using the default values.50 47 51 48 Reference -
sasmodels/models/mono_gauss_coil.py
r246517d rf10bc52 86 86 background = 'background') 87 87 88 # these unit test values taken from SasView 3.1.2 88 89 tests = [ 89 [{'scale': 70.0, 'radius_gyration': 75.0, 'background': 0.0},90 [{'scale': 1.0, 'i_zero': 70.0, 'radius_gyration': 75.0, 'background': 0.0}, 90 91 [0.0106939, 0.469418], [57.1241, 0.112859]], 91 92 ] -
sasmodels/models/parallelepiped.py
r6dd90c1 raa2edb2 143 143 Validation of the code was done by comparing the output of the 1D calculation 144 144 to the angular average of the output of a 2D calculation over all possible 145 angles. The Figure below shows the comparison where the solid dot refers to 146 averaged 2D while the line represents the result of the 1D calculation (for 147 the averaging, 76, 180, 76 points are taken for the angles of $\theta$, 148 $\phi$, and $\Psi$ respectively). 149 150 .. _parallelepiped-compare: 151 152 .. figure:: img/parallelepiped_compare.png 153 154 Comparison between 1D and averaged 2D. 145 angles. 155 146 156 147 This model is based on form factor calculations implemented in a c-library 157 148 provided by the NIST Center for Neutron Research (Kline, 2006). 149 150 References 151 ---------- 152 153 None. 158 154 """ 159 155 -
sasmodels/models/peak_lorentz.py
r04b0b30 raa2edb2 21 21 q = \sqrt{q_x^2 + q_y^2} 22 22 23 24 .. figure:: img/peak_lorentz_1d.jpg25 26 1D plot using the default values (w/200 data point).27 23 28 24 References -
sasmodels/models/polymer_excl_volume.py
r6dd90c1 raa2edb2 81 81 82 82 q = \sqrt{q_x^2 + q_y^2} 83 84 This example dataset is produced using 200 data points, $qmin=0.001Ang^{-1}$,85 $qmax=0.2Ang^{-1}$ and the default values86 87 .. figure:: img/polymer_excl_volume_1d.jpg88 89 1D plot using the default values (w/500 data point).90 83 91 84 -
sasmodels/models/power_law.py
rb15849c raa2edb2 20 20 combining this model with other models. 21 21 22 .. figure:: img/power_law_1d.jpg23 24 1D plot using the default values (w/200 data point).25 22 26 23 References -
sasmodels/models/rectangular_prism.py
r6dd90c1 raa2edb2 71 71 to the output of the existing :ref:`parallelepiped` model. 72 72 73 REFERENCES 73 74 References 75 ---------- 74 76 75 77 P Mittelbach and G Porod, *Acta Physica Austriaca*, 14 (1961) 185-211 -
sasmodels/models/rpa.py
r5cfda00 raa2edb2 43 43 component. 44 44 45 .. figure:: img/rpa_1d.jpg46 47 1D plot using the default values (w/500 data points).48 45 49 46 References -
sasmodels/models/sphere.py
rad90df9 raa2edb2 33 33 Validation of our code was done by comparing the output of the 1D model 34 34 to the output of the software provided by the NIST (Kline, 2006). 35 Figure :num:`figure #sphere-comparison` shows a comparison of the output36 of our model and the output of the NIST software.37 38 .. _sphere-comparison:39 40 .. figure:: img/sphere_comparison.jpg41 42 Comparison of the DANSE scattering intensity for a sphere with the43 output of the NIST SANS analysis software. The parameters were set to:44 *scale* = 1.0, *radius* = 60 |Ang|, *contrast* = 1e-6 |Ang^-2|, and45 *background* = 0.01 |cm^-1|.46 35 47 36 -
sasmodels/models/spherepy.py
rd2950f4 raa2edb2 33 33 Validation of our code was done by comparing the output of the 1D model 34 34 to the output of the software provided by the NIST (Kline, 2006). 35 Figure :num:`figure #spherepy-comparison` shows a comparison of the output36 of our model and the output of the NIST software.37 38 .. _spherepy-comparison:39 40 .. figure:: img/sphere_comparison.jpg41 42 Comparison of the DANSE scattering intensity for a sphere with the43 output of the NIST SANS analysis software. The parameters were set to:44 *scale* = 1.0, *radius* = 60 |Ang|, *contrast* = 1e-6 |Ang^-2|, and45 *background* = 0.01 |cm^-1|.46 35 47 36 -
sasmodels/models/star_polymer.py
r6dd90c1 raa2edb2 26 26 27 27 is the square of the ensemble average radius-of-gyration of an arm. 28 29 .. figure:: img/star_polymer_1d.jpg30 31 1D plot using the default values.32 28 33 29 -
sasmodels/models/stickyhardsphere.py
rd529d93 r54954e1 59 59 q = \sqrt{q_x^2 + q_y^2} 60 60 61 .. figure:: img/stickyhardsphere_1d.jpg62 63 1D plot using the default values (in linear scale).64 61 65 62 References … … 91 88 # [ "name", "units", default, [lower, upper], "type", 92 89 # "description" ], 93 [" effect_radius", "Ang", 50.0, [0, inf], "volume",90 ["radius_effective", "Ang", 50.0, [0, inf], "volume", 94 91 "effective radius of hard sphere"], 95 92 ["volfraction", "", 0.2, [0, 0.74], "", … … 116 113 eta = volfraction/onemineps/onemineps/onemineps; 117 114 118 sig = 2.0 * effect_radius;115 sig = 2.0 * radius_effective; 119 116 aa = sig/onemineps; 120 117 etam1 = 1.0 - eta; … … 182 179 183 180 oldname = 'StickyHSStructure' 184 oldpars = dict( )185 demo = dict( effect_radius=200, volfraction=0.2, perturb=0.05,186 stickiness=0.2, effect_radius_pd=0.1, effect_radius_pd_n=40)181 oldpars = dict(radius_effective="effect_radius",radius_effective_pd="effect_radius_pd",radius_effective_pd_n="effect_radius_pd_n") 182 demo = dict(radius_effective=200, volfraction=0.2, perturb=0.05, 183 stickiness=0.2, radius_effective_pd=0.1, radius_effective_pd_n=40) 187 184 # 188 185 tests = [ 189 [ {'scale': 1.0, 'background' : 0.0, ' effect_radius' : 50.0, 'perturb' : 0.05, 'stickiness' : 0.2, 'volfraction' : 0.1,190 ' effect_radius_pd' : 0}, [0.001, 0.003], [1.09718, 1.087830]]186 [ {'scale': 1.0, 'background' : 0.0, 'radius_effective' : 50.0, 'perturb' : 0.05, 'stickiness' : 0.2, 'volfraction' : 0.1, 187 'radius_effective_pd' : 0}, [0.001, 0.003], [1.09718, 1.087830]] 191 188 ] 192 189 -
sasmodels/models/surface_fractal.py
r6dd90c1 raa2edb2 44 44 details) 45 45 46 47 .. figure:: img/surface_fractal_1d.jpg48 49 1D plot using the default values.50 46 51 47 Reference -
sasmodels/models/teubner_strey.py
r6dd90c1 raa2edb2 35 35 q = \sqrt{q_x^2 + q_y^2} 36 36 37 38 .. figure:: img/teubner_strey_1d.jpg39 40 1D plot using the default values (w/200 data point).41 37 42 38 References -
sasmodels/models/triaxial_ellipsoid.py
r2f0c07d raa2edb2 64 64 1D calculation to the angular average of the output of 2D calculation 65 65 over all possible angles. 66 :num:`Figure #triaxial-ellipsoid-comparison` shows the comparison where67 the solid dot refers to averaged 2D while the line represents the68 result of 1D calculation (for 2D averaging, 76, 180, and 76 points69 are taken for the angles of $\theta$, $\phi$, and $\psi$ respectively).70 66 71 .. _triaxial-ellipsoid-comparison:72 73 .. figure:: img/triaxial_ellipsoid_comparison.png74 75 Comparison between 1D and averaged 2D.76 67 77 68 References -
sasmodels/models/two_lorentzian.py
r168052c raa2edb2 24 24 q = \sqrt{q_x^2 + q_y^2} 25 25 26 27 .. figure:: img/two_lorentzian.jpg28 29 1D plot using the default values (w/500 data point).30 26 31 27 References -
sasmodels/models/two_power_law.py
r7e1d090 raa2edb2 36 36 q = \sqrt{q_x^2 + q_y^2} 37 37 38 39 .. figure:: img/two_power_law_1d.jpg40 41 1D plot using the default values (with 500 data point).42 38 43 39 References -
sasmodels/models/vesicle.py
r6dd90c1 raa2edb2 50 50 radius for *S(Q)* when *P(Q)* \* *S(Q)* is applied. 51 51 52 .. figure:: img/vesicle_1d.jpg53 52 54 1D plot using the default values given in the table (w/200 data point). 55 Polydispersity and instrumental resolution normally will smear out most 56 of the rapidly oscillating features. 57 58 REFERENCE 53 References 54 ---------- 59 55 60 56 A Guinier and G. Fournet, *Small-Angle Scattering of X-Rays*, John Wiley and -
sasmodels/product.py
rfcd7bbd r3bcd03d 18 18 SCALE=0 19 19 BACKGROUND=1 20 EFFECT_RADIUS=220 RADIUS_EFFECTIVE=2 21 21 VOLFRACTION=3 22 22 … … 31 31 assert s_pars[BACKGROUND].name == 'background' 32 32 # We require structure factors to start with effect radius and volfraction 33 assert s_pars[ EFFECT_RADIUS].name == 'effect_radius'33 assert s_pars[RADIUS_EFFECTIVE].name == 'radius_effective' 34 34 assert s_pars[VOLFRACTION].name == 'volfraction' 35 35 # Combine the parameter sets. We are skipping the first three
Note: See TracChangeset
for help on using the changeset viewer.