source: sasmodels/example/sesansfit.py @ 934f906

core_shell_microgelscostrafo411magnetic_modelrelease_v0.94release_v0.95ticket-1257-vesicle-productticket_1156ticket_1265_superballticket_822_more_unit_tests
Last change on this file since 934f906 was 170ea69, checked in by krzywon, 9 years ago

Resolving path issues with SESANS script

  • Property mode set to 100644
File size: 3.1 KB
RevLine 
[a98958b]1from bumps.names import *
[a06430c]2from sasmodels import core, bumps_model, sesans
[170ea69]3from sas.sascalc.dataloader.loader import Loader
[0a33675]4
[a98958b]5HAS_CONVERTER = True
6try:
7    from sas.sascalc.data_util.nxsunit import Converter
8except ImportError:
9    HAS_CONVERTER = False
10
[02e70ff]11
[84db7a5]12def get_bumps_model(model_name):
13    kernel = core.load_model(model_name)
14    model = bumps_model.Model(kernel)
15    return model
[0ac3db5]16
[5bb9c79]17def sesans_fit(file, model, initial_vals={}, custom_params={}, param_range=[], acceptance_angle=None):
[02e70ff]18    """
19
[a98958b]20    @param file: SESANS file location
[84db7a5]21    @param model: Bumps model object or model name - can be model, model_1 * model_2, and/or model_1 + model_2
[a98958b]22    @param initial_vals: dictionary of {param_name : initial_value}
23    @param custom_params: dictionary of {custom_parameter_name : Parameter() object}
24    @param param_range: dictionary of {parameter_name : [minimum, maximum]}
[84db7a5]25    @param constraints: dictionary of {parameter_name : constraint}
[a98958b]26    @return: FitProblem for Bumps usage
27    """
28    try:
29        loader = Loader()
30        data = loader.load(file)
31        if data is None: raise IOError("Could not load file %r"%(file))
32        if HAS_CONVERTER == True:
33            default_unit = "A"
34            data_conv_q = Converter(data._xunit)
[84db7a5]35            for x in data.x:
36                print x
[a98958b]37            data.x = data_conv_q(data.x, units=default_unit)
[84db7a5]38            for x in data.x:
39                print x
[a98958b]40            data._xunit = default_unit
[e806077]41
[a98958b]42    except:
43        # If no loadable data file, generate random data
44        SElength = np.linspace(0, 2400, 61) # [A]
45        data = np.ones_like(SElength)
46        err_data = np.ones_like(SElength)*0.03
[0ac3db5]47
[a98958b]48        class Sample:
49            zacceptance = 0.1 # [A^-1]
50            thickness = 0.2 # [cm]
[c97724e]51
[a98958b]52        class SESANSData1D:
53            #q_zmax = 0.23 # [A^-1]
54            lam = 0.2 # [nm]
55            x = SElength
56            y = data
57            dy = err_data
58            sample = Sample()
[02e70ff]59            needs_all_q = acceptance_angle is not None
[a98958b]60        data = SESANSData1D()
[170ea69]61        data.acceptance_angle = acceptance_angle
[9c117a2]62
[170ea69]63    data.needs_all_q = acceptance_angle is not None
[84db7a5]64    if "radius" in initial_vals:
65        radius = initial_vals.get("radius")
66    else:
67        radius = 1000
[a98958b]68    data.Rmax = 3*radius # [A]
[e806077]69
[84db7a5]70    if isinstance(model, basestring):
71        model = get_bumps_model(model)
[346bc88]72
[84db7a5]73    # Load custom parameters, initial values and parameter ranges
[a98958b]74    for k, v in custom_params.items():
75        setattr(model, k, v)
76        model._parameter_names.append(k)
77    for k, v in initial_vals.items():
78        param = model.parameters().get(k)
79        setattr(param, "value", v)
80    for k, v in param_range.items():
81        param = model.parameters().get(k)
82        if param is not None:
83            setattr(param.bounds, "limits", v)
[346bc88]84
[84db7a5]85    if False: # for future implementation
[a98958b]86        M_sesans = bumps_model.Experiment(data=data, model=model)
87        M_sans = bumps_model.Experiment(data=sans_data, model=model)
88        problem = FitProblem([M_sesans, M_sans])
89    else:
90        M_sesans = bumps_model.Experiment(data=data, model=model)
91        problem = FitProblem(M_sesans)
92    return problem
Note: See TracBrowser for help on using the repository browser.