Changeset df776db in sasmodels for sasmodels/kerneldll.py


Ignore:
Timestamp:
Jul 27, 2016 3:56:54 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:
739aad4
Parents:
8357f66 (diff), 63c6a08 (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 'polydisp': adds magnetism; some models still broken

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sasmodels/kerneldll.py

    r8357f66 rdf776db  
    272272        # int, int, int, int*, double*, double*, double*, double*, double 
    273273        argtypes = [c_int32]*3 + [c_void_p]*4 + [fp] 
    274         self._Iq = self._dll[generate.kernel_name(self.info, is_2d=False)] 
    275         self._Iqxy = self._dll[generate.kernel_name(self.info, is_2d=True)] 
    276         self._Iq.argtypes = argtypes 
    277         self._Iqxy.argtypes = argtypes 
     274        names = [generate.kernel_name(self.info, variant) 
     275                 for variant in ("Iq", "Iqxy", "Imagnetic")] 
     276        self._kernels = [self._dll[name] for name in names] 
     277        for k in self._kernels: 
     278            k.argtypes = argtypes 
    278279 
    279280    def __getstate__(self): 
     
    292293        if self._dll is None: 
    293294            self._load_dll() 
    294         kernel = self._Iqxy if q_input.is_2d else self._Iq 
     295        is_2d = len(q_vectors) == 2 
     296        kernel = self._kernels[1:3] if is_2d else [self._kernels[0]]*2 
    295297        return DllKernel(kernel, self.info, q_input) 
    296298 
     
    343345                     else np.float128) 
    344346 
    345     def __call__(self, call_details, values, cutoff): 
    346         # type: (CallDetails, np.ndarray, np.ndarray, float) -> np.ndarray 
    347  
    348         #print("in kerneldll") 
    349         #print("values", values) 
    350         start, stop = 0, call_details.pd_prod 
     347    def __call__(self, call_details, values, cutoff, magnetic): 
     348        # type: (CallDetails, np.ndarray, np.ndarray, float, bool) -> np.ndarray 
     349 
     350        kernel = self.kernel[1 if magnetic else 0] 
    351351        args = [ 
    352352            self.q_input.nq, # nq 
    353             start, # pd_start 
    354             stop, # pd_stop pd_stride[MAX_PD] 
     353            None, # pd_start 
     354            None, # pd_stop pd_stride[MAX_PD] 
    355355            call_details.buffer.ctypes.data, # problem 
    356356            values.ctypes.data,  #pars 
     
    358358            self.result.ctypes.data,   # results 
    359359            self.real(cutoff), # cutoff 
    360             ] 
    361         #print("calling DLL") 
    362         self.kernel(*args) # type: ignore 
    363         return self.result[:-1] 
     360        ] 
     361        #print("kerneldll values", values) 
     362        step = 100 
     363        for start in range(0, call_details.pd_prod, step): 
     364            stop = min(start+step, call_details.pd_prod) 
     365            args[1:3] = [start, stop] 
     366            #print("calling DLL") 
     367            kernel(*args) # type: ignore 
     368 
     369        #print("returned",self.q_input.q, self.result) 
     370        scale = values[0]/self.result[self.q_input.nq] 
     371        background = values[1] 
     372        #print("scale",scale,background) 
     373        return scale*self.result[:self.q_input.nq] + background 
    364374 
    365375    def release(self): 
Note: See TracChangeset for help on using the changeset viewer.