Changes in / [3271e20:6a729a2] in sasmodels
- Files:
-
- 3 added
- 1 deleted
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
compare.py
r87fce00 r373d1b6 301 301 ] 302 302 303 def get_demo_pars(name): 304 import sasmodels.models 305 __import__('sasmodels.models.'+name) 306 model = getattr(sasmodels.models, name) 307 pars = getattr(model, 'demo', None) 308 if pars is None: pars = dict((p[0],p[2]) for p in model.parameters) 309 return pars 310 303 311 def main(): 304 312 opts = [arg for arg in sys.argv[1:] if arg.startswith('-')] … … 322 330 # if model does not define demo parameters 323 331 name = args[0] 324 import sasmodels.models 325 __import__('sasmodels.models.'+name) 326 model = getattr(sasmodels.models, name) 327 pars = getattr(model, 'demo', None) 328 if pars is None: pars = dict((p[0],p[2]) for p in model.parameters) 332 pars = get_demo_pars(name) 329 333 330 334 Nopencl = int(args[1]) if len(args) > 1 else 5 -
sasmodels/bumps_model.py
rf786ff3 rc97724e 4 4 import sys, os 5 5 import datetime 6 7 from sasmodels import sesans 6 8 7 9 # CRUFT python 2.6 … … 213 215 #plt.axhline(-1, color='black', ls='--',lw=1, hold=True) 214 216 217 def _plot_sesans(data, theory, view): 218 import matplotlib.pyplot as plt 219 resid = (theory - data.data)/data.err_data 220 plt.subplot(121) 221 plt.errorbar(data.SElength, data.data, yerr=data.err_data) 222 plt.plot(data.SElength, theory, '-', hold=True) 223 plt.xlabel('spin echo length (A)') 224 plt.ylabel('polarization') 225 plt.subplot(122) 226 plt.plot(data.SElength, resid, 'x') 227 plt.xlabel('spin echo length (A)') 228 plt.ylabel('residuals') 215 229 216 230 def _plot_result2D(data, theory, view): … … 230 244 plt.colorbar() 231 245 232 def plot_result(data, theory, view='log'):233 """234 Plot the data and residuals.235 """236 if hasattr(data, 'qx_data'):237 _plot_result2D(data, theory, view)238 else:239 _plot_result1D(data, theory, view)240 241 242 246 class BumpsModel(object): 243 247 """ … … 263 267 self.model = model 264 268 self.cutoff = cutoff 269 if hasattr(data, 'SElength'): 270 self.data_type = 'sesans' 271 elif hasattr(data, 'qx_data'): 272 self.data_type = 'Iqxy' 273 else: 274 self.data_type = 'Iq' 265 275 266 276 partype = model.info['partype'] 267 277 268 278 # interpret data 269 if hasattr(data, 'qx_data'): 279 if self.data_type == 'sesans': 280 q = sesans.make_q(data.q_zmax, data.Rmax) 281 self.index = slice(None,None) 282 self.iq = data.data 283 self.diq = data.err_data 284 self._theory = np.zeros_like(q) 285 q_vectors = [q] 286 elif self.data_type == 'Iqxy': 270 287 self.index = (data.mask==0) & (~np.isnan(data.data)) 271 288 self.iq = data.data[self.index] … … 276 293 else: 277 294 q_vectors = [data.qx_data, data.qy_data] 278 el se:295 elif self.data_type == 'Iq': 279 296 self.index = (data.x>=data.qmin) & (data.x<=data.qmax) & ~np.isnan(data.y) 280 297 self.iq = data.y[self.index] … … 282 299 self._theory = np.zeros_like(data.y) 283 300 q_vectors = [data.x] 301 else: 302 raise ValueError("Unknown data type") # never gets here 284 303 285 304 # Remember function inputs so we can delay loading the function and … … 333 352 self._theory[self.index] = self._fn(pars, pd_pars, self.cutoff) 334 353 #self._theory[:] = self._fn.eval(pars, pd_pars) 335 self._cache['theory'] = self._theory 354 if self.data_type == 'sesans': 355 P = sesans.hankel(self.data.SElength, self.data.wavelength, 356 self.data.thickness, self._fn_inputs[0], 357 self._theory) 358 self._cache['theory'] = P 359 else: 360 self._cache['theory'] = self._theory 336 361 return self._cache['theory'] 337 362 … … 349 374 350 375 def plot(self, view='log'): 351 plot_result(self.data, self.theory(), view=view) 376 """ 377 Plot the data and residuals. 378 """ 379 data, theory = self.data, self.theory() 380 if self.data_type == 'Iq': 381 _plot_result1D(data, theory, view) 382 elif self.data_type == 'Iqxy': 383 _plot_result2D(data, theory, view) 384 elif self.data_type == 'sesans': 385 _plot_sesans(data, theory, view) 386 else: 387 raise ValueError("Unknown data type") 388 389 def simulate_data(self, noise=None): 390 print "noise", noise 391 if noise is None: 392 noise = self.diq[self.index] 393 else: 394 noise = 0.01*noise 395 self.diq[self.index] = noise 396 y = self.theory() 397 y += y*np.random.randn(*y.shape)*noise 398 if self.data_type == 'Iq': 399 self.data.y[self.index] = y 400 elif self.data_type == 'Iqxy': 401 self.data.data[self.index] = y 402 elif self.data_type == 'sesans': 403 self.data.data[self.index] = y 404 else: 405 raise ValueError("Unknown model") 352 406 353 407 def save(self, basename): -
sesansdemo.py
r10576d1 rc97724e 10 10 11 11 # q-range parameters 12 12 13 q = arange(0.0003, 1.0, 0.0003); # [nm^-1] range wide enough for Hankel transform 13 14 dq=(q[1]-q[0])*1e9; # [m^-1] step size in q, needed for integration … … 34 35 35 36 clf() 36 subplot( 1,2,1) # plot the SANS calculation37 subplot(211) # plot the SANS calculation 37 38 plot(q,I,'k') 38 39 loglog(q,I) … … 55 56 PP=exp(th*Lambda**2/4/pi/pi*(G-G[0])); 56 57 57 subplot( 1,2,2)58 subplot(212) 58 59 plot(zz,PP,'k',label="Hankel transform") # Hankel transform 1D 59 60 xlabel('spin-echo length [nm]') … … 62 63 63 64 # Cosine transformation of 2D scattering patern 64 if True:65 if False: 65 66 qy,qz = meshgrid(q,q) 66 67 qr=R*sqrt(qy**2 + qz**2); # reuse variable names Hankel transform, but now 2D
Note: See TracChangeset
for help on using the changeset viewer.