Changeset e64a03e in sasview
- Timestamp:
- Feb 27, 2017 8:18:44 AM (8 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, costrafo411, magnetic_scatt, release-4.1.1, release-4.1.2, release-4.2.2, ticket-1009, ticket-1094-headless, ticket-1242-2d-resolution, ticket-1243, ticket-1249, ticket885, unittest-saveload
- Children:
- b61bd57
- Parents:
- 71601312 (diff), ddbac66 (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:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
setup.py
r18e7309 r1e13b53 206 206 ) 207 207 208 209 208 # sas.sascalc.pr 210 209 srcdir = os.path.join("src", "sas", "sascalc", "pr", "c_extensions") … … 229 228 ) ) 230 229 230 #sas.sascalc.corfunc 231 package_dir["sas.sascalc.corfunc"] = os.path.join("src", "sas", "sascalc", "corfunc") 232 packages.extend(["sas.sascalc.corfunc"]) 233 231 234 # sas.sascalc.fit 232 235 package_dir["sas.sascalc.fit"] = os.path.join("src", "sas", "sascalc", "fit") … … 237 240 package_dir["sas.sasgui.perspectives.pr"] = os.path.join("src", "sas", "sasgui", "perspectives", "pr") 238 241 packages.extend(["sas.sasgui.perspectives","sas.sasgui.perspectives.pr"]) 239 package_data["sas.sasgui.perspectives.pr"] = [' images/*']242 package_data["sas.sasgui.perspectives.pr"] = ['media/*'] 240 243 241 244 package_dir["sas.sasgui.perspectives.invariant"] = os.path.join("src", "sas", "sasgui", "perspectives", "invariant") … … 250 253 packages.extend(["sas.sasgui.perspectives", "sas.sasgui.perspectives.calculator"]) 251 254 package_data['sas.sasgui.perspectives.calculator'] = ['images/*', 'media/*'] 255 256 package_dir["sas.sasgui.perspectives.corfunc"] = os.path.join("src", "sas", "sasgui", "perspectives", "corfunc") 257 packages.extend(["sas.sasgui.perspectives.corfunc"]) 258 package_data['sas.sasgui.perspectives.corfunc'] = ['media/*'] 259 260 package_dir["sas.sasgui.perspectives.file_converter"] = os.path.join("src", "sas", "sasgui", "perspectives", "file_converter") 261 packages.extend(["sas.sasgui.perspectives.file_converter"]) 262 package_data['sas.sasgui.perspectives.file_converter'] = ['media/*'] 252 263 253 264 # Data util -
src/sas/sascalc/dataloader/readers/sesans_reader.py
r345e7e4 r9525358 166 166 output.dlam, output.dlam_unit = self._unit_conversion(dlam, lam_unit, default_z_unit) 167 167 168 output.xaxis( "\rm{z}", output.x_unit)169 output.yaxis( "\\rm{P/P0}", output.y_unit)168 output.xaxis(r"\rm{z}", output.x_unit) 169 output.yaxis(r"\rm{P/P0}", output.y_unit) 170 170 # Store loading process information 171 171 output.meta_data['loader'] = self.type_name … … 175 175 zaccept_unit_split = paramnames[7].split("[") 176 176 zaccept_unit = zaccept_unit_split[1].replace("]","") 177 if zaccept_unit.strip() == '\AA^-1':177 if zaccept_unit.strip() == r'\AA^-1': 178 178 zaccept_unit = "1/A" 179 179 output.sample.zacceptance=(float(paramvals[7]),zaccept_unit) -
src/sas/sasgui/guiframe/CategoryInstaller.py
r212bfc2 rddbac66 123 123 compile it and install 124 124 :param homefile: Override the default home directory 125 :param model_list: List of model names except customized models 125 :param model_list: List of model names except those in Plugin Models 126 which are user supplied. 126 127 """ 127 128 _model_dict = { model.name: model for model in model_list} -
src/sas/sasgui/perspectives/calculator/model_editor.py
ra08b89b rddbac66 5 5 function of y (usually the intensity). It also provides a drop down of 6 6 standard available math functions. Finally a full python editor panel for 7 complete customizati n is provided.8 9 :TODO the writi ong of the file and name checking (and maybe some other10 fun tions?) should be moved to a computational module which could be called11 fro pm a python script. Basically one just needs to pass the name,7 complete customization is provided. 8 9 :TODO the writing of the file and name checking (and maybe some other 10 functions?) should be moved to a computational module which could be called 11 from a python script. Basically one just needs to pass the name, 12 12 description text and function text (or in the case of the composite editor 13 13 the names of the first and second model and the operator to be used). … … 61 61 """ 62 62 Dialog for easy custom composite models. Provides a wx.Dialog panel 63 to choose two existing models (including pre-existing custom models which63 to choose two existing models (including pre-existing Plugin Models which 64 64 may themselves be composite models) as well as an operation on those models 65 65 (add or multiply) the resulting model will add a scale parameter for summed … … 380 380 color = 'blue' 381 381 except: 382 msg = "Easy Custom Sum/Multipy: Error occurred..."382 msg = "Easy Sum/Multipy Plugin: Error occurred..." 383 383 info = 'Error' 384 384 color = 'red' … … 501 501 self.factor = factor 502 502 self._operator = operator 503 self.explanation = " CustomModel = %s %s (model1 %s model2)\n" % \503 self.explanation = " Plugin Model = %s %s (model1 %s model2)\n" % \ 504 504 (self.factor, f_oper, self._operator) 505 505 self.explanationctr.SetLabel(self.explanation) … … 617 617 class EditorPanel(wx.ScrolledWindow): 618 618 """ 619 Custom model function editor619 Simple Plugin Model function editor 620 620 """ 621 621 def __init__(self, parent, base, path, title, *args, **kwds): … … 652 652 self.msg_sizer = None 653 653 self.warning = "" 654 self._description = "New Custom Model" 654 #This does not seem to be used anywhere so commenting out for now 655 # -- PDB 2/26/17 656 #self._description = "New Plugin Model" 655 657 self.function_tcl = None 656 658 self.math_combo = None … … 991 993 else: 992 994 self._notes = result 993 msg = "Successful! Please look for %s in CustomizedModels."%name995 msg = "Successful! Please look for %s in Plugin Models."%name 994 996 msg += " " + self._notes 995 997 info = 'Info' … … 1138 1140 def on_help(self, event): 1139 1141 """ 1140 Bring up the CustomModel Editor Documentation whenever1142 Bring up the New Plugin Model Editor Documentation whenever 1141 1143 the HELP button is clicked. 1142 1144 … … 1190 1192 #self.Destroy() 1191 1193 1192 ## Templates for custommodels1194 ## Templates for plugin models 1193 1195 1194 1196 CUSTOM_TEMPLATE = """ -
src/sas/sasgui/perspectives/calculator/pyconsole.py
rd472e86 rddbac66 302 302 success = show_model_output(self, fname) 303 303 304 # Update custommodel list in fitpage combobox304 # Update plugin model list in fitpage combobox 305 305 if success and self._manager != None and self.panel != None: 306 306 self._manager.set_edit_menu_helper(self.parent) -
src/sas/sasgui/perspectives/fitting/fitpage.py
r4387385 ref2cdb3 362 362 self.Bind(wx.EVT_RADIOBUTTON, self.onSlitSmear, 363 363 id=self.slit_smearer.GetId()) 364 self. enable_smearer.SetValue(True)364 self.disable_smearer.SetValue(True) 365 365 366 366 sizer_smearer.Add(self.disable_smearer, 0, wx.LEFT, 10) … … 1934 1934 1935 1935 # more disables for 2D 1936 di_flag = False 1937 dq_flag = False 1936 1938 if self.data.__class__.__name__ == "Data2D" or \ 1937 1939 self.enable2D: … … 1939 1941 self.pinhole_smearer.Enable(True) 1940 1942 self.default_mask = copy.deepcopy(self.data.mask) 1941 if self.data.err_data is None or\ 1942 numpy.all(err == 1 for err in self.data.err_data) or \ 1943 not numpy.any(self.data.err_data): 1944 self.dI_didata.Enable(False) 1945 self.dI_noweight.SetValue(True) 1946 self.weightbt_string = self.dI_noweight.GetLabelText() 1947 else: 1948 self.dI_didata.Enable(True) 1949 self.dI_didata.SetValue(True) 1950 self.weightbt_string = self.dI_didata.GetLabelText() 1943 if self.data.err_data is not None \ 1944 and numpy.any(self.data.err_data): 1945 di_flag = True 1946 if self.data.dqx_data is not None \ 1947 and numpy.any(self.data.dqx_data): 1948 dq_flag = True 1951 1949 else: 1952 1950 self.slit_smearer.Enable(True) 1953 1951 self.pinhole_smearer.Enable(True) 1954 1955 if self.data.dy is None or\ 1956 numpy.all(self.data.dy == 1) or\ 1957 not numpy.any(self.data.dy): 1958 self.dI_didata.Enable(False) 1959 self.dI_noweight.SetValue(True) 1960 self.weightbt_string = self.dI_noweight.GetLabelText() 1961 else: 1962 self.dI_didata.Enable(True) 1963 self.dI_didata.SetValue(True) 1964 self.weightbt_string = self.dI_didata.GetLabelText() 1952 if self.data.dy is not None and numpy.any(self.data.dy): 1953 di_flag = True 1954 if self.data.dx is not None and numpy.any(self.data.dx): 1955 dq_flag = True 1956 elif self.data.dxl is not None and numpy.any(self.data.dxl): 1957 dq_flag = True 1958 1959 if dq_flag: 1960 self.enable_smearer.Enable(True) 1961 self.enable_smearer.SetValue(True) 1962 self.disable_smearer.SetValue(False) 1963 else: 1964 self.enable_smearer.Disable() 1965 self.disable_smearer.Enable(True) 1966 self.disable_smearer.SetValue(True) 1967 1968 if di_flag: 1969 self.dI_didata.Enable(True) 1970 self.dI_didata.SetValue(True) 1971 self.weightbt_string = self.dI_didata.GetLabelText() 1972 else: 1973 self.dI_didata.Enable(False) 1974 self.dI_noweight.SetValue(True) 1975 self.weightbt_string = self.dI_noweight.GetLabelText() 1976 1965 1977 # Enable weighting radio buttons 1966 1978 self.dI_noweight.Enable(True) … … 2004 2016 self.EditMask_title.Disable() 2005 2017 2018 self.onSmear(event=None) 2006 2019 self.on_set_focus(None) 2007 2020 self.Refresh() -
src/sas/sasgui/perspectives/fitting/fitting.py
re92a352 rddbac66 1964 1964 ## then kill itself but cannot. Paul Kienzle came up with 1965 1965 ## this fix to prevent threads from stepping on each other 1966 ## which was causing a simple custom model to crash Sasview. 1966 ## which was causing a simple custom plugin model to crash 1967 ##Sasview. 1967 1968 ## We still don't know why the fit sometimes lauched a second 1968 1969 ## thread -- something which should also be investigated. -
src/sas/sasgui/perspectives/fitting/media/fitting_help.rst
r26c8be3 r5295cf5 34 34 * in *Single* fit mode - individual data sets are fitted independently one-by-one 35 35 36 * in *Simultaneous* fit mode - multiple data sets are fitted simultaneously to the *same* model with/without constrained parameters (this might be useful, for example, if you have measured the same sample at different contrasts) 36 * in *Simultaneous* fit mode - multiple data sets are fitted simultaneously to 37 the *same* model with/without constrained parameters (this might be useful, 38 for example, if you have measured the same sample at different contrasts) 37 39 38 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!) … … 43 45 ----------------- 44 46 45 By default, the models in SasView are grouped into five categories 46 47 * *Shapes* - models describing 'objects' (spheres, cylinders, etc) 47 The models in SasView are grouped into categories. By default these consist of: 48 49 * *Cylinder* - cylindrical shapes (disc, right cylinder, cylinder with endcaps 50 etc) 51 * *Ellipsoid* - ellipsoidal shapes (oblate,prolate, core shell, etc) 52 * *Parellelepiped* - as the name implies 53 * *Sphere* - sheroidal shapes (sphere, core multishell, vesicle, etc) 54 * *Lamellae* - lamellar shapes (lamellar, core shell lamellar, stacked 55 lamellar, etc) 48 56 * *Shape-Independent* - models describing structure in terms of density correlation functions, fractals, peaks, power laws, etc 49 * *Customized Models* - SasView- or User-created (non-library) Python models 50 * *Uncategorised* - other models (for reflectivity, etc) 57 * *Paracrystal* - semi ordered structures (bcc, fcc, etc) 51 58 * *Structure Factor* - S(Q) models 59 * *Plugin Models* - User-created (custom/non-library) Python models 52 60 53 61 Use the *Category* drop-down menu to chose a category of model, then select … … 84 92 .. image:: cat_fig0.bmp 85 93 86 The categorization of all models except the customized models can be reassigned,87 added to, and removed using *Category Manager*. Models can also be hidden from view 88 in the drop-down menus.94 The categorization of all models except the user supplied Plugin Models can be 95 reassigned, added to, and removed using *Category Manager*. Models can also be 96 hidden from view in the drop-down menus. 89 97 90 98 .. image:: cat_fig1.bmp … … 93 101 ^^^^^^^^^^^^^^^^^ 94 102 95 To change category, highlight a model in the list by left-clicking on its entry and96 then click the *Modify* button. Use the *Change Category* panel that appears to make 97 t he required changes.103 To change category, highlight a model in the list by left-clicking on its entry 104 and then click the *Modify* button. Use the *Change Category* panel that appears 105 to make the required changes. 98 106 99 107 .. image:: cat_fig2.bmp … … 106 114 ^^^^^^^^^^^^^^^^^^^^^ 107 115 108 Use the *Enable All / Disable All* buttons and the check boxes beside each model to109 select the models to show/hide. To apply the selection, click *Ok*. Otherwise click 110 *Cancel*.116 Use the *Enable All / Disable All* buttons and the check boxes beside each model 117 to select the models to show/hide. To apply the selection, click *Ok*. Otherwise 118 click *Cancel*. 111 119 112 120 *NB: It may be necessary to change to a different category and then back again* … … 118 126 --------------- 119 127 120 For a complete list of all the library models available in SasView, see the `Model Documentation <../../../index.html>`_ . 128 For a complete list of all the library models available in SasView, see 129 the `Model Documentation <../../../index.html>`_ . 121 130 122 131 It is also possible to add your own models. … … 131 140 There are essentially three ways to generate new fitting models for SasView: 132 141 133 * Using the SasView :ref:`New_Plugin_Model` helper dialog (best for beginners and/or relatively simple models) 134 * By copying/editing an existing model (this can include models generated by the *New Plugin Model* dialog) in the :ref:`Python_shell` or :ref:`Advanced_Plugin_Editor` (suitable for all use cases) 135 * By writing a model from scratch outside of SasView (only recommended for code monkeys!) 142 * Using the SasView :ref:`New_Plugin_Model` helper dialog (best for beginners 143 and/or relatively simple models) 144 * By copying/editing an existing model (this can include models generated by 145 the New Plugin Model* dialog) in the :ref:`Python_shell` or 146 :ref:`Advanced_Plugin_Editor` (suitable for all use cases) 147 * By writing a model from scratch outside of SasView (only recommended for code 148 monkeys!) 136 149 137 150 Please read the guidance on :ref:`Writing_a_Plugin` before proceeding. … … 163 176 ^^^^^^^^^^^^^^^^ 164 177 165 Relatively straightforward models can be programmed directly from the SasView GUI166 using the *New Plugin Model Function*.178 Relatively straightforward models can be programmed directly from the SasView 179 GUI using the *New Plugin Model Function*. 167 180 168 181 .. image:: new_model.bmp … … 175 188 *checked*\ . 176 189 177 Also note that the 'Fit Parameters' have been split into two sections: those which178 can be polydisperse (shape and orientation parameters) and those which are not 179 (eg, scattering length densities).190 Also note that the 'Fit Parameters' have been split into two sections: those 191 which can be polydisperse (shape and orientation parameters) and those which are 192 not (eg, scattering length densities). 180 193 181 194 A model file generated by this option can be viewed and further modified using … … 187 200 .. image:: sum_model.bmp 188 201 189 This option creates a custom model of the form::190 191 Custom Model = scale_factor \* {(scale_1 \* model_1) \+ (scale_2 \* model_2)} \+ background202 This option creates a custom Plugin Model of the form:: 203 204 Plugin Model = scale_factor * {(scale_1 * model_1) +/- (scale_2 * model_2)} + background 192 205 193 206 or:: 194 207 195 Custom Model = scale_factor \* model_1 \* model_2 \+ background208 Plugin Model = scale_factor * model_1 /* model_2 + background 196 209 197 210 In the *Easy Sum/Multi Editor* give the new model a function name and brief … … 232 245 Simply highlight the plugin model to be removed. The operation is final!!! 233 246 234 *NB: Plugin models shipped with SasView cannot be removed in this way.*247 *NB: Models shipped with SasView cannot be removed in this way.* 235 248 236 249 Load Plugin Models 237 250 ^^^^^^^^^^^^^^^^^^ 238 251 239 This option loads (or re-loads) all models present in the *~\\.sasview\\plugin_models* folder. 252 This option loads (or re-loads) all models present in the 253 *~\\.sasview\\plugin_models* folder. 240 254 241 255 .. ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ … … 400 414 :ref:`Assessing_Fit_Quality`. 401 415 402 *NB: If you need to use a custom ized model, you must ensure that model is available*403 *first (see* :ref:`Adding_your_own_models` *).*416 *NB: If you need to use a custom Plugin Model, you must ensure that model is 417 available first (see* :ref:`Adding_your_own_models` *).* 404 418 405 419 Method … … 484 498 If multiple data sets are in one file, load just that file. *Unselect All Data*, then 485 499 select a single initial data set to be fitted. Fit that selected data set as described 486 above under :ref:`Single_Fit_Mode` 487 488 *NB: If you need to use a custom ized model, you must ensure that model is available*489 *first (see* :ref:`Adding_your_own_models` *).*500 above under :ref:`Single_Fit_Mode`. 501 502 *NB: If you need to use a custom Plugin Model, you must ensure that model is 503 available first (see* :ref:`Adding_your_own_models` *).* 490 504 491 505 Method -
src/sas/sasgui/perspectives/fitting/media/plugin.rst
rca6cbc1c r5295cf5 27 27 28 28 the next time SasView is started it will compile the plugin and add 29 it to the list of * CustomizedModels* in a FitPage.29 it to the list of *Plugin Models* in a FitPage. 30 30 31 31 SasView models can be of three types: -
src/sas/sasgui/perspectives/fitting/basepage.py
r4387385 r7a5aedd 54 54 55 55 CUSTOM_MODEL = 'Plugin Models' 56 CUSTOM_MODEL_OLD = 'Customized Models'57 56 58 57 class BasicPage(ScrolledPanel, PanelBase): … … 1159 1158 # select the current model 1160 1159 state._convert_to_sasmodels() 1161 if state.categorycombobox == CUSTOM_MODEL_OLD:1162 state.categorycombobox = CUSTOM_MODEL1163 1160 state.categorycombobox = unicode(state.categorycombobox) 1164 1161 if state.categorycombobox in self.categorybox.Items: -
src/sas/sasgui/perspectives/fitting/pagestate.py
r4387385 r71601312 370 370 :return: None 371 371 """ 372 if self.categorycombobox == CUSTOM_MODEL_OLD: 373 self.categorycombobox = CUSTOM_MODEL 372 374 if self.formfactorcombobox == '': 373 375 FIRST_FORM = { … … 382 384 'Sphere' : 'adsorbed_layer', 383 385 'Structure Factor' : 'hardsphere', 384 CUSTOM_MODEL_OLD : '',385 386 CUSTOM_MODEL : '' 386 387 }
Note: See TracChangeset
for help on using the changeset viewer.