Changeset aa4946b in sasmodels for sasmodels/direct_model.py


Ignore:
Timestamp:
Mar 11, 2015 9:15:40 PM (9 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:
af1d68c
Parents:
49d1d42f
Message:

refactor so kernels are loaded via core.load_model

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sasmodels/direct_model.py

    rf734e7d raa4946b  
    33import numpy as np 
    44 
    5 from .core import load_model_definition, make_kernel, call_kernel 
    6 from .core import load_model_cl as load_model 
    7 if load_model is None: 
    8     warnings.warn("unable to load opencl; using ctypes instead") 
    9     from .core import load_model_dll as load_model 
     5from .core import load_model_definition, load_model, make_kernel 
     6from .core import call_kernel, call_ER, call_VR 
    107 
    118class DirectModel: 
    12     def __init__(self, name, q_vectors, dtype='single'): 
     9    def __init__(self, name, q_vectors=None, dtype='single'): 
    1310        self.model_definition = load_model_definition(name) 
    1411        self.model = load_model(self.model_definition, dtype=dtype) 
    15         q_vectors = [np.ascontiguousarray(q,dtype=dtype) for q in q_vectors] 
    16         self.kernel = make_kernel(self.model, q_vectors) 
     12        if q_vectors is not None: 
     13            q_vectors = [np.ascontiguousarray(q,dtype=dtype) for q in q_vectors] 
     14            self.kernel = make_kernel(self.model, q_vectors) 
    1715    def __call__(self, **pars): 
    1816        return call_kernel(self.kernel, pars) 
     17    def ER(self, **pars): 
     18        return call_ER(self.model.info, pars) 
     19    def VR(self, **pars): 
     20        return call_VR(self.model.info, pars) 
    1921 
    2022def demo(): 
     
    2426        sys.exit(1) 
    2527    model_name = sys.argv[1] 
    26     values = [float(v) for v in sys.argv[2].split(',')] 
    27     if len(values) == 1: 
    28         q = values[0] 
    29         q_vectors = [[q]] 
    30     elif len(values) == 2: 
    31         qx,qy = values 
    32         q_vectors = [[qx],[qy]] 
     28    call = sys.argv[2].upper() 
     29    if call in ("ER","VR"): 
     30        q_vectors = None 
    3331    else: 
    34         print "use q or qx,qy" 
    35         sys.exit(1) 
     32        values = [float(v) for v in sys.argv[2].split(',')] 
     33        if len(values) == 1: 
     34            q = values[0] 
     35            q_vectors = [[q]] 
     36        elif len(values) == 2: 
     37            qx,qy = values 
     38            q_vectors = [[qx],[qy]] 
     39        else: 
     40            print "use q or qx,qy or ER or VR" 
     41            sys.exit(1) 
    3642    model = DirectModel(model_name, q_vectors) 
    3743    pars = dict((k,float(v)) 
    3844                for pair in sys.argv[3:] 
    3945                for k,v in [pair.split('=')]) 
    40     Iq = model(**pars) 
    41     print Iq[0] 
     46    if call == "ER": 
     47        print model.ER(**pars) 
     48    elif call == "VR": 
     49        print model.VR(**pars) 
     50    else: 
     51        Iq = model(**pars) 
     52        print Iq[0] 
    4253 
    4354if __name__ == "__main__": 
Note: See TracChangeset for help on using the changeset viewer.