Changeset 8698a0d in sasmodels for sasmodels/direct_model.py


Ignore:
Timestamp:
Oct 17, 2017 9:53:01 PM (7 years ago)
Author:
Paul Kienzle <pkienzle@…>
Branches:
master, core_shell_microgels, magnetic_model, ticket-1257-vesicle-product, ticket_1156, ticket_1265_superball, ticket_822_more_unit_tests
Children:
32f87a5
Parents:
becded3
git-author:
Paul Kienzle <pkienzle@…> (10/17/17 16:23:09)
git-committer:
Paul Kienzle <pkienzle@…> (10/17/17 21:53:01)
Message:

revise api for oriented shapes, allowing jitter in the frame of the sample

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sasmodels/direct_model.py

    rd1ff3a5 r8698a0d  
    6666 
    6767    #print("pars",[p.id for p in parameters.call_parameters]) 
    68     vw_pairs = [(get_weights(p, pars) if active(p.name) 
    69                  else ([pars.get(p.name, p.default)], [1.0])) 
    70                 for p in parameters.call_parameters] 
    71  
    72     call_details, values, is_magnetic = make_kernel_args(calculator, vw_pairs) 
     68    mesh = [get_weights(p, pars, active(p.name)) 
     69            for p in parameters.call_parameters] 
     70 
     71    call_details, values, is_magnetic = make_kernel_args(calculator, mesh) 
    7372    #print("values:", values) 
    7473    return calculator(call_details, values, cutoff, is_magnetic) 
     
    130129 
    131130 
    132 def get_weights(parameter, values): 
     131def get_weights(parameter, values, active=True): 
    133132    # type: (Parameter, Dict[str, float]) -> Tuple[np.ndarray, np.ndarray] 
    134133    """ 
     
    140139    """ 
    141140    value = float(values.get(parameter.name, parameter.default)) 
    142     relative = parameter.relative_pd 
    143     limits = parameter.limits 
    144     disperser = values.get(parameter.name+'_pd_type', 'gaussian') 
    145141    npts = values.get(parameter.name+'_pd_n', 0) 
    146142    width = values.get(parameter.name+'_pd', 0.0) 
    147     nsigma = values.get(parameter.name+'_pd_nsigma', 3.0) 
    148     if npts == 0 or width == 0: 
    149         return [value], [1.0] 
    150     value, weight = weights.get_weights( 
    151         disperser, npts, width, nsigma, value, limits, relative) 
    152     return value, weight / np.sum(weight) 
     143    if npts == 0 or width == 0 or not active: 
     144        # Note: orientation parameters have the viewing angle as the parameter 
     145        # value and the jitter in the distribution, so be sure to set the 
     146        # empty pd for orientation parameters to 0. 
     147        pd = [value if parameter.type != 'orientation' else 0.0], [1.0] 
     148    else: 
     149        relative = parameter.relative_pd 
     150        limits = parameter.limits 
     151        disperser = values.get(parameter.name+'_pd_type', 'gaussian') 
     152        nsigma = values.get(parameter.name+'_pd_nsigma', 3.0) 
     153        pd = weights.get_weights(disperser, npts, width, nsigma, 
     154                                value, limits, relative) 
     155    return value, pd[0], pd[1] 
    153156 
    154157 
Note: See TracChangeset for help on using the changeset viewer.