SasModels Redesign Tasks

#90
Provide a way for plugin models to use the built-in polydispersity functions
#91
Port models to C++ from python
#251
Create new default category list
#294
Refactor Model Interface
#312
Problem with slit smearing
#313
Python polydispersity
#314
Default to GPU when using OpenCL
#315
Be able to set choice of device for OpenCL
#316
Autogenerate sasmodel "shims"
#317
Packaging of sasmodels (build scripts etc)
#319
sasmodels unit testing
#330
allow inf/-inf for model limits
#359
Be able to use new models from sasmodels alongside sas.models models
#361
Check all models for order of parameters being passed
#363
break OpenCL calculations into smaller chunks.
#399
GelFit model presents an erroneous parameter
#400
DAB model equation in model function help file is wrong!
#406
Porod model equation in model function help file is wrong!
#472
reparameterize Teubner-Strey
#476
autogenerate theory curves for sasmodels documentation
#484
lamellarPC is precision limited
#499
create sin(x)/x, 2*J1(x)/x and 3*j1(x)/x functions
#504
Convert model editors to support sasmodels
#505
List modules needing changing to accommodate sasmodels new structure
#506
Fix loading of models in models.py and autodiscovery
#524
category handling needs updating for sasmodels
#525
Add GUI category defaults to models in sasmodels
#530
Numerical instabilities in Teubner Strey model
#532
Handling of custom models via sasmodels
#533
Make polydispersy work in sasview with sasmodels
#534
Fitting not working in sasview with sasmodels
#536
Add multiplicity model infrastructure to sasmodels
#537
Magnetic sld not implemented for python models
#538
Need to clean out old sasmodels infrastructure from SasView
#539
build servers to build working windows exe
#540
build servers to build working mac SasView 4.0 dmg
#543
control order in which fit parameters appear in gui for easy sum/multi models
#544
control order in which fit parameters appear in gui for user supplied models
#548
Remove MutiplicationModel.py once replacement from Sasmodels is available
#650
Standardize C model names
#675
Reparameterize hollow_cylinder
#695
linear slope in onion model
#775
Orientation of stacked_discs model does not work
#776
angular dispersity
#890
use new orientation definition for asymmetric shapes
#891
update docs for oriented shapes with new orientation definition
#896
equations in core shell parallelepiped docs do not match code
#1046
convert non builtin models in the marketplace to new API

Practicalities

The list of (non)overlapping SasView-SASfit models can be viewed at: https://ess-ics.atlassian.net/wiki/display/SAS/SasView-SasFit+Overlapping+Models

OpenCL test results for various OS-GPU combinations.

Instructions for converting models from old SasView to sasmodels

List of models for conversion

SasModels package code is here: http://github.com/SasView/sasmodels

SasView code is here: http://github.com/SasView/sasview

Preconverted latex (top and bottom of the file, missing some in the middle): http://sasview.org/attachment/wiki/SasModels%20Work%20Package/Equations.docx.pdf

Options for Angstrom symbol:

  • \rlap{ \hspace 0.23em \raise 1.5ex \Tiny \circ}\text{A}
  • \text{A}
  • \unicode{xc5}
  • {\mathring{\text{A}}\vphantom{A}
  • {\buildrel {\circ} \over {\text{A}}}\vphantom{A}
  • \text{nm}/10

Work Plan/Tasks/Ideas

Level 1

  • Python Polydispersity - Paul - #313
  • Default to GPU when using OpenCL - David - #314
  • Be able to set choice of device for OpenCL - David - #315
  • Autogenerate sasmodel "shims" - Andrew - #316
  • Packaging of sasmodels (build scripts etc) - Andrew - #317
    • Integration of sasmodels documentation with SasView? - Peter? - #318
    • Build scripts for sasmodels package
  • sasmodels unittest - Paul K? or Peter? - #319

Level 2

  • Migrate models - need a checklist and progress tracking for this
    • Magnetic models
    • Make "template" for a model
    • Make "standard" list of parameter names
    • Define attributes on model (form factor, structure factor, multiplicity etc)
    • Move model details to python part (parameters, docs)
    • Move scattering kernel to c part
    • Unit tests
    • Documentation
  • Model discovery in sasview
  • Move dataloader

Level 3

  • Refactor models interface
    • Attributes
    • Extra data on models
  • Resolution calculation in python
  • Constraints in polydispersity loop
  • Refactor data structures (including 4 cross-section magnetic 2D)
  • Complex scattering lengths
  • Make "simple model" system in sasview add a model in the new style

  • Start from P Kienzle sasmodels work - fork sasmodels
  • Refactor of sasview to use new package
  • How to deal with model categorisation
  • Cross validate against existing sas.models
  • Polydispersity for python models

Issues

  • Normalization
  • PqSq
  • Single vs double
  • Make sure model is rebuilt if c changes

Work Package Description (From Google Docs)

Simplify addition of new models

Statement of Problem to address:

Currently addition of a new model in C requires a rebuilding of the SasView GUI application. Furthermore it requires the creation/editing of a lot of different files and is anything but straightforward making the learning curve quite steep. Finally, while a user can simply add a custom python model, that model does not have access to the necessary polydispersity calculation. Also not clear how the python model code can call a C model (to enhance for example). Making the addition of a C model simple and allowing python model to work properly with polydispersity would have a HUGE impact. New models are probably the single most important thing for the user community and with this change model addition can be removed from the core developer group tasks to being something instrument scientists and power user can do.

This is mostly an underlying computational framework project but also requires tying into existing GUI.

Goal/scope of project: Define and implement a clean C plugin interface that allows dropping a new C based model onto disk that can be discovered live by SasView. If at all possible allow python models to have access to polydispersity code.

Design Requirements:

  • Adding a new model in C (for speed) should consist of writing only one file and may possibly require compiling of the model into a shared library file (how does one handle multiple platforms?) (Should !asView compile the models?)
  • Adding a new model in C or python consists of dropping the appropriate file into the models directory for discovery by the running application (not GUI bits at this point — applications can send to GUI bits)
  • GUI must update available models while running
  • Polydispersity treated properly for constrained/simultaneous
  • Accessible Attributes for S(Q), multiplicity, etc
  • Compatible with multiprocessing
  • Minor requirement
    • All models should be treated the same (custom, python, “built-in” etc.)
  • Optional requirement
    • Would also be nice if python models can access polydispersity

Tasks:

  • Come up with and propose design that meets these needs with minimum “intrusion”
  • Document Tasks required to achieve full integration with above design - should be at a level that a new person could take on the tasks including code snippets as necessary.
  • Decision
  • Implementation
  • Refactor model code as per design above
  • Create/write discovery process in SasView fitting so that computational code updates list of known models to use in fitting
  • Create link to SasView GUI so that GUI also updates models available to GUI users while running
Last modified 2 years ago Last modified on Oct 29, 2017 7:22:31 AM

Attachments (1)

Download all attachments as: .zip