Changeset aaf75b6 in sasmodels for sasmodels/direct_model.py


Ignore:
Timestamp:
Mar 30, 2016 2:39:42 PM (8 years ago)
Author:
Paul Kienzle <pkienzle@…>
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:
885ee37
Parents:
d0876c9d (diff), 364d8f7 (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.
Message:

Merge branch 'master' into polydisp

Conflicts:

sasmodels/direct_model.py

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sasmodels/direct_model.py

    r60eab2a raaf75b6  
    2525import numpy as np 
    2626 
     27from .core import make_kernel 
    2728from .core import call_kernel, call_ER_VR 
    2829from . import sesans 
     
    6263        elif hasattr(data, 'qx_data'): 
    6364            self.data_type = 'Iqxy' 
     65        elif getattr(data, 'oriented', False): 
     66            self.data_type = 'Iq-oriented' 
    6467        else: 
    6568            self.data_type = 'Iq' 
     
    113116                  and getattr(data, 'dxw', None) is not None): 
    114117                res = resolution.Slit1D(data.x[index], 
    115                                         width=data.dxh[index], 
    116                                         height=data.dxw[index]) 
     118                                        qx_width=data.dxw[index], 
     119                                        qy_width=data.dxl[index]) 
    117120            else: 
    118121                res = resolution.Perfect1D(data.x[index]) 
     
    120123            #self._theory = np.zeros_like(self.Iq) 
    121124            q_vectors = [res.q_calc] 
     125            q_mono = [] 
     126        elif self.data_type == 'Iq-oriented': 
     127            index = (data.x >= data.qmin) & (data.x <= data.qmax) 
     128            if data.y is not None: 
     129                index &= ~np.isnan(data.y) 
     130                Iq = data.y[index] 
     131                dIq = data.dy[index] 
     132            else: 
     133                Iq, dIq = None, None 
     134            if (getattr(data, 'dxl', None) is None 
     135                or getattr(data, 'dxw', None) is None): 
     136                raise ValueError("oriented sample with 1D data needs slit resolution") 
     137 
     138            res = resolution2d.Slit2D(data.x[index], 
     139                                      qx_width=data.dxw[index], 
     140                                      qy_width=data.dxl[index]) 
     141            q_vectors = res.q_calc 
    122142            q_mono = [] 
    123143        else: 
     
    139159        y = Iq + np.random.randn(*dy.shape) * dy 
    140160        self.Iq = y 
    141         if self.data_type == 'Iq': 
     161        if self.data_type in ('Iq', 'Iq-oriented'): 
    142162            self._data.dy[self.index] = dy 
    143163            self._data.y[self.index] = y 
     
    151171    def _calc_theory(self, pars, cutoff=0.0): 
    152172        if self._kernel is None: 
    153             self._kernel = self._model.make_kernel(self._kernel_inputs) 
    154             self._kernel_mono = ( 
    155                 self._model.make_kernel(self._kernel_mono_inputs) 
    156                 if self._kernel_mono_inputs else None 
    157             ) 
     173            self._kernel = make_kernel(self._model, self._kernel_inputs)  # pylint: disable=attribute-dedata_type 
     174            self._kernel_mono = (make_kernel(self._model, self._kernel_mono_inputs) 
     175                                 if self._kernel_mono_inputs else None) 
    158176 
    159177        Iq_calc = call_kernel(self._kernel, pars, cutoff=cutoff) 
    160         Iq_mono = (call_kernel(self._kernel_mono, pars, mono=True) 
    161                    if self._kernel_mono_inputs else None) 
     178        # TODO: may want to plot the raw Iq for other than oriented usans 
     179        self.Iq_calc = None 
    162180        if self.data_type == 'sesans': 
     181            Iq_mono = (call_kernel(self._kernel_mono, pars, mono=True) 
     182                       if self._kernel_mono_inputs else None) 
    163183            result = sesans.transform(self._data, 
    164184                                   self._kernel_inputs[0], Iq_calc,  
     
    166186        else: 
    167187            result = self.resolution.apply(Iq_calc) 
     188            if hasattr(self.resolution, 'nx'): 
     189                self.Iq_calc = ( 
     190                    self.resolution.qx_calc, self.resolution.qy_calc, 
     191                    np.reshape(Iq_calc, (self.resolution.ny, self.resolution.nx)) 
     192                ) 
    168193        return result         
    169194 
Note: See TracChangeset for help on using the changeset viewer.