Skip to content
  • DannyHindson's avatar
    Create new multiple scattering algorithm based on Muscat (#31078) · 76b48742
    DannyHindson authored
    * Add algorithm using initial files from Spencer
    
    * Replace tabs with spaces so algorithm runs
    
    * Added further comments and adjustments around geometry logic
    
    * Further updates and clarification comments
    
    Added comment to explain use of Rodrigues formula in _q_dir
    Changed formula used for _vl in _start_point to match approach in Fortran code
    and also approach in Mancinelli paper
    Added validation on the fixed input wavelength to ensure it doesn't give qmax
    smaller than the q range in the input workspace
    Added comment to explain 4, 27, 16*16 factors when dividing by QSSum
    
    * Initial C++ version of MuscatElastic algorithm files
    
    * Further work on converting Muscat to C++
    
    * More work on C++ algorithm
    
    * Further work on multiple scattering algorithms/MuscatElastic-v1
    
    Add some further validations to input workspaces
    Fix problem with calculation of new cos two theta
    
    * Fix up event and nscatter loops
    
    * Add additional comment next to mystery factors
    
    * Fix situations where zero track intercepts
    
    * Further work on multiple scattering algorithm
    
    Performance enhancements:
    - make LineIntersectVisit use boost small vector
    - improve the Cylinder::side function by removing the divide by radius and
    replacing with a multiplication
    
    More work onn the algorithm including fixing a few bugs and creation of
    output workspace
    
    * More work on Muscat algorithm
    
    Output workspace group for all scattering orders
    
    Set exp factor to 1 for final track segment if doing J1* calculation
    Achieve this by setting mu equal to zero (note DISCUS manual suggests
    this is achieved by setting path length to zero but end result is same)
    
    Move call to new_vector inside the the simulateEvents method so that
    sigma_total is recalculated with zero absorption correction for the
    J1* case. Will probably also call new_vector more often for inelastic
    version of algorithm in future
    
    * Various changes
    
    Change input workspace units to be wavelength
    Apply equal bins checker to S(Q) workspace and SigmaS
    Fix bug in reading kinc from input WS
    Fix problem with yIndexOfX call with point data
    
    * Couple of small adjustments to align better with python results
    
    Fix couple of bugs in S(Q) interpolation and adjust code for changes to yIndexOfX method
    
    * Various minor improvements and fixes
    
    Fix bug in q_dir where track was being passed by value instead of by ref
    Add comment to python version about q width estimate not being accurate
    Stop updating SOfQ input workspace when running algorithm
    
    * Initial work on unit tests and documentation
    
    * Fill out documentation on MuscatElastic
    
    * Remove maxweight determination to clean up diff
    
    * Changes to tidy up the diff
    
    * Remove normalisation of S(Q) after email exchange with Spencer
    
    * Implement sparse instrument functionality in Muscat
    
    Also add emode switch in anticipation of adding inelastic flavour
    
    * Tidy up interpolation logic
    
    * Update documentation and rename algorithm to Muscat
    
    * Add release note
    
    * Fix failing GeometryTest compilation errors and Doxygen errors
    
    * Couple of changes
    
    Add unit test on interpolateLogQuadratic method
    Update docs as requested by Spencer
    
    * Various changes
    
    Fill out Muscat unit tests to cover interpolation scenarios
    Make it possible to turn off error calculation in InterpolationOption class
    Pull out the Rodrigues formula into updateTrackDirection method to make it
    easier to write targeted unit test on it
    Fix bug in updateTrackDirection where x, y, z coordinates where transposed
    Fix minor glitch in lambda step size calculation when wavelength interpolation
    is turned on
    
    * Fix Doxygen warning and compilation error (OSX)
    
    * Revert factor 0.5 in side method
    
    * Fix linux compiler warnings
    
    * Incorporate review comments
    
    Add various const qualifiers
    Remove original python version of algorithm (MuscatElasticReactor) that was present
    just for validation of the new C++ version
    
    * Incorporate gatekeeper feedback from Martyn
    
    Change algorithm name from Muscat to CalculateMultipleScattering
    Add alias Muscat to the algorithm
    Add warning saying algorithm is still in beta testing phase
    76b48742