Skip to content
  • Danny Hindson's avatar
    Various improvements to CalculateMultipleScattering · 32e27165
    Danny Hindson authored
    These mainly affect the performance on a debug build but still helpful
    to assist in problem identification
    Fix a problem in InterpolateLogQuadratic where for point data the
    method wasn't handling x values more than halfway past the midpoint
    between two points and switch to using std::upper_bound
    Pass histogram around rather than workspace now that not relying on
    YIndexOfX method
    Prime the sample bounding box so there's no race condition in the
    multi-threaded part
    Create the Track in the return statement of generateInitialTrack to
    encourage the return value optimization to happen
    Pass the S(Q) histogram around rather than the full workspace
    Avoid calling the points() method because the underlying cow_ptr
    code involves an std::atomic_load that seems to degrade the performance
    when running with a lot of threads
    Fix bug in determining detector position (wrong index being used)
    Also change the way the seed is determined so the same seed is used for a particular
    spectrum regardless of how many other spectra are loaded based on the SpectrumMin and
    SpectrumMax settings of Load
    Make logging less verbose and some documentation improvements
    Also rename InterpolateLogQuadratic to InterpolateGaussian to better
    suggest what it's doing
    Stop output workspace overwriting existing workspaces
    Sort out logic for saving the output group workspace - force use of the ADS since
    we're naming the group member workspaces, and also cater for potential name clashes
    32e27165