Changeset ea75043 in sasmodels for sasmodels/direct_model.py


Ignore:
Timestamp:
Mar 29, 2016 6:22:13 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:
d6f5da6
Parents:
1d61d07
Message:

add support for oriented usans using direct 2d resolution integral

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sasmodels/direct_model.py

    r02e70ff rea75043  
    6363        elif hasattr(data, 'qx_data'): 
    6464            self.data_type = 'Iqxy' 
     65        elif getattr(data, 'oriented', False): 
     66            self.data_type = 'Iq-oriented' 
    6567        else: 
    6668            self.data_type = 'Iq' 
     
    116118                  and getattr(data, 'dxw', None) is not None): 
    117119                res = resolution.Slit1D(data.x[index], 
    118                                         width=data.dxh[index], 
    119                                         height=data.dxw[index]) 
     120                                        qx_width=data.dxw[index], 
     121                                        qy_width=data.dxl[index]) 
    120122            else: 
    121123                res = resolution.Perfect1D(data.x[index]) 
     
    123125            #self._theory = np.zeros_like(self.Iq) 
    124126            q_vectors = [res.q_calc] 
     127            q_mono = [] 
     128        elif self.data_type == 'Iq-oriented': 
     129            index = (data.x >= data.qmin) & (data.x <= data.qmax) 
     130            if data.y is not None: 
     131                index &= ~np.isnan(data.y) 
     132                Iq = data.y[index] 
     133                dIq = data.dy[index] 
     134            else: 
     135                Iq, dIq = None, None 
     136            if (getattr(data, 'dxl', None) is None 
     137                or getattr(data, 'dxw', None) is None): 
     138                raise ValueError("oriented sample with 1D data needs slit resolution") 
     139 
     140            res = resolution2d.Slit2D(data.x[index], 
     141                                      qx_width=data.dxw[index], 
     142                                      qy_width=data.dxl[index]) 
     143            q_vectors = res.q_calc 
    125144            q_mono = [] 
    126145        else: 
     
    142161        y = Iq + np.random.randn(*dy.shape) * dy 
    143162        self.Iq = y 
    144         if self.data_type == 'Iq': 
     163        if self.data_type in ('Iq', 'Iq-oriented'): 
    145164            self._data.dy[self.index] = dy 
    146165            self._data.y[self.index] = y 
     
    155174        if self._kernel is None: 
    156175            self._kernel = make_kernel(self._model, self._kernel_inputs)  # pylint: disable=attribute-dedata_type 
    157             self._kernel_mono = make_kernel(self._model, self._kernel_mono_inputs) if self._kernel_mono_inputs else None 
     176            self._kernel_mono = (make_kernel(self._model, self._kernel_mono_inputs) 
     177                                 if self._kernel_mono_inputs else None) 
    158178 
    159179        Iq_calc = call_kernel(self._kernel, pars, cutoff=cutoff) 
    160         Iq_mono = call_kernel(self._kernel_mono, pars, mono=True) if self._kernel_mono_inputs else None 
     180        # TODO: may want to plot the raw Iq for other than oriented usans 
     181        self.Iq_calc = None 
    161182        if self.data_type == 'sesans': 
     183            Iq_mono = (call_kernel(self._kernel_mono, pars, mono=True) 
     184                       if self._kernel_mono_inputs else None) 
    162185            result = sesans.transform(self._data, 
    163186                                   self._kernel_inputs[0], Iq_calc,  
     
    165188        else: 
    166189            result = self.resolution.apply(Iq_calc) 
     190            if hasattr(self.resolution, 'nx'): 
     191                self.Iq_calc = ( 
     192                    self.resolution.qx_calc, self.resolution.qy_calc, 
     193                    np.reshape(Iq_calc, (self.resolution.ny, self.resolution.nx)) 
     194                ) 
    167195        return result         
    168196 
Note: See TracChangeset for help on using the changeset viewer.