Changeset 9f7fbd9 in sasview for src/sas/models/qsmearing.py


Ignore:
Timestamp:
Mar 24, 2015 3:28:54 PM (9 years ago)
Author:
Paul Kienzle <pkienzle@…>
Branches:
master, ESS_GUI, ESS_GUI_Docs, ESS_GUI_batch_fitting, ESS_GUI_bumps_abstraction, ESS_GUI_iss1116, ESS_GUI_iss879, ESS_GUI_iss959, ESS_GUI_opencl, ESS_GUI_ordering, ESS_GUI_sync_sascalc, costrafo411, magnetic_scatt, release-4.1.1, release-4.1.2, release-4.2.2, release_4.0.1, ticket-1009, ticket-1094-headless, ticket-1242-2d-resolution, ticket-1243, ticket-1249, ticket885, unittest-saveload
Children:
66f21cd
Parents:
0efb04d
Message:

rewrite slit smearing for usans

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/sas/models/qsmearing.py

    rfd5ac0d r9f7fbd9  
    8181    # If we found slit smearing data, return a slit smearer 
    8282    if _found_slit == True: 
    83         return SlitSmearer(data1D, model) 
     83        return PySlitSmearer(data1D, model) 
    8484    return None 
    8585             
     
    583583    return nbins_low, nbins_high, \ 
    584584             new_width[data_x_ext > 0], data_x_ext[data_x_ext > 0] 
     585 
     586 
     587 
     588from .resolution import Slit1D 
     589class PySlitSmearer(object): 
     590    def __init__(self, data1D, model = None): 
     591        self.model = model 
     592 
     593        q = data1D.x 
     594        width = data1D.dxw if data1D.dxw is not None else 0 
     595        height = data1D.dxl if data1D.dxl is not None else 0 
     596        # TODO: width and height seem to be reversed 
     597        self.resolution = Slit1D(q, height, width) 
     598 
     599    def __call__(self, iq_in, first_bin=0, last_bin=None): 
     600        if last_bin is None or last_bin >= len(iq_in): 
     601            last_bin = len(iq_in) - 1 
     602        q_calc = self.resolution.q_calc 
     603        iq_calc = numpy.empty_like(q_calc) 
     604        iq_calc[:first_bin] = 0 
     605        iq_calc[first_bin:last_bin+1] = iq_in 
     606        if last_bin < len(q_calc)-1: 
     607            iq_calc[last_bin:] = self.model.evalDistribution(q_calc[last_bin:]) 
     608        iq_out = self.resolution.apply(iq_calc) 
     609        return iq_out[first_bin:last_bin+1] 
     610 
     611    def get_bin_range(self, q_min=None, q_max=None): 
     612        """ 
     613 
     614        :param q_min: minimum q-value to smear 
     615        :param q_max: maximum q-value to smear 
     616 
     617        """ 
     618        # assume the data values are sorted 
     619        first = numpy.searchsorted(self.resolution.q, q_min) 
     620        # assume that the resolution is much larger than the q range 
     621        last = len(self.resolution.q)-1 
     622        return first, last 
Note: See TracChangeset for help on using the changeset viewer.