Changeset 9acade6 in sasmodels
- Timestamp:
- Sep 27, 2016 9:52:14 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:
- bb46723
- Parents:
- 6cefbc9 (diff), 5fd684d (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent. - Location:
- sasmodels
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
sasmodels/models/pringle.c
rc047acf r58c3367 42 42 } 43 43 44 #if 145 // TODO: should the normalization be to R^2 or the last value, r^246 // the gaussian window does not go all the way from 0 to 1.47 //radius = Gauss76Z[75] * zm + zb;48 *Sn = zm*sumS / (r*r);49 *Cn = zm*sumC / (r*r);50 #else51 44 *Sn = zm*sumS / (radius*radius); 52 45 *Cn = zm*sumC / (radius*radius); 53 #endif54 46 } 55 47 … … 109 101 double form_volume(double radius, double thickness, double alpha, double beta) 110 102 { 111 // TODO: Normalize by form volume 112 //return M_PI*radius*radius*thickness; 113 return 1.0; 103 return M_PI*radius*radius*thickness; 114 104 } 115 105 … … 126 116 double contrast = sld_pringle - sld_solvent; 127 117 double volume = M_PI*radius*radius*thickness; 128 // TODO: If normalize by form volume, need an extra volume here 129 //return 1.0e-4*form * square(contrast * volume); 130 return 1.0e-4*form * square(contrast) * volume; 118 return 1.0e-4*form * square(contrast * volume); 131 119 } -
sasmodels/models/pringle.py
r40a87fa r5fd684d 17 17 .. math:: 18 18 19 C_n = \ int^{R}_{0} r dr\cos(qr^2\alpha \cos{\psi})19 C_n = \frac{1}{r^2}\int^{R}_{0} r dr\cos(qr^2\alpha \cos{\psi}) 20 20 J_n\left( qr^2\beta \cos{\psi}\right) 21 21 J_{2n}\left( qr \sin{\psi}\right) … … 23 23 .. math:: 24 24 25 S_n = \ int^{R}_{0} r dr\sin(qr^2\alpha \cos{\psi})25 S_n = \frac{1}{r^2}\int^{R}_{0} r dr\sin(qr^2\alpha \cos{\psi}) 26 26 J_n\left( qr^2\beta \cos{\psi}\right) 27 27 J_{2n}\left( qr \sin{\psi}\right) … … 47 47 **Last Modified by:** Wojciech Wpotrzebowski **on:** March 20, 2016 48 48 49 **Last Reviewed by:** Paul Butler **on:** March 21, 201649 **Last Reviewed by:** Andrew Jackson **on:** September 26, 2016 50 50 51 51 """ … … 102 102 'sld_pringle': 1.0, 103 103 'sld_solvent': 6.3, 104 'background': 6.3,105 }, 0.1, 16.185532],104 'background': 0.001, 105 }, 0.1, 9.87676], 106 106 107 107 [{'scale' : 1.0, … … 112 112 'sld_pringle': 1.0, 113 113 'sld_solvent': 6.3, 114 'background': 6.3,115 }, 0.01, 29 7.153496],114 'background': 0.001, 115 }, 0.01, 290.56723], 116 116 117 117 [{'scale' : 1.0, … … 122 122 'sld_pringle': 1.0, 123 123 'sld_solvent': 6.3, 124 'background': 6.3, 125 }, 0.001, 324.021256415], 126 127 [{'scale' : 1.0, 128 'radius': 60.0, 129 'thickness': 10.0, 130 'alpha': 0.001, 131 'beta': 0.02, 132 'sld_pringle': 1.0, 133 'sld_solvent': 6.3, 134 'background': 6.3, 135 }, (0.001, 90.0), 6.30000026876], 124 'background': 0.001, 125 }, 0.001, 317.40847], 136 126 ] -
sasmodels/sasview_model.py
r3bcb88c r9c1a59c 565 565 parameters = self._model_info.parameters 566 566 pairs = [self._get_weights(p) for p in parameters.call_parameters] 567 #weights.plot_weights(self._model_info, pairs) 567 568 call_details, values, is_magnetic = make_kernel_args(calculator, pairs) 568 569 #call_details.show() … … 618 619 # remember them is kind of funky. 619 620 # Note: can't seem to get disperser parameters from sasview 620 # (1) Could create a sasview model that has not yet #been621 # (1) Could create a sasview model that has not yet been 621 622 # converted, assign the disperser to one of its polydisperse 622 623 # parameters, then retrieve the disperser parameters from the 623 # sasview model. (2) Could write a disperser parameter retriever624 # in sasview. (3) Could modify sasview to use sasmodels.weights625 # dispersers.624 # sasview model. 625 # (2) Could write a disperser parameter retriever in sasview. 626 # (3) Could modify sasview to use sasmodels.weights dispersers. 626 627 # For now, rely on the fact that the sasview only ever uses 627 628 # new dispersers in the set_dispersion call and create a new 628 629 # one instead of trying to assign parameters. 629 dispersion = weights.MODELS[dispersion.type]()630 630 self.dispersion[parameter] = dispersion.get_pars() 631 631 else: … … 658 658 elif par.polydisperse: 659 659 dis = self.dispersion[par.name] 660 value, weight = weights.get_weights( 661 dis['type'], dis['npts'], dis['width'], dis['nsigmas'], 662 self.params[par.name], par.limits, par.relative_pd) 660 if dis['type'] == 'array': 661 value, weight = dis['values'], dis['weights'] 662 else: 663 value, weight = weights.get_weights( 664 dis['type'], dis['npts'], dis['width'], dis['nsigmas'], 665 self.params[par.name], par.limits, par.relative_pd) 663 666 return value, weight / np.sum(weight) 664 667 else: -
sasmodels/weights.py
r56b2687 r6cefbc9 3 3 """ 4 4 # TODO: include dispersion docs with the disperser models 5 from __future__ import division, print_function 6 5 7 from math import sqrt # type: ignore 8 from collections import OrderedDict 9 6 10 import numpy as np # type: ignore 7 11 from scipy.special import gammaln # type: ignore … … 54 58 else: 55 59 return np.array([], 'd'), np.array([], 'd') 56 return self._weights(center, sigma, lb, ub) 60 x, px = self._weights(center, sigma, lb, ub) 61 return x, px 57 62 58 63 def _weights(self, center, sigma, lb, ub): … … 79 84 default = dict(npts=35, width=0, nsigmas=3) 80 85 def _weights(self, center, sigma, lb, ub): 86 # TODO: sample high probability regions more densely 87 # i.e., step uniformly in cumulative density rather than x value 88 # so weight = 1/Npts for all weights, but values are unevenly spaced 81 89 x = self._linspace(center, sigma, lb, ub) 82 90 px = np.exp((x-center)**2 / (-2.0 * sigma * sigma)) … … 165 173 166 174 def _weights(self, center, sigma, lb, ub): 167 # TODO: interpolate into the array dispersion using npts 168 x = center + self.values*sigma 175 # TODO: rebin the array dispersion using npts 176 # TODO: use a distribution that can be recentered and scaled 177 x = self.values 178 #x = center + self.values*sigma 169 179 idx = (x >= lb) & (x <= ub) 170 180 x = x[idx] … … 174 184 175 185 # dispersion name -> disperser lookup table. 176 MODELS = dict((d.type, d) for d in ( 177 GaussianDispersion, RectangleDispersion, 178 ArrayDispersion, SchulzDispersion, LogNormalDispersion 186 # Maintain order since this is used by sasview GUI to order the options in 187 # the dispersion type combobox. 188 MODELS = OrderedDict((d.type, d) for d in ( 189 RectangleDispersion, 190 ArrayDispersion, 191 LogNormalDispersion, 192 GaussianDispersion, 193 SchulzDispersion, 179 194 )) 180 195 … … 194 209 *value* is the value of the parameter in the model. 195 210 196 *limits* is [lb, ub], the lower and upper bound o f the weight value.211 *limits* is [lb, ub], the lower and upper bound on the possible values. 197 212 198 213 *relative* is true if *width* is defined in proportion to the value … … 201 216 Returns *(value, weight)*, where *value* and *weight* are vectors. 202 217 """ 218 if disperser == "array": 219 raise NotImplementedError("Don't handle arrays through get_weights; use values and weights directly") 203 220 cls = MODELS[disperser] 204 221 obj = cls(n, width, nsigmas) 205 222 v, w = obj.get_weights(value, limits[0], limits[1], relative) 206 223 return v, w 224 225 226 def plot_weights(model_info, pairs): 227 # type: (ModelInfo, List[Tuple[np.ndarray, np.ndarray]]) -> None 228 """ 229 Plot the weights returned by :func:`get_weights`. 230 231 *model_info* is 232 :param model_info: 233 :param pairs: 234 :return: 235 """ 236 import pylab 237 238 if any(len(values)>1 for values, weights in pairs): 239 labels = [p.name for p in model_info.parameters.call_parameters] 240 pylab.interactive(True) 241 pylab.figure() 242 for (v,w), s in zip(pairs, labels): 243 if len(v) > 1: 244 #print("weights for", s, v, w) 245 pylab.plot(v, w, '-o', label=s) 246 pylab.grid(True) 247 pylab.legend()
Note: See TracChangeset
for help on using the changeset viewer.