Index: .gitignore
===================================================================
--- .gitignore	(revision 1b605fb2e0c1caf11caf0de26137a4e61df878f6)
+++ .gitignore	(revision 153b75a64d88ad8b0597c08dada6ae0ca20c08d1)
@@ -34,9 +34,4 @@
 /docs/sphinx-docs/build
 /docs/sphinx-docs/source-temp
-/docs/sphinx-docs/source/dev/api
-/docs/sphinx-docs/source/user/guiframe
-/docs/sphinx-docs/source/user/models
-/docs/sphinx-docs/source/user/sasview
-/docs/sphinx-docs/source/user/perspectives
 /docs/sphinx-docs/katex*.zip
 /docs/sphinx-docs/node_modules
Index: LICENSE.TXT
===================================================================
--- LICENSE.TXT	(revision a3e3ef589b5480f01cfe7c9d68b47e807fa7f49c)
+++ LICENSE.TXT	(revision 0347c89548bfa290a2a6d55486e8885f15a16a35)
@@ -1,3 +1,3 @@
-Copyright (c) 2009-2017, SasView Developers
+Copyright (c) 2009-2018, SasView Developers
 All rights reserved.
 
Index: docs/sasview/.gitignore
===================================================================
--- docs/sasview/.gitignore	(revision 356af60ef4067ec412316b5d0ea7e787955d8487)
+++ docs/sasview/.gitignore	(revision 356af60ef4067ec412316b5d0ea7e787955d8487)
@@ -0,0 +1,1 @@
+/README.txt
Index: docs/sasview/README.txt
===================================================================
--- docs/sasview/README.txt	(revision 356af60ef4067ec412316b5d0ea7e787955d8487)
+++ docs/sasview/README.txt	(revision 356af60ef4067ec412316b5d0ea7e787955d8487)
@@ -0,0 +1,4 @@
+The files in this folder are **not** shipped with the installer version of SasView.
+
+The Tutorial.pdf file here should be manually copied to /sasview/src/sas/sasview/media 
+whenever it is updated.
Index: docs/sphinx-docs/build_sphinx.py
===================================================================
--- docs/sphinx-docs/build_sphinx.py	(revision df724752143d7fe3872f462fc4837fcb889ebad9)
+++ docs/sphinx-docs/build_sphinx.py	(revision 153b75a64d88ad8b0597c08dada6ae0ca20c08d1)
@@ -8,12 +8,10 @@
 from __future__ import print_function
 
-import subprocess
+import sys
 import os
 from os.path import join as joinpath, abspath, dirname, isdir, exists, relpath
-import sys
-import fnmatch
 import shutil
+import subprocess
 import imp
-
 from glob import glob
 from distutils.dir_util import copy_tree
@@ -21,8 +19,5 @@
 from distutils.spawn import find_executable
 
-from shutil import copy
-from os import listdir
-
-platform = '.%s-%s'%(get_platform(),sys.version[:3])
+PLATFORM = '.%s-%s'%(get_platform(), sys.version[:3])
 
 # sphinx paths
@@ -35,5 +30,5 @@
 SASVIEW_ROOT = joinpath(SPHINX_ROOT, '..', '..')
 SASVIEW_DOCS = joinpath(SPHINX_ROOT, "source")
-SASVIEW_BUILD = abspath(joinpath(SASVIEW_ROOT, "build", "lib"+platform))
+SASVIEW_BUILD = abspath(joinpath(SASVIEW_ROOT, "build", "lib"+PLATFORM))
 SASVIEW_MEDIA_SOURCE = joinpath(SASVIEW_ROOT, "src", "sas")
 SASVIEW_DOC_TARGET = joinpath(SASVIEW_BUILD, "doc")
@@ -65,15 +60,13 @@
 
 def inplace_change(filename, old_string, new_string):
-# Thanks to http://stackoverflow.com/questions/4128144/replace-string-within-file-contents
-        s=open(filename).read()
-        if old_string in s:
-                print('Changing "{old_string}" to "{new_string}"'.format(**locals()))
-                s=s.replace(old_string, new_string)
-                f=open(filename, 'w')
-                f.write(s)
-                f.flush()
-                f.close()
-        else:
-                print('No occurences of "{old_string}" found.'.format(**locals()))
+    # Thanks to http://stackoverflow.com/questions/4128144/replace-string-within-file-contents
+    s = open(filename).read()
+    if old_string in s:
+        print('Changing "{old_string}" to "{new_string}"'.format(**locals()))
+        s = s.replace(old_string, new_string)
+        with open(filename, 'w') as f:
+            f.write(s)
+    else:
+        print('No occurences of "{old_string}" found.'.format(**locals()))
 
 def _remove_dir(dir_path):
@@ -241,6 +234,6 @@
         finally:
             fd_in.close()
-    with ZipFile(cache_path) as zip:
-        zip.extractall(destination)
+    with ZipFile(cache_path) as archive:
+        archive.extractall(destination)
 
 def convert_katex():
Index: docs/sphinx-docs/source/conf.py
===================================================================
--- docs/sphinx-docs/source/conf.py	(revision f1d48e95a251680027bcec129c281bec220c1da0)
+++ docs/sphinx-docs/source/conf.py	(revision b229a3bf14cf52237670dc67090e092cbe9939db)
@@ -11,4 +11,5 @@
 # All configuration values have a default; values that are commented out
 # serve to show the default.
+from __future__ import print_function
 
 import sys, os, collections
@@ -22,6 +23,6 @@
 sys.path.insert(0, build_lib)
 sys.path.insert(0, os.path.abspath('_extensions')) # for sphinx extensions
-print "-- path --"
-print "\n".join(sys.path)
+print("-- path --")
+print("\n".join(sys.path))
 
 # -- General configuration -----------------------------------------------------
@@ -71,5 +72,5 @@
 # General information about the project.
 project = u'SasView'
-copyright = u'2017, The SasView Project'
+copyright = u'2018, The SasView Project'
 
 # The version info for the project you're documenting, acts as replacement for
Index: docs/sphinx-docs/source/index.rst
===================================================================
--- docs/sphinx-docs/source/index.rst	(revision 5a73356a9ee08ca3ab4f46b20ecd98c72b3a0842)
+++ docs/sphinx-docs/source/index.rst	(revision 912e645f5762546487a4f47a64566e91d63fc3eb)
@@ -10,5 +10,8 @@
    :maxdepth: 1
 
-   User Documentation <user/user>
+   USER DOCUMENTATION <user/user>
 
-   Developer Documentation <dev/dev>
+   DEVELOPER DOCUMENTATION <dev/dev>
+   
+   Release Notes <user/RELEASE>
+   
Index: docs/sphinx-docs/source/rst_prolog
===================================================================
--- docs/sphinx-docs/source/rst_prolog	(revision 1659f54b83a4ef1858ffda40170e4ea6d4e03ca9)
+++ docs/sphinx-docs/source/rst_prolog	(revision 153b75a64d88ad8b0597c08dada6ae0ca20c08d1)
@@ -1,2 +1,4 @@
+.. TODO: This file is ignored!  Prolog comes from sasmodels/doc/rst_prolog.
+
 .. Set up some substitutions to make life easier...
 
