Changeset c22b621 in sasview
- Timestamp:
- Sep 28, 2017 6:40:02 PM (7 years ago)
- Branches:
- master, ESS_GUI, ESS_GUI_Docs, ESS_GUI_batch_fitting, ESS_GUI_bumps_abstraction, ESS_GUI_iss1116, ESS_GUI_iss879, ESS_GUI_iss959, ESS_GUI_opencl, ESS_GUI_ordering, ESS_GUI_sync_sascalc, magnetic_scatt, release-4.2.2, ticket-1009, ticket-1094-headless, ticket-1242-2d-resolution, ticket-1243, ticket-1249, ticket885, unittest-saveload
- Children:
- fca1f50
- Parents:
- df72475 (diff), 2b538cd (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent. - Files:
-
- 55 deleted
- 22 edited
Legend:
- Unmodified
- Added
- Removed
-
src/sas/sascalc/dataloader/readers/cansas_reader.py
r9e6aeaf r2b538cd 589 589 try: 590 590 unit = attr['unit'] 591 # Split the units to retain backwards compatibility with 592 # projects, analyses, and saved data from v4.1.0 591 593 unit_list = unit.split("|") 592 594 if len(unit_list) > 1: 593 self.current_dataset.xaxis(unit_list[0].strip(),594 unit_list[1].strip())595 595 local_unit = unit_list[1] 596 596 else: … … 1237 1237 if units is not None: 1238 1238 toks = variable.split('.') 1239 # TODO: why split() when accessing unit, but not when setting value?1240 1239 local_unit = getattr(storage, toks[0]+"_unit") 1241 1240 if local_unit is not None and units.lower() != local_unit.lower(): -
src/sas/sascalc/dataloader/readers/cansas_reader_HDF5.py
r7b50f14 r2b538cd 226 226 227 227 for data_point in data_set: 228 if data_point.dtype.char == 'S': 229 data_point = decode(bytes(data_point)) 228 if isinstance(data_point, np.ndarray): 229 if data_point.dtype.char == 'S': 230 data_point = decode(bytes(data_point)) 231 else: 232 data_point = decode(data_point) 230 233 # Top Level Meta Data 231 234 if key == u'definition': -
docs/sphinx-docs/build_sphinx.py
r6e546f8 rdf72475 10 10 import subprocess 11 11 import os 12 from os.path import join as joinpath, abspath, dirname, isdir, exists, relpath 12 13 import sys 13 14 import fnmatch … … 25 26 platform = '.%s-%s'%(get_platform(),sys.version[:3]) 26 27 27 CURRENT_SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) 28 29 run = imp.load_source('run', os.path.join(CURRENT_SCRIPT_DIR, '..', '..', 'run.py')) 28 # sphinx paths 29 SPHINX_ROOT = dirname(abspath(__file__)) 30 SPHINX_BUILD = joinpath(SPHINX_ROOT, "build") 31 SPHINX_SOURCE = joinpath(SPHINX_ROOT, "source-temp") 32 SPHINX_PERSPECTIVES = joinpath(SPHINX_SOURCE, "user", "sasgui", "perspectives") 33 34 # sasview paths 35 SASVIEW_ROOT = joinpath(SPHINX_ROOT, '..', '..') 36 SASVIEW_DOCS = joinpath(SPHINX_ROOT, "source") 37 SASVIEW_BUILD = abspath(joinpath(SASVIEW_ROOT, "build", "lib"+platform)) 38 SASVIEW_MEDIA_SOURCE = joinpath(SASVIEW_ROOT, "src", "sas") 39 SASVIEW_DOC_TARGET = joinpath(SASVIEW_BUILD, "doc") 40 SASVIEW_API_TARGET = joinpath(SPHINX_SOURCE, "dev", "sasview-api") 41 42 # sasmodels paths 43 SASMODELS_ROOT = joinpath(SASVIEW_ROOT, "..", "sasmodels") 44 SASMODELS_DOCS = joinpath(SASMODELS_ROOT, "doc") 45 SASMODELS_BUILD = joinpath(SASMODELS_ROOT, "build", "lib") 46 SASMODELS_MODEL_SOURCE = joinpath(SASMODELS_DOCS, "model") 47 SASMODELS_MODEL_TARGET = joinpath(SPHINX_SOURCE, "user", "models") 48 #SASMODELS_API_SOURCE = joinpath(SASMODELS_DOCS, "api") 49 SASMODELS_API_TARGET = joinpath(SPHINX_SOURCE, "dev", "sasmodels-api") 50 SASMODELS_DEV_SOURCE = joinpath(SASMODELS_DOCS, "developer") 51 SASMODELS_DEV_TARGET = joinpath(SPHINX_SOURCE, "dev", "sasmodels-dev") 52 SASMODELS_GUIDE_SOURCE = joinpath(SASMODELS_DOCS, "guide") 53 SASMODELS_GUIDE_TARGET = joinpath(SPHINX_PERSPECTIVES, "fitting") 54 SASMODELS_GUIDE_EXCLUDE = [ 55 "index.rst", "install.rst", "intro.rst", 56 ] 57 58 # bumps paths 59 BUMPS_DOCS = joinpath(SASVIEW_ROOT, "..", "bumps", "doc") 60 BUMPS_SOURCE = joinpath(BUMPS_DOCS, "guide") 61 BUMPS_TARGET = joinpath(SPHINX_PERSPECTIVES, "fitting") 62 63 run = imp.load_source('run', joinpath(SASVIEW_ROOT, 'run.py')) 30 64 run.prepare() 31 32 SASVIEW_SRC = os.path.join(CURRENT_SCRIPT_DIR, "..", "..", "src")33 SASVIEW_BUILD = os.path.abspath(os.path.join(CURRENT_SCRIPT_DIR, "..", "..", "build", "lib"+platform))34 SASVIEW_DOCS = os.path.join(SASVIEW_BUILD, "doc")35 SASVIEW_TEST = os.path.join(SASVIEW_SRC, "..", "sasview", "test", "media")36 SASVIEW_TOC_SOURCE = os.path.join(CURRENT_SCRIPT_DIR, "source")37 38 # Need to slurp in the new sasmodels model definitions to replace the old model_functions.rst39 # We are currently here:40 #/sasview-local-trunk/docs/sphinx-docs/build_sphinx.py41 SASMODELS_SOURCE_PROLOG = os.path.join(CURRENT_SCRIPT_DIR, "..", "..", "..", "sasmodels", "doc")42 SASMODELS_SOURCE_GPU = os.path.join(CURRENT_SCRIPT_DIR, "..", "..", "..", "sasmodels", "doc", "guide", "gpu")43 SASMODELS_SOURCE_SESANS = os.path.join(CURRENT_SCRIPT_DIR, "..", "..", "..", "sasmodels", "doc", "guide", "sesans")44 SASMODELS_SOURCE_SESANSIMG = os.path.join(CURRENT_SCRIPT_DIR, "..", "..", "..", "sasmodels", "doc", "guide", "sesans", "sesans_img")45 SASMODELS_SOURCE_MAGNETISM = os.path.join(CURRENT_SCRIPT_DIR, "..", "..", "..", "sasmodels", "doc", "guide", "magnetism")46 SASMODELS_SOURCE_MAGIMG = os.path.join(CURRENT_SCRIPT_DIR, "..", "..", "..", "sasmodels", "doc", "guide", "magnetism", "mag_img")47 SASMODELS_SOURCE_REF_MODELS = os.path.join(CURRENT_SCRIPT_DIR, "..", "..", "..", "sasmodels", "doc", "guide", "models")48 SASMODELS_SOURCE_MODELS = os.path.join(CURRENT_SCRIPT_DIR, "..", "..", "..", "sasmodels", "doc", "model")49 SASMODELS_SOURCE_IMG = os.path.join(CURRENT_SCRIPT_DIR, "..", "..", "..", "sasmodels", "doc", "model", "img")50 SASMODELS_SOURCE_AUTOIMG = os.path.join(CURRENT_SCRIPT_DIR, "..", "..", "..", "sasmodels", "doc", "_build", "html","_images")51 ## Don't do assemble-in-place52 ## Assemble the docs in a temporary folder53 SASMODELS_DEST_PROLOG = os.path.join(CURRENT_SCRIPT_DIR, "source-temp")54 SASMODELS_DEST_REF_MODELS = os.path.join(SASMODELS_DEST_PROLOG, "user")55 SASMODELS_DEST_MODELS = os.path.join(SASMODELS_DEST_PROLOG, "user", "models")56 SASMODELS_DEST_IMG = os.path.join(SASMODELS_DEST_PROLOG, "user", "model-imgs", "new-models")57 SASMODELS_DEST_MAGIMG = os.path.join(SASMODELS_DEST_PROLOG, "user", "mag_img")58 SASMODELS_DEST_SESANSIMG = os.path.join(SASMODELS_DEST_PROLOG, "user", "sesans_img")59 SASMODELS_DEST_BUILDIMG = os.path.join(SASMODELS_DEST_PROLOG, "user", "models", "img")60 61 62 SPHINX_BUILD = os.path.join(CURRENT_SCRIPT_DIR, "build")63 SPHINX_SOURCE = os.path.join(CURRENT_SCRIPT_DIR, "source-temp")64 SPHINX_SOURCE_API = os.path.join(SPHINX_SOURCE, "dev", "api")65 SPHINX_SOURCE_GUIFRAME = os.path.join(SPHINX_SOURCE, "user", "sasgui", "guiframe")66 SPHINX_SOURCE_MODELS = os.path.join(SPHINX_SOURCE, "user", "models")67 SPHINX_SOURCE_PERSPECTIVES = os.path.join(SPHINX_SOURCE, "user", "sasgui", "perspectives")68 SPHINX_SOURCE_TEST = os.path.join(SPHINX_SOURCE, "test")69 SPHINX_SOURCE_USER = os.path.join(SPHINX_SOURCE, "user")70 71 BUMPS_DOCS = os.path.join(CURRENT_SCRIPT_DIR, "..", "..", "..",72 "bumps", "doc", "guide")73 BUMPS_TARGET = os.path.join(SPHINX_SOURCE_PERSPECTIVES, "fitting")74 65 75 66 def inplace_change(filename, old_string, new_string): … … 88 79 def _remove_dir(dir_path): 89 80 """Removes the given directory.""" 90 if os.path.isdir(dir_path):81 if isdir(dir_path): 91 82 print("Removing \"%s\"... " % dir_path) 92 83 shutil.rmtree(dir_path) … … 97 88 """ 98 89 print("=== Cleaning Sphinx Build ===") 99 _remove_dir(SASVIEW_DOC S)90 _remove_dir(SASVIEW_DOC_TARGET) 100 91 _remove_dir(SPHINX_BUILD) 101 92 _remove_dir(SPHINX_SOURCE) 102 #_remove_dir(SPHINX_SOURCE_GUIFRAME)103 #_remove_dir(SPHINX_SOURCE_MODELS)104 #_remove_dir(SPHINX_SOURCE_PERSPECTIVES)105 #_remove_dir(SPHINX_SOURCE_TEST)106 93 107 94 def setup_source_temp(): … … 110 97 """ 111 98 print("=== Copying Source toctrees ===") 112 if os.path.exists(SASVIEW_TOC_SOURCE): 113 print("Found docs folder at", SASVIEW_TOC_SOURCE) 114 shutil.copytree(SASVIEW_TOC_SOURCE, SPHINX_SOURCE) 99 shutil.copytree(SASVIEW_DOCS, SPHINX_SOURCE) 115 100 116 101 def retrieve_user_docs(): … … 132 117 print("=== Retrieve User Docs ===") 133 118 134 # Copy documentation files from their "source" to their "destination". 135 for root, dirnames, _ in os.walk(SASVIEW_SRC): 136 for dirname in fnmatch.filter(dirnames, 'media'): 137 138 docs = os.path.abspath(os.path.join(root, dirname)) 139 print("Found docs folder at \"%s\"." % docs) 140 141 dest_dir_part = os.path.dirname(os.path.relpath(docs, SASVIEW_SRC)) 142 if os.sep in dest_dir_part: 143 dest_dir_part = dest_dir_part[dest_dir_part.index(os.sep) + 1:] 144 dest_dir = os.path.join(SPHINX_SOURCE, "user", dest_dir_part) 145 146 copy_tree(docs, dest_dir) 147 148 # Now pickup testdata_help.rst 149 print("=== Including Test Data Docs ===") 150 if os.path.exists(SASVIEW_TEST): 151 print("Found docs folder at", SASVIEW_TEST) 152 shutil.copytree(SASVIEW_TEST, SPHINX_SOURCE_TEST) 153 154 print("=== And the Sasmodels Docs ===") 155 # Make sure we have the relevant images for the new sasmodels documentation 156 # First(!) we'll make a local reference copy for SasView (/new-models will be cleaned each build) 157 if os.path.exists(SASMODELS_SOURCE_IMG): 158 print("Found img folder SASMODELS_SOURCE_IMG at", SASMODELS_SOURCE_IMG) 159 if not os.path.exists(SASMODELS_DEST_IMG): 160 print("Missing docs folder SASMODELS_DEST_IMG at", SASMODELS_DEST_IMG) 161 os.makedirs(SASMODELS_DEST_IMG) 162 print("created SASMODELS_DEST_BUILDIMG at", SASMODELS_DEST_BUILDIMG) 163 else: 164 print("Found img folder SASMODELS_DEST_IMG at", SASMODELS_DEST_IMG) 165 print("Copying sasmodels model image files...") 166 for files in os.listdir(SASMODELS_SOURCE_IMG): 167 fromhere=os.path.join(SASMODELS_SOURCE_IMG,files) 168 tohere=os.path.join(SASMODELS_DEST_IMG,files) 169 shutil.copy(fromhere,tohere) 170 else: 171 print("no source directory",SASMODELS_SOURCE_IMG,"was found") 172 173 if os.path.exists(SASMODELS_SOURCE_AUTOIMG): 174 print("Found img folder SASMODELS_SOURCE_AUTOIMG at", SASMODELS_SOURCE_AUTOIMG) 175 if not os.path.exists(SASMODELS_DEST_IMG): 176 print("Missing docs folder SASMODELS_DEST_IMG at", SASMODELS_DEST_IMG) 177 os.makedirs(SASMODELS_DEST_BUILDIMG) 178 print("created SASMODELS_DEST_BUILDIMG at", SASMODELS_DEST_BUILDIMG) 179 print("Copying sasmodels model auto-generated image files...") 180 for files in os.listdir(SASMODELS_SOURCE_AUTOIMG): 181 fromhere=os.path.join(SASMODELS_SOURCE_AUTOIMG,files) 182 tohere=os.path.join(SASMODELS_DEST_IMG,files) 183 shutil.copy(fromhere,tohere) 184 else: 185 print("no source directory",SASMODELS_SOURCE_AUTOIMG ,"was found") 186 187 # And the rst prolog with the unit substitutions 188 if os.path.exists(SASMODELS_SOURCE_PROLOG): 189 print("Found prolog folder SASMODELS_SOURCE_PROLOG at", SASMODELS_SOURCE_PROLOG) 190 if os.path.exists(SASMODELS_DEST_PROLOG): 191 print("Found docs folder SASMODELS_DEST_PROLOG at", SASMODELS_DEST_PROLOG) 192 print("Copying sasmodels rst_prolog file...") 193 for files in os.listdir(SASMODELS_SOURCE_PROLOG): 194 if files.startswith("rst"): 195 fromhere=os.path.join(SASMODELS_SOURCE_PROLOG,files) 196 tohere=os.path.join(SASMODELS_DEST_PROLOG,files) 197 shutil.copy(fromhere,tohere) 198 else: 199 print("no source directory",SASMODELS_SOURCE_PROLOG, "was found") 200 201 if os.path.exists(SASMODELS_SOURCE_GPU): 202 print("Found docs folder SASMODELS_SOURCE_GPU at", SASMODELS_SOURCE_GPU) 203 if os.path.exists(SPHINX_SOURCE_USER): 204 print("Found docs folder SPHINX_SOURCE_USER at", SPHINX_SOURCE_USER) 205 print("Copying sasmodels gpu files...") 206 for files in os.listdir(SASMODELS_SOURCE_GPU): 207 if files.endswith(".rst"): 208 fromhere=os.path.join(SASMODELS_SOURCE_GPU,files) 209 tohere=os.path.join(SPHINX_SOURCE_USER,files) 210 shutil.copy(fromhere,tohere) 211 else: 212 print("no source directory",SASMODELS_SOURCE_GPU,"was found") 213 214 if os.path.exists(SASMODELS_SOURCE_SESANS): 215 print("Found docs folder SASMODELS_SOURCE_SESANS at", SASMODELS_SOURCE_SESANS) 216 if os.path.exists(SPHINX_SOURCE_USER): 217 print("Found docs folder SPHINX_SOURCE_USER at", SPHINX_SOURCE_USER) 218 print("Copying sasmodels sesans files...") 219 for files in os.listdir(SASMODELS_SOURCE_SESANS): 220 if files.endswith(".rst"): 221 fromhere=os.path.join(SASMODELS_SOURCE_SESANS,files) 222 tohere=os.path.join(SPHINX_SOURCE_USER,files) 223 shutil.copy(fromhere,tohere) 224 else: 225 print("no source directory",SASMODELS_SOURCE_SESANS,"was found") 226 227 if os.path.exists(SASMODELS_SOURCE_MAGNETISM): 228 print("Found docs folder SASMODELS_SOURCE_MAGNETISM at", SASMODELS_SOURCE_MAGNETISM) 229 if os.path.exists(SASMODELS_DEST_REF_MODELS): 230 print("Found docs folder SASMODELS_DEST_REF_MODELS at", SASMODELS_DEST_REF_MODELS) 231 print("Copying sasmodels model toctree files...") 232 for files in os.listdir(SASMODELS_SOURCE_MAGNETISM): 233 if files.endswith(".rst"): 234 fromhere=os.path.join(SASMODELS_SOURCE_MAGNETISM,files) 235 tohere=os.path.join(SASMODELS_DEST_REF_MODELS,files) 236 shutil.copy(fromhere,tohere) 237 else: 238 print("no source directory",SASMODELS_SOURCE_MAGNETISM,"was found") 239 240 if os.path.exists(SASMODELS_SOURCE_MAGIMG): 241 print("Found img folder SASMODELS_SOURCE_MAGIMG at", SASMODELS_SOURCE_MAGIMG) 242 if not os.path.exists(SASMODELS_DEST_MAGIMG): 243 print("Missing img folder SASMODELS_DEST_MAGIMG at", SASMODELS_DEST_MAGIMG) 244 os.makedirs(SASMODELS_DEST_MAGIMG) 245 print("created SASMODELS_DEST_MAGIMG at", SASMODELS_DEST_MAGIMG) 246 print("Copying sasmodels mag image files...") 247 for files in os.listdir(SASMODELS_SOURCE_MAGIMG): 248 fromhere=os.path.join(SASMODELS_SOURCE_MAGIMG,files) 249 tohere=os.path.join(SASMODELS_DEST_MAGIMG,files) 250 shutil.copy(fromhere,tohere) 251 else: 252 print("no source directory",SASMODELS_SOURCE_MAGIMG ,"was found") 253 254 if os.path.exists(SASMODELS_SOURCE_SESANSIMG): 255 print("Found img folder SASMODELS_SOURCE_SESANSIMG at", SASMODELS_SOURCE_SESANSIMG) 256 if not os.path.exists(SASMODELS_DEST_SESANSIMG): 257 print("Missing img folder SASMODELS_DEST_SESANSIMG at", SASMODELS_DEST_SESANSIMG) 258 os.makedirs(SASMODELS_DEST_SESANSIMG) 259 print("created SASMODELS_DEST_SESANSIMG at", SASMODELS_DEST_SESANSIMG) 260 print("Copying sasmodels sesans image files...") 261 for files in os.listdir(SASMODELS_SOURCE_SESANSIMG): 262 fromhere=os.path.join(SASMODELS_SOURCE_SESANSIMG,files) 263 tohere=os.path.join(SASMODELS_DEST_SESANSIMG,files) 264 shutil.copy(fromhere,tohere) 265 else: 266 print("no source directory",SASMODELS_SOURCE_SESANSIMG ,"was found") 267 268 if os.path.exists(SASMODELS_SOURCE_REF_MODELS): 269 print("Found docs folder SASMODELS_SOURCE_REF_MODELS at", SASMODELS_SOURCE_REF_MODELS) 270 if os.path.exists(SASMODELS_DEST_REF_MODELS): 271 print("Found docs folder SASMODELS_DEST_REF_MODELS at", SASMODELS_DEST_REF_MODELS) 272 print("Copying sasmodels model toctree files...") 273 for files in os.listdir(SASMODELS_SOURCE_REF_MODELS): 274 if files.endswith(".rst"): 275 fromhere=os.path.join(SASMODELS_SOURCE_REF_MODELS,files) 276 tohere=os.path.join(SASMODELS_DEST_REF_MODELS,files) 277 shutil.copy(fromhere,tohere) 278 # But need to change the path to the model docs in the tocs 279 for files in os.listdir(SASMODELS_DEST_REF_MODELS): 280 # print files 281 if files.startswith("shape"): 282 print("Changing toc paths in", files) 283 inplace_change(os.path.join(SASMODELS_DEST_REF_MODELS,files), "../../model/", "models/") 284 if files.startswith("sphere"): 285 print("Changing toc paths in", files) 286 inplace_change(os.path.join(SASMODELS_DEST_REF_MODELS,files), "../../model/", "models/") 287 if files.startswith("custom"): 288 print("Changing toc paths in", files) 289 inplace_change(os.path.join(SASMODELS_DEST_REF_MODELS,files), "../../model/", "models/") 290 if files.startswith("structure"): 291 print("Changing toc paths in", files) 292 inplace_change(os.path.join(SASMODELS_DEST_REF_MODELS,files), "../../model/", "models/") 293 else: 294 print("no source directory",SASMODELS_SOURCE_REF_MODELS," was found") 295 296 if os.path.exists(SASMODELS_SOURCE_MODELS): 297 print("Found docs folder SASMODELS_SOURCE_MODELS at", SASMODELS_SOURCE_MODELS) 298 if os.path.exists(SASMODELS_DEST_MODELS): 299 print("Found docs folder SASMODELS_DEST_MODELS at", SASMODELS_DEST_MODELS) 300 print("Copying sasmodels model files...") 301 for files in os.listdir(SASMODELS_SOURCE_MODELS): 302 if files.endswith(".rst"): 303 fromhere=os.path.join(SASMODELS_SOURCE_MODELS,files) 304 tohere=os.path.join(SASMODELS_DEST_MODELS,files) 305 shutil.copy(fromhere,tohere) 306 else: 307 print("Missing docs folder SASMODELS_DEST_MODELS at", SASMODELS_DEST_MODELS) 308 os.makedirs(SASMODELS_DEST_MODELS) 309 if not os.path.exists(SASMODELS_DEST_BUILDIMG): 310 os.makedirs(SASMODELS_DEST_BUILDIMG) 311 print("Created docs folder SASMODELS_DEST_MODELS at", SASMODELS_DEST_MODELS) 312 print("Copying model files for build...") 313 for files in os.listdir(SASMODELS_SOURCE_MODELS): 314 if files.endswith(".rst"): 315 fromhere=os.path.join(SASMODELS_SOURCE_MODELS,files) 316 tohere=os.path.join(SASMODELS_DEST_MODELS,files) 317 shutil.copy(fromhere,tohere) 318 # No choice but to do this because model files are all coded for images in /models/img 319 print("Copying image files for build...") 320 for files in os.listdir(SASMODELS_DEST_IMG): 321 fromhere=os.path.join(SASMODELS_DEST_IMG,files) 322 tohere=os.path.join(SASMODELS_DEST_BUILDIMG,files) 323 shutil.copy(fromhere,tohere) 324 else: 325 print("no source directory",SASMODELS_SOURCE_MODELS,"was found.") 326 print("!!!!NO MODEL DOCS WILL BE BUILT!!!!") 119 # Copy documentation files from sas/.../media to the sphinx directory 120 for root, dirs, _ in os.walk(SASVIEW_MEDIA_SOURCE): 121 if 'media' in dirs: 122 source_dir = abspath(joinpath(root, "media")) 123 relative = dirname(relpath(source_dir, SASVIEW_MEDIA_SOURCE)) 124 dest_dir = joinpath(SPHINX_SOURCE, "user", relative) 125 126 print("Found sasview docs folder at \"%s\"." % relative) 127 copy_tree(source_dir, dest_dir) 128 129 print("=== Sasmodels Docs ===") 130 shutil.copy(joinpath(SASMODELS_DOCS, "rst_prolog"), SPHINX_SOURCE) 131 copy_tree(SASMODELS_MODEL_SOURCE, SASMODELS_MODEL_TARGET) 132 #copy_tree(SASMODELS_API_SOURCE, SASMODELS_API_TARGET) 133 copy_tree(SASMODELS_DEV_SOURCE, SASMODELS_DEV_TARGET) 134 copy_tree(SASMODELS_GUIDE_SOURCE, SASMODELS_GUIDE_TARGET) 135 for filename in SASMODELS_GUIDE_EXCLUDE: 136 os.unlink(joinpath(SASMODELS_GUIDE_TARGET, filename)) 137 138 # Model category files reference the model as ../../model/name.rst. Since 139 # we are rearranging the tree, we need to update each of these links. 140 catdir = joinpath(SASMODELS_GUIDE_TARGET, "models") 141 for filename in os.listdir(catdir): 142 inplace_change(joinpath(catdir, filename), "../../model/", "/user/models/") 143 327 144 328 145 def retrieve_bumps_docs(): … … 330 147 Copies select files from the bumps documentation into fitting perspective 331 148 """ 332 if os.path.exists(BUMPS_DOCS):149 if exists(BUMPS_SOURCE): 333 150 print("=== Retrieve BUMPS Docs ===") 334 filenames = [ os.path.join(BUMPS_DOCS, "optimizer.rst")]335 filenames += glob( os.path.join(BUMPS_DOCS, "dream-*.png"))336 filenames += glob( os.path.join(BUMPS_DOCS, "fit-*.png"))151 filenames = [joinpath(BUMPS_SOURCE, "optimizer.rst")] 152 filenames += glob(joinpath(BUMPS_SOURCE, "dream-*.png")) 153 filenames += glob(joinpath(BUMPS_SOURCE, "fit-*.png")) 337 154 for f in filenames: 338 155 print("Copying file", f) … … 354 171 355 172 # Clean directory before generating a new version. 356 _remove_dir(SPHINX_SOURCE_API)173 #_remove_dir(SASVIEW_API_TARGET) 357 174 358 175 subprocess.call(["sphinx-apidoc", 359 "-o", S PHINX_SOURCE_API, # Output dir.176 "-o", SASVIEW_API_TARGET, # Output dir. 360 177 "-d", "8", # Max depth of TOC. 178 "-H", "SasView", # Package header 361 179 SASVIEW_BUILD]) 180 181 subprocess.call(["sphinx-apidoc", 182 "-o", SASMODELS_API_TARGET, # Output dir. 183 "-d", "8", # Max depth of TOC. 184 "-H", "sasmodels", # Package header 185 SASMODELS_BUILD, 186 joinpath(SASMODELS_BUILD, "sasmodels", "models"), # exclude 187 ]) 362 188 363 189 def build_pdf(): … … 368 194 subprocess.call(["sphinx-build", 369 195 "-b", "latex", # Builder name. TODO: accept as arg to setup.py. 370 "-d", os.path.join(SPHINX_BUILD, "doctrees"),196 "-d", joinpath(SPHINX_BUILD, "doctrees"), 371 197 SPHINX_SOURCE, 372 os.path.join(SPHINX_BUILD, "latex")])373 374 LATEXDIR = os.path.join(SPHINX_BUILD, "latex")198 joinpath(SPHINX_BUILD, "latex")]) 199 200 LATEXDIR = joinpath(SPHINX_BUILD, "latex") 375 201 #TODO: Does it need to be done so many time? 376 202 def pdflatex(): … … 384 210 385 211 print("=== Copy PDF to HTML Directory ===") 386 source = os.path.join(LATEXDIR, "SasView.pdf")387 target = os.path.join(SASVIEW_DOCS, "SasView.pdf")212 source = joinpath(LATEXDIR, "SasView.pdf") 213 target = joinpath(SASVIEW_DOC_TARGET, "SasView.pdf") 388 214 shutil.copyfile(source, target) 389 215 … … 395 221 subprocess.call(["sphinx-build", 396 222 "-b", "html", # Builder name. TODO: accept as arg to setup.py. 397 "-d", os.path.join(SPHINX_BUILD, "doctrees"),223 "-d", joinpath(SPHINX_BUILD, "doctrees"), 398 224 SPHINX_SOURCE, 399 os.path.join(SPHINX_BUILD, "html")])225 joinpath(SPHINX_BUILD, "html")]) 400 226 401 227 print("=== Copy HTML Docs to Build Directory ===") 402 html = os.path.join(SPHINX_BUILD, "html")403 copy_tree(html, SASVIEW_DOC S)228 html = joinpath(SPHINX_BUILD, "html") 229 copy_tree(html, SASVIEW_DOC_TARGET) 404 230 405 231 def fetch_katex(version, destination="_static"): … … 408 234 url = "https://github.com/Khan/KaTeX/releases/download/%s/katex.zip" % version 409 235 cache_path = "katex_%s.zip" % version 410 if not os.path.exists(cache_path):236 if not exists(cache_path): 411 237 try: 412 238 fd_in = urllib2.urlopen(url) … … 420 246 def convert_katex(): 421 247 print("=== Preprocess HTML, converting latex to html ===") 422 subprocess.call(["node", "convertKaTex.js", SASVIEW_DOC S])248 subprocess.call(["node", "convertKaTex.js", SASVIEW_DOC_TARGET]) 423 249 424 250 def convert_mathjax(): 425 251 print("=== Preprocess HTML, converting latex to html ===") 426 subprocess.call(["node", "convertMathJax.js", SASVIEW_DOC S])252 subprocess.call(["node", "convertMathJax.js", SASVIEW_DOC_TARGET]) 427 253 428 254 def fetch_mathjax(): -
docs/sphinx-docs/source/dev/dev.rst
r959eb01 r3bd677b 10 10 :maxdepth: 1 11 11 12 SasView API <api/modules> 12 SasView API <sasview-api/modules> 13 sasmodels overview <sasmodels-dev/index> 14 sasmodels API <sasmodels-api/modules> 13 15 14 16 Indices and Search -
docs/sphinx-docs/source/user/marketplace.rst
r959eb01 r59dfb53 3 3 Model Marketplace 4 4 ================= 5 The Model Marketplace allows members of the SAS Community to contribute plug-in fitting models for *SasView* for all to use. 5 The Model Marketplace allows members of the SAS Community to contribute 6 plug-in fitting models for *SasView* for all to use. 6 7 7 8 .. note:: These plug-in models require SasView version 4.0 or later. 8 9 9 Contributed models should be written in Python (only version 2.7.x is currently supported) or, if computational speed is an issue, in a combination of Python and C. You only need to upload the .py/.c source code files to the Marketplace! 10 Contributed models should be written in Python (only version 2.7.x is 11 currently supported) or, if computational speed is an issue, in a 12 combination of Python and C. You only need to upload the .py/.c source 13 code files to the Marketplace! 10 14 11 For guidance on how to write a plugin model see :ref:`Writing_a_Plugin` . It may also be helpful to examine the library models in the */sasmodels-data/models* sub-folder of your SasView installation directory. 15 For guidance on how to write a plugin model see :ref:`Writing_a_Plugin` . It 16 may also be helpful to examine the library models in 17 the */sasmodels-data/models* sub-folder of your SasView installation directory. 12 18 13 The Marketplace also provides the option to upload a SasView text file of the scattering function data computed by your model. If you do this a graph of the scattering function will appear under the Marketplace entry for your model. 19 The Marketplace also provides the option to upload a SasView text file of 20 the scattering function data computed by your model. If you do this a graph 21 of the scattering function will appear under the Marketplace entry for 22 your model. 14 23 15 .. note:: The SasView Development Team regret to say that they do not have the resources to fix the bugs or polish the code in every model contributed to the Marketplace! 24 .. note:: 25 The SasView Development Team regret to say that they do not have the 26 resources to fix the bugs or polish the code in every model contributed 27 to the Marketplace! -
docs/sphinx-docs/source/user/tutorial.rst
r2f6d340 r3bd677b 8 8 .. note:: In Windows use [Alt]-[Cursor left] to return to the previous page 9 9 10 :download:`Getting Started with Sasview < ../../../../src/sas/sasview/media/getting_started_with_sasview.pdf>`10 :download:`Getting Started with Sasview <sasview/getting_started_with_sasview.pdf>` 11 11 12 :download:`Old Tutorial < ../../../../src/sas/sasview/media/Tutorial.pdf>`12 :download:`Old Tutorial <sasview/Tutorial.pdf>` -
docs/sphinx-docs/source/user/user.rst
r959eb01 r3bd677b 7 7 :maxdepth: 1 8 8 9 Model Documentation < index>10 9 Model Documentation <sasgui/perspectives/fitting/models/index> 10 11 11 Menu Bar <menu_bar> 12 12 13 13 Fitting & Other Analyses <analysis> 14 14 15 15 Tools & Utilities <tools> 16 16 17 17 Working with SasView <working> -
docs/sphinx-docs/source/user/working.rst
r8cc39d6 r3bd677b 8 8 9 9 Data Formats <sasgui/guiframe/data_formats_help> 10 10 11 11 Loading Data <sasgui/guiframe/data_explorer_help> 12 12 13 13 Plotting Data/Models <sasgui/guiframe/graph_help> 14 15 Test Data <../test/testdata_help.rst> 16 17 Tutorials <tutorial.rst> 18 19 Writing a Plugin Model <sasgui/perspectives/fitting/plugin.rst> 20 21 Computations with a GPU <gpu_computations> 22 14 15 Test Data <sasview/test/testdata_help> 16 17 Tutorials <tutorial> 18 19 Writing a Plugin Model <sasgui/perspectives/fitting/plugin> 20 21 Model marketplace <marketplace> -
src/sas/sascalc/corfunc/corfunc_calculator.py
rb916afa ra26f67f 177 177 """ 178 178 Extract the interesting measurements from a correlation function 179 :param transformed_data: Fourier transformation of the 180 179 180 :param transformed_data: Fourier transformation of the extrapolated data 181 181 """ 182 182 # Calculate indexes of maxima and minima -
src/sas/sascalc/data_util/registry.py
rdc8d1c2 ra26f67f 121 121 Call the loader for the file type of path. 122 122 123 :raise ValueError: if no loader is available. 124 :raise KeyError: if format is not available. 123 :raises ValueError: if no loader is available. 124 :raises KeyError: if format is not available. 125 125 126 May raise a loader-defined exception if loader fails. 126 127 """ -
src/sas/sascalc/file_converter/c_ext/__init__.py
r18e7309 ra26f67f 1 """ 2 Data loader for the Diamond BSL beamline. 3 """ -
src/sas/sasgui/guiframe/CategoryInstaller.py
rb963b20 ra26f67f 112 112 def check_install(homedir = None, model_list=None): 113 113 """ 114 the main method of this class 115 makes sure categories.json exists and if not 116 compile it and install 114 Makes sure categories.json exists and if not compile it and install. 115 116 This is the main method of this class. 117 117 118 :param homefile: Override the default home directory 118 :param model_list: List of model names except those in Plugin Models119 119 :param model_list: List of model names except those in 120 Plugin Models which are user supplied. 120 121 """ 121 122 _model_dict = {model.name: model for model in model_list} -
src/sas/sasgui/guiframe/local_perspectives/plotting/parameters_panel_slicer.py
r47d93073 ra26f67f 395 395 """ 396 396 Event based parameter setting. 397 397 398 :param evt: Event triggered to apply parameters to a list of plots 398 evt should have attrs plot_list and params 399 evt should have attrs plot_list and params 400 399 401 """ 400 402 if evt is None: … … 467 469 """ 468 470 Send a list of data to the fitting perspective 469 :param fit: fit type desired 471 :param fit: fit type desired 470 472 :param file_list: list of loaded file names to send to fit 471 473 """ -
src/sas/sasgui/perspectives/file_converter/converter_panel.py
r19296dc ra26f67f 93 93 <SasData> element. 94 94 95 :param frame_data: If single_file is true, an array of Data1D objects. 96 If single_file is false, a dictionary of the form frame_number: Data1D. 95 :param frame_data: If single_file is true, an array of Data1D 96 objects. If single_file is false, a dictionary of the 97 form *{frame_number: Data1D}*. 97 98 :param filepath: Where to save the CanSAS file 98 :param single_file: If true, array is saved as a single file, if false,99 each item in the array is saved to it's own file99 :param single_file: If true, array is saved as a single file, 100 if false, each item in the array is saved to it's own file 100 101 """ 101 102 writer = CansasWriter() … … 192 193 :return x_data: A 1D array containing all the x coordinates of the data 193 194 :return y_data: A 1D array containing all the y coordinates of the data 194 :return frame_data: A dictionary of the form frame_number: data, where 195 data is a 2D numpy array containing the intensity data 195 :return frame_data: A dictionary of the form *{frame_number: data}*, where data is a 2D numpy array containing the intensity data 196 196 """ 197 197 loader = BSLLoader(filename) -
src/sas/sasgui/perspectives/fitting/basepage.py
rd3b0c77 r3bd677b 2816 2816 "", name + " Help") 2817 2817 else: 2818 _TreeLocation = 'user/ index.html'2818 _TreeLocation = 'user/sasgui/perspectives/fitting/models/index.html' 2819 2819 _doc_viewer = DocumentationWindow(self, wx.ID_ANY, _TreeLocation, 2820 2820 "", "General Model Help") … … 2887 2887 """ 2888 2888 2889 _TreeLocation = "user/ magnetism.html"2889 _TreeLocation = "user/sasgui/perspectives/fitting/magnetism/magnetism.html" 2890 2890 _doc_viewer = DocumentationWindow(self, wx.ID_ANY, _TreeLocation, "", 2891 2891 "Polarized Beam/Magnetc Help") … … 2933 2933 """ 2934 2934 2935 _TreeLocation = "user/sasgui/perspectives/fitting/pd _help.html"2935 _TreeLocation = "user/sasgui/perspectives/fitting/pd/polydispersity.html" 2936 2936 _PageAnchor = "" 2937 2937 _doc_viewer = DocumentationWindow(self, wx.ID_ANY, _TreeLocation, -
src/sas/sasgui/perspectives/fitting/fitpage.py
r0315b63 r3bd677b 1079 1079 """ 1080 1080 1081 _TreeLocation = "user/sasgui/perspectives/fitting/ sm_help.html"1081 _TreeLocation = "user/sasgui/perspectives/fitting/resolution.html" 1082 1082 _doc_viewer = DocumentationWindow(self, wx.ID_ANY, _TreeLocation, "", 1083 1083 "Instrumental Resolution Smearing \ -
src/sas/sasgui/perspectives/fitting/gpu_options.py
r73cbeec r3bd677b 318 318 Provide help on opencl options. 319 319 """ 320 TreeLocation = "user/ gpu_computations.html"320 TreeLocation = "user/sasgui/perspectives/fitting/gpu_setup.html" 321 321 anchor = "#device-selection" 322 322 DocumentationWindow(self, -1, -
src/sas/sasgui/perspectives/fitting/media/fitting.rst
r46dfee9 r3bd677b 13 13 Assessing Fit Quality <residuals_help> 14 14 15 Polydispersity Distributions <pd _help>15 Polydispersity Distributions <pd/polydispersity> 16 16 17 Smearing Functions < sm_help>17 Smearing Functions <resolution> 18 18 19 Polarisation/Magnetic Scattering <mag _help>19 Polarisation/Magnetic Scattering <magnetism/magnetism> 20 20 21 Information on the SasView Optimisers <optimizer.rst> 22 23 Converting SANS to SESANS for Fitting <../../../sans_to_sesans> 24 25 Fitting SESANS Data <../../../sesans_fitting.rst> 26 27 Writing a Plugin Model <plugin.rst> 28 29 Computations with a GPU <../../../gpu_computations> 30 21 Information on the SasView Optimisers <optimizer> 22 23 Converting SANS to SESANS for Fitting <sesans/sans_to_sesans> 24 25 Fitting SESANS Data <sesans/sesans_fitting> 26 27 Writing a Plugin Model <plugin> 28 29 Computations with a GPU <gpu_setup> 30 31 Scripting interface to sasmodels <scripting> 32 33 References <refs> -
src/sas/sasgui/perspectives/fitting/media/fitting_help.rst
rc5cfb20 r5005ae0 3 3 .. This is a port of the original SasView html help file to ReSTructured text 4 4 .. by S King, ISIS, during SasView CodeCamp-III in Feb 2015. 5 6 .. |inlineimage004| image:: sm_image004.png7 .. |inlineimage005| image:: sm_image005.png8 .. |inlineimage008| image:: sm_image008.png9 .. |inlineimage009| image:: sm_image009.png10 .. |inlineimage010| image:: sm_image010.png11 .. |inlineimage011| image:: sm_image011.png12 .. |inlineimage012| image:: sm_image012.png13 .. |inlineimage018| image:: sm_image018.png14 .. |inlineimage019| image:: sm_image019.png15 16 5 17 6 Fitting … … 38 27 for example, if you have measured the same sample at different contrasts) 39 28 40 * in *Batch* fit mode - multiple data sets are fitted sequentially to the *same* model (this might be useful, for example, if you have performed a kinetic or time-resolved experiment and have *lots* of data sets!) 29 * in *Batch* fit mode - multiple data sets are fitted sequentially to the 30 *same* model (this might be useful, for example, if you have performed 31 a kinetic or time-resolved experiment and have *lots* of data sets!) 41 32 42 33 .. ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ … … 54 45 * *Lamellae* - lamellar shapes (lamellar, core shell lamellar, stacked 55 46 lamellar, etc) 56 * *Shape-Independent* - models describing structure in terms of density correlation functions, fractals, peaks, power laws, etc 47 * *Shape-Independent* - models describing structure in terms of density 48 correlation functions, fractals, peaks, power laws, etc 57 49 * *Paracrystal* - semi ordered structures (bcc, fcc, etc) 58 50 * *Structure Factor* - S(Q) models … … 143 135 and/or relatively simple models) 144 136 * By copying/editing an existing model (this can include models generated by 145 the New Plugin Model* dialog) in the :ref:`Python_shell` or 137 the New Plugin Model* dialog) in the :ref:`Python_shell` or 146 138 :ref:`Advanced_Plugin_Editor` (suitable for all use cases) 147 139 * By writing a model from scratch outside of SasView (only recommended for code … … 181 173 .. image:: new_model.png 182 174 183 When using this feature, be aware that even if your code has errors, including 184 syntax errors, a model file is still generated. When you then correct the errors 185 and click 'Apply' again to re-compile you will get an error informing you that 186 the model already exists if the 'Overwrite' box is not checked. In this case you 187 will need to supply a new model function name. By default the 'Overwrite' box is 175 When using this feature, be aware that even if your code has errors, including 176 syntax errors, a model file is still generated. When you then correct the errors 177 and click 'Apply' again to re-compile you will get an error informing you that 178 the model already exists if the 'Overwrite' box is not checked. In this case you 179 will need to supply a new model function name. By default the 'Overwrite' box is 188 180 *checked*\ . 189 181 … … 195 187 the :ref:`Advanced_Plugin_Editor` . 196 188 197 **SasView version 4.2** made it possible to specify whether a plugin created with 198 the *New Plugin Model* dialog is actually a form factor P(Q) or a structure factor 199 S(Q). To do this, simply add one or other of the following lines under the *import* 189 **SasView version 4.2** made it possible to specify whether a plugin created with 190 the *New Plugin Model* dialog is actually a form factor P(Q) or a structure factor 191 S(Q). To do this, simply add one or other of the following lines under the *import* 200 192 statements. 201 193 … … 203 195 204 196 form_factor = True 205 197 206 198 or for a structure factor:: 207 199 208 200 structure_factor = True 209 210 If the plugin is a structure factor it is *also* necessary to add two variables to 201 202 If the plugin is a structure factor it is *also* necessary to add two variables to 211 203 the parameter list:: 212 204 213 parameters = [ 205 parameters = [ 214 206 ['radius_effective', '', 1, [0.0, numpy.inf], 'volume', ''], 215 207 ['volfraction', '', 1, [0.0, 1.0], '', ''], … … 222 214 def Iqxy(x, y, radius_effective, volfraction, ...): 223 215 224 Such a plugin should then be available in the S(Q) drop-down box on a FitPage (once 216 Such a plugin should then be available in the S(Q) drop-down box on a FitPage (once 225 217 a P(Q) model has been selected). 226 218 … … 243 235 them. Finally, click the *Apply* button to generate and test the model and then click *Close*. 244 236 245 Any changes to a plugin model generated in this way only become effective *after* it is re-selected 246 from the plugin models drop-down menu on the FitPage. If the model is not listed you can force a 237 Any changes to a plugin model generated in this way only become effective *after* it is re-selected 238 from the plugin models drop-down menu on the FitPage. If the model is not listed you can force a 247 239 recompilation of the plugins by selecting *Fitting* > *Plugin Model Operations* > *Load Plugin Models*. 248 240 249 **SasView version 4.2** introduced a much simplified and more extensible structure for plugin models 250 generated through the Easy Sum/Multi Editor. For example, the code for a combination of a sphere model 241 **SasView version 4.2** introduced a much simplified and more extensible structure for plugin models 242 generated through the Easy Sum/Multi Editor. For example, the code for a combination of a sphere model 251 243 with a power law model now looks like this:: 252 244 253 245 from sasmodels.core import load_model_info 254 246 from sasmodels.sasview_model import make_model_from_info 255 247 256 248 model_info = load_model_info('sphere+power_law') 257 249 model_info.name = 'MyPluginModel' … … 259 251 Model = make_model_from_info(model_info) 260 252 261 To change the models or operators contributing to this plugin it is only necessary to edit the string 262 in the brackets after *load_model_info*, though it would also be a good idea to update the model name 253 To change the models or operators contributing to this plugin it is only necessary to edit the string 254 in the brackets after *load_model_info*, though it would also be a good idea to update the model name 263 255 and description too!!! 264 256 265 The model specification string can handle multiple models and combinations of operators (+ or *) which 266 are processed according to normal conventions. Thus 'model1+model2*model3' would be valid and would 267 multiply model2 by model3 before adding model1. In this example, parameters in the *FitPage* would be 268 prefixed A (for model2), B (for model3) and C (for model1). Whilst this might appear a little 269 confusing, unless you were creating a plugin model from multiple instances of the same model the parameter 257 The model specification string can handle multiple models and combinations of operators (+ or *) which 258 are processed according to normal conventions. Thus 'model1+model2*model3' would be valid and would 259 multiply model2 by model3 before adding model1. In this example, parameters in the *FitPage* would be 260 prefixed A (for model2), B (for model3) and C (for model1). Whilst this might appear a little 261 confusing, unless you were creating a plugin model from multiple instances of the same model the parameter 270 262 assignments ought to be obvious when you load the plugin. 271 263 272 If you need to include another plugin model in the model specification string, just prefix the name of 264 If you need to include another plugin model in the model specification string, just prefix the name of 273 265 that model with *custom*. For instance:: 274 266 … … 278 270 279 271 sphere@hardsphere 280 281 This streamlined approach to building complex plugin models from existing library models, or models 282 available on the *Model Marketplace*, also permits the creation of P(Q)*\S(Q) plugin models, something 283 that was not possible in earlier versions of SasView. 272 273 This streamlined approach to building complex plugin models from existing library models, or models 274 available on the *Model Marketplace*, also permits the creation of P(Q)*\S(Q) plugin models, something 275 that was not possible in earlier versions of SasView. 284 276 285 277 .. _Advanced_Plugin_Editor: … … 471 463 472 464 This mode is an extension of the :ref:`Single_Fit_Mode` that fits two or more data 473 sets *to the same model* simultaneously. If necessary it is possible to constrain 465 sets *to the same model* simultaneously. If necessary it is possible to constrain 474 466 fit parameters between data sets (eg, to fix a background level, or radius, etc). 475 467 … … 689 681 recognises the operators +, -, \*, /, or 'pow', and allows the following 690 682 types of expression : 691 683 692 684 1) if an axis label range is a function of 1 or more *columns*, write 693 685 this type of expression … … 706 698 707 699 Example: radius [2 : 5] , radius [10 : 25] 708 700 709 701 .. ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 710 702 … … 756 748 p#_ appended to the beginning and thus radius and p1_radius will not be 757 749 recognized as the same parameter. 758 750 759 751 .. image:: combine_batch_grid.png 760 752 … … 764 756 time is not listed in the file but the file name contains the information. As 765 757 described in :ref:`Grid_Window`, a column can be added manually, in this case 766 called time, and the peak position plotted against time. 758 called time, and the peak position plotted against time. 767 759 768 760 .. image:: combine_batch_plot.png -
src/sas/sasgui/perspectives/fitting/media/residuals_help.rst
r940d034 r99ded31 26 26 ^^^^ 27 27 28 Chi2 is a statistical parameter that quantifies the differences between an observed 29 data set and an expected dataset (or 'theory').28 $\chi^2$ is a statistical parameter that quantifies the differences between 29 an observed data set and an expected dataset (or 'theory'). 30 30 31 *SasView* actually returns this parameter normalized to the number of data points, 32 *Npts*such that31 When showing the a model with the data, *SasView* displays this parameter 32 normalized to the number of data points, $N_\mathrm{pts}$ such that 33 33 34 34 .. math:: 35 35 36 \chi^2/N_{pts} = \sum[(Y_i - \mathrm{theory}_i)^2 / \mathrm{error}_i^2] / N_{pts} 36 \chi^2_N 37 = \sum[(Y_i - \mathrm{theory}_i)^2 / \mathrm{error}_i^2] / N_\mathrm{pts} 37 38 38 This differs slightly from what is sometimes called the 'reduced $\chi^2$' 39 because it does not take into account the number of fitting parameters (to 40 calculate the number of 'degrees of freedom'), but the 'normalized $\chi^2$ 41 and the 'reduced $\chi^2$ are very close to each other when $N_{pts} \gg 42 \text{number of parameters}. 39 When performing a fit, *SasView* instead displays the reduced $\chi^2_R$, 40 which takes into account the number of fitting parameters $N_\mathrm{par}$ 41 (to calculate the number of 'degrees of freedom'). This is computed as 43 42 44 For a good fit, $\chi^2/N_{pts}$ tends to 1. 43 .. math:: 45 44 46 $\chi^2/N_{pts}$ is sometimes referred to as the 'goodness-of-fit' parameter. 45 \chi^2_R 46 = \sum[(Y_i - \mathrm{theory}_i)^2 / \mathrm{error}_i^2] 47 / [N_\mathrm{pts} - N_\mathrm{par}] 48 49 The normalized $\chi^2_N$ and the reduced $\chi^2_R$ are very close to each 50 other when $N_\mathrm{pts} \gg N_\mathrm{par}$. 51 52 For a good fit, $\chi^2_R$ tends to 1. 53 54 $\chi^2_R$ is sometimes referred to as the 'goodness-of-fit' parameter. 47 55 48 56 .. ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ … … 52 60 53 61 A residual is the difference between an observed value and an estimate of that 54 value, such as a 'theory' calculation (whereas the difference between an observed55 value and its *true* value is its error).62 value, such as a 'theory' calculation (whereas the difference between an 63 observed value and its *true* value is its error). 56 64 57 65 *SasView* calculates 'normalized residuals', $R_i$, for each data point in the … … 60 68 .. math:: 61 69 62 R_i = (Y_i - Y_theory_i) / (Y_err_i)70 R_i = (Y_i - \mathrm{theory}_i) / \mathrm{error}_i 63 71 64 For a good fit, $R_i \sim 0$. 72 Think of each normalized residual as the number of standard deviations 73 between the measured value and the theory. For a good fit, 68% of $R_i$ 74 will be within one standard deviation, which will show up in the Residuals 75 plot as $R_i$ values between $-1$ and $+1$. Almost all the values should 76 be between $-3$ and $+3$. 77 78 Residuals values larger than $\pm 3$ indicate that the model 79 is not fit correctly, the wrong model was chosen (e.g., because there is 80 more than one phase in your system), or there are problems in 81 the data reduction. Since the goodness of fit is calculated from the 82 sum-squared residuals, these extreme values will drive the choice of fit 83 parameters. Any uncertainties calculated for the fitting parameters will 84 be meaningless. 65 85 66 86 .. ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 67 87 68 .. note:: This help document was last changed by Steve King, 08Jun2015 88 *Document History* 89 90 | 2015-06-08 Steve King 91 | 2017-09-28 Paul Kienzle -
src/sas/sasgui/perspectives/fitting/plugin_models/__init__.py
rab0b93f r64cdb0d 1 """ 2 Example plugin models to be added to the SasView plugin directory on startup 3 if no plugins are present. 4 5 This is currently empty. 6 """ -
src/sas/sasgui/plottools/LineModel.py
r959eb01 ra26f67f 2 2 """ 3 3 Provide Line function (y= Ax + B). Until July 10, 2016 this function provided 4 (y= A + Bx). This however was contrary to all the other code using it which 4 (y= A + Bx). This however was contrary to all the other code using it which 5 5 assumed (y= mx+b) or in this nomenclature (y=Ax + B). This lead to some 6 6 contortions in the code and worse incorrect calculations until now for at least … … 67 67 Evaluate the model 68 68 69 :note: This is the function called by fitDialog to calculate the70 the y(xmin) and y(xmax), but the only difference between this and71 runXY is when the if statement is true. I however cannot see what that72 function is for. It needs to be documented here or removed.73 PDB 7/10/1674 75 69 :param x: simple value 76 70 77 71 :return: (Line value) 72 73 .. note:: 74 This is the function called by fitDialog to calculate the 75 the y(xmin) and y(xmax), but the only difference between this and 76 runXY is when the if statement is true. I however cannot see what 77 that function is for. It needs to be documented here or removed. 78 PDB 7/10/16 78 79 """ 79 80 if x.__class__.__name__ == 'list': … … 89 90 """ 90 91 Evaluate the model. 91 92 :note: This is to be what is called by fitDialog for the actual fit93 but the only difference between this and run is when the if94 statement is true. I however cannot see what that function95 is for. It needs to be documented here or removed. PDB 7/10/1696 92 97 93 :param x: simple value … … 99 95 :return: Line value 100 96 97 .. note:: 98 This is to be what is called by fitDialog for the actual fit 99 the only difference between this and run is when the if 100 statement is true. I however cannot see what that function 101 is for. It needs to be documented here or removed. PDB 7/10/16 101 102 """ 102 103 if x.__class__.__name__ == 'list':
Note: See TracChangeset
for help on using the changeset viewer.