Changes in / [c22b621:2b538cd] in sasview
- Files:
-
- 55 added
- 20 edited
Legend:
- Unmodified
- Added
- Removed
-
docs/sphinx-docs/build_sphinx.py
rdf72475 r6e546f8 10 10 import subprocess 11 11 import os 12 from os.path import join as joinpath, abspath, dirname, isdir, exists, relpath13 12 import sys 14 13 import fnmatch … … 26 25 platform = '.%s-%s'%(get_platform(),sys.version[:3]) 27 26 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')) 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')) 64 30 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.rst 39 # We are currently here: 40 #/sasview-local-trunk/docs/sphinx-docs/build_sphinx.py 41 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-place 52 ## Assemble the docs in a temporary folder 53 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") 65 74 66 75 def inplace_change(filename, old_string, new_string): … … 79 88 def _remove_dir(dir_path): 80 89 """Removes the given directory.""" 81 if isdir(dir_path):90 if os.path.isdir(dir_path): 82 91 print("Removing \"%s\"... " % dir_path) 83 92 shutil.rmtree(dir_path) … … 88 97 """ 89 98 print("=== Cleaning Sphinx Build ===") 90 _remove_dir(SASVIEW_DOC _TARGET)99 _remove_dir(SASVIEW_DOCS) 91 100 _remove_dir(SPHINX_BUILD) 92 101 _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) 93 106 94 107 def setup_source_temp(): … … 97 110 """ 98 111 print("=== Copying Source toctrees ===") 99 shutil.copytree(SASVIEW_DOCS, SPHINX_SOURCE) 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) 100 115 101 116 def retrieve_user_docs(): … … 117 132 print("=== Retrieve User Docs ===") 118 133 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 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!!!!") 144 327 145 328 def retrieve_bumps_docs(): … … 147 330 Copies select files from the bumps documentation into fitting perspective 148 331 """ 149 if exists(BUMPS_SOURCE):332 if os.path.exists(BUMPS_DOCS): 150 333 print("=== Retrieve BUMPS Docs ===") 151 filenames = [ joinpath(BUMPS_SOURCE, "optimizer.rst")]152 filenames += glob( joinpath(BUMPS_SOURCE, "dream-*.png"))153 filenames += glob( joinpath(BUMPS_SOURCE, "fit-*.png"))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")) 154 337 for f in filenames: 155 338 print("Copying file", f) … … 171 354 172 355 # Clean directory before generating a new version. 173 #_remove_dir(SASVIEW_API_TARGET)356 _remove_dir(SPHINX_SOURCE_API) 174 357 175 358 subprocess.call(["sphinx-apidoc", 176 "-o", S ASVIEW_API_TARGET, # Output dir.359 "-o", SPHINX_SOURCE_API, # Output dir. 177 360 "-d", "8", # Max depth of TOC. 178 "-H", "SasView", # Package header179 361 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 header185 SASMODELS_BUILD,186 joinpath(SASMODELS_BUILD, "sasmodels", "models"), # exclude187 ])188 362 189 363 def build_pdf(): … … 194 368 subprocess.call(["sphinx-build", 195 369 "-b", "latex", # Builder name. TODO: accept as arg to setup.py. 196 "-d", joinpath(SPHINX_BUILD, "doctrees"),370 "-d", os.path.join(SPHINX_BUILD, "doctrees"), 197 371 SPHINX_SOURCE, 198 joinpath(SPHINX_BUILD, "latex")])199 200 LATEXDIR = joinpath(SPHINX_BUILD, "latex")372 os.path.join(SPHINX_BUILD, "latex")]) 373 374 LATEXDIR = os.path.join(SPHINX_BUILD, "latex") 201 375 #TODO: Does it need to be done so many time? 202 376 def pdflatex(): … … 210 384 211 385 print("=== Copy PDF to HTML Directory ===") 212 source = joinpath(LATEXDIR, "SasView.pdf")213 target = joinpath(SASVIEW_DOC_TARGET, "SasView.pdf")386 source = os.path.join(LATEXDIR, "SasView.pdf") 387 target = os.path.join(SASVIEW_DOCS, "SasView.pdf") 214 388 shutil.copyfile(source, target) 215 389 … … 221 395 subprocess.call(["sphinx-build", 222 396 "-b", "html", # Builder name. TODO: accept as arg to setup.py. 223 "-d", joinpath(SPHINX_BUILD, "doctrees"),397 "-d", os.path.join(SPHINX_BUILD, "doctrees"), 224 398 SPHINX_SOURCE, 225 joinpath(SPHINX_BUILD, "html")])399 os.path.join(SPHINX_BUILD, "html")]) 226 400 227 401 print("=== Copy HTML Docs to Build Directory ===") 228 html = joinpath(SPHINX_BUILD, "html")229 copy_tree(html, SASVIEW_DOC _TARGET)402 html = os.path.join(SPHINX_BUILD, "html") 403 copy_tree(html, SASVIEW_DOCS) 230 404 231 405 def fetch_katex(version, destination="_static"): … … 234 408 url = "https://github.com/Khan/KaTeX/releases/download/%s/katex.zip" % version 235 409 cache_path = "katex_%s.zip" % version 236 if not exists(cache_path):410 if not os.path.exists(cache_path): 237 411 try: 238 412 fd_in = urllib2.urlopen(url) … … 246 420 def convert_katex(): 247 421 print("=== Preprocess HTML, converting latex to html ===") 248 subprocess.call(["node", "convertKaTex.js", SASVIEW_DOC _TARGET])422 subprocess.call(["node", "convertKaTex.js", SASVIEW_DOCS]) 249 423 250 424 def convert_mathjax(): 251 425 print("=== Preprocess HTML, converting latex to html ===") 252 subprocess.call(["node", "convertMathJax.js", SASVIEW_DOC _TARGET])426 subprocess.call(["node", "convertMathJax.js", SASVIEW_DOCS]) 253 427 254 428 def fetch_mathjax(): -
docs/sphinx-docs/source/dev/dev.rst
r3bd677b r959eb01 10 10 :maxdepth: 1 11 11 12 SasView API <sasview-api/modules> 13 sasmodels overview <sasmodels-dev/index> 14 sasmodels API <sasmodels-api/modules> 12 SasView API <api/modules> 15 13 16 14 Indices and Search -
docs/sphinx-docs/source/user/marketplace.rst
r59dfb53 r959eb01 3 3 Model Marketplace 4 4 ================= 5 The Model Marketplace allows members of the SAS Community to contribute 6 plug-in fitting models for *SasView* for all to use. 5 The Model Marketplace allows members of the SAS Community to contribute plug-in fitting models for *SasView* for all to use. 7 6 8 7 .. note:: These plug-in models require SasView version 4.0 or later. 9 8 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! 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! 14 10 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. 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. 18 12 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. 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. 23 14 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! 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! -
docs/sphinx-docs/source/user/tutorial.rst
r3bd677b r9a76292 8 8 .. note:: In Windows use [Alt]-[Cursor left] to return to the previous page 9 9 10 :download:`Getting Started with Sasview < sasview/getting_started_with_sasview.pdf>`10 :download:`Getting Started with Sasview <../../../../src/sas/sasview/media/getting_started_with_sasview.pdf>` 11 11 12 :download:`Old Tutorial < sasview/Tutorial.pdf>`12 :download:`Old Tutorial <../../../../src/sas/sasview/media/Tutorial.pdf>` -
docs/sphinx-docs/source/user/user.rst
r3bd677b r959eb01 7 7 :maxdepth: 1 8 8 9 Model Documentation < sasgui/perspectives/fitting/models/index>10 9 Model Documentation <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
r3bd677b r9a76292 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 <sasview/test/testdata_help> 16 17 Tutorials <tutorial> 18 19 Writing a Plugin Model <sasgui/perspectives/fitting/plugin> 20 21 Model marketplace <marketplace> 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 -
src/sas/sascalc/corfunc/corfunc_calculator.py
ra26f67f r92eee84 177 177 """ 178 178 Extract the interesting measurements from a correlation function 179 180 :param transformed_data: Fourier transformation of theextrapolated data179 :param transformed_data: Fourier transformation of the 180 extrapolated data 181 181 """ 182 182 # Calculate indexes of maxima and minima -
src/sas/sascalc/data_util/registry.py
ra26f67f rdc8d1c2 121 121 Call the loader for the file type of path. 122 122 123 :raises ValueError: if no loader is available. 124 :raises KeyError: if format is not available. 125 123 :raise ValueError: if no loader is available. 124 :raise KeyError: if format is not available. 126 125 May raise a loader-defined exception if loader fails. 127 126 """ -
src/sas/sascalc/file_converter/c_ext/__init__.py
ra26f67f r18e7309 1 """2 Data loader for the Diamond BSL beamline.3 """ -
src/sas/sasgui/guiframe/CategoryInstaller.py
ra26f67f rb963b20 112 112 def check_install(homedir = None, model_list=None): 113 113 """ 114 Makes sure categories.json exists and if not compile it and install. 115 116 This is the main method of this class. 117 114 the main method of this class 115 makes sure categories.json exists and if not 116 compile it and install 118 117 :param homefile: Override the default home directory 119 :param model_list: List of model names except those in 120 Plugin Modelswhich are user supplied.118 :param model_list: List of model names except those in Plugin Models 119 which are user supplied. 121 120 """ 122 121 _model_dict = {model.name: model for model in model_list} -
src/sas/sasgui/guiframe/local_perspectives/plotting/parameters_panel_slicer.py
ra26f67f r47d93073 395 395 """ 396 396 Event based parameter setting. 397 398 397 :param evt: Event triggered to apply parameters to a list of plots 399 evt should have attrs plot_list and params 400 398 evt should have attrs plot_list and params 401 399 """ 402 400 if evt is None: … … 469 467 """ 470 468 Send a list of data to the fitting perspective 471 :param fit: fit type desired 469 :param fit: fit type desired 472 470 :param file_list: list of loaded file names to send to fit 473 471 """ -
src/sas/sasgui/perspectives/file_converter/converter_panel.py
ra26f67f r19296dc 93 93 <SasData> element. 94 94 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}*. 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. 98 97 :param filepath: Where to save the CanSAS file 99 :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 file98 :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 file 101 100 """ 102 101 writer = CansasWriter() … … 193 192 :return x_data: A 1D array containing all the x coordinates of the data 194 193 :return y_data: A 1D array containing all the y coordinates of the data 195 :return frame_data: A dictionary of the form *{frame_number: data}*, where data is a 2D numpy array containing the intensity 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 196 196 """ 197 197 loader = BSLLoader(filename) -
src/sas/sasgui/perspectives/fitting/basepage.py
r3bd677b r33dc18f 2816 2816 "", name + " Help") 2817 2817 else: 2818 _TreeLocation = 'user/ sasgui/perspectives/fitting/models/index.html'2818 _TreeLocation = 'user/index.html' 2819 2819 _doc_viewer = DocumentationWindow(self, wx.ID_ANY, _TreeLocation, 2820 2820 "", "General Model Help") … … 2887 2887 """ 2888 2888 2889 _TreeLocation = "user/ sasgui/perspectives/fitting/magnetism/magnetism.html"2889 _TreeLocation = "user/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 /polydispersity.html"2935 _TreeLocation = "user/sasgui/perspectives/fitting/pd_help.html" 2936 2936 _PageAnchor = "" 2937 2937 _doc_viewer = DocumentationWindow(self, wx.ID_ANY, _TreeLocation, -
src/sas/sasgui/perspectives/fitting/fitpage.py
r3bd677b r48154abb 1079 1079 """ 1080 1080 1081 _TreeLocation = "user/sasgui/perspectives/fitting/ resolution.html"1081 _TreeLocation = "user/sasgui/perspectives/fitting/sm_help.html" 1082 1082 _doc_viewer = DocumentationWindow(self, wx.ID_ANY, _TreeLocation, "", 1083 1083 "Instrumental Resolution Smearing \ -
src/sas/sasgui/perspectives/fitting/gpu_options.py
r3bd677b r73cbeec 318 318 Provide help on opencl options. 319 319 """ 320 TreeLocation = "user/ sasgui/perspectives/fitting/gpu_setup.html"320 TreeLocation = "user/gpu_computations.html" 321 321 anchor = "#device-selection" 322 322 DocumentationWindow(self, -1, -
src/sas/sasgui/perspectives/fitting/media/fitting.rst
r3bd677b r46dfee9 13 13 Assessing Fit Quality <residuals_help> 14 14 15 Polydispersity Distributions <pd /polydispersity>15 Polydispersity Distributions <pd_help> 16 16 17 Smearing Functions < resolution>17 Smearing Functions <sm_help> 18 18 19 Polarisation/Magnetic Scattering <mag netism/magnetism>19 Polarisation/Magnetic Scattering <mag_help> 20 20 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> 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 -
src/sas/sasgui/perspectives/fitting/media/fitting_help.rst
r5005ae0 rca383a0 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.png 7 .. |inlineimage005| image:: sm_image005.png 8 .. |inlineimage008| image:: sm_image008.png 9 .. |inlineimage009| image:: sm_image009.png 10 .. |inlineimage010| image:: sm_image010.png 11 .. |inlineimage011| image:: sm_image011.png 12 .. |inlineimage012| image:: sm_image012.png 13 .. |inlineimage018| image:: sm_image018.png 14 .. |inlineimage019| image:: sm_image019.png 15 5 16 6 17 Fitting … … 27 38 for example, if you have measured the same sample at different contrasts) 28 39 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!) 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!) 32 41 33 42 .. ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ … … 45 54 * *Lamellae* - lamellar shapes (lamellar, core shell lamellar, stacked 46 55 lamellar, etc) 47 * *Shape-Independent* - models describing structure in terms of density 48 correlation functions, fractals, peaks, power laws, etc 56 * *Shape-Independent* - models describing structure in terms of density correlation functions, fractals, peaks, power laws, etc 49 57 * *Paracrystal* - semi ordered structures (bcc, fcc, etc) 50 58 * *Structure Factor* - S(Q) models … … 135 143 and/or relatively simple models) 136 144 * By copying/editing an existing model (this can include models generated by 137 the New Plugin Model* dialog) in the :ref:`Python_shell` or 145 the New Plugin Model* dialog) in the :ref:`Python_shell` or 138 146 :ref:`Advanced_Plugin_Editor` (suitable for all use cases) 139 147 * By writing a model from scratch outside of SasView (only recommended for code … … 173 181 .. image:: new_model.png 174 182 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 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 180 188 *checked*\ . 181 189 … … 187 195 the :ref:`Advanced_Plugin_Editor` . 188 196 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* 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* 192 200 statements. 193 201 … … 195 203 196 204 form_factor = True 197 205 198 206 or for a structure factor:: 199 207 200 208 structure_factor = True 201 202 If the plugin is a structure factor it is *also* necessary to add two variables to 209 210 If the plugin is a structure factor it is *also* necessary to add two variables to 203 211 the parameter list:: 204 212 205 parameters = [ 213 parameters = [ 206 214 ['radius_effective', '', 1, [0.0, numpy.inf], 'volume', ''], 207 215 ['volfraction', '', 1, [0.0, 1.0], '', ''], … … 214 222 def Iqxy(x, y, radius_effective, volfraction, ...): 215 223 216 Such a plugin should then be available in the S(Q) drop-down box on a FitPage (once 224 Such a plugin should then be available in the S(Q) drop-down box on a FitPage (once 217 225 a P(Q) model has been selected). 218 226 … … 235 243 them. Finally, click the *Apply* button to generate and test the model and then click *Close*. 236 244 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 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 239 247 recompilation of the plugins by selecting *Fitting* > *Plugin Model Operations* > *Load Plugin Models*. 240 248 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 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 243 251 with a power law model now looks like this:: 244 252 245 253 from sasmodels.core import load_model_info 246 254 from sasmodels.sasview_model import make_model_from_info 247 255 248 256 model_info = load_model_info('sphere+power_law') 249 257 model_info.name = 'MyPluginModel' … … 251 259 Model = make_model_from_info(model_info) 252 260 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 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 255 263 and description too!!! 256 264 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 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 262 270 assignments ought to be obvious when you load the plugin. 263 271 264 If you need to include another plugin model in the model specification string, just prefix the name of 272 If you need to include another plugin model in the model specification string, just prefix the name of 265 273 that model with *custom*. For instance:: 266 274 … … 270 278 271 279 sphere@hardsphere 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. 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. 276 284 277 285 .. _Advanced_Plugin_Editor: … … 463 471 464 472 This mode is an extension of the :ref:`Single_Fit_Mode` that fits two or more data 465 sets *to the same model* simultaneously. If necessary it is possible to constrain 473 sets *to the same model* simultaneously. If necessary it is possible to constrain 466 474 fit parameters between data sets (eg, to fix a background level, or radius, etc). 467 475 … … 681 689 recognises the operators +, -, \*, /, or 'pow', and allows the following 682 690 types of expression : 683 691 684 692 1) if an axis label range is a function of 1 or more *columns*, write 685 693 this type of expression … … 698 706 699 707 Example: radius [2 : 5] , radius [10 : 25] 700 708 701 709 .. ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 702 710 … … 748 756 p#_ appended to the beginning and thus radius and p1_radius will not be 749 757 recognized as the same parameter. 750 758 751 759 .. image:: combine_batch_grid.png 752 760 … … 756 764 time is not listed in the file but the file name contains the information. As 757 765 described in :ref:`Grid_Window`, a column can be added manually, in this case 758 called time, and the peak position plotted against time. 766 called time, and the peak position plotted against time. 759 767 760 768 .. image:: combine_batch_plot.png -
src/sas/sasgui/perspectives/fitting/media/residuals_help.rst
r99ded31 r940d034 26 26 ^^^^ 27 27 28 $\chi^2$ is a statistical parameter that quantifies the differences between 29 an observeddata set and an expected dataset (or 'theory').28 Chi2 is a statistical parameter that quantifies the differences between an observed 29 data set and an expected dataset (or 'theory'). 30 30 31 When showing the a model with the data, *SasView* displays this parameter 32 normalized to the number of data points, $N_\mathrm{pts}$such that31 *SasView* actually returns this parameter normalized to the number of data points, 32 *Npts* such that 33 33 34 34 .. math:: 35 35 36 \chi^2_N 37 = \sum[(Y_i - \mathrm{theory}_i)^2 / \mathrm{error}_i^2] / N_\mathrm{pts} 36 \chi^2/N_{pts} = \sum[(Y_i - \mathrm{theory}_i)^2 / \mathrm{error}_i^2] / N_{pts} 38 37 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 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}. 42 43 43 .. math:: 44 For a good fit, $\chi^2/N_{pts}$ tends to 1. 44 45 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. 46 $\chi^2/N_{pts}$ is sometimes referred to as the 'goodness-of-fit' parameter. 55 47 56 48 .. ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ … … 60 52 61 53 A residual is the difference between an observed value and an estimate of that 62 value, such as a 'theory' calculation (whereas the difference between an 63 observedvalue and its *true* value is its error).54 value, such as a 'theory' calculation (whereas the difference between an observed 55 value and its *true* value is its error). 64 56 65 57 *SasView* calculates 'normalized residuals', $R_i$, for each data point in the … … 68 60 .. math:: 69 61 70 R_i = (Y_i - \mathrm{theory}_i) / \mathrm{error}_i62 R_i = (Y_i - Y_theory_i) / (Y_err_i) 71 63 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. 64 For a good fit, $R_i \sim 0$. 85 65 86 66 .. ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 87 67 88 *Document History* 89 90 | 2015-06-08 Steve King 91 | 2017-09-28 Paul Kienzle 68 .. note:: This help document was last changed by Steve King, 08Jun2015 -
src/sas/sasgui/perspectives/fitting/plugin_models/__init__.py
r64cdb0d rab0b93f 1 """2 Example plugin models to be added to the SasView plugin directory on startup3 if no plugins are present.4 5 This is currently empty.6 """ -
src/sas/sasgui/plottools/LineModel.py
ra26f67f r959eb01 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 the 70 the y(xmin) and y(xmax), but the only difference between this and 71 runXY is when the if statement is true. I however cannot see what that 72 function is for. It needs to be documented here or removed. 73 PDB 7/10/16 74 69 75 :param x: simple value 70 76 71 77 :return: (Line value) 72 73 .. note::74 This is the function called by fitDialog to calculate the75 the y(xmin) and y(xmax), but the only difference between this and76 runXY is when the if statement is true. I however cannot see what77 that function is for. It needs to be documented here or removed.78 PDB 7/10/1679 78 """ 80 79 if x.__class__.__name__ == 'list': … … 90 89 """ 91 90 Evaluate the model. 91 92 :note: This is to be what is called by fitDialog for the actual fit 93 but the only difference between this and run is when the if 94 statement is true. I however cannot see what that function 95 is for. It needs to be documented here or removed. PDB 7/10/16 92 96 93 97 :param x: simple value … … 95 99 :return: Line value 96 100 97 .. note::98 This is to be what is called by fitDialog for the actual fit99 the only difference between this and run is when the if100 statement is true. I however cannot see what that function101 is for. It needs to be documented here or removed. PDB 7/10/16102 101 """ 103 102 if x.__class__.__name__ == 'list':
Note: See TracChangeset
for help on using the changeset viewer.