== !SasModels Redesign Tasks == [[TicketQuery(workpackage=SasModels Redesign)]] == Practicalities == !SasModels package code is here: http://github.com/SasView/sasmodels !SasView code is here: http://github.com/SasView/sasview == Work Plan/Tasks/Ideas == * Start from P Kienzle sasmodels work - fork sasmodels * Migrate models - need a checklist and progress tracking for this * 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 packaging - how do we associate model code with images etc from docs * Build scripts for sasmodels package * Model discovery in sasview * Refactor of sasview to use new package * How to deal with model categorisation * Cross validate against existing sas.models * Make "simple model" system in sasview add a model in the new style * 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 SasView 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