source: sasmodels/sasmodels/direct_model.py @ a5d0d00

core_shell_microgelscostrafo411magnetic_modelrelease_v0.94release_v0.95ticket-1257-vesicle-productticket_1156ticket_1265_superballticket_822_more_unit_tests
Last change on this file since a5d0d00 was f734e7d, checked in by pkienzle, 9 years ago

restructure c code generation for maintainability; extend test harness to allow opencl and ctypes tests

  • Property mode set to 100644
File size: 1.4 KB
Line 
1import warnings
2
3import numpy as np
4
5from .core import load_model_definition, make_kernel, call_kernel
6from .core import load_model_cl as load_model
7if load_model is None:
8    warnings.warn("unable to load opencl; using ctypes instead")
9    from .core import load_model_dll as load_model
10
11class DirectModel:
12    def __init__(self, name, q_vectors, dtype='single'):
13        self.model_definition = load_model_definition(name)
14        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)
17    def __call__(self, **pars):
18        return call_kernel(self.kernel, pars)
19
20def demo():
21    import sys
22    if len(sys.argv) < 3:
23        print "usage: python -m sasmodels.direct_model modelname (q|qx,qy) par=val ..."
24        sys.exit(1)
25    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]]
33    else:
34        print "use q or qx,qy"
35        sys.exit(1)
36    model = DirectModel(model_name, q_vectors)
37    pars = dict((k,float(v))
38                for pair in sys.argv[3:]
39                for k,v in [pair.split('=')])
40    Iq = model(**pars)
41    print Iq[0]
42
43if __name__ == "__main__":
44    demo()
Note: See TracBrowser for help on using the repository browser.