Index: docs/sphinx-docs/source/user/RELEASE.rst
===================================================================
--- docs/sphinx-docs/source/user/RELEASE.rst	(revision 8ac05a59a0078f40fc8af4febae16624b9d5c818)
+++ docs/sphinx-docs/source/user/RELEASE.rst	(revision 8ac05a59a0078f40fc8af4febae16624b9d5c818)
@@ -0,0 +1,874 @@
+Release Notes
+=============
+
+.. note:: In Windows use [Alt]-[Cursor left] to return to the previous page
+
+.. toctree::
+   :maxdepth: 1
+
+Features
+========
+
+New in Version 4.2.0
+--------------------
+This release heralds many improvements and a host of bug fixes, along with
+some significant changes from previous versions. Further, as promised, it
+marks the end of support for 32 bit operating systems and is only
+available for 64 bit operating systems.
+
+With this version the change to the new model API and plugins infrastructure
+begun with 4.0 is essentially complete (though extensions are in the works
+and more are likely they should remain backwardly compatible with previous
+versions of SasView).
+
+.. warning:: Old-style plugin models, including old sum|multiply models will continue
+             to be supported (i.e. SasView will be able to run them) in 4.x. However,
+             the expectation is that such support will be removed in 5.0 and everyone
+             is strongly encouraged to convert their custom models to the new API.
+
+Finally, the changes to orientation angles and orientational distribution
+definitions are now also complete.
+
+Changes
+^^^^^^^
+* The infrastucture for calculating 2D patterns from 3D orientated objects
+  has been totally re-factored. It is now more accurate and consistent
+  across models.
+* The way that SasView defines the orientation of anisometric and
+  aligned objects has been completely overhauled. It now differs from
+  previous versions.
+* Plugin models, including sum|multiply models, have completely migrated
+  to the new infrastructure. NOTE that 3.x type models as well as early,
+  intermediate 4.x type models, including those generated by sum|multiply
+  will continue to be supported in 4.x but will likely no longer be
+  supported after the move to 5.0.  Users are strongly encouraged to
+  migrate any custom models.
+* The NeXus loader has been removed as it is superseded by the NXcanSAS
+  standard loader and SasView does not support the treatment of raw
+  data.
+
+Improvements
+^^^^^^^^^^^^
+* The accuracy/speed of some numerical integrations have been improved.
+* An orientation viewer tool has been introduced to assist in
+  understanding the new orientation framework.
+* Problems with the computation of magnetic scattering from some
+  objects have been rectified. Some questions remain however.
+* The known issue with the core_shell_parallelepiped model is now fixed.
+* A number of issues and inconsistencies with the creation of
+  sum|multiply models have been rectified.
+* A Boltzmann distribution has been added for polydispersity/orientational
+  distributions.
+* Some batch slicing options have been introduced.
+* Correlation function analysis now computes both the 1D and 3D functions.
+* There are several data loading improvements.
+* There are several improvements to Save/Load Project.
+* There have been numerous other bug fixes.
+
+Documentation
+^^^^^^^^^^^^^
+Several sections of the help documentation have undergone significant
+checking and updating, particularly those relating to orientation,
+magnetic scattering, and polydispersity distributions. Detailed
+advanced instructions for plugin writing and some scripting
+instructions have been added.
+
+Other Work
+^^^^^^^^^^
+* A Third-Party initiative has recently succeeded in getting SasView to
+  run on Debian. More details at
+  http://trac.sasview.org/wiki/DevNotes/Projects/Debian
+* With this release we have started to prepare for the inevitable move
+  to Python 3, which will occur with the release of 5.0
+* SasView 5.0 is currently in development. The two most significant
+  features of this version will be (i) a move away from the present
+  WxPython GUIs to new, completely rewritten, Qt5 GUIs, and
+  (ii)implementation of the Beta-approximation for S(Q). Subject to
+  resources, some limited access to the latter functionality may be
+  available in a future SasView 4.x release.
+
+Bug Fixes
+^^^^^^^^^
+* Fixes # 260: Box integration does not update when entering values in dialog
+* Fixes # 446: Saving plot as PGF (not PDF!) format throws error
+* Fixes # 467: Extend batch functionality to slicer
+* Fixes # 489: ABS reader (NIST 1D) does not handle negative dx properly (USANS slit smearing)
+* Fixes # 499: create sin(x)/x, 2*J1(x)/x and 3*j1(x)/x functions
+* Fixes # 510: Build PDF documentation along with HTML
+* Fixes # 525: Add GUI category defaults to models in sasmodels
+* Fixes # 579: clean up sasview directory
+* Fixes # 597: Need to document Combine Batch Fit
+* Fixes # 645: GUI logic problem in Batch vs single fit mode
+* Fixes # 648: Need to allow user input background value in Pr perspective
+* Fixes # 685: Fix data upload to marketplace
+* Fixes # 695: linear slope in onion model
+* Fixes # 735: Review new Corfunc documentation
+* Fixes # 741: Recalculate P(Q) and S(Q) components on model update.
+* Fixes # 767: Sum/Product Models don't do what they should
+* Fixes # 776: angular dispersity
+* Fixes # 784: Add 3D integral to Correlation Function analysis
+* Fixes # 786: core_shell_parallelepiped 1-D model is incorrect
+* Fixes # 818: "report button" followed by "save" makes an empty pdf file
+* Fixes # 838: Fix model download from marketplace
+* Fixes # 848: can't save analysis when only one fit page
+* Fixes # 849: Load Folder should ignore files starting with "."
+* Fixes # 852: More unit tests, especially for oriented or 2d models
+* Fixes # 854: remove unnecessary sleep() in fitting perspective
+* Fixes # 856: Reading SAS_OPENCL from custom_config sometimes raises an ERROR
+* Fixes # 861: cannot defined a structure factor plugin
+* Fixes # 864: New Model Editor (simple plugin editor) error parsing parameter line
+* Fixes # 865: Plugin live discovery issues
+* Fixes # 866: inform user when NaN is returned from compute
+* Fixes # 869: fit page computation thread cleanup
+* Fixes # 875: Possible weirdness with 1D NXcanSAS data
+* Fixes # 876: Add check for HDF5 format in dataloader
+* Fixes # 887: reorganize tree, separating the installed source from the build source
+* Fixes # 889: Refactor dataloader error handling infrastructure
+* Fixes # 890: use new orientation definition for asymmetric shapes
+* Fixes # 891: update docs for oriented shapes with new orientation definition
+* Fixes # 896: equations in core shell parallelepiped docs do not match code
+* Fixes # 898: Image Viewer Tool file selector issue
+* Fixes # 899: Igor Reader q calculation
+* Fixes # 902: IgorReader Q calculation needs fixing/improving
+* Fixes # 903: sasview - all non-gui tests should be converted to run in Python 3
+* Fixes # 906: polydispersity not showing up in tabulated results
+* Fixes # 912: About box points to misleading contributors page on Github
+* Fixes # 915: load project issues
+* Fixes # 916: Proper Logging
+* Fixes # 920: Logarithmic binning option in the slice viewer
+* Fixes # 921: Improve developer communication methods
+* Fixes # 922: Remove support for all data formats that are not in q space
+* Fixes # 923: Add CI and trac integrations to Slack
+* Fixes # 930: fitting help says chisq is normalized to number of points
+* Fixes # 931: Allow admins to edit all models and upload data etc on marketplace
+* Fixes # 932: Need to fix upload of data files to marketplace
+* Fixes # 934: Slurp tutorial repo for tutorials
+* Fixes # 935: Build new tutorials as PDF
+* Fixes # 943: Deep copy error on setting model after data is selected
+* Fixes # 950: Most of the readers don't close files properly.
+* Fixes # 954: cross check dll/opencl/python polydispersity and orientation results
+* Fixes # 956: Possible problem with new doc build process
+* Fixes # 961: sasmodels tests should fail if the parameter name does not exist
+* Fixes # 962: star polymer typo in docs
+* Fixes # 967: no uncertainties errors on fitting parameters
+* Fixes # 969: About Box not picking up dls_logo.png
+* Fixes # 970: ASCII loader doesn't handle ISIS 2D ASCII
+* Fixes # 974: blacklist Intel HD 620/630 for double precision
+* Fixes # 978: load project fails for pages which have not been defined
+* Fixes # 983: Remove Nexus Loader
+* Fixes # 984: PDF reports are not being properly generated on Windows
+* Fixes # 985: Saving Project Fails
+* Fixes # 986: Send to fitting overwrites theory page even if blank FitPage has focus
+* Fixes # 990: utest_sasview.py giving different results than run_one.py
+* Fixes # 993: Windows x64 versions not installing to correct folder
+* Fixes # 994: Error changing fit engine
+* Fixes # 995: OpenCL required on Linux even if turned off in GUI
+* Fixes #1006: multiplicity models don't work with SQ
+* Fixes #1007: spherical_sld model freezes SasView
+* Fixes #1008: plugin model scaling not working? S
+* Fixes #1010: Win64 build script not creating working executable
+* Fixes #1011: sld_test failing on ubuntu
+* Fixes #1013: FileReaderBaseClass output[] not reset - same file loaded multiple times
+* Fixes #1018: add Boltzmann distribution
+* Fixes #1021: add PDF documentation to website and document in wiki release process
+* Fixes #1024: Update version numbers in master
+* Fixes #1025: Sum/multiply editor hangs
+* Fixes #1032: convert C++ modules to C
+* Fixes #1035: Order of combining P(Q) and S(Q) in Plugins seems to matter
+* Fixes #1037: data loader crop not working? & all fits crashing
+* Fixes #1043: problem compiling marketplace models
+* Fixes #1050: fix appveyor test for sasmodels win 64 python 3
+* Fixes #1052: Can't use a user-created plugin model in a plugin model
+* Fixes #1057: phi rotation issue for elliptical cylinder
+* Fixes #1060: incorrect default for rectangle dispersion
+* Fixes #1062: win32 build not installing correctly
+* Fixes #1064: Fitting did not converge!!! error with a Sum|Multi plugin model
+* Fixes #1069: GUI problem when using polydispersity/orientation distributions
+* Fixes #1070: Parameter error boxes should not be editable
+* Fixes #1079: Remove save button in report dialog on Mac
+* Fixes #1081: GUI problem with new orientation distribution
+* Fixes #1083: Magnetic models not being computed
+* Fixes #1099: Erratic behaviour of Sum|Multi model in 4.1.2
+* Fixes #1101: Batch results page not displaying polydispersity values
+* Fixes #1131: OpencCl dialog does not open
+* Fixes #1132: Slit Size Calculator Tool not working
+* Fixes #1139: Missing Docs and Help for new Batch Slicing
+* Fixes #1141: Intro to scripting.rst needs improvement
+* Fixes #1142: Plugin framework is broken
+* Fixes #1044: Unable to upload c file to marketplace
+* Fixes #1145: Update models in model marketplace to 4.2 when 4.2 is released.
+* Fixes #1148: Documentation for S(Q) models need updating
+* Fixes #1128: AutoPlot generation for model documentation does not include background
+
+It is recommended that all users upgrade to this version, but your
+attention is drawn to the Changes section above.
+
+
+New in Version 4.2.0-Beta
+-------------------------
+This is a beta pre-release version of 4.2.0.  A number of fixes and changes
+have been made in the year since the previous release. Full release notes
+will be compiled prior to the full release 4.2.0.
+
+Highlights are:
+
+* Infrastucture for calculating 2D patterns from 3D orientated objects
+  has now been totally refactored
+* Plugins have completely migrated to the new infrastructure now,
+  including sum/multiply models
+* Some batch slicing options have been introduced
+* The known issue with the core_shell_parallelepiped is now fixed
+* Several data loading improvements
+* Several save Project improvements (though there are more to come)
+* Numerous bug fixes
+* Lots of documentation enhancement
+
+In the meantime please report any bugs or issues found while using this beta
+
+
+New in Version 4.1.2
+--------------------
+This point release is a bug-fix release addressing:
+
+* Fixes #984: PDF Reports Generate Empty PDFs
+* Fixes a path typo
+* 64 bit and 32 bit Windows executables now available
+
+It is recommended that all users upgrade to this version
+
+
+New in Version 4.1.1
+--------------------
+This point release is a bug-fix release addressing:
+
+* Fixes #948: Mathjax CDN is going away
+* Fixes #938: Cannot read canSAS1D file output by SasView
+* Fixes #960: Save project throws error if empty fit page
+* Fixes #929: Problem deleting data in first fit page
+* Fixes #918: Test folders not bundled with release
+* Fixes an issue with the live discovery of plugin models
+* Fixes an issue with the NXcanSAS data loader
+* Updated tutorials for SasView 4.x.y
+
+
+New in Version 4.1.0
+--------------------
+This incremental release brings a series of new features and improvements,
+and a host of bug fixes. Of particular note are:
+
+Correlation Function Analysis (Corfunc)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+This performs a correlation function analysis of one-dimensional SAXS/SANS data,
+or generates a model-independent volume fraction profile from the SANS from an
+adsorbed polymer/surfactant layer.
+
+A correlation function may be interpreted in terms of an imaginary rod moving
+through the structure of the material. G1(R) is the probability that a rod of
+length R moving through the material has equal electron/neutron scattering
+length density at either end. Hence a frequently occurring spacing within a
+structure manifests itself as a peak.
+
+A volume fraction profile \Phi(z) describes how the density of polymer
+segments/surfactant molecules varies with distance from an (assumed locally flat)
+interface. *This is not yet implemented*.
+
+Fitting of SESANS Data
+^^^^^^^^^^^^^^^^^^^^^^
+Data from Spin-Echo SANS measurements can now be loaded and fitted. The data will
+be plotted against the correct axes and models will automatically perform a Hankel
+transform in order to calculate SESANS from a SANS model.
+
+Documentation
+^^^^^^^^^^^^^
+The documentation has undergone significant checking and updating.
+
+Improvements
+^^^^^^^^^^^^
+* Correlation function (corfunc) analysis of 1D SAS data added from CCP13
+* File converter tool for multi-file single column data sets
+* SESANS data loading and direct fitting using the Hankel transformation
+* Saving and loading of simultaneous and constrained fits now supported
+* Save states from SasView v3.x.y now loaded using sasmodel model names
+* Saving and loading of projects with 2D fits now supported
+* Loading a project removes all existing data, fits, and plots
+* Structure factor and form factor can be plotted independently
+* OpenCL is disabled by default and can be enabled through a fit menu
+* Data and theory fields are now independently expandable
+
+Bug Fixes
+^^^^^^^^^
+* Fixes #667: Models computed multiple times on parameters changes
+* Fixes #673: Custom models override built in models of same name
+* Fixes #678: Hard crash when running complex models on GPU
+* Fixes $774: Old style plugin models unloadable
+* Fixes #789: stacked disk scale doesn't match cylinder model
+* Fixes #792: core_shell_fractal uses wrong effective radius
+* Fixes #800: Plot range reset on plot redraws
+* Fixes #811 and #825: 2D smearing broken
+* Fixes #815: Integer model parameter handling
+* Fixes #824: Cannot apply sector averaging when no detector data present
+* Fixes #830: Cansas HDF5 reader fully compliant with NXCanSAS v1.0 format
+* Fixes #835: Fractal model breaks with negative Q values
+* Fixes #843: Multilayer vesicle does not define effective radius
+* Fixes #858: Hayter MSA S(Q) returns errors
+* Numerous grammatical and contexual errors in documention
+
+
+New in Version 4.0.1
+--------------------
+This release fixes the critical bug #750 in P(Q)xS(Q).  Most damaging
+it appears that the background term was being added to S(Q) prior to
+multiplication by P(Q).
+
+
+New in Version 4.0
+------------------
+This release fixes the various bugs found during the alpha and beta testing
+
+Improvements
+^^^^^^^^^^^^
+* Support for reading data files from Anton Paar Saxess instruments
+* Adds documentation on how to write custom models in the new framework
+
+Bug Fixes
+^^^^^^^^^
+* Fixes #604: Pringle model questions
+* Fixes #472: Reparameterize Teubner-Strey
+* Fixes #530: Numerical instabilities in Teubner Strey model
+* Fixes #658: ASCII reader very broken
+
+
+New in Version 4.0 beta 1
+-------------------------
+This beta adds support for the magnetic and multilevel models of 3.1.2
+and along with a host of bug fixes found in the alpha.
+
+Model package changes and improvements
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+* All 3.1.2 models now available in new interface
+* Old custom models should now still work
+* Custom model editor now creates new style models
+* Custom model editor supports better error checking
+ 
+.. note:: Old custom models should be converted to the new model format 
+          which is now the same as the built-in models and offers much 
+          better support. The old custom model format will be deprecated 
+          in a future version.
+
+Documentation improvements
+^^^^^^^^^^^^^^^^^^^^^^^^^^
+* Continued general cleanup
+
+Other improvements/additions
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+* Support for new canSAS 2D data files added
+* Plot axes range can now be set manually as well as by zooming
+* Plot annotations can now be moved around after being placed on plot.
+* The active optimizer is now listed on the top of the fit panel.
+* Linear fits now update qmin and max when the x scale limits are
+  changed.  Also the plot range no longer resets after a fit.
+
+Bug fixes
+^^^^^^^^^
+* Fixes #511: Errors in linearized fits and clean up of interface
+  including Kratky representation
+* Fixes #186: Data operation Tool now executes when something is
+  entered in the text box and does not wait for the user to hit enter
+* Fixes #459: plot context menu bug
+* Fixes #559: copy to clipboard in graph menu broken
+* Fixes #466: cannot remove a linear fit from graph
+* Numerous bugs introduced in the alpha
+
+
+New in Version 4.0.0-alpha
+--------------------------
+This alpha release brings a major overhaul of the model system. The new model
+package allows rapid integration of custom models and access to polydispersity
+without requiring a compiler.
+
+Model package changes and improvements
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+* Separation of GUI and calculations for future GUI enhancements
+* Model interface moved to independent sasmodels package.
+* Most models converted to new interface.
+* Allows rapid integration of user-written models.
+* OpenCL GPU utilization for faster fitting.
+* Improved numerical integration of Bessel functions.
+
+SESANS integration and implementation
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+* Scripting interface added for analysis of SESANS data.
+* Hankel transformation now accepts finite acceptance angles.
+* 2D cosine transformation added for TOF SESANS analysis.
+
+Documentation improvements
+^^^^^^^^^^^^^^^^^^^^^^^^^^
+* The documentation tree was restructured for a better end user experience.
+* The documentation for each model was revamped and verified by at least
+  two people following the conversion of the model.
+* Theoretical 1D (and 2D if applicable) scattering curves are auto-generated
+  and added to the model documentation for each model.
+   
+Bug fixes
+^^^^^^^^^
+* Fixes #411: No stop button on simultaneous fit page
+* Fixes #410: Error with raspberry model
+* Fixes #364: Possible inconsistency in Poly_GausCoil model
+* Fixes #439: Hayter Penfold MSA code needs checking
+* Fixes #484: lammellerPC is precision limited
+* Fixes #498: $HOME/.matplotlib conflicts
+* Fixes #348: Control order in which fit parameters appear in the gui
+* Fixes #456: Provide DREAM Results Panel with something to identify
+  data and age of results
+* Fixes #556: Build script improvements for developers
+
+
+New in Version 3.1.2
+--------------------
+This release is a major stability improvement, having fixed a serious bug
+that came to light since release 3.1.1. All users should upgrade.
+
+* Fixes #468: broken remove constraint buttons in
+  simultaneous/constrained fitting panel
+* Fixes #474: resulting from changes in 3.1.1 that had
+  introduced an error in the high-Q of slit-smeared models.
+* Fixes #478: which would cause wx to run out of IDs and result
+  in SasView crashing even if left alone.
+* Fixes #479: missing help button on simultaneous/constrained fit page
+* Fixes #480: GUI resizing issues on simultaneous fit page
+* Fixes #486: broken Report Results
+* Fixes #488: redraw issues in fit page
+
+
+New in Version 3.1.1
+--------------------
+Fixes #457 that prevented SasView from starting if the user was not
+connected to the internet, or was behind a proxy server.
+
+
+New in Version 3.1.0
+--------------------
+The documentation/help has had a complete overhaul including:
+
+* A completely new presentation interface (Sphinx).
+* Proof reading!
+* Updating for latest features.
+* A Help (or sometimes ?) button has been added to every panel, and some
+  sub panels if appropriate, linking to the appropriate section in the
+  documentation.
+* The model help has been split so that the Details button now brings up
+  a very short pop-up giving the equation being used while HELP goes to
+  the section in the full documentation describing the model.
+* Extensive help has also been added for the new optimizer engine (see
+  below) including rules of thumb on how and when to choose a given
+  optimizer and what the parameters do.
+
+The optimizer engine has been completely replaced. The new optimizer
+still defaults to the standard Levenberg-Marquardt algorithm. However 4
+other optimizers are now also available. Each starts with a set of default
+parameters which can be tuned. The DREAM optimizer takes the longest but
+is the most powerful and yields rich information including full parameter
+correlation and uncertainty plots. A results panel has been added to
+accommodate this. The five new optimizers are:
+
+* A Levenberg-Marquardt optimizer
+* A Quasi-Newton BFGS optimizer
+* A Nelder-Mead Simplex optimizer
+* A Differential Evolution optimizer
+* A Monte Carlo optimizer (DREAM)
+
+New models were added:
+
+* MicelleSphCoreModel (currently residing in the Uncategorized category)
+
+Existing models were updated:
+
+* LamellarPS (bug in polydispersity integration fixed)
+* RectangularPrismModel
+* RectangularHollowPrismModel
+* RectangularHollowPrismInfThinWallsModel
+
+Other work:
+
+* Infrastructure to allow SESANS data to be fit with models was added. This
+  will become available in a future release but can currently be used from
+  the command line with some caveats.
+* A number of bugs were fixed including a thread crashing issue and an
+  incorrect slit smearing resolution calculation.
+* Implemented much more robust error logging to enable much easier
+  debugging in general but particularly the debugging of issues reported by
+  SasView users.
+* A number of infrastructure tasks under the hood to enhance maintainability
+* Upgrade from Wx 2.8 to Wx 3.0.2 which allows several new features but
+  required significant additional rework as well.
+* Fully implemented Sphinx to the build process to produce both better
+  user documentation and developer documentation.
+* Restructuring of the code base to more unified nomenclature and structure
+  so that the source installation tree more closely matches the installer
+  version tree.
+* Code cleanup (an ongoing task).
+* Migration of the repository to github simplifying contributions from
+  non-project personnel through pull requests.
+
+
+New in Version 3.0.0
+--------------------
+* The GUI look and feel has been refactored to be more familiar for
+  Windows users by using MDI frames. Graph windows are also now free-
+  floating.
+* Five new models have been added: PringlesModel, CoreShellEllipsoidXTModel,
+  RectangularPrismModel, RectangularHollowPrismModel and
+  RectangularHollowPrismInfThinWallsModel.
+* The data loader now supports ILL DAT data files and reads the full meta
+  information from canSAS file formats.
+* Redefined convention for specifying angular parameters for anisotropic
+  models.
+* A number of minor features have been added such as permitting a log
+  distribution of points when using a model to simulate data, and the
+  addition of a Kratky plot option to the linear plots.
+* A number of bugs have also been fixed.
+* Save Project and Save Analysis now work more reliably.
+* BETA: Magnetic contrast supporting full polarization analysis has been
+  implemented for some spherical and cylindrical models.
+* BETA: Two new tools have been added:
+
+  * A generic scattering calculator which takes an atomic, magnetic or
+    SLD distribution in space and generates the appropriate 2D
+    scattering pattern. In some cases the orientationally averaged
+    (powder) 1D scattering can also be computed. Supported formats
+    include: SLD or text, PDB, and OMF magnetic moment distribution
+    file.
+  * An image viewer/converter for data in image format; this reads in
+    an image file and will attempt to convert the image pixels to
+    data. Supported formats include: TIFF, TIF, PNG, BMP, JPG.
+
+
+New in Version 2.2.1
+--------------------
+* Minor patch to support CanSAS XML v1.1 file format
+* Added DataInfo for data in the DataExplorer and plots
+* Added Maximize/Restore button in the title bar of the graphs
+* Added a hide button in the toolbar of the graph panel
+* The 'x' button now deletes a graph
+* Edit SUM Model from the menubar can now generate and save more than one sum model
+* Reports can now be saved in pdf format on WIN and MAC
+* Made significant improvements to the batch/grid panel and fixed several bugs
+* Fixed a number of other minor bugs
+
+
+New in Version 2.2.0
+--------------------
+* Application name changed to SasView
+* New fully customizable Category Manager added for better management of
+  increasing number of models
+* Improved the Grid Window functionality in the batch fitting mode
+* Added a simpler Graph/Plot modification interface
+* Added a new 'Data Operation' tool for addition, subtraction, multiplication,
+  division, of two data sets.
+* The 'Sum Model' editor was extended and renamed 'Summation and Multiplication'
+  editor
+* Added more plot symbols options for 1d plots
+* Added improved trapping of compiling errors to the 'New model editor'
+* Added some intelligent outputs (e.g., Rg, background, or rod diameter
+  depending on the choice of axis scale of the plot) to the linear fits
+* Added more models
+
+
+Feature set from previous versions
+-----------------------------------
+Perspectives Available
+^^^^^^^^^^^^^^^^^^^^^^
+* Invariant calculator: Calculates the invariant, volume fraction, and
+  specific surface area.
+* P(r) inversion calculator: Indirect Fourier transformation method.
+* Fitting: the tool used for modeling and fitting 1D and 2D data to
+  analytical model functions
+* Tools: provides a number of useful supplementary tools such as SLD
+  calculation
+Fitting
+^^^^^^^
+* Includes a large number of model functions, both form factors and structure factors.
+* Support P(Q)*S(Q) for form factors that flag they can be so multiplied.
+* Supports Gaussian, lognormal, Shulz, rectangular and custom distribution
+  functions for models that need to include polydispersity or for orientational
+  distributions if appropriate.
+* Anisotropic shapes and magnetic moment modeling in 2D allow for a non-uniform
+  distribution of orientations of a given axis leading to modeling and fitting
+  capabilities of non azimuthaly symmetric data.
+* User can choose to weight fits or not. If using weights, the user can choose
+  the error bar on each point if provided in the file, the square root
+  of the intensity or the intensity itself.
+* Instrumental resolution smearing of model or fits is provided with several
+  options: read the resolution/point fromt he file. Input a pinhole resolution
+  or a slit resolution.
+* Users can define the Qrange (Qmin and Qmax) for both 1D and 2D data for
+  fitting and modeling, but not graphically.  The range can be reset to the
+  defaults (limits of q in data set for a fit) with the reset button.
+* A mask can be applied to 2D calculation and fitting.
+* Normalized residual plots are provided with every fit.
+* Model function help available through detail button or from the fitting panel.
+* Simultaneous/(advanced)constrained fitting allows for fitting a single
+  data set or several different sets simultaneously with the application
+  of advanced constraints relating fit parameters to functions of other
+  parameters (including from a different set). For example thickness of
+  shell = sin(30) times the length.
+* Models that are the sum of two other models can be easily generated through the
+  SUM Model menubar item.
+* New Python models can be added on the fly by creating an appropriate Python
+  file in the model plugin directory. Two tools are provided to help:
+  An easy to use custom model editor allows the quick generation of new Python
+  models by supplying only the parameters and their default value (box 1)
+  and the mathematical function of the model (box 2) and generating the
+  necessary .py file.  A separate advanced model editor provides a full Python
+  file editor.  Either way once saved the model becomes immediately available
+  to the application.
+* A batch fitting capability allows for the analysis of a series of data sets to
+  a single model and provides the results in a tabular form suitable for saving
+  or plotting the evolution of the fit parameters with error bars (from within
+  the application).
+Tools
+^^^^^
+* A scattering length density calculator,including some X-ray information
+  is provided.
+* A density to vol. fraction converter is provided
+* In application access to a Python shell/editor (PyCrust) is provided
+* An instrument resolution calculator, including possible gravitational and
+  TOF effects is provided
+* A slit size calculator optimized for Anton Paar Saxess is provided.
+* A kiessig fringe thickness calculator is provided
+Plots and plot management
+^^^^^^^^^^^^^^^^^^^^^^^^^
+* A 3D graphing option (for 2d data/results) is provided with the view
+  controlled by the mouse
+* 2D plots are shown with an intensity color bar. 2D Color map can be user
+  adjusted.
+* Supports output of plot to a variety of graphic formats. Supported formats
+  include: png, eps, emf, jpg/jpeg, pdf, ps, tif/tiff, rawRGBbitmap(raw, rgba),
+  and scalable vector graphic (svg/svgz)
+* Supports ouput of data in plot (1 or 2D) to limited data formats
+* Multiple data sets can be loaded into a single graph for viewing (but a fit
+  plot can currently only have a single plot).
+* Extensive context sensitive plot/fitting/manipulation options are available
+  through a right mouse click pop-up menu on plots.
+Data management
+^^^^^^^^^^^^^^^
+* Supports 2 + column 1D ASCII data, NIST 1D and 2D data, and canSAS data
+  via plug-in mechanism which can easily allow other readers as appropriate.
+* 2D data is expected in Q space but for historical reasons accepts the
+  NIST 2D raw pixel format and will do conversion internally.
+* The full data and metadata available to SasView is viewable in ASCII via
+  right clicking on a data set and choosing Data Info in the DataExplorer
+  or on the plots
+* Supports loading a single file, multiple files, or a whole folder
+* An optional Data Explorer is provided (default) which simplifies managing,
+  plotting, deleting, or setup for computation. Most functions however do
+  not require access to the explorer/manager and can be accessed through
+  right click menus and the toolbar.  The data explorer can be re-started
+  from the menu bar.
+Data manipulation
+^^^^^^^^^^^^^^^^^
+* Support various 2D averaging methods : Circular, sectors, annular,
+  boxsum, boxQx and boxQy.
+* A 2D data maks editor is provided
+* 2D mask can be applied to the circular averaging.
+Miscellaneous features
+^^^^^^^^^^^^^^^^^^^^^^
+* Limited reports can be generated in pdf format
+* Provides multiprocessor support(Windows only)
+* Limited startup customization currently includes default startup
+  data folder and choice of default starting with data manager
+* Limited support for saving(opening) a SasView project or a SasView analysis
+  (subproject) is provided.
+* SasView can be launched and loaded with a file of interesty by double-clicking
+  on that file (recognized extension)
+* A data file or data folder can be passed to SasView when launched from
+  the command line.
+* Limited bookmarking capability to later recall the results of a fit calculation
+  is provided.
+* Extensive help is provided through context sensitive mouse roll-over,
+  information bar (at the bottom of the panel), the console menu, and
+  access to the help files in several different ways.
+
+
+Downloading and Installing
+==========================
+
+.. note:: If you have a SasView installer (.EXE or .MSI), you do not need to
+          worry about any of the following.  However, it is highly recommended 
+          that any previous versions of SasView are uninstalled prior to 
+          installing the new version UNLESS you are installing SasView to 
+          versioned folders.
+
+.. note:: The easiest approach to setting up the proper environment to
+          build from source is to use Conda.  Instructions for setting up
+          and using Conda can be found at http://trac.sasview.org/wiki/DevNotes/CondaDevSetup
+                    
+.. note:: Much more information is available at www.sasview.org under 
+          links/downloads. In particular, look in the 'For Developers' section. 
+          Also have a look at http://trac.sasview.org/
+
+System Requirements
+-------------------
+* Python version >= 2.5 and < 3.0 should be running on the system
+* We currently use Python 2.7
+
+Package Dependencies
+--------------------
+* Ensure the required dependencies are installed
+* For the latest list of dependencies see the appropriate yml file in
+  the SasView repo at sasview/build_tools/conda/ymls
+
+Installing from Source
+----------------------
+* Get the source code
+* Create a folder to contain the source code; if working with
+  multiple versions you might want to use versioned folder names
+  like 'sasview-x.x.x'
+* Open a command line window in the source code folder
+* To get the CURRENT DEVELOPMENT VERSION from source control use
+  git clone https://github.com/SasView/sasview.git sasview
+  git clone https://github.com/Sasview/sasmodels.git sasmodels
+  git clone https://github.com/bumps/bumps.git bumps
+* To get a SPECIFIC RELEASE VERSION from source control go to
+  https://github.com/SasView/sasview/releases
+  and download the required zip or tar.gz file. Unzip/untar it
+  to the source code folder.
+
+Building and Installing
+-----------------------
+* To build the code
+  use 'python setup.py build'
+* To build the documentation
+  use'python setup.py docs'
+
+Running SasView
+---------------
+* use 'python run.py'; this runs from the source directories, so you
+  don't have to rebuild every time you make a change, unless you are
+  changing the C model files.
+* if using Conda the above command will also build SasView, but you 
+  must issue 'activate sasview' first.
+
+
+Known Issues
+============
+4.2.0 - All systems
+-------------------
+There are currently no major known issues. A full list of known bugs and
+feature requests by release version that users may wish to be aware of
+can be viewed at http://trac.sasview.org/report/3
+
+.. note:: Any corrections to models that may become known/available will be
+          posted to Marketplace as available (and fixed in the following 
+          release)
+
+4.1.x- All systems
+------------------
+The conversion to sasmodels infrastructure is ongoing and should be
+completed in the next release. In the meantime this leads to a few known
+issues:
+
+* The way that orientation is defined is being refactored to address
+  long standing issues and comments.  In release 4.1 however only models
+  with symmetry (e.g. a=b) have been converted to the new definitions.
+  The rest (a <> b <> c - e.g. parellelepiped) maintain the same
+  definition as before and will be converted in 4.2.  Note that
+  orientational distribution also makes much more sense in the new
+  framework.  The documentation should indicate which definition is being
+  used for a given model.
+* The infrastructure currently handles internal conversion of old style
+  models so that user created models in previous versions should continue
+  to work for now. At some point in the future such support will go away.
+  Everyone is encouraged to convert to the new structure which should be
+  relatively straight forward and provides a number of benefits.
+* In that vein, the distributed models and those generated by the new
+  plugin model editor are in the new format, however those generated by
+  sum|multiply models are the old style sum|multiply models. This should
+  also disappear in the near future
+* The on the fly discovery of plugin models and changes thereto behave
+  inconsistently.  If a change to a plugin model does not seem to
+  register, the Load Plugin Models (under fitting -> Plugin Model
+  Operations) can be used.  However, after calling Load Plugin Models, the
+  active plugin will no longer be loaded (even though the GUI looks like
+  it is) unless it is a sum|multiply model which works properly.  All
+  others will need to be recalled from the model dropdown menu to reload
+  the model into the calculation engine.  While it might be annoying it
+  does not appear to prevent SasView from working..
+* The model code and documentation review is ongoing. At this time the
+  core shell parellelepiped is known to have the C shell effectively fixed
+  at 0 (noted in documentation) while the triaxial ellipsoid does not seem
+  to reproduce the limit of the oblate or prolate ellipsoid. If errors are
+  found and corrected, corrected versions will be uploaded to the
+  marketplace.
+
+3.1- All systems
+----------------
+* The documentation window may take a few seconds to load the first time
+  it is called. Also, an internet connection is required before
+  equations will render properly. Until then they will show in their
+  original TeX format.
+* If the documentation window remains stubbornly blank, try installing a
+  different browser and set that as your default browser. Issues have
+  been noted with Internet Explorer 11.
+* Check for Updates may fail (with the status bar message ' Cannot
+  connect to the application server') if your internet connection uses
+  a proxy server. Tested resolutions for this are described on the
+  website FAQ.
+* The copy and paste functions (^C, ^V) in the batch mode results grid
+  require two clicks: one to select the cell and a second to select the
+  contents of the cell.
+* The tutorial has not yet been updated and is somewhat out of date
+* Very old computers may struggle to run the 3.x and later releases
+* Polydispersity on multiple parameters included in a simultaneous/
+  constrained fit will likely not be correct
+* Constrained/simultaneous fit page does not have a stop button
+* Constrained/simultaneous fit do not accept min/max limits
+* Save project does not store the state of all the windows
+* Loading projects can be very slow
+* Save Project only works once a data set has been associated with
+  a model.  Error is reported on status bar.
+* There is a numerical precision problem with the multishell model when
+  the inner radius gets large enough (ticket #288)
+* The angular distribution angles are not clearly defined and may in
+  some cases lead to incorrect calculations(ticket #332)
+
+3.1 - Windows
+-------------
+* If installed to same directory as old version without first removing
+  the old version, the old desktop icon will remain but point to the
+  new exe version. Likewise all the start menu folders and items will
+  have the old name even though pointing to the new version.  Usually
+  safest to uninstall old version prior to installing new version anyway.
+
+3.1 - MAC
+---------
+* Application normally starts up hidden. Click icon in Dock to view/use
+  application.
+* Multiprocessing does not currently work on MAC OS
+
+3.1 - Linux
+-----------
+* Not well tested
+
+
+SasView Website
+===============
+http://www.sasview.org
+
+This main project site is the gateway to all information about the sasview 
+project.  It includes information about the project, a FAQ page and links 
+to all developer and user information, tools and resources.
+
+
+Frequently Asked Questions
+==========================
+http://www.sasview.org/faq.html
+
+
+Installer Download Website
+==========================
+Latest release Version
+https://github.com/SasView/sasview/releases
+
+Latest developer builds
+https://jenkins.esss.dk/sasview/view/Master-Builds/
Index: docs/sphinx-docs/source/user/environment.rst
===================================================================
--- docs/sphinx-docs/source/user/environment.rst	(revision c1790a50a20abd0dea12c07d6fc4f66993b877d0)
+++ docs/sphinx-docs/source/user/environment.rst	(revision c1790a50a20abd0dea12c07d6fc4f66993b877d0)
@@ -0,0 +1,36 @@
+.. _Environment_Variables:
+
+Environment Variables
+======================
+
+SasView creates and uses a number of environment variables:
+
+- **SAS_MODELPATH=path**
+   - sets the directory containing custom models
+
+- **SAS_DLL_PATH=path**
+   - sets the path to the compiled modules
+   
+- **SAS_WEIGHTS_PATH=~/.sasview/weights**
+   - sets the path to custom distribution files (see :ref:`polydispersityhelp`)
+
+- **XDG_CACHE_HOME=~/.cache**
+   - sets the pyopencl cache root (linux only)
+   - defined in the appdirs package
+
+- **SAS_COMPILER=tinycc|msvc|mingw|unix**
+   - sets the DLL compiler
+
+- **SAS_OPENCL=vendor:device|none**
+   - sets the target OpenCL device for GPU computations
+   - use *none* to disable
+
+- **SAS_OPENMP=1|0**
+   - turns on/off OpenMP multi-processing of the DLLs
+
+.. ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
+
+*Document History*
+
+| 2018-07-20 Steve King
+
Index: docs/sphinx-docs/source/user/tutorial.rst
===================================================================
--- docs/sphinx-docs/source/user/tutorial.rst	(revision 3bd677bda9477bbd07235d9fba448f09ae1b3932)
+++ docs/sphinx-docs/source/user/tutorial.rst	(revision 893d852f3c5e35f1efabd15a592a84ceaeec035d)
@@ -8,5 +8,15 @@
 .. note:: In Windows use [Alt]-[Cursor left] to return to the previous page
 
+The following tutorial was written for Version 2.x but is still a useful overview of 
+much of the analysis capability in SasView (but disregard Appendix XIII if using 
+Version 4.2 or later)
+
+:download:`Old Tutorial <sasview/Tutorial.pdf>`
+
+The following tutorials have been written for Version 4.x
+
 :download:`Getting Started with Sasview <sasview/getting_started_with_sasview.pdf>`
 
-:download:`Old Tutorial <sasview/Tutorial.pdf>`
+:download:`Basic 1D Fitting in Sasview <sasview/basic_1d_fitting_in_sasview_v3x_4x.pdf>`
+
+:download:`Simultaneous 1D Fitting in Sasview <sasview/simultaneous_1d_fitting_in_sasview_v3x_4x.pdf>`
Index: docs/sphinx-docs/source/user/working.rst
===================================================================
--- docs/sphinx-docs/source/user/working.rst	(revision 3bd677bda9477bbd07235d9fba448f09ae1b3932)
+++ docs/sphinx-docs/source/user/working.rst	(revision c1790a50a20abd0dea12c07d6fc4f66993b877d0)
@@ -19,3 +19,5 @@
    Writing a Plugin Model <sasgui/perspectives/fitting/plugin>
 
+   Environment Variables <environment>
+
    Model marketplace <marketplace>
Index: installers/README-ABOUT-RELEASE-NOTES.txt
===================================================================
--- installers/README-ABOUT-RELEASE-NOTES.txt	(revision 8ac05a59a0078f40fc8af4febae16624b9d5c818)
+++ installers/README-ABOUT-RELEASE-NOTES.txt	(revision 8ac05a59a0078f40fc8af4febae16624b9d5c818)
@@ -0,0 +1,2 @@
+From Version 4.2 the Release Notes are now Sphinx-ready and reside in:
+/sasview/docs/sphinx-docs/source/user/RELEASE.rst
Index: stallers/README-next-release.txt
===================================================================
--- installers/README-next-release.txt	(revision 2f6d340b9cd179b18c2a4efe77d149f45c7e98de)
+++ 	(revision )
@@ -1,10 +1,0 @@
-   - New in Version 3.?.?
-     --------------------
-
-     - New models were added:
-       - LamellarPolLz
-
-     - Existing models were updated:
-       - LamellarPS and LamellarPSHG have been changed to LamellarCaille and 
-         LamellarCailleHG
-       
Index: stallers/README.txt
===================================================================
--- installers/README.txt	(revision 2f6d340b9cd179b18c2a4efe77d149f45c7e98de)
+++ 	(revision )
@@ -1,613 +1,0 @@
-Release Notes
-=============
-
-1- Features
-===========
-    - New in Version 4.1.2
-      --------------------
-      This point release is a bug-fix release addressing:
-
-       - Fixes #984: PDF Reports Generate Empty PDFs
-       - Fixes a path typo
-       - 64 bit and 32 bit Windows executables now available
-
-      It is recommended that all users upgrade to this version
-
-    - New in Version 4.1.1
-      --------------------
-      This point release is a bug-fix release addressing:
-
-       - Fixes #948: Mathjax CDN is going away
-       - Fixes #938: Cannot read canSAS1D file output by SasView
-       - Fixes #960: Save project throws error if empty fit page
-       - Fixes #929: Problem deleting data in first fit page
-       - Fixes #918: Test folders not bundled with release
-       - Fixes an issue with the live discovery of plugin models
-       - Fixes an issue with the NXcanSAS data loader
-       - Updated tutorials for SasView 4.x.y
-
-    - New in Version 4.1.0
-      ------------------
-      This incremental release brings a series of new features and improvements,
-      and a host of bug fixes. Of particular note are:
-      
-      - Correlation Function Analysis (Corfunc)
-      	This performs a correlation function analysis of one-dimensional SAXS/SANS data, 
-	or generates a model-independent volume fraction profile from the SANS from an 
-	adsorbed polymer/surfactant layer.
-
-	A correlation function may be interpreted in terms of an imaginary rod moving 
-	through the structure of the material. Î1D(R) is the probability that a rod of 
-	length R moving through the material has equal electron/neutron scattering 
-	length density at either end. Hence a frequently occurring spacing within a 
-	structure manifests itself as a peak.
-
-	A volume fraction profile \Phi(z) describes how the density of polymer 
-	segments/surfactant molecules varies with distance from an (assumed locally flat)
-	interface.
-
-      - Fitting of SESANS Data
-      	Data from Spin-Echo SANS measurements can now be loaded and fitted. The data will 
-	be plotted against the correct axes and models will automatically perform a Hankel 
-	transform in order to calculate SESANS from a SANS model.
-
-      - Documentation
-      	The documentation has undergone significant checking and updating.
-
-      - Improvements
-        - Correlation function (corfunc) analysis of 1D SAS data added from CCP13
-        - File converter tool for multi-file single column data sets
-        - SESANS data loading and direct fitting using the Hankel transformation
-        - Saving and loading of simultaneous and constrained fits now supported
-        - Save states from SasView v3.x.y now loaded using sasmodel model names
-        - Saving and loading of projects with 2D fits now supported
-        - Loading a project removes all existing data, fits, and plots
-        - Structure factor and form factor can be plotted independently
-        - OpenCL is disabled by default and can be enabled through a fit menu
-        - Data and theory fields are now independently expandable
-      - Bug Fixes
-        - Fixes #667: Models computed multiple times on parameters changes
-        - Fixes #673: Custom models override built in models of same name
-        - Fixes #678: Hard crash when running complex models on GPU
-        - Fixes $774: Old style plugin models unloadable
-        - Fixes #789: stacked disk scale doesn't match cylinder model
-        - Fixes #792: core_shell_fractal uses wrong effective radius
-        - Fixes #800: Plot range reset on plot redraws
-        - Fixes #811 and #825: 2D smearing broken
-        - Fixes #815: Integer model parameter handling
-        - Fixes #824: Cannot apply sector averaging when no detector data present
-        - Fixes #830: Cansas HDF5 reader fully compliant with NXCanSAS v1.0 format
-        - Fixes #835: Fractal model breaks with negative Q values
-        - Fixes #843: Multilayer vesicle does not define effective radius
-        - Fixes #858: Hayter MSA S(Q) returns errors
-        - Numerous grammatical and contexual errors in documention
-
-
-    - New in Version 4.0.1
-      ------------------
-      This release fixes the critical bug #750 in P(Q)*S(Q).  Most damaging
-      it appears that the background term was being added to S(Q) prior to
-      multiplication by P(Q).
-
-
-    - New in Version 4.0
-      ------------------
-      This release fixes the various bugs found during the alpha and beta testing
-      - Improvements
-        - Support for reading data files from Anton Paar Saxess instruments
-        - Adds documentation on how to write custom models in the new framework
-      - Bug Fixes
-        - Fixes bug #604 Pringle model questions
-        - Fixes bug #472 Reparameterize Teubner-Strey
-        - Fixes bug #530 Numerical instabilities in Teubner Strey model
-        - Fixes bug #658 ASCII reader very broken
-
-
-    - New in Version 4.0 beta 1
-      --------------------
-      This beta adds support for the magnetic and multilevel models of 3.1.2
-      and along with a host of bug fixes found in the alpha.
-
-      - Model package changes and improvements
-         - All 3.1.2 models now available in new interface
-         - Old custom models should now still work
-            - '''NOTE:''' These will be deprecated in a future version. Old
-            custom models should be converted to the new model format which
-            is now the same as the built in models and offers much better
-            support.
-         - Custom model editor now creates new style models
-         - Custom model editor supports better error checking
-      - Documentation improvements
-        - Continued general cleanup
-      - Other improvements/additions
-         - Support for new canSAS 2D data files added
-         - Plot axes range can now be set manually as well as by zooming
-         - Plot annotations can now be moved around after being placed on plot.
-         - The active optimizer is now listed on the top of the fit panel.
-         - Linear fits now update qmin and max when the x scale limits are
-         changed.  Also the plot range no longer resets after a fit.
-      - Bug fixes
-         - Fixes bug #511 Errors in linearized fits and clean up of interface
-         including Kratky representation
-         - Fixes bug #186 Data operation Tool now executes when something is
-         entered in the text box and does not wait for the user to hit enter
-         - Fixes bug #459 plot context menu bug
-         - Fixes bug #559 copy to clipboard in graph menu broken
-         - Fixes bug #466 cannot remove a linear fit from graph
-         - Numerous bugs introduced in the alpha
-
-
-
-    - New in Version 4.0.0-alpha
-      --------------------
-      This alpha release brings a major overhaul of the model system. The new model
-      package allows rapid integration of custom models and access to polydispersity
-      without requiring a compiler.
-
-      - Model package changes and improvements
-         - Model interface moved to independent sasmodels package.
-         - Most models converted to new interface.
-         - Allows rapid integration of user-written models.
-         - OpenCL GPU utilization for faster fitting.
-         - Improved numerical integration of Bessel functions.
-      - SESANS integration and implementation
-         - Scripting interface added for analysis of SESANS data.
-         - Hankel transformation now accepts finite acceptance angles.
-         - 2D cosine transformation added for TOF SESANS analysis.
-      - Documentation improvements
-         - The documentation tree was restructured for a better end user experience.
-         - The documentation for each model was revamped and verified by at least
-           two people following the conversion of the model.
-         - Theoretical 1D (and 2D if applicable) scattering curves are auto-generated
-           and added to the model documentation for each model.
-      - Separation of GUI and calculations for future GUI enhancements
-      - Bug fixes
-         - Fixes bug #411 No stop button on simultaneous fit page
-         - Fixes bug #410 Error with raspberry model
-         - Fixes bug #364 Possible inconsistency in Poly_GausCoil model
-         - Fixes bug #439 Hayter Penfold MSA code needs checking
-         - Fixes bug #484 lammellerPC is precision limited
-         - Fixes bug #498 $HOME/.matplotlib conflicts
-         - Fixes bug #348 Control order in which fit parameters appear in the gui
-         - Fixes bug #456 Provide DREAM Results Panel with something to identify
-           data and age of results
-         - Fixes bug #556 Build script improvements for developers
-
-
-
-   - New in Version 3.1.2
-     --------------------
-     This release is a major stability improvement, having fixed a serious bug
-     that came to light since release 3.1.1. All users should upgrade.
-
-     - Fixes bug #468 broken remove constraint buttons in
-       simultaneous/constrained fitting panel
-     - Fixes bug #474 resulting from changes in 3.1.1 that had
-       introduced an error in the high-Q of slit-smeared models.
-     - Fixes bug #478 which would cause wx to run out of IDs and result
-       in SasView crashing even if left alone.
-     - Fixes bug #479 missing help button on simultaneous/constrained fit page
-     - Fixes bug #480 GUI resizing issues on simultaneous fit page
-     - Fixes bug #486 broken Report Results
-     - Fixes bug #488 redraw issues in fit page
-
-
-
-   - New in Version 3.1.1
-     --------------------
-     - Fixes bug #457 that prevented SasView from starting if the user was not
-       connected to the internet, or was behind a proxy server.
-
-   - New in Version 3.1.0
-     --------------------
-     - The documentation/help has had a complete overhaul including:
-       - A completely new presentation interface (Sphinx).
-       - Proof reading!
-       - Updating for latest features.
-       - A Help (or sometimes ?) button has been added to every panel, and some
-         sub panels if appropriate, linking to the appropriate section in the
-         documentation.
-       - The model help has been split so that the Details button now brings up
-         a very short pop-up giving the equation being used while HELP goes to
-         the section in the full documentation describing the model.
-       - Extensive help has also been added for the new optimizer engine (see
-         below) including rules of thumb on how and when to choose a given
-         optimizer and what the parameters do.
-     - The optimizer engine has been completely replaced. The new optimizer
-       still defaults to the standard Levenberg-Marquardt algorithm. However 4
-       other optimizers are now also available. Each starts with a set of default
-       parameters which can be tuned. The DREAM optimizer takes the longest but
-       is the most powerful and yields rich information including full parameter
-       correlation and uncertainty plots. A results panel has been added to
-       accommodate this.
-       - The five new optimizers are:
-         - A Levenberg-Marquardt optimizer
-         - A Quasi-Newton BFGS optimizer
-         - A Nelder-Mead Simplex optimizer
-         - A Differential Evolution optimizer
-         - A Monte Carlo optimizer (DREAM)
-     - New models were added:
-         - MicelleSphCoreModel (currently residing in the Uncategorized category)
-     - Existing models were updated:
-         - LamellarPS (bug in polydispersity integration fixed)
-         - RectangularPrismModel
-         - RectangularHollowPrismModel
-         - RectangularHollowPrismInfThinWallsModel
-     - Infrastructure to allow SESANS data to be fit with models was added. This
-       will become available in a future release but can currently be used from
-       the command line with some caveats.
-     - A number of bugs were fixed including a thread crashing issue and an
-       incorrect slit smearing resolution calculation.
-     - Implemented much more robust error logging to enable much easier
-       debugging in general but particularly the debugging of issues reported by
-       SasView users.
-     - A number of infrastructure tasks under the hood to enhance maintainability
-     - Upgrade from Wx 2.8 to Wx 3.0.2 which allows several new features but
-       required significant additional rework as well.
-     - Fully implemented Sphinx to the build process to produce both better
-       user documentation and developer documentation.
-     - Restructuring of the code base to more unified nomenclature and structure
-       so that the source installation tree more closely matches the installer
-       version tree.
-     - Code cleanup (an ongoing task) .
-     - Migration of the repository to github simplifying contributions from
-       non-project personnel through pull requests.
-
-   - New in Version 3.0.0
-     --------------------
-     - The GUI look and feel has been refactored to be more familiar for
-       Windows users by using MDI frames. Graph windows are also now free-
-       floating.
-     - Five new models have been added: PringlesModel, CoreShellEllipsoidXTModel,
-       RectangularPrismModel, RectangularHollowPrismModel and
-       RectangularHollowPrismInfThinWallsModel.
-     - The data loader now supports ILL DAT data files and reads the full meta
-       information from canSAS file formats.
-     - Redefined convention for specifying angular parameters for anisotropic
-       models.
-     - A number of minor features have been added such as permitting a log
-       distribution of points when using a model to simulate data, and the
-       addition of a Kratky plot option to the linear plots.
-     - A number of bugs have also been fixed.
-     - Save Project and Save Analysis now work more reliably.
-     - BETA: Magnetic contrast supporting full polarization analysis has been
-       implemented for some spherical and cylindrical models.
-     - BETA: Two new tools have been added:
-       - A generic scattering calculator which takes an atomic, magnetic or
-         SLD distribution in space and generates the appropriate 2D
-         scattering pattern. In some cases the orientationally averaged
-         (powder) 1D scattering can also be computed. Supported formats
-         include: SLD or text, PDB, and OMF magnetic moment distribution
-         file.
-       - An image viewer/converter for data in image format; this reads in
-         an image file and will attempt to convert the image pixels to
-         data. Supported formats include: TIFF, TIF, PNG, BMP, JPG.
-
-   - New in Version 2.2.1
-     --------------------
-     - Minor patch to support CanSAS XML v1.1 file format
-     - Added DataInfo for data in the DataExplorer and plots
-     - Added Maximize/Restore button in the title bar of the graphs
-     - Added a hide button in the toolbar of the graph panel
-     - The 'x' button now deletes a graph
-     - Edit SUM Model from the menubar can now generate and save more than one sum model
-     - Reports can now be saved in pdf format on WIN and MAC
-     - Made significant improvements to the batch/grid panel and fixed several bugs
-     - Fixed a number of other minor bugs
-
-   - New in Version 2.2.0
-     --------------------
-     - Application name changed to SasView
-     - New fully customizable Category Manager added for better management of
-       increasing number of models
-     - Improved the Grid Window functionality in the batch fitting mode
-     - Added a simpler Graph/Plot modification interface
-     - Added a new 'Data Operation' tool for addition, subtraction, multiplication,
-       division, of two data sets.
-     - The 'Sum Model' editor was extended and renamed 'Summation and Multiplication'
-       editor
-     - Added more plot symbols options for 1d plots
-     - Added improved trapping of compiling errors to the 'New model editor'
-     - Added some intelligent outputs (e.g., Rg, background, or rod diameter
-       depending on the choice of axis scale of the plot) to the linear fits
-     - Added more models
-
-   - Feature set from previous versions
-     -----------------------------------
-     - Perspectives Available
-       - Invariant calculator: Calculates the invariant, volume fraction, and
-         specific surface area.
-       - P(r) inversion calculator: Indirect Fourier transformation method.
-       - Fitting: the tool used for modeling and fitting 1D and 2D data to
-         analytical model functions
-       - Tools: provides a number of useful supplementary tools such as SLD
-         calculation
-
-     - Fitting
-       - Includes a large number of model functions, both form factors and structure factors.
-       - Support P(Q)*S(Q) for form factors that flag they can be so multiplied.
-       - Supports Gaussian, lognormal, Shulz, rectangular and custom distribution
-         functions for models that need to include polydispersity or for orientational
-         distributions if appropriate.
-       - Anisotropic shapes and magnetic moment modeling in 2D allow for a non-uniform
-         distribution of orientations of a given axis leading to modeling and fitting
-         capabilities of non azimuthaly symmetric data.
-       - User can choose to weight fits or not. If using weights, the user can choose
-         the error bar on each point if provided in the file, the square root
-         of the intensity or the intensity itself.
-       - Instrumental resolution smearing of model or fits is provided with several
-         options: read the resolution/point fromt he file. Input a pinhole resolution
-         or a slit resolution.
-       - Users can define the Qrange (Qmin and Qmax) for both 1D and 2D data for
-         fitting and modeling, but not graphically.  The range can be reset to the
-         defaults (limits of q in data set for a fit) with the reset button.
-       - A mask can be applied to 2D calculation and fitting.
-       - Normalized residual plots are provided with every fit.
-       - Model function help available through detail button or from the fitting panel.
-       - Simultaneous/(advanced)constrained fitting allows for fitting a single
-         data set or several different sets simultaneously with the application
-         of advanced constraints relating fit parameters to functions of other
-         parameters (including from a different set). For example thickness of
-         shell = sin(30) times the length.
-       - Models that are the sum of two other models can be easily generated through the
-         SUM Model menubar item.
-       - New Python models can be added on the fly by creating an appropriate Python
-         file in the model plugin directory. Two tools are provided to help:
-         An easy to use custom model editor allows the quick generation of new Python
-         models by supplying only the parameters and their default value (box 1)
-         and the mathematical function of the model (box 2) and generating the
-         necessary *.py file.  A separate advanced model editor provides a full Python
-         file editor.  Either way once saved the model becomes immediately available
-         to the application.
-       - A batch fitting capability allows for the analysis of a series of data sets to
-         a single model and provides the results in a tabular form suitable for saving
-         or plotting the evolution of the fit parameters with error bars (from within
-         the application).
-
-     - Tools
-       - A scattering length density calculator,including some X-ray information
-         is provided.
-       - A density to vol. fraction converter is provided
-       - In application access to a Python shell/editor (PyCrust) is provided
-       - An instrument resolution calculator, including possible gravitational and
-         TOF effects is provided
-       - A slit size calculator optimized for Anton Paar Saxess is provided.
-       - A kiessig fringe thickness calculator is provided
-
-     - Plots and plot management
-       - A 3D graphing option (for 2d data/results) is provided with the view
-         controlled by the mouse
-       - 2D plots are shown with an intensity color bar. 2D Color map can be user
-         adjusted.
-       - Supports output of plot to a variety of graphic formats. Supported formats
-         include: png, eps, emf, jpg/jpeg, pdf, ps, tif/tiff, rawRGBbitmap(raw, rgba),
-         and scalable vector graphic (svg/svgz)
-       - Supports ouput of data in plot (1 or 2D) to limited data formats
-       - Multiple data sets can be loaded into a single graph for viewing (but a fit
-         plot can currently only have a single plot).
-       - Extensive context sensitive plot/fitting/manipulation options are available
-         through a right mouse click pop-up menu on plots.
-
-     - Data management
-       - Supports 2 + column 1D ASCII data, NIST 1D and 2D data, and canSAS data
-         via plug-in mechanism which can easily allow other readers as appropriate.
-       - 2D data is expected in Q space but for historical reasons accepts the
-         NIST 2D raw pixel format and will do conversion internally.
-       - The full data and metadata available to SasView is viewable in ASCII via
-         right clicking on a data set and choosing Data Info in the DataExplorer
-         or on the plots
-       - Supports loading a single file, multiple files, or a whole folder
-       - An optional Data Explorer is provided (default) which simplifies managing,
-         plotting, deleting, or setup for computation. Most functions however do
-         not require access to the explorer/manager and can be accessed through
-         right click menus and the toolbar.  The data explorer can be re-started
-         from the menu bar.
-
-     - Data manipulation
-       - Support various 2D averaging methods : Circular, sectors, annular,
-         boxsum, boxQx and boxQy.
-       - A 2D data maks editor is provided
-       - 2D mask can be applied to the circular averaging.
-
-     - Miscellaneous features
-       - limited reports can be generated in pdf format
-       - Provides multiprocessor support(Windows only)
-       - Limited startup customization currently includes default startup
-         data folder and choice of default starting with data manager
-       - Limited support for saving(opening) a SasView project or a SasView analysis
-         (subproject) is provided.
-       - SasView can be launched and loaded with a file of interesty by double-clicking
-         on that file (recognized extension)
-       - A data file or data folder can be passed to SasView when launched from
-         the command line.
-       - Limited bookmarking capability to later recall the results of a fit calculation
-         is provided.
-       - Extensive help is provided through context sensitive mouse roll-over,
-         information bar (at the bottom of the panel), the console menu, and
-         access to the help files in several different ways.
-
-
-2- Downloading and Installing
-=============================
-
-   *** Note 1:  Much more information is available at www.sasview.org under links.
-	            Look in the 'For Developers' section and particularly the wiki at
-                www.sasview.org/trac/wiki.
-   *** Note 2:  If you have EXE or ZIP SasView installer, you won't need any of
-                the following.  However it is highly recommended that any
-                previous versions be un-installed prior to installing the
-                new version.
-
-   2.1- System Requirements
-        - Python version >= 2.5 and < 3.0 should be running on the system
-        - We currently use Python 2.7
-
-   2.2- Installing from source
-        - Get the source code
-          - to follow the current development version from source control use
-              git clone https://github.com/SasView/sasview.git
-              git clone https://github.com/bumps/bumps.git
-	  - to install a specific version
-
-        - Build, install and run a specific release
-          - make sure the requirements below are already installed
-          - retrieve the source from https://github.com/SasView/sasview/releases
-          - open a command line window in the 'sasview-x.x.x' directory
-          - run 'python setup.py install'
-          - run 'python sasview.py' under the 'sasview' folder.
-
-        - Build, install and run the current development version
-          - clone the source from git; also clone bumps, which is developed in parallel
-              git clone https://github.com/SasView/sasview.git
-              git clone https://github.com/bumps/bumps.git
-          - open a command line window in the 'sasview' directory
-          - run 'python setup.py build'
-          - run 'python run.py'; this runs from the source directories, so you
-            don't have to rebuild every time you make a change, unless you are
-            changing the C++ model files
-
-        - The following modules are required (version numbers are what are used
-          in the windows release build):
-
-          - Common Packages
-            - reportlab 3.1.44
-            - lxml 3.4.4.0 (MAC 3.4.2.0)
-            - PIL 1.1.7
-            - xhtml2pdf 3.0.33 (MAC = not installed on build server)
-            - unittest-xml-reporting 1.12.0 (MAC 1.10.0)
-            - matplotlib Version Installed: 1.4.3 (MAC 1.1.1)
-            - bumps Version Installed: 0.7.5.9
-            - scipy Version Installed: 0.16.0b2 (MAC 0.11.0)
-            - periodictable Version Installed: 1.4.1
-            - setuptools Version Installed: 7.0 (MAC 12.0.5)
-            - sphinx Version Installed: 1.3.1 (MAC 1.3b2)
-            - pyparsing Version Installed: 2.0.3
-            - numpy Version Installed: 1.9.2 (MAC 1.6.2)
-            - html5lib Version Installed: 0.99999
-            - wx Version Installed: 3.0.2.0
-
-          - Windows Specific Packages
-            - pywin 219
-            - py2exe 0.6.9
-            - comtypes 1.1.1
-            - MinGW w/ gcc version 4.6.1 (WIN)
-            - vcredist_x86.exe (version 9.0.21022.8  -microsoft visual C 2008
-              re-distributable)
-            - Innosetup (WIN - isetup 5.4.2-unicode) - used to create distributable
-
-            *** Note: Windows build dependencies can be set up using anaconda. Instructions
-                can be found at http://trac.sasview.org/wiki/AnacondaSetup
-
-          - MAC Specifc Packages
-            - py2app 0.7.1
-
-
-3- Known Issues
-===============
-
-
-   4.1- All systems:
-      The conversion to sasmodels infrastructure is ongoing and should be
-      completed in the next release. In the meantime this leads to a few known
-      issues:
-        - The way that orientation is defined is being refactored to address
-        long standing issues and comments.  In release 4.1 however only models
-        with symmetry (e.g. a=b) have been converted to the new definitions.
-        The rest (a <> b <> c - e.g. parellelepiped) maintain the same
-        definition as before and will be converted in 4.2.  Note that
-        orientational distribution also makes much more sense in the new
-        framework.  The documentation should indicate which definition is being
-        used for a given model.
-        - The infrastructure currently handles internal conversion of old style
-        models so that user created models in previous versions should continue
-        to work for now. At some point in the future such support will go away.
-        Everyone is encouraged to convert to the new structure which should be
-        relatively straight forward and provides a number of benefits. 
-        - In that vein, the distributed models and those generated by the new
-        plugin model editor are in the new format, however those generated by
-        sum|multiply models are the old style sum|multiply models. This should
-        also disappear in the near future 
-        - The on the fly discovery of plugin models and changes thereto behave
-        inconsistently.  If a change to a plugin model does not seem to
-        register, the Load Plugin Models (under fitting -> Plugin Model
-        Operations) can be used.  However, after calling Load Plugin Models, the
-        active plugin will no longer be loaded (even though the GUI looks like
-        it is) unless it is a sum|multiply model which works properly.  All
-        others will need to be recalled from the model dropdown menu to reload
-        the model into the calculation engine.  While it might be annoying it
-        does not appear to prevent SasView from working..
-        - The model code and documentation review is ongoing. At this time the
-        core shell parellelepiped is known to have the C shell effectively fixed
-        at 0 (noted in documentation) while the triaxial ellipsoid does not seem
-        to reproduce the limit of the oblate or prolate ellipsoid. If errors are
-        found and corrected, corrected versions will be uploaded to the
-        marketplace. 
-   
-   3.1- All systems:
-        - The documentation window may take a few seconds to load the first time
-          it is called. Also, an internet connection is required before
-          equations will render properly. Until then they will show in their
-          original TeX format.
-        - If the documentation window remains stubbornly blank, try installing a
-          different browser and set that as your default browser. Issues have
-          been noted with Internet Explorer 11.
-        - Check for Updates may fail (with the status bar message ' Cannot
-          connect to the application server') if your internet connection uses
-          a proxy server. Tested resolutions for this are described on the
-          website FAQ.
-        - The copy and paste functions (^C, ^V) in the batch mode results grid
-          require two clicks: one to select the cell and a second to select the
-          contents of the cell.
-        - The tutorial has not yet been updated and is somewhat out of date
-        - Very old computers may struggle to run the 3.x and later releases
-        - Polydispersity on multiple parameters included in a simultaneous/
-          constrained fit will likely not be correct
-        - Constrained/simultaneous fit page does not have a stop button
-        - Constrained/simultaneous fit do not accept min/max limits
-        - Save project does not store the state of all the windows
-        - Loading projects can be very slow
-        - Save Project only works once a data set has been associated with
-          a model.  Error is reported on status bar.
-        - There is a numerical precision problem with the multishell model when
-          the iner radius gets large enough (ticket #288)
-        - The angular distribution angles are not clearly defined and may in
-          some cases lead to incorrect calculations(ticket #332)
-
-   3.2- Windows:
-        - If installed to same directory as old version without first removing
-          the old version, the old desktop icon will remain but point to the
-          new exe version. Likewise all the start menu folders and items will
-          have the old name even though pointing to the new version.  Usually
-          safest to uninstall old version prior to installing new version anyway.
-
-   3.3- MAC:
-        - Application normally starts up hidden. Click icon in Dock to view/use
-          application.
-        - Multiprocessing does not currently work on MAC OS
-
-   3.4- Linux:
-        - Not well tested
-
-
-4- SasView website
-==================
-
-   - www.sasview.org.  This main project site is the gateway to all
-     information about the sasview project.  It includes information
-     about the project, a FAQ page and links to all developer and user
-     information, tools and resources.
-
-
-5- Frequently Asked Questions
-=============================
-
-   - www.sasview.org/faq.html
-
-
-6- Installer download website
-=============================
-
-   - Latest release Version
-     - https://github.com/SasView/sasview/releases
-   - Latest developer builds
-     - https://jenkins.esss.dk/sasview/view/Master-Builds/
Index: installers/license.txt
===================================================================
--- installers/license.txt	(revision 2f6d340b9cd179b18c2a4efe77d149f45c7e98de)
+++ installers/license.txt	(revision d3114cc7e4ecdb328ff50a2af61f638107326813)
@@ -1,21 +1,31 @@
 This software was originally developed by the University of Tennessee 
 as part of the Distributed Data Analysis of Neutron Scattering 
-Experiments (DANSE) project funded by the US National Science Foundation
-and is currently being developed as an open source project hosted on GitHub
-and managed by a consortium of scattering facilities.
+Experiments (DANSE) project funded by the US National Science 
+Foundation (NSF), but is currently being developed as an Open Source 
+project hosted on GitHub and managed by a consortium of scattering 
+facilities.
 
-Participating facilities include: the University of Tennessee, the University 
-of Maryland, the European Spallation Source, the National Institute of 
-Standards & Technology Center for Neutron Research, the Oak Ridge National 
-Laboratory Neutron Sciences Directorate, the ISIS Neutron & Muon Source, the 
-Institut Laue Langevin, the Diamond Light Source, and Delft University of 
-Technology.
+Participating facilities include (in alphabetical order): 
+the Australian National Science & Technology Centre for Neutron 
+Scattering, the Diamond Light Source, the European Spallation Source, 
+the Institut Laue Langevin, the ISIS Pulsed Neutron & Muon Source, 
+the National Institute of Standards & Technology Center for Neutron 
+Research, the Oak Ridge National Laboratory Neutron Sciences 
+Directorate, and the Technical University Delft Reactor Institute.
 
-If you use this application to do scientific research that leads to publication, 
-we kindly ask that you acknowledge the use of the software with the following 
-sentence:
+SasView is distributed under a 'Three-clause' BSD licence which you 
+may read here: https://github.com/SasView/sasview/blob/master/LICENSE.TXT 
 
-*"This work benefited from the use of the SasView application, originally 
-developed under NSF award DMR-0520547."*
+SasView is free to download and use, including for commercial purposes.
 
-(C) 2009-2015 UTK, UMD, ESS, NIST, ORNL, ISIS, ILL, DLS, DUT
+© 2009-2018 UMD, UTK, NIST, ORNL, ISIS, ESS, ANSTO, ILL, TUD, DLS 
+
+
+If you use SasView to do productive scientific research that leads to 
+a publication, we ask that you acknowledge use of the program with 
+the following text:
+
+"This work benefited from the use of the SasView application, originally 
+developed under NSF Award DMR-0520547. SasView also contains code 
+developed with funding from the EU Horizon 2020 programme under the 
+SINE2020 project Grant No 654000."
Index: installers/setup_exe.py
===================================================================
--- installers/setup_exe.py	(revision 3da869277e4266d05f07e946b31a29f8ee548ccf)
+++ installers/setup_exe.py	(revision f05f6ff73bd3b17b3e32d3a485feb695e49279f7)
@@ -287,4 +287,5 @@
     'matplotlib', 'scipy', 'encodings', 'comtypes', 'h5py',
     'win32com', 'xhtml2pdf', 'bumps', 'sasmodels', 'sas',
+    'pkg_resources'
     ]
 packages.extend([
Index: src/sas/sascalc/dataloader/readers/abs_reader.py
===================================================================
--- src/sas/sascalc/dataloader/readers/abs_reader.py	(revision e3775c679a7033e0bd33a9387d5bdfa4fb87bc4b)
+++ src/sas/sascalc/dataloader/readers/abs_reader.py	(revision bd5c3b11a604dfd75fa3d6424e1ea40bcafd3727)
@@ -171,5 +171,5 @@
 
                 try:
-                    _x = float(toks[0])
+                    _x = float(toks[4])
                     _y = float(toks[1])
                     _dy = float(toks[2])
Index: src/sas/sascalc/fit/pagestate.py
===================================================================
--- src/sas/sascalc/fit/pagestate.py	(revision aca687ac38731c5a9ca8a3796ed35af3b9a59be1)
+++ src/sas/sascalc/fit/pagestate.py	(revision 59873e112188eeb053c5c84f0936a10f563da235)
@@ -144,4 +144,5 @@
 ################################################################################
 import time
+import re
 import os
 import sys
@@ -773,4 +774,9 @@
                     name = value.split(':', 1)[1].strip()
                     file_value = "File name:" + name
+                    #Truncating string so print doesn't complain of being outside margins
+                    if sys.platform != "win32":
+                        MAX_STRING_LENGHT = 50
+                        if len(file_value) > MAX_STRING_LENGHT:
+                            file_value = "File name:.."+file_value[-MAX_STRING_LENGHT+10:]
                     file_name = CENTRE % file_value
                     if len(title) == 0:
@@ -848,9 +854,12 @@
         html_str, text_str, title = self._get_report_string()
         # Allow 2 figures to append
-        image_links = [FEET_2%fig for fig in fig_urls]
-
+        #Constraining image width for OSX and linux, so print doesn't complain of being outside margins
+        if sys.platform == "win32":
+            image_links = [FEET_2%fig for fig in fig_urls]
+        else:
+            image_links = [FEET_2_unix%fig for fig in fig_urls]
         # final report html strings
         report_str = html_str + ELINE.join(image_links)
-
+        report_str += FEET_3
         return report_str, text_str
 
@@ -1081,6 +1090,6 @@
         if node.get('version'):
             # Get the version for model conversion purposes
-            self.version = tuple(int(e) for e in
-                                 str.split(node.get('version'), "."))
+            x = re.sub('[^\d.]', '', node.get('version'))
+            self.version = tuple(int(e) for e in str.split(x, "."))
             # The tuple must be at least 3 items long
             while len(self.version) < 3:
@@ -1495,5 +1504,8 @@
 """
 FEET_2 = \
-"""<img src="%s" ></img>
+"""<img src="%s"></img>
+"""
+FEET_2_unix = \
+"""<img src="%s" width="540"></img>
 """
 FEET_3 = \
Index: src/sas/sasgui/guiframe/config.py
===================================================================
--- src/sas/sasgui/guiframe/config.py	(revision 1efbc190a388190d54fbdbcf384110dd991977fe)
+++ src/sas/sasgui/guiframe/config.py	(revision 8ac05a59a0078f40fc8af4febae16624b9d5c818)
@@ -33,4 +33,5 @@
 _do_aboutbox = True
 _do_acknowledge = True
+_do_release = True
 _do_tutorial = True
 _acknowledgement_preamble =\
@@ -49,5 +50,4 @@
 _acknowledgement_citation = \
 '''M. Doucet et al. SasView Version 4.1.2, Zenodo, 10.5281/zenodo.825675'''
-
 _acknowledgement =  \
 '''This work was originally developed as part of the DANSE project funded by the US NSF under Award DMR-0520547,\n but is currently maintained by a collaboration between UTK, UMD, NIST, ORNL, ISIS, ESS, ILL, ANSTO, TU Delft, DLS, and the scattering community.\n\n SasView also contains code developed with funding from the EU Horizon 2020 programme under the SINE2020 project (Grant No 654000).\nA list of individual contributors can be found at: http://www.sasview.org/contact.html
@@ -94,5 +94,5 @@
 _corner_image = os.path.join(icon_path, "angles_flat.png")
 _welcome_image = os.path.join(icon_path, "SVwelcome.png")
-_copyright = "(c) 2009 - 2017, UTK, UMD, NIST, ORNL, ISIS, ESS, ILL, ANSTO, TU Delft, and DLS"
+_copyright = "(c) 2009 - 2018, UTK, UMD, NIST, ORNL, ISIS, ESS, ILL, ANSTO, TU Delft, and DLS"
 marketplace_url = "http://marketplace.sasview.org/"
 
Index: src/sas/sasgui/guiframe/gui_manager.py
===================================================================
--- src/sas/sasgui/guiframe/gui_manager.py	(revision b963b2066d6a76fe5073000c5a596a6fd0130ac4)
+++ src/sas/sasgui/guiframe/gui_manager.py	(revision 8ac05a59a0078f40fc8af4febae16624b9d5c818)
@@ -1276,11 +1276,24 @@
 
         wx_id = wx.NewId()
-        self._help_menu.Append(wx_id, '&Documentation', '')
+        self._help_menu.Append(wx_id, '&Documentation', 'Help documentation for SasView')
         wx.EVT_MENU(self, wx_id, self._onSphinxDocs)
 
         if config._do_tutorial and (IS_WIN or sys.platform == 'darwin'):
             wx_id = wx.NewId()
-            self._help_menu.Append(wx_id, '&Tutorial', 'Software tutorial')
+            # Pluralised both occurences of 'Tutorial' in the line below
+            # S King, Sep 2018
+            self._help_menu.Append(wx_id, '&Tutorials', 'Tutorials on how to use SasView')
             wx.EVT_MENU(self, wx_id, self._onTutorial)
+
+        if config.marketplace_url:
+            wx_id = wx.NewId()
+            self._help_menu.Append(wx_id, '&Model marketplace', 'Plug-in fitting models for SasView')
+            wx.EVT_MENU(self, wx_id, self._on_marketplace_click)
+
+        if config._do_release:
+            wx_id = wx.NewId()
+            self._help_menu.Append(wx_id, '&Release notes',
+                                   'SasView release notes and known issues')
+            wx.EVT_MENU(self, wx_id, self._onRelease)
 
         if config._do_acknowledge:
@@ -1293,11 +1306,6 @@
             logger.info("Doing help menu")
             wx_id = wx.NewId()
-            self._help_menu.Append(wx_id, '&About', 'Software information')
+            self._help_menu.Append(wx_id, '&About', 'Information about SasView')
             wx.EVT_MENU(self, wx_id, self._onAbout)
-
-        if config.marketplace_url:
-            wx_id = wx.NewId()
-            self._help_menu.Append(wx_id, '&Model marketplace', '')
-            wx.EVT_MENU(self, wx_id, self._on_marketplace_click)
 
         # Checking for updates
@@ -2137,4 +2145,18 @@
             dialog.ShowModal()
 
+    def _onRelease(self, evt):
+        """
+        Pop up the release notes
+
+        :param evt: menu event
+
+        """
+        # S King, Sep 2018
+
+        from documentation_window import DocumentationWindow
+        _TreeLocation = "user/release.html"
+        DocumentationWindow(self, -1, _TreeLocation, "",
+                            "SasView Documentation")
+
     def _onTutorial(self, evt):
         """
@@ -2144,42 +2166,17 @@
 
         """
-        if config._do_tutorial:
-            path = config.TUTORIAL_PATH
-            if IS_WIN:
-                try:
-                    from sas.sasgui.guiframe.pdfview import PDFFrame
-                    dialog = PDFFrame(None, -1, "Tutorial", path)
-                    # put icon
-                    self.put_icon(dialog)
-                    dialog.Show(True)
-                except:
-                    logger.error("Error in _onTutorial: %s" % sys.exc_value)
-                    try:
-                        # Try an alternate method
-                        logger.error(
-                            "Could not open the tutorial pdf, trying xhtml2pdf")
-                        from xhtml2pdf import pisa
-                        pisa.startViewer(path)
-                    except:
-                        logger.error(
-                            "Could not open the tutorial pdf with xhtml2pdf")
-                        msg = "This feature requires 'PDF Viewer'\n"
-                        wx.MessageBox(msg, 'Error')
-            else:
-                try:
-                    command = "open '%s'" % path
-                    os.system(command)
-                except:
-                    try:
-                        # Try an alternate method
-                        logger.error(
-                            "Could not open the tutorial pdf, trying xhtml2pdf")
-                        from xhtml2pdf import pisa
-                        pisa.startViewer(path)
-                    except:
-                        logger.error(
-                            "Could not open the tutorial pdf with xhtml2pdf")
-                        msg = "This feature requires the Preview application\n"
-                        wx.MessageBox(msg, 'Error')
+        # Action changed from that in 2.x/3.x/4.0.x/4.1.x
+        # Help >> Tutorial used to bring up a pdf of the
+        # original 2.x tutorial.
+        # Code below, implemented from 4.2.0, redirects
+        # action to the Tutorials page of the help 
+        # documentation to give access to all available
+        # tutorials
+        # S King, Sep 2018
+
+        from documentation_window import DocumentationWindow
+        _TreeLocation = "user/tutorial.html"
+        DocumentationWindow(self, -1, _TreeLocation, "",
+                            "SasView Documentation")
 
     def _onSphinxDocs(self, evt):
Index: src/sas/sasgui/guiframe/local_perspectives/plotting/parameters_panel_slicer.py
===================================================================
--- src/sas/sasgui/guiframe/local_perspectives/plotting/parameters_panel_slicer.py	(revision a26f67f1457e7e39b79d4c3800c03bcaa208dff7)
+++ src/sas/sasgui/guiframe/local_perspectives/plotting/parameters_panel_slicer.py	(revision a20a25573879c0953c15607f10eb7cf47e80c047)
@@ -251,7 +251,17 @@
             self.bck.Add(self.batch_slicer_button, (iy, ix), (1, 1),
                          wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 15)
+            # Help button
+
+            self.bt_help = wx.Button(self, wx.NewId(), "HELP")
+            self.bt_help.SetToolTipString(
+                "Help for the slicer parameters and batch slicing.")
+            self.bck.Add(self.bt_help, (iy, 1), (1, 1),
+                         wx.ALIGN_RIGHT | wx.ADJUST_MINSIZE, 15)
+            wx.EVT_BUTTON(self, self.bt_help.GetId(), self.on_help)
+
             iy += 1
             self.bck.Add((5, 5), (iy, ix), (1, 1),
                          wx.LEFT | wx.EXPAND | wx.ADJUST_MINSIZE, 5)
+
         self.bck.Layout()
         self.bck.Fit(self)
@@ -535,2 +545,15 @@
             self.default_value += "_{0}".format(key).split(" [")[0]
             self.default_value += "-{:.2f}".format(params[key])
+
+    def on_help(self, event=None):
+        """
+        Opens a help window for the slicer parameters/batch slicing window
+        :param event:
+        :return:
+        """
+        from sas.sasgui.guiframe.documentation_window import DocumentationWindow
+
+        _TreeLocation = "user/sasgui/guiframe/graph_help.html"
+        _doc_viewer = DocumentationWindow(self, wx.ID_ANY, _TreeLocation,
+                                          "#d-data-averaging",
+                                          "Data Explorer Help")
Index: src/sas/sasgui/guiframe/media/graph_help.rst
===================================================================
--- src/sas/sasgui/guiframe/media/graph_help.rst	(revision 5ed76f8390eac56ff5d3779fd9c454d0c8fe1dc0)
+++ src/sas/sasgui/guiframe/media/graph_help.rst	(revision de68f783b797a63fb6b92d9be7a3473e8c0e5dba)
@@ -266,4 +266,5 @@
 
 .. ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
+.. _d_data_averaging:
 
 2D data averaging
@@ -301,6 +302,7 @@
 Alternatively, once a 'slicer' is active you can also select the region to
 average by bringing back the *Dataset Menu* and selecting *Edit Slicer
-Parameters*. A dialog window will appear in which you can enter values to
-define a region or select the number of points to plot (*nbins*).
+Parameters and Batch Fitting*. A dialog window will appear in which you can
+enter values to define a region, select the number of points to plot (*nbins*),
+or apply the slicer to any or all other 2D data plots.
 
 A separate plot window will also have appeared, displaying the requested
@@ -315,4 +317,33 @@
 
 To remove a 'slicer', bring back the *Dataset menu* and select *Clear Slicer*.
+
+Batch Slicing
+^^^^^^^^^^^^^
+
+A slicer can be applied to any or all existing 2D data plots using the 'Slicer
+Parameters' window. To open the window, select *Edit Slicer Parameters and Batch
+Fitting* in the *Dataset Menu* (see Invoking_the_dataset_menu_). Batch slicing
+options are available at the bottom of the window.
+
+Select the 2D plots you want to apply the slicer to. All 2D plots are selected
+by default. The resulting 1D data for all slicers can be saved as a text file
+and then sent to fitting by selecting the *Auto save generated 1D* check box.
+Sending data to the fitting perspective requires the data be saved.
+
+Once the auto save check box is selected, you can select where the files are
+saved. The file name for the saved data is the slicer name plus the file name
+of the original data set, plus what is in the *Append to file name* field. The
+default value in the append to field includes the names and values for all of
+the slicer parameters.
+
+The batch of slices can be sent to fitting if desired, with three options
+available. The first is to not fit the data, the second is to send the
+slices to individual fit pages, and the third is to send all sliced data to a
+single batch fit window.
+
+Clicking *Apply Slicer to Selected Plots* will create a slicer for each selected
+plot with the parameters entered in the 'Slicer Parameters' window. Depending on
+the options selected the data may then be saved, loaded as separate data sets in
+the data manager panel, and finally sent to fitting.
 
 Unmasked circular average
Index: src/sas/sasgui/guiframe/report_dialog.py
===================================================================
--- src/sas/sasgui/guiframe/report_dialog.py	(revision 69a68979fe94b8f135a602e7f02b162e34616d53)
+++ src/sas/sasgui/guiframe/report_dialog.py	(revision d0ce666faaf0f9284be2e607a0ac846cdd9a682b)
@@ -7,4 +7,5 @@
 import sys
 import wx.html as html
+from sas.sasgui.guiframe.report_image_handler import ReportImageHandler
 
 logger = logging.getLogger(__name__)
@@ -27,5 +28,5 @@
 class BaseReportDialog(wx.Dialog):
 
-    def __init__(self, report_list, *args, **kwds):
+    def __init__(self, report_list, imgRAM, fig_urls, *args, **kwds):
         """
         Initialization. The parameters added to Dialog are:
@@ -37,4 +38,8 @@
         kwds["image"] = 'Dynamic Image'
 
+        #MemoryFSHandle for storing images
+        self.imgRAM = imgRAM
+        #Images location in urls
+        self.fig_urls = fig_urls
         # title
         self.SetTitle("Report")
@@ -66,4 +71,6 @@
         button_close = wx.Button(self, wx.ID_OK, "Close")
         button_close.SetToolTipString("Close this report window.")
+        button_close.Bind(wx.EVT_BUTTON, self.onClose,
+                          id=button_close.GetId())
         hbox.Add(button_close)
         button_close.SetFocus()
@@ -75,8 +82,9 @@
         hbox.Add(button_print)
 
-        button_save = wx.Button(self, wx.NewId(), "Save")
-        button_save.SetToolTipString("Save this report.")
-        button_save.Bind(wx.EVT_BUTTON, self.onSave, id=button_save.GetId())
-        hbox.Add(button_save)
+        if sys.platform != "darwin":
+            button_save = wx.Button(self, wx.NewId(), "Save")
+            button_save.SetToolTipString("Save this report.")
+            button_save.Bind(wx.EVT_BUTTON, self.onSave, id=button_save.GetId())
+            hbox.Add(button_save)
 
         # panel for report page
@@ -111,10 +119,14 @@
         printh.PrintText(self.report_html)
 
-    def OnClose(self, event=None):
+
+    def onClose(self, event=None):
         """
         Close the Dialog
         : event: Close button event
         """
-        self.Close()
+        for fig in self.fig_urls:
+            ReportImageHandler.remove_figure(fig)
+
+        self.Destroy()
 
     def HTML2PDF(self, data, filename):
Index: src/sas/sasgui/guiframe/report_image_handler.py
===================================================================
--- src/sas/sasgui/guiframe/report_image_handler.py	(revision d0ce666faaf0f9284be2e607a0ac846cdd9a682b)
+++ src/sas/sasgui/guiframe/report_image_handler.py	(revision d0ce666faaf0f9284be2e607a0ac846cdd9a682b)
@@ -0,0 +1,81 @@
+import wx
+import logging
+
+logger = logging.getLogger(__name__)
+
+
+class ReportImageHandler:
+    # Singleton class that manages all report plot images
+    # To call the handler, call the static method set_figs
+
+    class _ReportImageHandler:
+
+        def __init__(self):
+            wx.FileSystem.AddHandler(wx.MemoryFSHandler())
+            self.img_holder = wx.MemoryFSHandler()
+            self.refs = {}
+            self.indices = []
+
+        def set_figs(self, figs, bitmaps, perspective):
+            """
+            Save figures and images to memory and return refernces
+            :param figs: A list of matplotlib Figures
+            :param bitmaps: A list of bitmaps
+            :param perspective: A String with the perspective name
+            :return: A tuple of a list of Figures and a list of memory refs
+            """
+            imgs = []
+            refs = []
+            if figs is None or len(figs) == 0:
+                figs = [None]
+            for fig in figs:
+                if fig is not None:
+                    ind = figs.index(fig)
+                    bitmap = bitmaps[ind]
+
+                # name of the fig
+                name = self.create_unique_name(perspective)
+                # AddFile, image can be retrieved with 'memory:filename'
+                ref = 'memory:' + name
+                self.refs[ref] = fig
+                self.img_holder.AddFile(name, bitmap, wx.BITMAP_TYPE_PNG)
+                refs.append(ref)
+                imgs.append(fig)
+            return imgs, refs
+
+        def create_unique_name(self, perspective, index=None):
+            """
+            Create a unique key for each item in memory
+            :param perspective: The perspective name as a string
+            :param index: The base index used for incrementing the name
+            :return: A unique file name not currently in use
+            """
+            if not index:
+                index = len(self.indices)
+            if index in self.indices:
+                name = self.create_unique_name(index + 1)
+            else:
+                self.indices.append(index)
+                name = 'img_{}_{:03d}.png'.format(str(perspective), index)
+            return name
+
+    instance = None
+
+    @staticmethod
+    def check_for_empty_instance():
+        if ReportImageHandler.instance is None:
+            ReportImageHandler.instance = \
+                ReportImageHandler._ReportImageHandler()
+
+    @staticmethod
+    def set_figs(figs, bitmaps, perspective):
+        ReportImageHandler.check_for_empty_instance()
+        return ReportImageHandler.instance.set_figs(figs, bitmaps, perspective)
+
+    @staticmethod
+    def remove_figure(fig_url):
+        try:
+            ReportImageHandler.check_for_empty_instance()
+            ReportImageHandler.instance.refs.pop(fig_url)
+        except Exception as e:
+            logger.warn(e)
Index: src/sas/sasgui/perspectives/calculator/media/slit_calculator_help.rst
===================================================================
--- src/sas/sasgui/perspectives/calculator/media/slit_calculator_help.rst	(revision 5ed76f8390eac56ff5d3779fd9c454d0c8fe1dc0)
+++ src/sas/sasgui/perspectives/calculator/media/slit_calculator_help.rst	(revision 346745a30813fd45fc6d6f85fe5dd51bb9790081)
@@ -11,9 +11,22 @@
 -----------
 
-This tool enables X-ray users to calculate the slit size (FWHM/2) for smearing
-based on their half beam profile data.
+This tool enables X-ray users to calculate the slit size (FWHM/2) for resolution 
+smearing purposes based on their half beam profile data (as Q vs Intensity; any 
+other data fields are ignored).
 
-*NOTE! Whilst it may have some more generic applicability, the calculator has
-only been tested with beam profile data from Anton-Paar SAXSess:sup:`TM` software.*
+Method
+------
+
+The tool works by sequentially summing 10 or more intensity values until a 
+maximum value is attained. It then locates the Q values for the points just before, 
+and just after, **half** of this maximum value and interpolates between them to get 
+an accurate value for the Q value for the half maximum.
+
+NOTE! Whilst it may have some more generic applicability, the calculator has
+only been tested with beam profile data from Anton-Paar SAXSess\ :sup:`TM`\  software.
+The beam profile file does not carry any information about the units of the 
+Q data. It is probably |nm^-1| but the resolution calculations assume the slit 
+height/width has units of |Ang^-1|. If the beam profile data is not in these 
+units then it, or the result, must be manually converted.
 
 .. ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
@@ -27,14 +40,10 @@
 
    *NOTE! To see an example of the beam profile file format, visit the file
-   beam profile.DAT in your {installation_directory}/SasView/test folder.*
+   beam profile.DAT in your {installation_directory}/SasView/test_1d folder.*
 
 3) Once a data is loaded, the slit size is automatically computed and displayed
    in the tool window.
 
-*NOTE! The beam profile file does not carry any information about the units of
-the Q data. This calculator assumes the data has units of 1/\ |Ang|\ . If the
-data is not in these units it must be manually converted beforehand.*
-
 .. ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
 
-.. note::  This help document was last changed by Steve King, 01May2015
+.. note::  This help document was last changed by Steve King, 09Sep2018
Index: src/sas/sasgui/perspectives/calculator/model_editor.py
===================================================================
--- src/sas/sasgui/perspectives/calculator/model_editor.py	(revision c6dfb9f046833f237adda045c26f0ae7a04a6284)
+++ src/sas/sasgui/perspectives/calculator/model_editor.py	(revision 9bf40e7da42d4112c3098b54d9c3b12081500c84)
@@ -43,9 +43,9 @@
 if sys.platform.count("win32") > 0:
     FONT_VARIANT = 0
-    PNL_WIDTH = 450
+    PNL_WIDTH = 500
     PNL_HEIGHT = 320
 else:
     FONT_VARIANT = 1
-    PNL_WIDTH = 590
+    PNL_WIDTH = 500
     PNL_HEIGHT = 350
 M_NAME = 'Model'
@@ -495,16 +495,23 @@
         Choose the equation to use depending on whether we now have
         a sum or multiply model then create the appropriate string
+        
+        for the sum model the result will be:
+        scale_factor * (scale1 * model_1 + scale2 * model_2) + background
+        while for the multiply model it will just be:
+        scale_factor * (model_1* model_2) + background
         """
         name = ''
         if operator == '*':
             name = 'Multi'
-            factor = 'background'
+            factor_1 = ''
+            factor_2 = ''
         else:
             name = 'Sum'
-            factor = 'scale_factor'
+            factor_1 = 'scale_1 * '
+            factor_2 = 'scale_2 * '
 
         self._operator = operator
-        self.explanation = ("  Plugin_model = scale_factor * (model_1 {} "
-            "model_2) + background").format(operator)
+        self.explanation = ("  Plugin_model = scale_factor * ({}model_1 {} "
+            "{}model_2) + background").format(factor_1,operator,factor_2)
         self.explanationctr.SetLabel(self.explanation)
         self.name = name + M_NAME
@@ -663,9 +670,7 @@
         Do the layout for parameter related widgets
         """
-        param_txt = wx.StaticText(self, -1, 'Fit Parameters NOT requiring' + \
-                                  ' polydispersity (if any): ')
-
-        param_tip = "#Set the parameters NOT requiring polydispersity " + \
-        "and their initial values.\n"
+        param_txt = wx.StaticText(self, -1, 'Fit Parameters: ')
+
+        param_tip = "#Set the parameters and their initial values.\n"
         param_tip += "#Example:\n"
         param_tip += "A = 1\nB = 1"
@@ -681,21 +686,4 @@
                                   (self.param_tcl, 1, wx.EXPAND | wx.ALL, 10)])
 
-        # Parameters with polydispersity
-        pd_param_txt = wx.StaticText(self, -1, 'Fit Parameters requiring ' + \
-                                     'polydispersity (if any): ')
-
-        pd_param_tip = "#Set the parameters requiring polydispersity and " + \
-        "their initial values.\n"
-        pd_param_tip += "#Example:\n"
-        pd_param_tip += "C = 2\nD = 2"
-        newid = wx.NewId()
-        self.pd_param_tcl = EditWindow(self, newid, wx.DefaultPosition,
-                                    wx.DefaultSize,
-                                    wx.CLIP_CHILDREN | wx.SUNKEN_BORDER)
-        self.pd_param_tcl.setDisplayLineNumbers(True)
-        self.pd_param_tcl.SetToolTipString(pd_param_tip)
-
-        self.param_sizer.AddMany([(pd_param_txt, 0, wx.LEFT, 10),
-                                  (self.pd_param_tcl, 1, wx.EXPAND | wx.ALL, 10)])
 
     def _layout_function(self):
@@ -899,5 +887,4 @@
             description = self.desc_tcl.GetValue()
             param_str = self.param_tcl.GetText()
-            pd_param_str = self.pd_param_tcl.GetText()
             func_str = self.function_tcl.GetText()
             # No input for the model function
@@ -905,5 +892,5 @@
                 if func_str.count('return') > 0:
                     self.write_file(self.fname, name, description, param_str,
-                                    pd_param_str, func_str)
+                                    func_str)
                     try:
                         result, msg = check_model(self.fname), None
@@ -945,5 +932,5 @@
         self.warning = msg
 
-    def write_file(self, fname, name, desc_str, param_str, pd_param_str, func_str):
+    def write_file(self, fname, name, desc_str, param_str, func_str):
         """
         Write content in file
@@ -952,5 +939,4 @@
         :param desc_str: content of the description strings
         :param param_str: content of params; Strings
-        :param pd_param_str: content of params requiring polydispersity; Strings
         :param func_str: content of func; Strings
         """
@@ -966,5 +952,4 @@
         # Write out parameters
         param_names = []    # to store parameter names
-        pd_params = []
         out_f.write('parameters = [ \n')
         out_f.write('#   ["name", "units", default, [lower, upper], "type", "description"],\n')
@@ -973,12 +958,8 @@
             out_f.write("    ['%s', '', %s, [-inf, inf], '', '%s'],\n"
                         % (pname, pvalue, desc))
-        for pname, pvalue, desc in self.get_param_helper(pd_param_str):
-            param_names.append(pname)
-            pd_params.append(pname)
-            out_f.write("    ['%s', '', %s, [-inf, inf], 'volume', '%s'],\n"
-                        % (pname, pvalue, desc))
         out_f.write('    ]\n')
 
         # Write out function definition
+        out_f.write('\n')
         out_f.write('def Iq(%s):\n' % ', '.join(['x'] + param_names))
         out_f.write('    """Absolute scattering"""\n')
@@ -990,12 +971,7 @@
             out_f.write('    import numpy as np')
         for func_line in func_str.split('\n'):
-            out_f.write('%s%s\n' % (spaces4, func_line))
+            out_f.write('%s%s\n' % ('    ', func_line))
         out_f.write('## uncomment the following if Iq works for vector x\n')
         out_f.write('#Iq.vectorized = True\n')
-
-        # If polydisperse, create place holders for form_volume, ER and VR
-        if pd_params:
-            out_f.write('\n')
-            out_f.write(CUSTOM_TEMPLATE_PD % {'args': ', '.join(pd_params)})
 
         # Create place holder for Iqxy
@@ -1128,29 +1104,4 @@
 description = """%(description)s"""
 
-'''
-
-CUSTOM_TEMPLATE_PD = '''\
-def form_volume(%(args)s):
-    """
-    Volume of the particles used to compute absolute scattering intensity
-    and to weight polydisperse parameter contributions.
-    """
-    return 0.0
-
-def ER(%(args)s):
-    """
-    Effective radius of particles to be used when computing structure factors.
-
-    Input parameters are vectors ranging over the mesh of polydispersity values.
-    """
-    return 0.0
-
-def VR(%(args)s):
-    """
-    Volume ratio of particles to be used when computing structure factors.
-
-    Input parameters are vectors ranging over the mesh of polydispersity values.
-    """
-    return 1.0
 '''
 
Index: src/sas/sasgui/perspectives/calculator/pyconsole.py
===================================================================
--- src/sas/sasgui/perspectives/calculator/pyconsole.py	(revision 4627657012479a5a97fa088f21eb6a94c0f29f6a)
+++ src/sas/sasgui/perspectives/calculator/pyconsole.py	(revision e2663b7a7ed44d36d60ec897fa92d1309bcf6d8b)
@@ -28,7 +28,39 @@
     Check that the model on the path can run.
     """
+    # TODO: fix model caching
+    # model_test.run_one() is directly forcing a reload of the module, but
+    # sasview_model is caching models that have already been loaded.
+    # If the sasview load happens before the test, then the module is
+    # reloaded out from under it, which causes the global variables in
+    # the model function definitions to be cleared (at least in python 2.7).
+    # To fix the proximal problem of models failing on test, perform the
+    # run_one() tests first.  To fix the deeper problem we should either
+    # remove caching from sasmodels.sasview_model.load_custom_model() or
+    # add caching to sasmodels.custom.load_custom_kernel_module().  Another
+    # option is to add a runTests method to SasviewModel which runs the
+    # test suite directly from the model info structure.  Probably some
+    # combination of options:
+    #    (1) have this function (check_model) operate on a loaded model
+    #    so that caching isn't needed in sasview_models.load_custom_model
+    #    (2) add the runTests method to SasviewModel so that tests can
+    #    be run on a loaded module.
+    #
+    # Also, note that the model test suite runs the equivalent of the
+    # "try running the model" block below, and doesn't need to be run
+    # twice.  The reason for duplicating the block here is to generate
+    # an exception that show_model_output can catch.  Need to write the
+    # runTests method so that it returns success flag as well as output
+    # string so that the extra test is not necessary.
+
+    # check the model's unit tests run
+    from sasmodels.model_test import run_one
+    result = run_one(path)
+
+    # remove cached version of the model, if any
+    from sasmodels import sasview_model
+    sasview_model.MODEL_BY_PATH.pop(path, None)
+
     # try running the model
-    from sasmodels.sasview_model import load_custom_model
-    Model = load_custom_model(path)
+    Model = sasview_model.load_custom_model(path)
     model = Model()
     q =  np.array([0.01, 0.1])
@@ -36,8 +68,4 @@
     qx, qy =  np.array([0.01, 0.01]), np.array([0.1, 0.1])
     Iqxy = model.evalDistribution([qx, qy])
-
-    # check the model's unit tests run
-    from sasmodels.model_test import run_one
-    result = run_one(path)
 
     return result
Index: src/sas/sasgui/perspectives/calculator/resolution_calculator_panel.py
===================================================================
--- src/sas/sasgui/perspectives/calculator/resolution_calculator_panel.py	(revision 7432acb919f4013119ca918a73350297e0d4c93f)
+++ src/sas/sasgui/perspectives/calculator/resolution_calculator_panel.py	(revision 1cf490b648906629e67d57ec00ad3cd52e08523f)
@@ -18,5 +18,5 @@
 matplotlib.use('WXAgg')
 from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
-from matplotlib.backends.backend_wxagg import NavigationToolbar2Wx as Toolbar
+from matplotlib.backends.backend_wxagg import NavigationToolbar2WxAgg as Toolbar
 from matplotlib.backend_bases import FigureManagerBase
 # Wx-Pylab magic for displaying plots within an application's window.
Index: src/sas/sasgui/perspectives/calculator/slit_length_calculator_panel.py
===================================================================
--- src/sas/sasgui/perspectives/calculator/slit_length_calculator_panel.py	(revision 7432acb919f4013119ca918a73350297e0d4c93f)
+++ src/sas/sasgui/perspectives/calculator/slit_length_calculator_panel.py	(revision d78861987017138f4c36cc97a261c26e80c03f64)
@@ -248,4 +248,6 @@
             Complete the loading and compute the slit size
         """
+        if isinstance(data, list):
+            data = data[0]
         if data is None or data.__class__.__name__ == 'Data2D':
             if self.parent.parent is None:
Index: src/sas/sasgui/perspectives/fitting/basepage.py
===================================================================
--- src/sas/sasgui/perspectives/fitting/basepage.py	(revision 1f4d708b9de04a250ee358a7821a2cdb9f0e7d75)
+++ src/sas/sasgui/perspectives/fitting/basepage.py	(revision b43988196e5c4f2dfbf3ec5c9b66703d5656b08d)
@@ -31,4 +31,5 @@
 
 from sas.sasgui.guiframe.panel_base import PanelBase
+from sas.sasgui.guiframe.report_image_handler import ReportImageHandler
 from sas.sasgui.guiframe.utils import format_number, check_float, IdList, \
     check_int
@@ -641,8 +642,7 @@
         # get the strings for report
         report_str, text_str = self.state.report(fig_urls=refs)
-
         # Show the dialog
         report_list = [report_str, text_str, images]
-        dialog = ReportDialog(report_list, None, wx.ID_ANY, "")
+        dialog = ReportDialog(report_list, imgRAM, refs, None, wx.ID_ANY, "")
         dialog.Show()
 
@@ -652,35 +652,10 @@
         by plotting, putting it into wx.FileSystem image object
         """
-        images = []
-        refs = []
-
-        # For no figures in the list, prepare empty plot
-        if figs is None or len(figs) == 0:
-            figs = [None]
-
-        # Loop over the list of figures
-        # use wx.MemoryFSHandler
-        imgRAM = wx.MemoryFSHandler()
-        for fig in figs:
-            if fig is not None:
-                ind = figs.index(fig)
-                canvas = canvases[ind]
-
-            # store the image in wx.FileSystem Object
-            wx.FileSystem.AddHandler(wx.MemoryFSHandler())
-
-            # index of the fig
-            ind = figs.index(fig)
-
-            # AddFile, image can be retrieved with 'memory:filename'
-            name = 'img_fit%s.png' % ind
-            refs.append('memory:' + name)
-            imgRAM.AddFile(name, canvas.bitmap, wx.BITMAP_TYPE_PNG)
-
-            # append figs
-            images.append(fig)
-
-        return imgRAM, images, refs
-
+        bitmaps = []
+        for canvas in canvases:
+            bitmaps.append(canvas.bitmap)
+        imgs, refs = ReportImageHandler.set_figs(figs, bitmaps, 'fit')
+
+        return ReportImageHandler.instance, imgs, refs
 
     def on_save(self, event):
@@ -1472,7 +1447,9 @@
             # we need to check here ourselves.
             if not is_modified:
-                is_modified = (self._check_value_enter(self.fittable_param)
-                               or self._check_value_enter(self.fixed_param)
-                               or self._check_value_enter(self.parameters))
+                is_modified = self._check_value_enter(self.fittable_param)
+                is_modified = self._check_value_enter(
+                    self.fixed_param) or is_modified
+                is_modified = self._check_value_enter(
+                    self.parameters) or is_modified
 
             # Here we should check whether the boundaries have been modified.
@@ -1536,7 +1513,7 @@
                         data=[self.data])
             # Check the values
-            is_modified = (self._check_value_enter(self.fittable_param)
-                           or self._check_value_enter(self.fixed_param)
-                           or self._check_value_enter(self.parameters))
+            is_modified = self._check_value_enter(self.fittable_param)
+            is_modified = self._check_value_enter(self.fixed_param) or is_modified
+            is_modified = self._check_value_enter(self.parameters) or is_modified
 
             # If qmin and qmax have been modified, update qmin and qmax and
@@ -2324,5 +2301,6 @@
 
             # Update value in model if it has changed
-            if value != self.model.getParam(name):
+            if (value != self.model.getParam(name) or
+                    (np.isnan(value) and np.isnan(self.model.getParam(name)))):
                 self.model.setParam(name, value)
                 is_modified = True
@@ -2551,4 +2529,5 @@
             # draw
             self._draw_model()
+            self.Layout()
             self.Refresh()
         except Exception:
@@ -2799,17 +2778,21 @@
         Function called when 'Help' button is pressed next to model
         of interest.  This calls DocumentationWindow from
-        documentation_window.py. It will load the top level of the model
-        help documenation sphinx generated html if no model is presented.
-        If a model IS present then if documention for that model exists
-        it will load to that  point otherwise again it will go to the top.
-        For Wx2.8 and below is used (i.e. non-released through installer)
-        a browser is loaded and the top of the model documentation only is
-        accessible because webbrowser module does not pass anything after
-        the # to the browser.
+        documentation_window.py. It will load the top level of the html model
+        help documenation sphinx generated if either a plugin model (which
+        normally does not have an html help help file) is selected or if no
+        model is selected. Otherwise, if a regula model is selected, the
+        documention for that model will be sent to a browser window.
+
+        :todo the quick fix for no documentation in plugins is the if statment.
+        However, the right way to do this would be to check whether the hmtl
+        file exists and load the model docs if it does and the general docs if
+        it doesn't - this will become important if we ever figure out how to
+        build docs for plugins on the fly.  Sep 9, 2018 -PDB
 
         :param event: on Help Button pressed event
         """
 
-        if self.model is not None:
+        if (self.model is not None) and (self.categorybox.GetValue()
+                                         != "Plugin Models"):
             name = self.formfactorbox.GetValue()
             _TreeLocation = 'user/models/%s.html' % name
Index: src/sas/sasgui/perspectives/fitting/fitpage.py
===================================================================
--- src/sas/sasgui/perspectives/fitting/fitpage.py	(revision e8707025646922ab7fc3e234f1a9aee4a6b09ba2)
+++ src/sas/sasgui/perspectives/fitting/fitpage.py	(revision dabcaf7ca863c03f09de926ea406e209584fcc67)
@@ -705,7 +705,6 @@
 
                         ix = 3
-                        ctl2 = wx.TextCtrl(self, wx.ID_ANY,
-                                           size=(_BOX_WIDTH / 1.3, 20),
-                                           style=0)
+                        ctl2 = BGTextCtrl(self, wx.ID_ANY,
+                                           size=(_BOX_WIDTH / 1.3, 20))
 
                         self.sizer4_4.Add(ctl2, (iy, ix), (1, 1),
@@ -1997,4 +1996,5 @@
         self.on_smear_helper()
         self.on_set_focus(None)
+        self.Layout()
         self.Refresh()
         # update model plot with new data information
@@ -2891,6 +2891,6 @@
                         text2.Hide()
                     ix += 1
-                    ctl2 = wx.TextCtrl(self, wx.ID_ANY,
-                                       size=(_BOX_WIDTH / 1.2, 20), style=0)
+                    ctl2 = BGTextCtrl(self, wx.ID_ANY,
+                                       size=(_BOX_WIDTH / 1.2, 20))
                     sizer.Add(ctl2, (iy, ix), (1, 1),
                               wx.EXPAND | wx.ADJUST_MINSIZE, 0)
Index: src/sas/sasgui/perspectives/fitting/gpu_options.py
===================================================================
--- src/sas/sasgui/perspectives/fitting/gpu_options.py	(revision 42a6e029d713dd90abf6af8ac04156c566900404)
+++ src/sas/sasgui/perspectives/fitting/gpu_options.py	(revision 388aefbfe7862efae1f1595105c7a8b53bb3e8e3)
@@ -139,4 +139,7 @@
 
         test_text = wx.StaticText(self, -1, "WARNING: Running tests can take a few minutes!")
+        test_text2 = wx.StaticText(self, -1, "NOTE: No test will run if No OpenCL is checked")
+        test_text.SetForegroundColour(wx.RED)
+        self.vbox.Add(test_text2, 0, wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 10)
         self.vbox.Add(test_text, 0, wx.LEFT|wx.EXPAND|wx.ADJUST_MINSIZE, 10)
 
Index: src/sas/sasgui/perspectives/fitting/media/fitting_help.rst
===================================================================
--- src/sas/sasgui/perspectives/fitting/media/fitting_help.rst	(revision 47ace500b69b84227cf32c9ef9bb1118c093b7e2)
+++ src/sas/sasgui/perspectives/fitting/media/fitting_help.rst	(revision 8b893964adb6b330d7638d1e9692c0aacf81a9b6)
@@ -180,15 +180,15 @@
 *checked*\ .
 
-Also note that the 'Fit Parameters' have been split into two sections: those
-which can be polydisperse (shape and orientation parameters) and those which are
-not (eg, scattering length densities).
-
 A model file generated by this option can be viewed and further modified using
 the :ref:`Advanced_Plugin_Editor` .
 
-**SasView version 4.2** made it possible to specify whether a plugin created with
-the *New Plugin Model* dialog is actually a form factor P(Q) or a structure factor
-S(Q). To do this, simply add one or other of the following lines under the *import*
-statements.
+Note that the New Plugin Model Feature currently does not allow for parameters
+to be polydisperse.  However they can be edited in the Advanced Editor.
+
+
+**SasView version 4.2** made it possible to specify whether a plugin created
+with the *New Plugin Model* dialog is actually a form factor P(Q) or a structure
+factor S(Q). To do this, simply add one or other of the following lines under
+the *import* statements.
 
 For a form factor::
@@ -200,6 +200,6 @@
      structure_factor = True
 
-If the plugin is a structure factor it is *also* necessary to add two variables to
-the parameter list::
+If the plugin is a structure factor it is *also* necessary to add two variables
+to the parameter list::
 
      parameters = [
Index: src/sas/sasgui/perspectives/fitting/report_dialog.py
===================================================================
--- src/sas/sasgui/perspectives/fitting/report_dialog.py	(revision 69a68979fe94b8f135a602e7f02b162e34616d53)
+++ src/sas/sasgui/perspectives/fitting/report_dialog.py	(revision 44e8f48e6ada97db8eb483009edc07705c6329a2)
@@ -72,14 +72,12 @@
         filename = basename + ext
 
-        # save figures
-        pictures = []
-        for num in range(self.nimages):
-            pic_name = basename + '_img%s.png' % num
-            # save the image for use with pdf writer
-            self.report_list[2][num].savefig(pic_name)
-            pictures.append(pic_name)
+        # save the images for use with pdf writer
+        pictures = [
+            '_'.join((basename, url.split(':')[1])) for url in self.fig_urls]
+        for i, pic in enumerate(pictures):
+            self.report_list[2][i].savefig(pic)
 
         # translate png references int html from in-memory name to on-disk name
-        html = self.report_html.replace("memory:img_fit", basename+'_img')
+        html = self.report_html.replace("memory:", basename+'_')
 
         #set file extensions
Index: src/sas/sasgui/perspectives/invariant/invariant_panel.py
===================================================================
--- src/sas/sasgui/perspectives/invariant/invariant_panel.py	(revision 2469df7fc9ffa047115c5bffe589ed307b12c363)
+++ src/sas/sasgui/perspectives/invariant/invariant_panel.py	(revision 44e8f48e6ada97db8eb483009edc07705c6329a2)
@@ -24,4 +24,5 @@
 from sas.sasgui.guiframe.panel_base import PanelBase
 from sas.sasgui.guiframe.documentation_window import DocumentationWindow
+from sas.sasgui.guiframe.report_image_handler import ReportImageHandler
 
 logger = logging.getLogger(__name__)
@@ -783,5 +784,8 @@
         report_img = self.state.image
         report_list = [report_html_str, report_text_str, report_img]
-        dialog = ReportDialog(report_list, None, -1, "")
+        ReportImageHandler.check_for_empty_instance()
+        imgRAM = ReportImageHandler.instance.img_holder
+        refs = [self.state.wximgbmp]
+        dialog = ReportDialog(report_list, imgRAM, refs, None, wx.ID_ANY, "")
         dialog.Show()
 
Index: src/sas/sasgui/perspectives/invariant/invariant_state.py
===================================================================
--- src/sas/sasgui/perspectives/invariant/invariant_state.py	(revision 2469df7fc9ffa047115c5bffe589ed307b12c363)
+++ src/sas/sasgui/perspectives/invariant/invariant_state.py	(revision fa412df39d3c5338c2c5f69fed935b428f385ebe)
@@ -12,4 +12,5 @@
 from lxml import etree
 from sas.sascalc.dataloader.readers.cansas_reader import Reader as CansasReader
+from sas.sasgui.guiframe.report_image_handler import ReportImageHandler
 from sas.sascalc.dataloader.readers.cansas_reader import get_content
 from sas.sasgui.guiframe.utils import format_number
@@ -611,12 +612,8 @@
         wximgbmp = wx.BitmapFromImage(wximg)
         # store the image in wx.FileSystem Object
-        wx.FileSystem.AddHandler(wx.MemoryFSHandler())
-        # use wx.MemoryFSHandler
-        self.imgRAM = wx.MemoryFSHandler()
-        # AddFile, image can be retrieved with 'memory:filename'
-        self.imgRAM.AddFile('img_inv.png', wximgbmp, wx.BITMAP_TYPE_PNG)
-
-        self.wximgbmp = 'memory:img_inv.png'
-        self.image = fig
+        imgs, refs = ReportImageHandler.set_figs([fig], [wximgbmp], 'inv')
+
+        self.wximgbmp = refs[0]
+        self.image = imgs[0]
 
 class Reader(CansasReader):
Index: src/sas/sasgui/perspectives/invariant/report_dialog.py
===================================================================
--- src/sas/sasgui/perspectives/invariant/report_dialog.py	(revision 959eb0181ad06828a748f04512f953aad5b31659)
+++ src/sas/sasgui/perspectives/invariant/report_dialog.py	(revision d0ce666faaf0f9284be2e607a0ac846cdd9a682b)
@@ -41,5 +41,5 @@
 
         # put image path in the report string
-        self.report_html = self.report_list[0] % "memory:img_inv.png"
+        self.report_html = self.report_list[0] % self.fig_urls[0]
         # layout
         self._setup_layout()
Index: src/sas/sasview/__init__.py
===================================================================
--- src/sas/sasview/__init__.py	(revision 3ca67dcf561ac22bb28bf757a2942bfa6d2d7550)
+++ src/sas/sasview/__init__.py	(revision b229a3bf14cf52237670dc67090e092cbe9939db)
Index: src/sas/sasview/local_config.py
===================================================================
--- src/sas/sasview/local_config.py	(revision b963b2066d6a76fe5073000c5a596a6fd0130ac4)
+++ src/sas/sasview/local_config.py	(revision 8ac05a59a0078f40fc8af4febae16624b9d5c818)
@@ -33,4 +33,5 @@
 _do_aboutbox = True
 _do_acknowledge = True
+_do_release = True
 _do_tutorial = True
 _acknowledgement_preamble =\
@@ -48,6 +49,5 @@
 '''This work benefited from the use of the SasView application, originally developed under NSF Award DMR-0520547. SasView also contains code developed with funding from the EU Horizon 2020 programme under the SINE2020 project Grant No 654000.'''
 _acknowledgement_citation = \
-'''M. Doucet et al. SasView Version 4.1.2, Zenodo, 10.5281/zenodo.825675'''
-
+'''M. Doucet et al. SasView Version 4.2, Zenodo, 10.5281/zenodo.1412041'''
 _acknowledgement =  \
 '''This work was originally developed as part of the DANSE project funded by the US NSF under Award DMR-0520547,\n but is currently maintained by a collaboration between UTK, UMD, NIST, ORNL, ISIS, ESS, ILL, ANSTO, TU Delft, DLS, and the scattering community.\n\n SasView also contains code developed with funding from the EU Horizon 2020 programme under the SINE2020 project (Grant No 654000).\nA list of individual contributors can be found at: http://www.sasview.org/contact.html
@@ -94,5 +94,5 @@
 _corner_image = os.path.join(icon_path, "angles_flat.png")
 _welcome_image = os.path.join(icon_path, "SVwelcome.png")
-_copyright = "(c) 2009 - 2017, UTK, UMD, NIST, ORNL, ISIS, ESS, ILL, ANSTO, TU Delft, and DLS"
+_copyright = "(c) 2009 - 2018, UTK, UMD, NIST, ORNL, ISIS, ESS, ILL, ANSTO, TU Delft, and DLS"
 marketplace_url = "http://marketplace.sasview.org/"
 
Index: src/sas/sasview/media/.gitignore
===================================================================
--- src/sas/sasview/media/.gitignore	(revision 356af60ef4067ec412316b5d0ea7e787955d8487)
+++ src/sas/sasview/media/.gitignore	(revision 356af60ef4067ec412316b5d0ea7e787955d8487)
@@ -0,0 +1,1 @@
+/README.txt
Index: src/sas/sasview/media/README.txt
===================================================================
--- src/sas/sasview/media/README.txt	(revision efe730d4bba7a05c203957e4495eece8359fcd77)
+++ src/sas/sasview/media/README.txt	(revision 356af60ef4067ec412316b5d0ea7e787955d8487)
@@ -1,6 +1,8 @@
+The files in this folder are what get shipped in the installer \media folder.
+
+The help documentation gets shipped in the /doc folder.
+
 This Tutorial.pdf is what appears when you click on 'Tutorial' under 'Help'
-in the menu bar.
+in the SasView menu bar. It has been manually copied over from sasview/docs/sasview.
 
-The source files are in: /sasview/docs/sasview
-
-The getting_started_with_sasview.pdf has been manually added here until the auto-generated LibreOffice doc build is up and running.
+The new tutorial pdfs here have been manually copied over from the website /downloads folder.
Index: src/sas/sasview/sasview.py
===================================================================
--- src/sas/sasview/sasview.py	(revision 20fa5fe0c3e314a850432d5e463d03ceed3e453a)
+++ src/sas/sasview/sasview.py	(revision 1270e3c4e7a4343f5a384a6bf3799b972b00c1d2)
@@ -43,4 +43,6 @@
         from sas.sasgui.guiframe.gui_manager import SasViewApp
         self.gui = SasViewApp(0)
+        if sys.platform == "darwin":
+            self.check_sasmodels_compiler()
         # Set the application manager for the GUI
         self.gui.set_manager(self)
@@ -130,4 +132,58 @@
         self.gui.MainLoop()
 
+    def check_sasmodels_compiler(self):
+        """
+        Checking c compiler for sasmodels and raises xcode command line
+        tools for installation
+        """
+        #wx should be importable at this stage
+        import wx
+        import subprocess
+        #Generic message box created becuase standard MessageBox is not moveable
+        class GenericMessageBox(wx.Dialog):
+            def __init__(self, parent, text, title = ''):
+
+                wx.Dialog.__init__(self, parent, -1, title = title,
+                               size = (360,200), pos=(20,60),
+                               style = wx.STAY_ON_TOP | wx.DEFAULT_DIALOG_STYLE)
+                panel = wx.Panel(self, -1)
+                top_row_sizer = wx.BoxSizer(wx.HORIZONTAL)
+
+                error_bitmap = wx.ArtProvider.GetBitmap(
+                    wx.ART_ERROR, wx.ART_MESSAGE_BOX
+                )
+                error_bitmap_ctrl = wx.StaticBitmap(panel, -1)
+                error_bitmap_ctrl.SetBitmap(error_bitmap)
+                label = wx.StaticText(panel, -1, text)
+                top_row_sizer.Add(error_bitmap_ctrl, flag=wx.ALL, border=10)
+                top_row_sizer.Add(label, flag=wx.ALIGN_CENTER_VERTICAL)
+
+                #Create the OK button in the bottom row.
+                ok_button = wx.Button(panel, wx.ID_OK )
+                self.Bind(wx.EVT_BUTTON, self.on_ok, source=ok_button)
+                ok_button.SetFocus()
+                ok_button.SetDefault()
+
+                sizer = wx.BoxSizer(wx.VERTICAL)
+                sizer.Add(top_row_sizer)
+                sizer.Add(ok_button, flag=wx.ALIGN_CENTER | wx.ALL, border=5)
+                panel.SetSizer(sizer)
+
+            def on_ok(self, event):
+                self.Destroy()
+
+        logger = logging.getLogger(__name__)
+        try:
+            subprocess.check_output(["cc","--version"], stderr=subprocess.STDOUT)
+        except subprocess.CalledProcessError as exc:
+            dlg = GenericMessageBox(parent=None,
+            text='No compiler installed. Please install command line\n'
+                'developers tools by clicking \"Install\" in another winodw\n\n'
+                'Alternatively click \"Not Now\" and use OpenCL\n'
+                 'compiler, which can be set up from menu Fitting->OpenCL Options\n\n',
+            title = 'Compiler Info')
+            dlg.Show()
+            logger.error("No compiler installed. %s\n"%(exc))
+            logger.error(traceback.format_exc())
 
 def setup_logging():
Index: src/sas/sasview/test/1d_data/ISIS_Polymer_Blend_RT2.xml
===================================================================
--- src/sas/sasview/test/1d_data/ISIS_Polymer_Blend_RT2.xml	(revision e6d309ca9e26e7a2a3d9509a7b0784030d7c2335)
+++ src/sas/sasview/test/1d_data/ISIS_Polymer_Blend_RT2.xml	(revision e6d309ca9e26e7a2a3d9509a7b0784030d7c2335)
@@ -0,0 +1,266 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="cansas1d.xsl" ?>
+<SASroot version="1.1"
+		 xmlns="urn:cansas1d:1.1"
+		 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+		 xsi:schemaLocation="urn:cansas1d:1.1 http://www.cansas.org/formats/1.1/cansas1d.xsd"
+		>
+	<SASentry name="104977main_1D_2.2_10.0_cloned_temp">
+		<Title>LOQ Standard RT2_SANS</Title>
+		<Run>104977</Run>
+		<SASdata>
+			<Idata><Q unit="1/A">0.008</Q><I unit="1/cm">48.22</I><Idev unit="1/cm">0.691609</Idev><Qdev unit="1/A">0.00141852</Qdev></Idata>
+			<Idata><Q unit="1/A">0.01</Q><I unit="1/cm">45.2675</I><Idev unit="1/cm">0.4702</Idev><Qdev unit="1/A">0.00152844</Qdev></Idata>
+			<Idata><Q unit="1/A">0.012</Q><I unit="1/cm">43.6333</I><Idev unit="1/cm">0.372996</Idev><Qdev unit="1/A">0.00165624</Qdev></Idata>
+			<Idata><Q unit="1/A">0.014</Q><I unit="1/cm">40.8607</I><Idev unit="1/cm">0.30904</Idev><Qdev unit="1/A">0.00177172</Qdev></Idata>
+			<Idata><Q unit="1/A">0.016</Q><I unit="1/cm">38.7767</I><Idev unit="1/cm">0.265486</Idev><Qdev unit="1/A">0.00187668</Qdev></Idata>
+			<Idata><Q unit="1/A">0.018</Q><I unit="1/cm">36.3038</I><Idev unit="1/cm">0.232072</Idev><Qdev unit="1/A">0.00197744</Qdev></Idata>
+			<Idata><Q unit="1/A">0.02</Q><I unit="1/cm">33.8512</I><Idev unit="1/cm">0.207312</Idev><Qdev unit="1/A">0.00205097</Qdev></Idata>
+			<Idata><Q unit="1/A">0.022</Q><I unit="1/cm">31.3841</I><Idev unit="1/cm">0.187285</Idev><Qdev unit="1/A">0.00211301</Qdev></Idata>
+			<Idata><Q unit="1/A">0.024</Q><I unit="1/cm">29.3521</I><Idev unit="1/cm">0.171128</Idev><Qdev unit="1/A">0.00216707</Qdev></Idata>
+			<Idata><Q unit="1/A">0.026</Q><I unit="1/cm">27.0905</I><Idev unit="1/cm">0.158266</Idev><Qdev unit="1/A">0.00216863</Qdev></Idata>
+			<Idata><Q unit="1/A">0.028</Q><I unit="1/cm">25.0674</I><Idev unit="1/cm">0.146613</Idev><Qdev unit="1/A">0.0021863</Qdev></Idata>
+			<Idata><Q unit="1/A">0.03</Q><I unit="1/cm">23.2478</I><Idev unit="1/cm">0.136366</Idev><Qdev unit="1/A">0.00218559</Qdev></Idata>
+			<Idata><Q unit="1/A">0.032</Q><I unit="1/cm">21.5037</I><Idev unit="1/cm">0.127362</Idev><Qdev unit="1/A">0.00219717</Qdev></Idata>
+			<Idata><Q unit="1/A">0.034</Q><I unit="1/cm">19.7486</I><Idev unit="1/cm">0.118593</Idev><Qdev unit="1/A">0.00220019</Qdev></Idata>
+			<Idata><Q unit="1/A">0.036</Q><I unit="1/cm">18.3602</I><Idev unit="1/cm">0.110848</Idev><Qdev unit="1/A">0.00221583</Qdev></Idata>
+			<Idata><Q unit="1/A">0.038</Q><I unit="1/cm">17.02</I><Idev unit="1/cm">0.104645</Idev><Qdev unit="1/A">0.00220939</Qdev></Idata>
+			<Idata><Q unit="1/A">0.04</Q><I unit="1/cm">15.6139</I><Idev unit="1/cm">0.0973453</Idev><Qdev unit="1/A">0.00222505</Qdev></Idata>
+			<Idata><Q unit="1/A">0.042</Q><I unit="1/cm">14.716</I><Idev unit="1/cm">0.0927132</Idev><Qdev unit="1/A">0.00222297</Qdev></Idata>
+			<Idata><Q unit="1/A">0.044</Q><I unit="1/cm">13.6013</I><Idev unit="1/cm">0.0871733</Idev><Qdev unit="1/A">0.00222766</Qdev></Idata>
+			<Idata><Q unit="1/A">0.046</Q><I unit="1/cm">12.667</I><Idev unit="1/cm">0.0824012</Idev><Qdev unit="1/A">0.00223852</Qdev></Idata>
+			<Idata><Q unit="1/A">0.048</Q><I unit="1/cm">11.7305</I><Idev unit="1/cm">0.0779294</Idev><Qdev unit="1/A">0.00224203</Qdev></Idata>
+			<Idata><Q unit="1/A">0.05</Q><I unit="1/cm">11.0317</I><Idev unit="1/cm">0.0740663</Idev><Qdev unit="1/A">0.00224847</Qdev></Idata>
+			<Idata><Q unit="1/A">0.052</Q><I unit="1/cm">10.2869</I><Idev unit="1/cm">0.0707826</Idev><Qdev unit="1/A">0.00225717</Qdev></Idata>
+			<Idata><Q unit="1/A">0.054</Q><I unit="1/cm">9.59107</I><Idev unit="1/cm">0.0675936</Idev><Qdev unit="1/A">0.00228488</Qdev></Idata>
+			<Idata><Q unit="1/A">0.056</Q><I unit="1/cm">8.94852</I><Idev unit="1/cm">0.0646304</Idev><Qdev unit="1/A">0.00230433</Qdev></Idata>
+			<Idata><Q unit="1/A">0.058</Q><I unit="1/cm">8.40167</I><Idev unit="1/cm">0.0621958</Idev><Qdev unit="1/A">0.00232605</Qdev></Idata>
+			<Idata><Q unit="1/A">0.06</Q><I unit="1/cm">8.05197</I><Idev unit="1/cm">0.0606211</Idev><Qdev unit="1/A">0.00235672</Qdev></Idata>
+			<Idata><Q unit="1/A">0.062</Q><I unit="1/cm">7.55461</I><Idev unit="1/cm">0.0584708</Idev><Qdev unit="1/A">0.00238207</Qdev></Idata>
+			<Idata><Q unit="1/A">0.064</Q><I unit="1/cm">7.09106</I><Idev unit="1/cm">0.0564898</Idev><Qdev unit="1/A">0.00240756</Qdev></Idata>
+			<Idata><Q unit="1/A">0.066</Q><I unit="1/cm">6.75704</I><Idev unit="1/cm">0.0552647</Idev><Qdev unit="1/A">0.00244839</Qdev></Idata>
+			<Idata><Q unit="1/A">0.068</Q><I unit="1/cm">6.37931</I><Idev unit="1/cm">0.0538756</Idev><Qdev unit="1/A">0.00248006</Qdev></Idata>
+			<Idata><Q unit="1/A">0.07</Q><I unit="1/cm">6.04275</I><Idev unit="1/cm">0.0524031</Idev><Qdev unit="1/A">0.00251655</Qdev></Idata>
+			<Idata><Q unit="1/A">0.072</Q><I unit="1/cm">5.68258</I><Idev unit="1/cm">0.0511408</Idev><Qdev unit="1/A">0.00255305</Qdev></Idata>
+			<Idata><Q unit="1/A">0.074</Q><I unit="1/cm">5.47367</I><Idev unit="1/cm">0.050379</Idev><Qdev unit="1/A">0.00257416</Qdev></Idata>
+			<Idata><Q unit="1/A">0.076</Q><I unit="1/cm">5.18291</I><Idev unit="1/cm">0.0493868</Idev><Qdev unit="1/A">0.00263592</Qdev></Idata>
+			<Idata><Q unit="1/A">0.078</Q><I unit="1/cm">4.94805</I><Idev unit="1/cm">0.0487297</Idev><Qdev unit="1/A">0.00266991</Qdev></Idata>
+			<Idata><Q unit="1/A">0.08</Q><I unit="1/cm">4.66997</I><Idev unit="1/cm">0.047719</Idev><Qdev unit="1/A">0.00272113</Qdev></Idata>
+			<Idata><Q unit="1/A">0.082</Q><I unit="1/cm">4.45838</I><Idev unit="1/cm">0.0472222</Idev><Qdev unit="1/A">0.00276468</Qdev></Idata>
+			<Idata><Q unit="1/A">0.084</Q><I unit="1/cm">4.27986</I><Idev unit="1/cm">0.0467169</Idev><Qdev unit="1/A">0.00278576</Qdev></Idata>
+			<Idata><Q unit="1/A">0.086</Q><I unit="1/cm">4.13852</I><Idev unit="1/cm">0.0462793</Idev><Qdev unit="1/A">0.00285356</Qdev></Idata>
+			<Idata><Q unit="1/A">0.088</Q><I unit="1/cm">3.95097</I><Idev unit="1/cm">0.0457845</Idev><Qdev unit="1/A">0.00287744</Qdev></Idata>
+			<Idata><Q unit="1/A">0.09</Q><I unit="1/cm">3.76418</I><Idev unit="1/cm">0.0446994</Idev><Qdev unit="1/A">0.00291583</Qdev></Idata>
+			<Idata><Q unit="1/A">0.092</Q><I unit="1/cm">3.62883</I><Idev unit="1/cm">0.0441434</Idev><Qdev unit="1/A">0.002946</Qdev></Idata>
+			<Idata><Q unit="1/A">0.094</Q><I unit="1/cm">3.52579</I><Idev unit="1/cm">0.0433421</Idev><Qdev unit="1/A">0.00297062</Qdev></Idata>
+			<Idata><Q unit="1/A">0.096</Q><I unit="1/cm">3.37175</I><Idev unit="1/cm">0.0426304</Idev><Qdev unit="1/A">0.00300754</Qdev></Idata>
+			<Idata><Q unit="1/A">0.098</Q><I unit="1/cm">3.2626</I><Idev unit="1/cm">0.0419644</Idev><Qdev unit="1/A">0.00302234</Qdev></Idata>
+			<Idata><Q unit="1/A">0.1</Q><I unit="1/cm">3.1299</I><Idev unit="1/cm">0.041369</Idev><Qdev unit="1/A">0.00306341</Qdev></Idata>
+			<Idata><Q unit="1/A">0.102</Q><I unit="1/cm">3.02045</I><Idev unit="1/cm">0.0410677</Idev><Qdev unit="1/A">0.00309688</Qdev></Idata>
+			<Idata><Q unit="1/A">0.104</Q><I unit="1/cm">2.87553</I><Idev unit="1/cm">0.0401938</Idev><Qdev unit="1/A">0.00312748</Qdev></Idata>
+			<Idata><Q unit="1/A">0.106</Q><I unit="1/cm">2.78546</I><Idev unit="1/cm">0.0400136</Idev><Qdev unit="1/A">0.00315055</Qdev></Idata>
+			<Idata><Q unit="1/A">0.108</Q><I unit="1/cm">2.70468</I><Idev unit="1/cm">0.0397425</Idev><Qdev unit="1/A">0.00320097</Qdev></Idata>
+			<Idata><Q unit="1/A">0.11</Q><I unit="1/cm">2.60506</I><Idev unit="1/cm">0.0392143</Idev><Qdev unit="1/A">0.00322803</Qdev></Idata>
+			<Idata><Q unit="1/A">0.112</Q><I unit="1/cm">2.53283</I><Idev unit="1/cm">0.0392067</Idev><Qdev unit="1/A">0.00326059</Qdev></Idata>
+			<Idata><Q unit="1/A">0.114</Q><I unit="1/cm">2.45587</I><Idev unit="1/cm">0.0385847</Idev><Qdev unit="1/A">0.00329173</Qdev></Idata>
+			<Idata><Q unit="1/A">0.116</Q><I unit="1/cm">2.3541</I><Idev unit="1/cm">0.038218</Idev><Qdev unit="1/A">0.00331008</Qdev></Idata>
+			<Idata><Q unit="1/A">0.118</Q><I unit="1/cm">2.28359</I><Idev unit="1/cm">0.0378248</Idev><Qdev unit="1/A">0.00334193</Qdev></Idata>
+			<Idata><Q unit="1/A">0.12</Q><I unit="1/cm">2.20092</I><Idev unit="1/cm">0.0373677</Idev><Qdev unit="1/A">0.00335626</Qdev></Idata>
+			<Idata><Q unit="1/A">0.122</Q><I unit="1/cm">2.12892</I><Idev unit="1/cm">0.0369608</Idev><Qdev unit="1/A">0.00339764</Qdev></Idata>
+			<Idata><Q unit="1/A">0.124</Q><I unit="1/cm">2.07846</I><Idev unit="1/cm">0.037072</Idev><Qdev unit="1/A">0.00342046</Qdev></Idata>
+			<Idata><Q unit="1/A">0.126</Q><I unit="1/cm">1.94832</I><Idev unit="1/cm">0.0362556</Idev><Qdev unit="1/A">0.00344556</Qdev></Idata>
+			<Idata><Q unit="1/A">0.128</Q><I unit="1/cm">1.96089</I><Idev unit="1/cm">0.0366412</Idev><Qdev unit="1/A">0.00348875</Qdev></Idata>
+			<Idata><Q unit="1/A">0.13</Q><I unit="1/cm">1.92879</I><Idev unit="1/cm">0.0370039</Idev><Qdev unit="1/A">0.00351343</Qdev></Idata>
+			<Idata><Q unit="1/A">0.132</Q><I unit="1/cm">1.86534</I><Idev unit="1/cm">0.0365647</Idev><Qdev unit="1/A">0.00354441</Qdev></Idata>
+			<Idata><Q unit="1/A">0.134</Q><I unit="1/cm">1.81123</I><Idev unit="1/cm">0.036795</Idev><Qdev unit="1/A">0.00358673</Qdev></Idata>
+			<Idata><Q unit="1/A">0.136</Q><I unit="1/cm">1.72105</I><Idev unit="1/cm">0.0362622</Idev><Qdev unit="1/A">0.00361309</Qdev></Idata>
+			<Idata><Q unit="1/A">0.138</Q><I unit="1/cm">1.65464</I><Idev unit="1/cm">0.0360575</Idev><Qdev unit="1/A">0.00365007</Qdev></Idata>
+			<Idata><Q unit="1/A">0.14</Q><I unit="1/cm">1.6971</I><Idev unit="1/cm">0.0366362</Idev><Qdev unit="1/A">0.00367803</Qdev></Idata>
+			<Idata><Q unit="1/A">0.142</Q><I unit="1/cm">1.62284</I><Idev unit="1/cm">0.0364086</Idev><Qdev unit="1/A">0.00370571</Qdev></Idata>
+			<Idata><Q unit="1/A">0.144</Q><I unit="1/cm">1.52347</I><Idev unit="1/cm">0.0358299</Idev><Qdev unit="1/A">0.00374562</Qdev></Idata>
+			<Idata><Q unit="1/A">0.146</Q><I unit="1/cm">1.49915</I><Idev unit="1/cm">0.0360321</Idev><Qdev unit="1/A">0.00378789</Qdev></Idata>
+			<Idata><Q unit="1/A">0.148</Q><I unit="1/cm">1.4944</I><Idev unit="1/cm">0.0367776</Idev><Qdev unit="1/A">0.00379309</Qdev></Idata>
+			<Idata><Q unit="1/A">0.15</Q><I unit="1/cm">1.44644</I><Idev unit="1/cm">0.036091</Idev><Qdev unit="1/A">0.00384062</Qdev></Idata>
+			<Idata><Q unit="1/A">0.152</Q><I unit="1/cm">1.42171</I><Idev unit="1/cm">0.0365407</Idev><Qdev unit="1/A">0.00386595</Qdev></Idata>
+			<Idata><Q unit="1/A">0.154</Q><I unit="1/cm">1.36707</I><Idev unit="1/cm">0.0363546</Idev><Qdev unit="1/A">0.00390102</Qdev></Idata>
+			<Idata><Q unit="1/A">0.156</Q><I unit="1/cm">1.37239</I><Idev unit="1/cm">0.0369004</Idev><Qdev unit="1/A">0.00392225</Qdev></Idata>
+			<Idata><Q unit="1/A">0.158</Q><I unit="1/cm">1.2809</I><Idev unit="1/cm">0.035952</Idev><Qdev unit="1/A">0.00394492</Qdev></Idata>
+			<Idata><Q unit="1/A">0.16</Q><I unit="1/cm">1.28571</I><Idev unit="1/cm">0.0368953</Idev><Qdev unit="1/A">0.00396732</Qdev></Idata>
+			<Idata><Q unit="1/A">0.162</Q><I unit="1/cm">1.2245</I><Idev unit="1/cm">0.0363994</Idev><Qdev unit="1/A">0.00398965</Qdev></Idata>
+			<Idata><Q unit="1/A">0.164</Q><I unit="1/cm">1.13935</I><Idev unit="1/cm">0.0361511</Idev><Qdev unit="1/A">0.00403915</Qdev></Idata>
+			<Idata><Q unit="1/A">0.166</Q><I unit="1/cm">1.19041</I><Idev unit="1/cm">0.0376505</Idev><Qdev unit="1/A">0.00406832</Qdev></Idata>
+			<Idata><Q unit="1/A">0.168</Q><I unit="1/cm">1.15086</I><Idev unit="1/cm">0.0370954</Idev><Qdev unit="1/A">0.00409254</Qdev></Idata>
+			<Idata><Q unit="1/A">0.17</Q><I unit="1/cm">1.05919</I><Idev unit="1/cm">0.0367854</Idev><Qdev unit="1/A">0.00412545</Qdev></Idata>
+			<Idata><Q unit="1/A">0.172</Q><I unit="1/cm">1.09637</I><Idev unit="1/cm">0.0375852</Idev><Qdev unit="1/A">0.00413965</Qdev></Idata>
+			<Idata><Q unit="1/A">0.174</Q><I unit="1/cm">1.06443</I><Idev unit="1/cm">0.0377993</Idev><Qdev unit="1/A">0.00417652</Qdev></Idata>
+			<Idata><Q unit="1/A">0.176</Q><I unit="1/cm">1.06093</I><Idev unit="1/cm">0.0388659</Idev><Qdev unit="1/A">0.00419791</Qdev></Idata>
+			<Idata><Q unit="1/A">0.178</Q><I unit="1/cm">1.06755</I><Idev unit="1/cm">0.0392046</Idev><Qdev unit="1/A">0.00423414</Qdev></Idata>
+			<Idata><Q unit="1/A">0.18</Q><I unit="1/cm">0.987838</I><Idev unit="1/cm">0.0390321</Idev><Qdev unit="1/A">0.00427497</Qdev></Idata>
+			<Idata><Q unit="1/A">0.182</Q><I unit="1/cm">0.933418</I><Idev unit="1/cm">0.0399775</Idev><Qdev unit="1/A">0.00428493</Qdev></Idata>
+			<Idata><Q unit="1/A">0.184</Q><I unit="1/cm">0.9418</I><Idev unit="1/cm">0.0397566</Idev><Qdev unit="1/A">0.00431558</Qdev></Idata>
+			<Idata><Q unit="1/A">0.186</Q><I unit="1/cm">0.952827</I><Idev unit="1/cm">0.040289</Idev><Qdev unit="1/A">0.00432608</Qdev></Idata>
+			<Idata><Q unit="1/A">0.188</Q><I unit="1/cm">0.960769</I><Idev unit="1/cm">0.0421299</Idev><Qdev unit="1/A">0.00436853</Qdev></Idata>
+			<Idata><Q unit="1/A">0.19</Q><I unit="1/cm">0.936698</I><Idev unit="1/cm">0.0425976</Idev><Qdev unit="1/A">0.00439201</Qdev></Idata>
+			<Idata><Q unit="1/A">0.192</Q><I unit="1/cm">0.835267</I><Idev unit="1/cm">0.0413426</Idev><Qdev unit="1/A">0.00442201</Qdev></Idata>
+			<Idata><Q unit="1/A">0.194</Q><I unit="1/cm">0.859512</I><Idev unit="1/cm">0.0429895</Idev><Qdev unit="1/A">0.00446975</Qdev></Idata>
+			<Idata><Q unit="1/A">0.196</Q><I unit="1/cm">0.935721</I><Idev unit="1/cm">0.0460219</Idev><Qdev unit="1/A">0.00446762</Qdev></Idata>
+			<Idata><Q unit="1/A">0.198</Q><I unit="1/cm">0.82435</I><Idev unit="1/cm">0.0449648</Idev><Qdev unit="1/A">0.00448944</Qdev></Idata>
+			<Idata><Q unit="1/A">0.2</Q><I unit="1/cm">0.730432</I><Idev unit="1/cm">0.0434737</Idev><Qdev unit="1/A">0.00452612</Qdev></Idata>
+			<Idata><Q unit="1/A">0.202</Q><I unit="1/cm">0.837523</I><Idev unit="1/cm">0.0482814</Idev><Qdev unit="1/A">0.00455183</Qdev></Idata>
+			<Idata><Q unit="1/A">0.204</Q><I unit="1/cm">0.80657</I><Idev unit="1/cm">0.0467681</Idev><Qdev unit="1/A">0.0045699</Qdev></Idata>
+			<Idata><Q unit="1/A">0.206</Q><I unit="1/cm">0.75476</I><Idev unit="1/cm">0.0476461</Idev><Qdev unit="1/A">0.00456189</Qdev></Idata>
+			<Idata><Q unit="1/A">0.208</Q><I unit="1/cm">0.742787</I><Idev unit="1/cm">0.0493045</Idev><Qdev unit="1/A">0.0046068</Qdev></Idata>
+			<Idata><Q unit="1/A">0.21</Q><I unit="1/cm">0.777239</I><Idev unit="1/cm">0.0517713</Idev><Qdev unit="1/A">0.00465979</Qdev></Idata>
+			<Idata><Q unit="1/A">0.212</Q><I unit="1/cm">0.755864</I><Idev unit="1/cm">0.0528084</Idev><Qdev unit="1/A">0.00465951</Qdev></Idata>
+			<Idata><Q unit="1/A">0.214</Q><I unit="1/cm">0.81703</I><Idev unit="1/cm">0.0569693</Idev><Qdev unit="1/A">0.00466285</Qdev></Idata>
+			<Idata><Q unit="1/A">0.216</Q><I unit="1/cm">0.737553</I><Idev unit="1/cm">0.0562126</Idev><Qdev unit="1/A">0.00472243</Qdev></Idata>
+			<Idata><Q unit="1/A">0.218</Q><I unit="1/cm">0.758268</I><Idev unit="1/cm">0.0580329</Idev><Qdev unit="1/A">0.0047164</Qdev></Idata>
+			<Idata><Q unit="1/A">0.22</Q><I unit="1/cm">0.610357</I><Idev unit="1/cm">0.0573969</Idev><Qdev unit="1/A">0.00474505</Qdev></Idata>
+			<Idata><Q unit="1/A">0.222</Q><I unit="1/cm">0.709671</I><Idev unit="1/cm">0.0613667</Idev><Qdev unit="1/A">0.0047425</Qdev></Idata>
+			<Idata><Q unit="1/A">0.224</Q><I unit="1/cm">0.65025</I><Idev unit="1/cm">0.0621544</Idev><Qdev unit="1/A">0.00475267</Qdev></Idata>
+			<Idata><Q unit="1/A">0.226</Q><I unit="1/cm">0.738472</I><Idev unit="1/cm">0.0691785</Idev><Qdev unit="1/A">0.00480174</Qdev></Idata>
+			<Idata><Q unit="1/A">0.228</Q><I unit="1/cm">0.667827</I><Idev unit="1/cm">0.0680789</Idev><Qdev unit="1/A">0.00482426</Qdev></Idata>
+			<Idata><Q unit="1/A">0.23</Q><I unit="1/cm">0.648001</I><Idev unit="1/cm">0.0703627</Idev><Qdev unit="1/A">0.00483643</Qdev></Idata>
+			<Idata><Q unit="1/A">0.232</Q><I unit="1/cm">0.721578</I><Idev unit="1/cm">0.0765264</Idev><Qdev unit="1/A">0.00486329</Qdev></Idata>
+			<Idata><Q unit="1/A">0.234</Q><I unit="1/cm">0.663654</I><Idev unit="1/cm">0.0792524</Idev><Qdev unit="1/A">0.00488403</Qdev></Idata>
+			<Idata><Q unit="1/A">0.236</Q><I unit="1/cm">0.536755</I><Idev unit="1/cm">0.0724642</Idev><Qdev unit="1/A">0.00492045</Qdev></Idata>
+			<Idata><Q unit="1/A">0.238</Q><I unit="1/cm">0.674443</I><Idev unit="1/cm">0.0797194</Idev><Qdev unit="1/A">0.00492254</Qdev></Idata>
+			<Idata><Q unit="1/A">0.24</Q><I unit="1/cm">0.630048</I><Idev unit="1/cm">0.0850603</Idev><Qdev unit="1/A">0.00495295</Qdev></Idata>
+			<Idata><Q unit="1/A">0.242</Q><I unit="1/cm">0.63919</I><Idev unit="1/cm">0.0905446</Idev><Qdev unit="1/A">0.00494719</Qdev></Idata>
+			<Idata><Q unit="1/A">0.244</Q><I unit="1/cm">0.516308</I><Idev unit="1/cm">0.0831701</Idev><Qdev unit="1/A">0.00495577</Qdev></Idata>
+			<Idata><Q unit="1/A">0.246</Q><I unit="1/cm">0.671362</I><Idev unit="1/cm">0.0935945</Idev><Qdev unit="1/A">0.00497447</Qdev></Idata>
+			<Idata><Q unit="1/A">0.248</Q><I unit="1/cm">0.557966</I><Idev unit="1/cm">0.0945198</Idev><Qdev unit="1/A">0.00500876</Qdev></Idata>
+			<Idata><Q unit="1/A">0.25</Q><I unit="1/cm">0.602891</I><Idev unit="1/cm">0.106822</Idev><Qdev unit="1/A">0.00504127</Qdev></Idata>
+			<Idata><Q unit="1/A">0.252</Q><I unit="1/cm">0.612456</I><Idev unit="1/cm">0.108802</Idev><Qdev unit="1/A">0.00506458</Qdev></Idata>
+			<Idata><Q unit="1/A">0.254</Q><I unit="1/cm">0.574878</I><Idev unit="1/cm">0.109471</Idev><Qdev unit="1/A">0.00512421</Qdev></Idata>
+		</SASdata>
+		<SAStransmission_spectrum name="sample">
+			<Tdata><Lambda unit="A">2.2385</Lambda><T unit="none">0.793879</T><Tdev unit="none">0.011988</Tdev></Tdata>
+			<Tdata><Lambda unit="A">2.31685</Lambda><T unit="none">0.791107</T><Tdev unit="none">0.0110754</Tdev></Tdata>
+			<Tdata><Lambda unit="A">2.39794</Lambda><T unit="none">0.788238</T><Tdev unit="none">0.010513</Tdev></Tdata>
+			<Tdata><Lambda unit="A">2.48186</Lambda><T unit="none">0.789836</T><Tdev unit="none">0.0100036</Tdev></Tdata>
+			<Tdata><Lambda unit="A">2.56873</Lambda><T unit="none">0.780647</T><Tdev unit="none">0.00950968</Tdev></Tdata>
+			<Tdata><Lambda unit="A">2.65864</Lambda><T unit="none">0.784317</T><Tdev unit="none">0.00941729</Tdev></Tdata>
+			<Tdata><Lambda unit="A">2.75169</Lambda><T unit="none">0.785204</T><Tdev unit="none">0.00935385</Tdev></Tdata>
+			<Tdata><Lambda unit="A">2.848</Lambda><T unit="none">0.781962</T><Tdev unit="none">0.00927776</Tdev></Tdata>
+			<Tdata><Lambda unit="A">2.94768</Lambda><T unit="none">0.781848</T><Tdev unit="none">0.00918</Tdev></Tdata>
+			<Tdata><Lambda unit="A">3.05085</Lambda><T unit="none">0.76799</T><Tdev unit="none">0.00904813</Tdev></Tdata>
+			<Tdata><Lambda unit="A">3.15763</Lambda><T unit="none">0.764609</T><Tdev unit="none">0.00905158</Tdev></Tdata>
+			<Tdata><Lambda unit="A">3.26814</Lambda><T unit="none">0.758198</T><Tdev unit="none">0.00906036</Tdev></Tdata>
+			<Tdata><Lambda unit="A">3.38253</Lambda><T unit="none">0.761997</T><Tdev unit="none">0.00922865</Tdev></Tdata>
+			<Tdata><Lambda unit="A">3.50092</Lambda><T unit="none">0.752852</T><Tdev unit="none">0.00922787</Tdev></Tdata>
+			<Tdata><Lambda unit="A">3.62345</Lambda><T unit="none">0.749267</T><Tdev unit="none">0.0093519</Tdev></Tdata>
+			<Tdata><Lambda unit="A">3.75027</Lambda><T unit="none">0.752201</T><Tdev unit="none">0.00956182</Tdev></Tdata>
+			<Tdata><Lambda unit="A">3.88153</Lambda><T unit="none">0.732934</T><Tdev unit="none">0.00946088</Tdev></Tdata>
+			<Tdata><Lambda unit="A">4.01738</Lambda><T unit="none">0.731912</T><Tdev unit="none">0.00967258</Tdev></Tdata>
+			<Tdata><Lambda unit="A">4.15799</Lambda><T unit="none">0.745128</T><Tdev unit="none">0.00977935</Tdev></Tdata>
+			<Tdata><Lambda unit="A">4.30352</Lambda><T unit="none">0.73441</T><Tdev unit="none">0.00961945</Tdev></Tdata>
+			<Tdata><Lambda unit="A">4.45414</Lambda><T unit="none">0.728021</T><Tdev unit="none">0.00941025</Tdev></Tdata>
+			<Tdata><Lambda unit="A">4.61004</Lambda><T unit="none">0.726184</T><Tdev unit="none">0.00970941</Tdev></Tdata>
+			<Tdata><Lambda unit="A">4.77139</Lambda><T unit="none">0.722227</T><Tdev unit="none">0.00936076</Tdev></Tdata>
+			<Tdata><Lambda unit="A">4.93839</Lambda><T unit="none">0.738289</T><Tdev unit="none">0.00939662</Tdev></Tdata>
+			<Tdata><Lambda unit="A">5.11123</Lambda><T unit="none">0.714171</T><Tdev unit="none">0.00923666</Tdev></Tdata>
+			<Tdata><Lambda unit="A">5.29012</Lambda><T unit="none">0.710445</T><Tdev unit="none">0.00928515</Tdev></Tdata>
+			<Tdata><Lambda unit="A">5.47528</Lambda><T unit="none">0.707644</T><Tdev unit="none">0.00934864</Tdev></Tdata>
+			<Tdata><Lambda unit="A">5.66691</Lambda><T unit="none">0.709598</T><Tdev unit="none">0.0096053</Tdev></Tdata>
+			<Tdata><Lambda unit="A">5.86525</Lambda><T unit="none">0.704069</T><Tdev unit="none">0.00976988</Tdev></Tdata>
+			<Tdata><Lambda unit="A">6.07054</Lambda><T unit="none">0.705307</T><Tdev unit="none">0.0101319</Tdev></Tdata>
+			<Tdata><Lambda unit="A">6.28301</Lambda><T unit="none">0.692575</T><Tdev unit="none">0.0103453</Tdev></Tdata>
+			<Tdata><Lambda unit="A">6.50291</Lambda><T unit="none">0.691645</T><Tdev unit="none">0.010313</Tdev></Tdata>
+			<Tdata><Lambda unit="A">6.73051</Lambda><T unit="none">0.690591</T><Tdev unit="none">0.0109389</Tdev></Tdata>
+			<Tdata><Lambda unit="A">6.96608</Lambda><T unit="none">0.695239</T><Tdev unit="none">0.0118108</Tdev></Tdata>
+			<Tdata><Lambda unit="A">7.2099</Lambda><T unit="none">0.685839</T><Tdev unit="none">0.0122876</Tdev></Tdata>
+			<Tdata><Lambda unit="A">7.46224</Lambda><T unit="none">0.675242</T><Tdev unit="none">0.0129398</Tdev></Tdata>
+			<Tdata><Lambda unit="A">7.72342</Lambda><T unit="none">0.662398</T><Tdev unit="none">0.013541</Tdev></Tdata>
+			<Tdata><Lambda unit="A">7.99374</Lambda><T unit="none">0.660652</T><Tdev unit="none">0.014578</Tdev></Tdata>
+			<Tdata><Lambda unit="A">8.27352</Lambda><T unit="none">0.628407</T><Tdev unit="none">0.0148023</Tdev></Tdata>
+			<Tdata><Lambda unit="A">8.56309</Lambda><T unit="none">0.658608</T><Tdev unit="none">0.0166528</Tdev></Tdata>
+			<Tdata><Lambda unit="A">8.8628</Lambda><T unit="none">0.651157</T><Tdev unit="none">0.0178339</Tdev></Tdata>
+			<Tdata><Lambda unit="A">9.173</Lambda><T unit="none">0.626713</T><Tdev unit="none">0.0184439</Tdev></Tdata>
+			<Tdata><Lambda unit="A">9.49406</Lambda><T unit="none">0.616946</T><Tdev unit="none">0.0204109</Tdev></Tdata>
+			<Tdata><Lambda unit="A">9.82867</Lambda><T unit="none">0.612178</T><Tdev unit="none">0.0219352</Tdev></Tdata>
+		</SAStransmission_spectrum>
+		<SAStransmission_spectrum name="can">
+			<Tdata><Lambda unit="A">2.2385</Lambda><T unit="none">1.0144</T><Tdev unit="none">0.0146731</Tdev></Tdata>
+			<Tdata><Lambda unit="A">2.31685</Lambda><T unit="none">1.00553</T><Tdev unit="none">0.0134907</Tdev></Tdata>
+			<Tdata><Lambda unit="A">2.39794</Lambda><T unit="none">1.02331</T><Tdev unit="none">0.0130199</Tdev></Tdata>
+			<Tdata><Lambda unit="A">2.48186</Lambda><T unit="none">1.02417</T><Tdev unit="none">0.0124182</Tdev></Tdata>
+			<Tdata><Lambda unit="A">2.56873</Lambda><T unit="none">0.998267</T><Tdev unit="none">0.0116433</Tdev></Tdata>
+			<Tdata><Lambda unit="A">2.65864</Lambda><T unit="none">1.00595</T><Tdev unit="none">0.0115388</Tdev></Tdata>
+			<Tdata><Lambda unit="A">2.75169</Lambda><T unit="none">1.00658</T><Tdev unit="none">0.0114438</Tdev></Tdata>
+			<Tdata><Lambda unit="A">2.848</Lambda><T unit="none">1.00858</T><Tdev unit="none">0.0114317</Tdev></Tdata>
+			<Tdata><Lambda unit="A">2.94768</Lambda><T unit="none">1.01669</T><Tdev unit="none">0.0113893</Tdev></Tdata>
+			<Tdata><Lambda unit="A">3.05085</Lambda><T unit="none">0.991638</T><Tdev unit="none">0.0111447</Tdev></Tdata>
+			<Tdata><Lambda unit="A">3.15763</Lambda><T unit="none">1.00606</T><Tdev unit="none">0.0113306</Tdev></Tdata>
+			<Tdata><Lambda unit="A">3.26814</Lambda><T unit="none">1.00715</T><Tdev unit="none">0.0114293</Tdev></Tdata>
+			<Tdata><Lambda unit="A">3.38253</Lambda><T unit="none">1.007</T><Tdev unit="none">0.0115691</Tdev></Tdata>
+			<Tdata><Lambda unit="A">3.50092</Lambda><T unit="none">0.997166</T><Tdev unit="none">0.0115961</Tdev></Tdata>
+			<Tdata><Lambda unit="A">3.62345</Lambda><T unit="none">1.00593</T><Tdev unit="none">0.0119159</Tdev></Tdata>
+			<Tdata><Lambda unit="A">3.75027</Lambda><T unit="none">1.01068</T><Tdev unit="none">0.0121452</Tdev></Tdata>
+			<Tdata><Lambda unit="A">3.88153</Lambda><T unit="none">0.995521</T><Tdev unit="none">0.0121369</Tdev></Tdata>
+			<Tdata><Lambda unit="A">4.01738</Lambda><T unit="none">0.99519</T><Tdev unit="none">0.0124005</Tdev></Tdata>
+			<Tdata><Lambda unit="A">4.15799</Lambda><T unit="none">1.01253</T><Tdev unit="none">0.0125407</Tdev></Tdata>
+			<Tdata><Lambda unit="A">4.30352</Lambda><T unit="none">1.02231</T><Tdev unit="none">0.0125826</Tdev></Tdata>
+			<Tdata><Lambda unit="A">4.45414</Lambda><T unit="none">0.987519</T><Tdev unit="none">0.0120393</Tdev></Tdata>
+			<Tdata><Lambda unit="A">4.61004</Lambda><T unit="none">1.00498</T><Tdev unit="none">0.0126323</Tdev></Tdata>
+			<Tdata><Lambda unit="A">4.77139</Lambda><T unit="none">0.978911</T><Tdev unit="none">0.0119549</Tdev></Tdata>
+			<Tdata><Lambda unit="A">4.93839</Lambda><T unit="none">0.994341</T><Tdev unit="none">0.0119372</Tdev></Tdata>
+			<Tdata><Lambda unit="A">5.11123</Lambda><T unit="none">0.99056</T><Tdev unit="none">0.0120159</Tdev></Tdata>
+			<Tdata><Lambda unit="A">5.29012</Lambda><T unit="none">0.987267</T><Tdev unit="none">0.01208</Tdev></Tdata>
+			<Tdata><Lambda unit="A">5.47528</Lambda><T unit="none">0.993518</T><Tdev unit="none">0.0122371</Tdev></Tdata>
+			<Tdata><Lambda unit="A">5.66691</Lambda><T unit="none">0.991617</T><Tdev unit="none">0.0125746</Tdev></Tdata>
+			<Tdata><Lambda unit="A">5.86525</Lambda><T unit="none">0.994452</T><Tdev unit="none">0.0128946</Tdev></Tdata>
+			<Tdata><Lambda unit="A">6.07054</Lambda><T unit="none">1.0056</T><Tdev unit="none">0.0134531</Tdev></Tdata>
+			<Tdata><Lambda unit="A">6.28301</Lambda><T unit="none">0.998412</T><Tdev unit="none">0.0138893</Tdev></Tdata>
+			<Tdata><Lambda unit="A">6.50291</Lambda><T unit="none">0.993347</T><Tdev unit="none">0.013846</Tdev></Tdata>
+			<Tdata><Lambda unit="A">6.73051</Lambda><T unit="none">0.991392</T><Tdev unit="none">0.0146376</Tdev></Tdata>
+			<Tdata><Lambda unit="A">6.96608</Lambda><T unit="none">0.997327</T><Tdev unit="none">0.0157106</Tdev></Tdata>
+			<Tdata><Lambda unit="A">7.2099</Lambda><T unit="none">1.00405</T><Tdev unit="none">0.0165644</Tdev></Tdata>
+			<Tdata><Lambda unit="A">7.46224</Lambda><T unit="none">1.0144</T><Tdev unit="none">0.0178256</Tdev></Tdata>
+			<Tdata><Lambda unit="A">7.72342</Lambda><T unit="none">0.990178</T><Tdev unit="none">0.0185979</Tdev></Tdata>
+			<Tdata><Lambda unit="A">7.99374</Lambda><T unit="none">1.0106</T><Tdev unit="none">0.0204678</Tdev></Tdata>
+			<Tdata><Lambda unit="A">8.27352</Lambda><T unit="none">0.997933</T><Tdev unit="none">0.0214741</Tdev></Tdata>
+			<Tdata><Lambda unit="A">8.56309</Lambda><T unit="none">1.02575</T><Tdev unit="none">0.0237019</Tdev></Tdata>
+			<Tdata><Lambda unit="A">8.8628</Lambda><T unit="none">1.01174</T><Tdev unit="none">0.0252837</Tdev></Tdata>
+			<Tdata><Lambda unit="A">9.173</Lambda><T unit="none">0.972194</T><Tdev unit="none">0.0260066</Tdev></Tdata>
+			<Tdata><Lambda unit="A">9.49406</Lambda><T unit="none">1.01477</T><Tdev unit="none">0.0301859</Tdev></Tdata>
+			<Tdata><Lambda unit="A">9.82867</Lambda><T unit="none">0.996979</T><Tdev unit="none">0.0323046</Tdev></Tdata>
+		</SAStransmission_spectrum>
+		<SASsample>
+			<ID>LOQ Standard RT2_SANS</ID>
+			<thickness unit="mm">1.100000</thickness>
+		</SASsample>
+		<SASinstrument>
+			<name>LOQ</name>
+			<SASsource>
+				<radiation>Spallation Neutron Source</radiation>
+			</SASsource>
+			<SAScollimation>
+				<aperture name="Disc">
+					<size>
+						<x unit="mm">12.000000</x>
+						<y unit="mm">12.000000</y>
+					</size>
+				</aperture>
+			</SAScollimation>
+			<SASdetector>
+				<name>HAB</name>
+				<SDD unit="m">0.579</SDD>
+			</SASdetector>
+			<SASdetector>
+				<name>main-detector-bank</name>
+				<SDD unit="m">4.14902</SDD>
+			</SASdetector>
+		</SASinstrument>
+		<SASprocess>
+			<name>Mantid generated CanSAS1D XML</name>
+			<date>21-Jun-2018 09:29:58</date>
+			<term name="svn">3.12.1</term>
+			<term name="user_file">K:/masks/USER_LOQ_181O_M3_Lu_12mm_Changer_MAIN.txt</term>
+			<term name="can_trans_run">104975</term>
+			<SASprocessnote/>
+		</SASprocess>
+		<SASnote>
+		</SASnote>
+	</SASentry>
+</SASroot>
Index: src/sas/sasview/test/1d_data/Ludox_silica.xml
===================================================================
--- src/sas/sasview/test/1d_data/Ludox_silica.xml	(revision 8b727a95f1366a36b8715f668f1f48e5eb15c4c1)
+++ src/sas/sasview/test/1d_data/Ludox_silica.xml	(revision 8b727a95f1366a36b8715f668f1f48e5eb15c4c1)
@@ -0,0 +1,233 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="cansas1d.xsl" ?>
+<SASroot version="1.1"
+		 xmlns="urn:cansas1d:1.1"
+		 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+		 xsi:schemaLocation="urn:cansas1d:1.1 http://www.cansas.org/formats/1.1/cansas1d.xsd"
+		>
+	<SASentry name="Ludox_minus_MT_UsingM3_MAIN_1D_main_cloned_temp">
+		<Title>Ludox 1mm M4 TRANS_SANS</Title>
+		<Run>102424</Run>
+		<SASdata>
+			<Idata><Q unit="1/A">0.00714</Q><I unit="1/cm">226.539</I><Idev unit="1/cm">1.93973</Idev><Qdev unit="1/A">0.00144239</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0074256</Q><I unit="1/cm">221.513</I><Idev unit="1/cm">1.62915</Idev><Qdev unit="1/A">0.00147496</Qdev></Idata>
+			<Idata><Q unit="1/A">0.00772262</Q><I unit="1/cm">227.287</I><Idev unit="1/cm">1.48514</Idev><Qdev unit="1/A">0.0015166</Qdev></Idata>
+			<Idata><Q unit="1/A">0.00803153</Q><I unit="1/cm">224.28</I><Idev unit="1/cm">1.3466</Idev><Qdev unit="1/A">0.00155158</Qdev></Idata>
+			<Idata><Q unit="1/A">0.00835279</Q><I unit="1/cm">223.997</I><Idev unit="1/cm">1.18008</Idev><Qdev unit="1/A">0.00159088</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0086869</Q><I unit="1/cm">223.672</I><Idev unit="1/cm">1.05878</Idev><Qdev unit="1/A">0.00162593</Qdev></Idata>
+			<Idata><Q unit="1/A">0.00903438</Q><I unit="1/cm">228.475</I><Idev unit="1/cm">0.976591</Idev><Qdev unit="1/A">0.00168048</Qdev></Idata>
+			<Idata><Q unit="1/A">0.00939575</Q><I unit="1/cm">229.011</I><Idev unit="1/cm">0.900282</Idev><Qdev unit="1/A">0.00170509</Qdev></Idata>
+			<Idata><Q unit="1/A">0.00977158</Q><I unit="1/cm">235.962</I><Idev unit="1/cm">0.884191</Idev><Qdev unit="1/A">0.00172049</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0101624</Q><I unit="1/cm">241.236</I><Idev unit="1/cm">0.84357</Idev><Qdev unit="1/A">0.00171975</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0105689</Q><I unit="1/cm">247.454</I><Idev unit="1/cm">0.807803</Idev><Qdev unit="1/A">0.00173361</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0109917</Q><I unit="1/cm">256.09</I><Idev unit="1/cm">0.787324</Idev><Qdev unit="1/A">0.00176472</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0114314</Q><I unit="1/cm">269.423</I><Idev unit="1/cm">0.755671</Idev><Qdev unit="1/A">0.00182598</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0118886</Q><I unit="1/cm">282.029</I><Idev unit="1/cm">0.711765</Idev><Qdev unit="1/A">0.00187949</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0123642</Q><I unit="1/cm">296.626</I><Idev unit="1/cm">0.704532</Idev><Qdev unit="1/A">0.00193137</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0128587</Q><I unit="1/cm">318.537</I><Idev unit="1/cm">0.68349</Idev><Qdev unit="1/A">0.00198554</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0133731</Q><I unit="1/cm">345.447</I><Idev unit="1/cm">0.675291</Idev><Qdev unit="1/A">0.00203315</Qdev></Idata>
+			<Idata><Q unit="1/A">0.013908</Q><I unit="1/cm">377.838</I><Idev unit="1/cm">0.668046</Idev><Qdev unit="1/A">0.00208813</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0144643</Q><I unit="1/cm">418.942</I><Idev unit="1/cm">0.678959</Idev><Qdev unit="1/A">0.00213326</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0150429</Q><I unit="1/cm">467.433</I><Idev unit="1/cm">0.686981</Idev><Qdev unit="1/A">0.00217358</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0156446</Q><I unit="1/cm">521.277</I><Idev unit="1/cm">0.703031</Idev><Qdev unit="1/A">0.00220131</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0162704</Q><I unit="1/cm">587.111</I><Idev unit="1/cm">0.727639</Idev><Qdev unit="1/A">0.00222531</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0169212</Q><I unit="1/cm">657.003</I><Idev unit="1/cm">0.744067</Idev><Qdev unit="1/A">0.00226428</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0175981</Q><I unit="1/cm">727.944</I><Idev unit="1/cm">0.754121</Idev><Qdev unit="1/A">0.00227136</Qdev></Idata>
+			<Idata><Q unit="1/A">0.018302</Q><I unit="1/cm">789.992</I><Idev unit="1/cm">0.762387</Idev><Qdev unit="1/A">0.00228228</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0190341</Q><I unit="1/cm">832.073</I><Idev unit="1/cm">0.750767</Idev><Qdev unit="1/A">0.00229589</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0197954</Q><I unit="1/cm">839.815</I><Idev unit="1/cm">0.728338</Idev><Qdev unit="1/A">0.00231852</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0205873</Q><I unit="1/cm">805.586</I><Idev unit="1/cm">0.680064</Idev><Qdev unit="1/A">0.00233235</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0214107</Q><I unit="1/cm">732.561</I><Idev unit="1/cm">0.609523</Idev><Qdev unit="1/A">0.00237326</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0222672</Q><I unit="1/cm">623.581</I><Idev unit="1/cm">0.525037</Idev><Qdev unit="1/A">0.00244917</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0231579</Q><I unit="1/cm">498.338</I><Idev unit="1/cm">0.431254</Idev><Qdev unit="1/A">0.00254252</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0240842</Q><I unit="1/cm">379.651</I><Idev unit="1/cm">0.345621</Idev><Qdev unit="1/A">0.00263583</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0250475</Q><I unit="1/cm">277.92</I><Idev unit="1/cm">0.275152</Idev><Qdev unit="1/A">0.00274294</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0260494</Q><I unit="1/cm">199.772</I><Idev unit="1/cm">0.215742</Idev><Qdev unit="1/A">0.0028428</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0270914</Q><I unit="1/cm">141.351</I><Idev unit="1/cm">0.172114</Idev><Qdev unit="1/A">0.00286564</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0281751</Q><I unit="1/cm">102.756</I><Idev unit="1/cm">0.138782</Idev><Qdev unit="1/A">0.00289349</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0293021</Q><I unit="1/cm">78.1058</I><Idev unit="1/cm">0.114218</Idev><Qdev unit="1/A">0.00289295</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0304742</Q><I unit="1/cm">62.5493</I><Idev unit="1/cm">0.0977755</Idev><Qdev unit="1/A">0.00284193</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0316931</Q><I unit="1/cm">53.8731</I><Idev unit="1/cm">0.0869322</Idev><Qdev unit="1/A">0.0027452</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0329609</Q><I unit="1/cm">49.8906</I><Idev unit="1/cm">0.0804389</Idev><Qdev unit="1/A">0.0026771</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0342793</Q><I unit="1/cm">48.5347</I><Idev unit="1/cm">0.0759295</Idev><Qdev unit="1/A">0.00262863</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0356505</Q><I unit="1/cm">47.7805</I><Idev unit="1/cm">0.0728817</Idev><Qdev unit="1/A">0.00257297</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0370765</Q><I unit="1/cm">46.4139</I><Idev unit="1/cm">0.0692472</Idev><Qdev unit="1/A">0.00256056</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0385595</Q><I unit="1/cm">43.3373</I><Idev unit="1/cm">0.0640746</Idev><Qdev unit="1/A">0.00256325</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0401019</Q><I unit="1/cm">38.7575</I><Idev unit="1/cm">0.0581762</Idev><Qdev unit="1/A">0.00258859</Qdev></Idata>
+			<Idata><Q unit="1/A">0.041706</Q><I unit="1/cm">32.8237</I><Idev unit="1/cm">0.0513839</Idev><Qdev unit="1/A">0.002619</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0433742</Q><I unit="1/cm">26.4637</I><Idev unit="1/cm">0.0443289</Idev><Qdev unit="1/A">0.00267382</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0451092</Q><I unit="1/cm">20.8371</I><Idev unit="1/cm">0.0378276</Idev><Qdev unit="1/A">0.00272568</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0469136</Q><I unit="1/cm">16.2119</I><Idev unit="1/cm">0.0320347</Idev><Qdev unit="1/A">0.00276587</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0487901</Q><I unit="1/cm">13.0286</I><Idev unit="1/cm">0.0278154</Idev><Qdev unit="1/A">0.00279571</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0507417</Q><I unit="1/cm">10.9345</I><Idev unit="1/cm">0.0245709</Idev><Qdev unit="1/A">0.00281708</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0527714</Q><I unit="1/cm">9.67899</I><Idev unit="1/cm">0.0222794</Idev><Qdev unit="1/A">0.00282959</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0548822</Q><I unit="1/cm">8.78581</I><Idev unit="1/cm">0.0206342</Idev><Qdev unit="1/A">0.0028401</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0570775</Q><I unit="1/cm">8.02647</I><Idev unit="1/cm">0.0191646</Idev><Qdev unit="1/A">0.00286615</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0593606</Q><I unit="1/cm">7.19768</I><Idev unit="1/cm">0.0176645</Idev><Qdev unit="1/A">0.00290825</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0617351</Q><I unit="1/cm">6.25872</I><Idev unit="1/cm">0.0160657</Idev><Qdev unit="1/A">0.00296442</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0642045</Q><I unit="1/cm">5.30149</I><Idev unit="1/cm">0.0145183</Idev><Qdev unit="1/A">0.00303237</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0667726</Q><I unit="1/cm">4.52106</I><Idev unit="1/cm">0.0131602</Idev><Qdev unit="1/A">0.00310777</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0694435</Q><I unit="1/cm">3.93014</I><Idev unit="1/cm">0.0120429</Idev><Qdev unit="1/A">0.00317865</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0722213</Q><I unit="1/cm">3.49251</I><Idev unit="1/cm">0.0112192</Idev><Qdev unit="1/A">0.00323071</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0751101</Q><I unit="1/cm">3.18734</I><Idev unit="1/cm">0.0105821</Idev><Qdev unit="1/A">0.00329721</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0781145</Q><I unit="1/cm">2.92726</I><Idev unit="1/cm">0.0100843</Idev><Qdev unit="1/A">0.00336836</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0812391</Q><I unit="1/cm">2.64566</I><Idev unit="1/cm">0.00955912</Idev><Qdev unit="1/A">0.00345727</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0844887</Q><I unit="1/cm">2.37452</I><Idev unit="1/cm">0.00901861</Idev><Qdev unit="1/A">0.0035437</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0878682</Q><I unit="1/cm">2.13092</I><Idev unit="1/cm">0.00853411</Idev><Qdev unit="1/A">0.00362227</Qdev></Idata>
+			<Idata><Q unit="1/A">0.091383</Q><I unit="1/cm">1.93426</I><Idev unit="1/cm">0.00801442</Idev><Qdev unit="1/A">0.0036993</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0950383</Q><I unit="1/cm">1.7841</I><Idev unit="1/cm">0.00759625</Idev><Qdev unit="1/A">0.00374223</Qdev></Idata>
+			<Idata><Q unit="1/A">0.0988398</Q><I unit="1/cm">1.65305</I><Idev unit="1/cm">0.00721554</Idev><Qdev unit="1/A">0.00381774</Qdev></Idata>
+			<Idata><Q unit="1/A">0.102793</Q><I unit="1/cm">1.52134</I><Idev unit="1/cm">0.00691554</Idev><Qdev unit="1/A">0.00388979</Qdev></Idata>
+			<Idata><Q unit="1/A">0.106905</Q><I unit="1/cm">1.40698</I><Idev unit="1/cm">0.0066253</Idev><Qdev unit="1/A">0.00396133</Qdev></Idata>
+			<Idata><Q unit="1/A">0.111181</Q><I unit="1/cm">1.28636</I><Idev unit="1/cm">0.00633815</Idev><Qdev unit="1/A">0.0040448</Qdev></Idata>
+			<Idata><Q unit="1/A">0.115629</Q><I unit="1/cm">1.19797</I><Idev unit="1/cm">0.00611845</Idev><Qdev unit="1/A">0.00412381</Qdev></Idata>
+			<Idata><Q unit="1/A">0.120254</Q><I unit="1/cm">1.12096</I><Idev unit="1/cm">0.00589653</Idev><Qdev unit="1/A">0.00420457</Qdev></Idata>
+			<Idata><Q unit="1/A">0.125064</Q><I unit="1/cm">1.05444</I><Idev unit="1/cm">0.00572062</Idev><Qdev unit="1/A">0.00427869</Qdev></Idata>
+			<Idata><Q unit="1/A">0.130066</Q><I unit="1/cm">0.982053</I><Idev unit="1/cm">0.00560039</Idev><Qdev unit="1/A">0.00438243</Qdev></Idata>
+			<Idata><Q unit="1/A">0.135269</Q><I unit="1/cm">0.930887</I><Idev unit="1/cm">0.00551959</Idev><Qdev unit="1/A">0.00449707</Qdev></Idata>
+			<Idata><Q unit="1/A">0.14068</Q><I unit="1/cm">0.882886</I><Idev unit="1/cm">0.00546427</Idev><Qdev unit="1/A">0.00460143</Qdev></Idata>
+			<Idata><Q unit="1/A">0.146307</Q><I unit="1/cm">0.846909</I><Idev unit="1/cm">0.00543486</Idev><Qdev unit="1/A">0.00471315</Qdev></Idata>
+			<Idata><Q unit="1/A">0.152159</Q><I unit="1/cm">0.795072</I><Idev unit="1/cm">0.00541176</Idev><Qdev unit="1/A">0.00482935</Qdev></Idata>
+			<Idata><Q unit="1/A">0.158246</Q><I unit="1/cm">0.765342</I><Idev unit="1/cm">0.00543268</Idev><Qdev unit="1/A">0.00494456</Qdev></Idata>
+			<Idata><Q unit="1/A">0.164576</Q><I unit="1/cm">0.725141</I><Idev unit="1/cm">0.00544301</Idev><Qdev unit="1/A">0.00506276</Qdev></Idata>
+			<Idata><Q unit="1/A">0.171159</Q><I unit="1/cm">0.69475</I><Idev unit="1/cm">0.00556163</Idev><Qdev unit="1/A">0.00519308</Qdev></Idata>
+			<Idata><Q unit="1/A">0.178005</Q><I unit="1/cm">0.664438</I><Idev unit="1/cm">0.00568705</Idev><Qdev unit="1/A">0.00532144</Qdev></Idata>
+			<Idata><Q unit="1/A">0.185125</Q><I unit="1/cm">0.640604</I><Idev unit="1/cm">0.00589887</Idev><Qdev unit="1/A">0.00544726</Qdev></Idata>
+			<Idata><Q unit="1/A">0.19253</Q><I unit="1/cm">0.625173</I><Idev unit="1/cm">0.00622744</Idev><Qdev unit="1/A">0.00558291</Qdev></Idata>
+			<Idata><Q unit="1/A">0.200231</Q><I unit="1/cm">0.5956</I><Idev unit="1/cm">0.00663393</Idev><Qdev unit="1/A">0.00570866</Qdev></Idata>
+			<Idata><Q unit="1/A">0.208241</Q><I unit="1/cm">0.582752</I><Idev unit="1/cm">0.00724923</Idev><Qdev unit="1/A">0.00583848</Qdev></Idata>
+			<Idata><Q unit="1/A">0.21657</Q><I unit="1/cm">0.571269</I><Idev unit="1/cm">0.00810892</Idev><Qdev unit="1/A">0.00595692</Qdev></Idata>
+			<Idata><Q unit="1/A">0.225233</Q><I unit="1/cm">0.563012</I><Idev unit="1/cm">0.00929792</Idev><Qdev unit="1/A">0.00607578</Qdev></Idata>
+			<Idata><Q unit="1/A">0.234242</Q><I unit="1/cm">0.539121</I><Idev unit="1/cm">0.010755</Idev><Qdev unit="1/A">0.00621921</Qdev></Idata>
+			<Idata><Q unit="1/A">0.243612</Q><I unit="1/cm">0.511661</I><Idev unit="1/cm">0.0125021</Idev><Qdev unit="1/A">0.00636952</Qdev></Idata>
+			<Idata><Q unit="1/A">0.251694</Q><I unit="1/cm">0.520131</I><Idev unit="1/cm">0.0181216</Idev><Qdev unit="1/A">0.00613893</Qdev></Idata>
+		</SASdata>
+		<SAStransmission_spectrum name="sample">
+			<Tdata><Lambda unit="A">2.2385</Lambda><T unit="none">0.717971</T><Tdev unit="none">0.0110266</Tdev></Tdata>
+			<Tdata><Lambda unit="A">2.31685</Lambda><T unit="none">0.709068</T><Tdev unit="none">0.0101754</Tdev></Tdata>
+			<Tdata><Lambda unit="A">2.39794</Lambda><T unit="none">0.690416</T><Tdev unit="none">0.00941488</Tdev></Tdata>
+			<Tdata><Lambda unit="A">2.48186</Lambda><T unit="none">0.684925</T><Tdev unit="none">0.00888289</Tdev></Tdata>
+			<Tdata><Lambda unit="A">2.56873</Lambda><T unit="none">0.700461</T><Tdev unit="none">0.00875057</Tdev></Tdata>
+			<Tdata><Lambda unit="A">2.65864</Lambda><T unit="none">0.697696</T><Tdev unit="none">0.00857482</Tdev></Tdata>
+			<Tdata><Lambda unit="A">2.75169</Lambda><T unit="none">0.694879</T><Tdev unit="none">0.00847972</Tdev></Tdata>
+			<Tdata><Lambda unit="A">2.848</Lambda><T unit="none">0.684019</T><Tdev unit="none">0.00832424</Tdev></Tdata>
+			<Tdata><Lambda unit="A">2.94768</Lambda><T unit="none">0.667923</T><Tdev unit="none">0.00807318</Tdev></Tdata>
+			<Tdata><Lambda unit="A">3.05085</Lambda><T unit="none">0.676025</T><Tdev unit="none">0.00817151</Tdev></Tdata>
+			<Tdata><Lambda unit="A">3.15763</Lambda><T unit="none">0.668275</T><Tdev unit="none">0.00815631</Tdev></Tdata>
+			<Tdata><Lambda unit="A">3.26814</Lambda><T unit="none">0.672508</T><Tdev unit="none">0.00826494</Tdev></Tdata>
+			<Tdata><Lambda unit="A">3.38253</Lambda><T unit="none">0.666287</T><Tdev unit="none">0.00831327</Tdev></Tdata>
+			<Tdata><Lambda unit="A">3.50092</Lambda><T unit="none">0.671103</T><Tdev unit="none">0.0084843</Tdev></Tdata>
+			<Tdata><Lambda unit="A">3.62345</Lambda><T unit="none">0.666571</T><Tdev unit="none">0.0085813</Tdev></Tdata>
+			<Tdata><Lambda unit="A">3.75027</Lambda><T unit="none">0.643053</T><Tdev unit="none">0.00843418</Tdev></Tdata>
+			<Tdata><Lambda unit="A">3.88153</Lambda><T unit="none">0.649946</T><Tdev unit="none">0.00864813</Tdev></Tdata>
+			<Tdata><Lambda unit="A">4.01738</Lambda><T unit="none">0.648437</T><Tdev unit="none">0.00881705</Tdev></Tdata>
+			<Tdata><Lambda unit="A">4.15799</Lambda><T unit="none">0.64585</T><Tdev unit="none">0.00874337</Tdev></Tdata>
+			<Tdata><Lambda unit="A">4.30352</Lambda><T unit="none">0.642882</T><Tdev unit="none">0.00866337</Tdev></Tdata>
+			<Tdata><Lambda unit="A">4.45414</Lambda><T unit="none">0.645591</T><Tdev unit="none">0.00867726</Tdev></Tdata>
+			<Tdata><Lambda unit="A">4.61004</Lambda><T unit="none">0.632925</T><Tdev unit="none">0.00875702</Tdev></Tdata>
+			<Tdata><Lambda unit="A">4.77139</Lambda><T unit="none">0.63371</T><Tdev unit="none">0.00847671</Tdev></Tdata>
+			<Tdata><Lambda unit="A">4.93839</Lambda><T unit="none">0.625692</T><Tdev unit="none">0.00825294</Tdev></Tdata>
+			<Tdata><Lambda unit="A">5.11123</Lambda><T unit="none">0.617251</T><Tdev unit="none">0.00829451</Tdev></Tdata>
+			<Tdata><Lambda unit="A">5.29012</Lambda><T unit="none">0.603072</T><Tdev unit="none">0.00821053</Tdev></Tdata>
+			<Tdata><Lambda unit="A">5.47528</Lambda><T unit="none">0.593301</T><Tdev unit="none">0.00813561</Tdev></Tdata>
+			<Tdata><Lambda unit="A">5.66691</Lambda><T unit="none">0.610819</T><Tdev unit="none">0.00860668</Tdev></Tdata>
+			<Tdata><Lambda unit="A">5.86525</Lambda><T unit="none">0.585713</T><Tdev unit="none">0.00848138</Tdev></Tdata>
+			<Tdata><Lambda unit="A">6.07054</Lambda><T unit="none">0.587744</T><Tdev unit="none">0.00882874</Tdev></Tdata>
+			<Tdata><Lambda unit="A">6.28301</Lambda><T unit="none">0.589786</T><Tdev unit="none">0.00919427</Tdev></Tdata>
+			<Tdata><Lambda unit="A">6.50291</Lambda><T unit="none">0.599991</T><Tdev unit="none">0.00938078</Tdev></Tdata>
+			<Tdata><Lambda unit="A">6.73051</Lambda><T unit="none">0.579963</T><Tdev unit="none">0.00963462</Tdev></Tdata>
+			<Tdata><Lambda unit="A">6.96608</Lambda><T unit="none">0.569621</T><Tdev unit="none">0.0101776</Tdev></Tdata>
+			<Tdata><Lambda unit="A">7.2099</Lambda><T unit="none">0.544411</T><Tdev unit="none">0.0102924</Tdev></Tdata>
+			<Tdata><Lambda unit="A">7.46224</Lambda><T unit="none">0.520213</T><Tdev unit="none">0.0105593</Tdev></Tdata>
+			<Tdata><Lambda unit="A">7.72342</Lambda><T unit="none">0.501093</T><Tdev unit="none">0.0108647</Tdev></Tdata>
+			<Tdata><Lambda unit="A">7.99374</Lambda><T unit="none">0.516603</T><Tdev unit="none">0.0120707</Tdev></Tdata>
+			<Tdata><Lambda unit="A">8.27352</Lambda><T unit="none">0.522204</T><Tdev unit="none">0.0129832</Tdev></Tdata>
+			<Tdata><Lambda unit="A">8.56309</Lambda><T unit="none">0.492108</T><Tdev unit="none">0.0133838</Tdev></Tdata>
+			<Tdata><Lambda unit="A">8.8628</Lambda><T unit="none">0.494853</T><Tdev unit="none">0.0146309</Tdev></Tdata>
+			<Tdata><Lambda unit="A">9.173</Lambda><T unit="none">0.481514</T><Tdev unit="none">0.0152731</Tdev></Tdata>
+			<Tdata><Lambda unit="A">9.49406</Lambda><T unit="none">0.503064</T><Tdev unit="none">0.017696</Tdev></Tdata>
+			<Tdata><Lambda unit="A">9.82867</Lambda><T unit="none">0.482553</T><Tdev unit="none">0.0186599</Tdev></Tdata>
+		</SAStransmission_spectrum>
+		<SAStransmission_spectrum name="can">
+			<Tdata><Lambda unit="A">2.2385</Lambda><T unit="none">1</T><Tdev unit="none">0.0144802</Tdev></Tdata>
+			<Tdata><Lambda unit="A">2.31685</Lambda><T unit="none">1</T><Tdev unit="none">0.0134752</Tdev></Tdata>
+			<Tdata><Lambda unit="A">2.39794</Lambda><T unit="none">1</T><Tdev unit="none">0.0127808</Tdev></Tdata>
+			<Tdata><Lambda unit="A">2.48186</Lambda><T unit="none">1</T><Tdev unit="none">0.0121318</Tdev></Tdata>
+			<Tdata><Lambda unit="A">2.56873</Lambda><T unit="none">1</T><Tdev unit="none">0.01168</Tdev></Tdata>
+			<Tdata><Lambda unit="A">2.65864</Lambda><T unit="none">1</T><Tdev unit="none">0.0114996</Tdev></Tdata>
+			<Tdata><Lambda unit="A">2.75169</Lambda><T unit="none">1</T><Tdev unit="none">0.0114307</Tdev></Tdata>
+			<Tdata><Lambda unit="A">2.848</Lambda><T unit="none">1</T><Tdev unit="none">0.0113232</Tdev></Tdata>
+			<Tdata><Lambda unit="A">2.94768</Lambda><T unit="none">1</T><Tdev unit="none">0.0112142</Tdev></Tdata>
+			<Tdata><Lambda unit="A">3.05085</Lambda><T unit="none">1</T><Tdev unit="none">0.0112312</Tdev></Tdata>
+			<Tdata><Lambda unit="A">3.15763</Lambda><T unit="none">1</T><Tdev unit="none">0.0113109</Tdev></Tdata>
+			<Tdata><Lambda unit="A">3.26814</Lambda><T unit="none">1</T><Tdev unit="none">0.0113959</Tdev></Tdata>
+			<Tdata><Lambda unit="A">3.38253</Lambda><T unit="none">1</T><Tdev unit="none">0.0115376</Tdev></Tdata>
+			<Tdata><Lambda unit="A">3.50092</Lambda><T unit="none">1</T><Tdev unit="none">0.0116741</Tdev></Tdata>
+			<Tdata><Lambda unit="A">3.62345</Lambda><T unit="none">1</T><Tdev unit="none">0.0118662</Tdev></Tdata>
+			<Tdata><Lambda unit="A">3.75027</Lambda><T unit="none">1</T><Tdev unit="none">0.0120196</Tdev></Tdata>
+			<Tdata><Lambda unit="A">3.88153</Lambda><T unit="none">1</T><Tdev unit="none">0.0122341</Tdev></Tdata>
+			<Tdata><Lambda unit="A">4.01738</Lambda><T unit="none">1</T><Tdev unit="none">0.0125049</Tdev></Tdata>
+			<Tdata><Lambda unit="A">4.15799</Lambda><T unit="none">1</T><Tdev unit="none">0.0124022</Tdev></Tdata>
+			<Tdata><Lambda unit="A">4.30352</Lambda><T unit="none">1</T><Tdev unit="none">0.012326</Tdev></Tdata>
+			<Tdata><Lambda unit="A">4.45414</Lambda><T unit="none">1</T><Tdev unit="none">0.0123138</Tdev></Tdata>
+			<Tdata><Lambda unit="A">4.61004</Lambda><T unit="none">1</T><Tdev unit="none">0.0126501</Tdev></Tdata>
+			<Tdata><Lambda unit="A">4.77139</Lambda><T unit="none">1</T><Tdev unit="none">0.0122235</Tdev></Tdata>
+			<Tdata><Lambda unit="A">4.93839</Lambda><T unit="none">1</T><Tdev unit="none">0.0120186</Tdev></Tdata>
+			<Tdata><Lambda unit="A">5.11123</Lambda><T unit="none">1</T><Tdev unit="none">0.0122158</Tdev></Tdata>
+			<Tdata><Lambda unit="A">5.29012</Lambda><T unit="none">1</T><Tdev unit="none">0.0123276</Tdev></Tdata>
+			<Tdata><Lambda unit="A">5.47528</Lambda><T unit="none">1</T><Tdev unit="none">0.0123474</Tdev></Tdata>
+			<Tdata><Lambda unit="A">5.66691</Lambda><T unit="none">1</T><Tdev unit="none">0.0127133</Tdev></Tdata>
+			<Tdata><Lambda unit="A">5.86525</Lambda><T unit="none">1</T><Tdev unit="none">0.0129855</Tdev></Tdata>
+			<Tdata><Lambda unit="A">6.07054</Lambda><T unit="none">1</T><Tdev unit="none">0.0134445</Tdev></Tdata>
+			<Tdata><Lambda unit="A">6.28301</Lambda><T unit="none">1</T><Tdev unit="none">0.0139401</Tdev></Tdata>
+			<Tdata><Lambda unit="A">6.50291</Lambda><T unit="none">1</T><Tdev unit="none">0.0140926</Tdev></Tdata>
+			<Tdata><Lambda unit="A">6.73051</Lambda><T unit="none">1</T><Tdev unit="none">0.0149115</Tdev></Tdata>
+			<Tdata><Lambda unit="A">6.96608</Lambda><T unit="none">1</T><Tdev unit="none">0.0158819</Tdev></Tdata>
+			<Tdata><Lambda unit="A">7.2099</Lambda><T unit="none">1</T><Tdev unit="none">0.0165913</Tdev></Tdata>
+			<Tdata><Lambda unit="A">7.46224</Lambda><T unit="none">1</T><Tdev unit="none">0.0176115</Tdev></Tdata>
+			<Tdata><Lambda unit="A">7.72342</Lambda><T unit="none">1</T><Tdev unit="none">0.0186471</Tdev></Tdata>
+			<Tdata><Lambda unit="A">7.99374</Lambda><T unit="none">1</T><Tdev unit="none">0.0201956</Tdev></Tdata>
+			<Tdata><Lambda unit="A">8.27352</Lambda><T unit="none">1</T><Tdev unit="none">0.0215507</Tdev></Tdata>
+			<Tdata><Lambda unit="A">8.56309</Lambda><T unit="none">1</T><Tdev unit="none">0.0232677</Tdev></Tdata>
+			<Tdata><Lambda unit="A">8.8628</Lambda><T unit="none">1</T><Tdev unit="none">0.0252381</Tdev></Tdata>
+			<Tdata><Lambda unit="A">9.173</Lambda><T unit="none">1</T><Tdev unit="none">0.0268715</Tdev></Tdata>
+			<Tdata><Lambda unit="A">9.49406</Lambda><T unit="none">1</T><Tdev unit="none">0.0299018</Tdev></Tdata>
+			<Tdata><Lambda unit="A">9.82867</Lambda><T unit="none">1</T><Tdev unit="none">0.0326667</Tdev></Tdata>
+		</SAStransmission_spectrum>
+		<SASsample>
+			<ID>Ludox 1mm M4 TRANS_SANS</ID>
+			<thickness unit="mm">1.000000</thickness>
+		</SASsample>
+		<SASinstrument>
+			<name>LOQ</name>
+			<SASsource>
+				<radiation>Spallation Neutron Source</radiation>
+			</SASsource>
+			<SAScollimation>
+				<aperture name="Disc">
+					<size>
+						<x unit="mm">12.000000</x>
+						<y unit="mm">12.000000</y>
+					</size>
+				</aperture>
+			</SAScollimation>
+			<SASdetector>
+				<name>main-detector-bank</name>
+				<SDD unit="m">4.14902</SDD>
+			</SASdetector>
+			<SASdetector>
+				<name>HAB</name>
+				<SDD unit="m">0.579</SDD>
+			</SASdetector>
+		</SASinstrument>
+		<SASprocess>
+			<name>Mantid generated CanSAS1D XML</name>
+			<date>15-Feb-2018 11:22:36</date>
+			<term name="svn">3.11.0</term>
+			<term name="user_file">K:\masks\USER_LOQ_174C_M3_Xpress_King_12mm_Changer_MAIN.txt</term>
+			<SASprocessnote/>
+		</SASprocess>
+		<SASnote>
+		</SASnote>
+	</SASentry>
+</SASroot>
Index: test/corfunc/test/utest_corfunc.py
===================================================================
--- test/corfunc/test/utest_corfunc.py	(revision f53d684ed4a54de3601e5f4bc601f78376d98e83)
+++ test/corfunc/test/utest_corfunc.py	(revision 6ef75fa6bf95901e6d1172fe707772bc581fdba2)
@@ -74,12 +74,14 @@
         while True:
             time.sleep(0.001)
-            if not self.calculator.transform_isrunning():
+            if (not self.calculator.transform_isrunning() and
+                self.transformation is not None):
                 break
 
-    def transform_callback(self, transforms):
-        transform1, transform3, idf = transforms
+        transform1, transform3, idf = self.transformation
         self.assertIsNotNone(transform1)
         self.assertAlmostEqual(transform1.y[0], 1)
         self.assertAlmostEqual(transform1.y[-1], 0, 5)
+
+    def transform_callback(self, transforms):
         self.transformation = transforms
 
Index: test/sasdataloader/test/utest_abs_reader.py
===================================================================
--- test/sasdataloader/test/utest_abs_reader.py	(revision fa749b7a4a403e49b9aa36906bc99a8352341221)
+++ test/sasdataloader/test/utest_abs_reader.py	(revision bd5c3b11a604dfd75fa3d6424e1ea40bcafd3727)
@@ -53,7 +53,7 @@
 
         self.assertEqual(self.data.y_unit, 'cm^{-1}')
-        self.assertEqual(self.data.x[0], 0.002618)
-        self.assertEqual(self.data.x[1], 0.007854)
-        self.assertEqual(self.data.x[2], 0.01309)
+        self.assertEqual(self.data.x[0], 0.008082)
+        self.assertEqual(self.data.x[1], 0.0275)
+        self.assertEqual(self.data.x[2], 0.02762)
         self.assertEqual(self.data.x[126], 0.5828)
 
