Changes in / [6a729a2:3271e20] in sasmodels
- Files:
-
- 1 added
- 3 deleted
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
compare.py
r373d1b6 r87fce00 301 301 ] 302 302 303 def get_demo_pars(name):304 import sasmodels.models305 __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 pars310 311 303 def main(): 312 304 opts = [arg for arg in sys.argv[1:] if arg.startswith('-')] … … 330 322 # if model does not define demo parameters 331 323 name = args[0] 332 pars = get_demo_pars(name) 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) 333 329 334 330 Nopencl = int(args[1]) if len(args) > 1 else 5 -
sasmodels/bumps_model.py
rc97724e rf786ff3 4 4 import sys, os 5 5 import datetime 6 7 from sasmodels import sesans8 6 9 7 # CRUFT python 2.6 … … 215 213 #plt.axhline(-1, color='black', ls='--',lw=1, hold=True) 216 214 217 def _plot_sesans(data, theory, view):218 import matplotlib.pyplot as plt219 resid = (theory - data.data)/data.err_data220 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')229 215 230 216 def _plot_result2D(data, theory, view): … … 244 230 plt.colorbar() 245 231 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 246 242 class BumpsModel(object): 247 243 """ … … 267 263 self.model = model 268 264 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'275 265 276 266 partype = model.info['partype'] 277 267 278 268 # interpret 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': 269 if hasattr(data, 'qx_data'): 287 270 self.index = (data.mask==0) & (~np.isnan(data.data)) 288 271 self.iq = data.data[self.index] … … 293 276 else: 294 277 q_vectors = [data.qx_data, data.qy_data] 295 el if self.data_type == 'Iq':278 else: 296 279 self.index = (data.x>=data.qmin) & (data.x<=data.qmax) & ~np.isnan(data.y) 297 280 self.iq = data.y[self.index] … … 299 282 self._theory = np.zeros_like(data.y) 300 283 q_vectors = [data.x] 301 else:302 raise ValueError("Unknown data type") # never gets here303 284 304 285 # Remember function inputs so we can delay loading the function and … … 352 333 self._theory[self.index] = self._fn(pars, pd_pars, self.cutoff) 353 334 #self._theory[:] = self._fn.eval(pars, pd_pars) 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 335 self._cache['theory'] = self._theory 361 336 return self._cache['theory'] 362 337 … … 374 349 375 350 def plot(self, view='log'): 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") 351 plot_result(self.data, self.theory(), view=view) 406 352 407 353 def save(self, basename): -
sesansdemo.py
rc97724e r10576d1 10 10 11 11 # q-range parameters 12 13 12 q = arange(0.0003, 1.0, 0.0003); # [nm^-1] range wide enough for Hankel transform 14 13 dq=(q[1]-q[0])*1e9; # [m^-1] step size in q, needed for integration … … 35 34 36 35 clf() 37 subplot( 211) # plot the SANS calculation36 subplot(1,2,1) # plot the SANS calculation 38 37 plot(q,I,'k') 39 38 loglog(q,I) … … 56 55 PP=exp(th*Lambda**2/4/pi/pi*(G-G[0])); 57 56 58 subplot( 212)57 subplot(1,2,2) 59 58 plot(zz,PP,'k',label="Hankel transform") # Hankel transform 1D 60 59 xlabel('spin-echo length [nm]') … … 63 62 64 63 # Cosine transformation of 2D scattering patern 65 if False:64 if True: 66 65 qy,qz = meshgrid(q,q) 67 66 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.