Changes in / [37c7d5e:352494a] in sasmodels
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
doc/ref/index.rst
rc34a31f r9f12fbe 10 10 refs.rst 11 11 gpu/gpu_computations.rst 12 gpu/opencl_installation.rst 12 13 magnetism/magnetism.rst 13 14 sesans/sans_to_sesans.rst -
sasmodels/models/core_shell_parallelepiped.py
r5810f00 rcb0dc22 4 4 5 5 Calculates the form factor for a rectangular solid with a core-shell structure. 6 **The thickness and the scattering length density of the shell or "rim" 7 can be different on all three (pairs) of faces.** 6 The thickness and the scattering length density of the shell or 7 "rim" can be different on each (pair) of faces. However at this time 8 the model does **NOT** actually calculate a c face rim despite the presence of 9 the parameter. 10 11 .. note:: 12 This model was originally ported from NIST IGOR macros. However,t is not 13 yet fully understood by the SasView developers and is currently review. 8 14 9 15 The form factor is normalized by the particle volume $V$ such that … … 35 41 V = ABC + 2t_ABC + 2t_BAC + 2t_CAB 36 42 37 **meaning that there are "gaps" at the corners of the solid.** 43 **meaning that there are "gaps" at the corners of the solid.** Again note that 44 $t_C = 0$ currently. 38 45 39 46 The intensity calculated follows the :ref:`parallelepiped` model, with the … … 41 48 amplitudes of the core and shell, in the same manner as a core-shell model. 42 49 43 .. math::44 45 F_{a}(Q,\alpha,\beta)=46 \Bigg(\frac{sin(Q(L_A+2t_A)/2sin\alpha sin\beta)}{Q(L_A+2t_A)/2sin\alpha47 sin\beta)}48 - \frac{sin(QL_A/2sin\alpha sin\beta)}{QL_A/2sin\alpha sin\beta)} \Bigg)49 + \frac{sin(QL_B/2sin\alpha sin\beta)}{QL_B/2sin\alpha sin\beta)}50 + \frac{sin(QL_C/2sin\alpha sin\beta)}{QL_C/2sin\alpha sin\beta)}51 50 52 51 .. note:: … … 93 92 detector plane. 94 93 95 Validation96 ----------97 98 The model uses the form factor calculations implemented in a c-library provided99 by the NIST Center for Neutron Research (Kline, 2006).100 101 94 References 102 95 ---------- … … 113 106 114 107 * **Author:** NIST IGOR/DANSE **Date:** pre 2010 115 * **Last Modified by:** Paul Butler **Date:** September 30, 2016 116 * **Last Reviewed by:** Miguel Gonzales **Date:** March 21, 2016 108 * **Converted to sasmodels by:** Miguel Gonzales **Date:** February 26, 2016 109 * **Last Modified by:** Wojciech Potrzebowski **Date:** January 11, 2017 110 * **Currently Under review by:** Paul Butler 117 111 """ 118 112 -
sasmodels/models/fractal.c
r925ad6e r4788822 1 1 #define INVALID(p) (p.fractal_dim < 0.0) 2 3 static double 4 form_volume(double radius) 5 { 6 return M_4PI_3 * cube(radius); 7 } 2 8 3 9 static double … … 13 19 14 20 //calculate P(q) for the spherical subunits 15 const double V = M_4PI_3*cube(radius);16 const double pq = V * square((sld_block-sld_solvent)*sas_3j1x_x(q*radius));21 const double pq = square(form_volume(radius) * (sld_block-sld_solvent) 22 *sas_3j1x_x(q*radius)); 17 23 18 24 // scale to units cm-1 sr-1 (assuming data on absolute scale) -
sasmodels/models/fractal.py
r925ad6e rdf89d77 20 20 .. math:: 21 21 22 P(q)&= F(qR_0)^2 23 24 F(q)&= \frac{3 (\sin x - x \cos x)}{x^3} 25 26 V_\text{particle} &= \frac{4}{3}\ \pi R_0 27 22 P(q)&= F(qR_0)^2 \\ 23 F(q)&= \frac{3 (\sin x - x \cos x)}{x^3} \\ 24 V_\text{particle} &= \frac{4}{3}\ \pi R_0 \\ 28 25 S(q) &= 1 + \frac{D_f\ \Gamma\!(D_f-1)}{[1+1/(q \xi)^2\ ]^{(D_f -1)/2}} 29 26 \frac{\sin[(D_f-1) \tan^{-1}(q \xi) ]}{(q R_0)^{D_f}} … … 32 29 is the fractal dimension, representing the self similarity of the structure. 33 30 Note that S(q) here goes negative if $D_f$ is too large, and the Gamma function 34 diverges at $D_f $=0 and $D_f$=1.31 diverges at $D_f=0$ and $D_f=1$. 35 32 36 33 **Polydispersity on the radius is provided for.** … … 47 44 ---------- 48 45 49 J Teixeira, *J. Appl. Cryst.*, 21 (1988) 781-78546 .. [#] J Teixeira, *J. Appl. Cryst.*, 21 (1988) 781-785 50 47 51 **Author:** NIST IGOR/DANSE **on:** pre 2010 48 Authorship and Verification 49 ---------------------------- 52 50 53 **Last Modified by:** Paul Butler **on:** March 20, 2016 54 55 **Last Reviewed by:** Paul Butler **on:** March 20, 2016 51 * **Author:** NIST IGOR/DANSE **Date:** pre 2010 52 * **Converted to sasmodels by:** Paul Butler **Date:** March 19, 2016 53 * **Last Modified by:** Paul Butler **Date:** March 12, 2017 54 * **Last Reviewed by:** Paul Butler **Date:** March 12, 2017 56 55 57 56 """ … … 84 83 parameters = [["volfraction", "", 0.05, [0.0, 1], "", 85 84 "volume fraction of blocks"], 86 ["radius", "Ang", 5.0, [0.0, inf], " ",85 ["radius", "Ang", 5.0, [0.0, inf], "volume", 87 86 "radius of particles"], 88 87 ["fractal_dim", "", 2.0, [0.0, 6.0], "", -
sasmodels/resolution.py
rb397165 rb32caab 17 17 18 18 MINIMUM_RESOLUTION = 1e-8 19 20 21 # When extrapolating to -q, what is the minimum positive q relative to q_min 22 # that we wish to calculate? 23 MIN_Q_SCALE_FOR_NEGATIVE_Q_EXTRAPOLATION = 0.01 19 MINIMUM_ABSOLUTE_Q = 0.02 # relative to the minimum q in the data 24 20 25 21 class Resolution(object): … … 82 78 self.q_calc = (pinhole_extend_q(q, q_width, nsigma=nsigma) 83 79 if q_calc is None else np.sort(q_calc)) 80 81 # Protect against models which are not defined for very low q. Limit 82 # the smallest q value evaluated (in absolute) to 0.02*min 83 cutoff = MINIMUM_ABSOLUTE_Q*np.min(self.q) 84 self.q_calc = self.q_calc[abs(self.q_calc) >= cutoff] 85 86 # Build weight matrix from calculated q values 84 87 self.weight_matrix = pinhole_resolution(self.q_calc, self.q, 85 88 np.maximum(q_width, MINIMUM_RESOLUTION)) 89 self.q_calc = abs(self.q_calc) 86 90 87 91 def apply(self, theory): … … 123 127 self.q_calc = slit_extend_q(q, qx_width, qy_width) \ 124 128 if q_calc is None else np.sort(q_calc) 129 130 # Protect against models which are not defined for very low q. Limit 131 # the smallest q value evaluated (in absolute) to 0.02*min 132 cutoff = MINIMUM_ABSOLUTE_Q*np.min(self.q) 133 self.q_calc = self.q_calc[abs(self.q_calc) >= cutoff] 134 135 # Build weight matrix from calculated q values 125 136 self.weight_matrix = \ 126 137 slit_resolution(self.q_calc, self.q, qx_width, qy_width) 138 self.q_calc = abs(self.q_calc) 127 139 128 140 def apply(self, theory): … … 153 165 # neither trapezoid nor Simpson's rule improved the accuracy. 154 166 edges = bin_edges(q_calc) 155 edges[edges < 0.0] = 0.0 # clip edges below zero167 #edges[edges < 0.0] = 0.0 # clip edges below zero 156 168 cdf = erf((edges[:, None] - q[None, :]) / (sqrt(2.0)*q_width)[None, :]) 157 169 weights = cdf[1:] - cdf[:-1] … … 286 298 # The current algorithm is a midpoint rectangle rule. 287 299 q_edges = bin_edges(q_calc) # Note: requires q > 0 288 q_edges[q_edges < 0.0] = 0.0 # clip edges below zero300 #q_edges[q_edges < 0.0] = 0.0 # clip edges below zero 289 301 weights = np.zeros((len(q), len(q_calc)), 'd') 290 302 … … 392 404 interval. 393 405 394 if *q_min* is zero or less then *q[0]/10* is used instead.406 Note that extrapolated values may be negative. 395 407 """ 396 408 q = np.sort(q) 397 409 if q_min + 2*MINIMUM_RESOLUTION < q[0]: 398 if q_min <= 0: q_min = q_min*MIN_Q_SCALE_FOR_NEGATIVE_Q_EXTRAPOLATION399 410 n_low = np.ceil((q[0]-q_min) / (q[1]-q[0])) if q[1] > q[0] else 15 400 411 q_low = np.linspace(q_min, q[0], n_low+1)[:-1] … … 448 459 log_delta_q = log(10.) / points_per_decade 449 460 if q_min < q[0]: 450 if q_min < 0: q_min = q[0]*MIN _Q_SCALE_FOR_NEGATIVE_Q_EXTRAPOLATION461 if q_min < 0: q_min = q[0]*MINIMUM_ABSOLUTE_Q 451 462 n_low = log_delta_q * (log(q[0])-log(q_min)) 452 463 q_low = np.logspace(log10(q_min), log10(q[0]), np.ceil(n_low)+1)[:-1]
Note: See TracChangeset
for help on using the changeset viewer.