Changes in / [131d94b:13f5656] in sasview
- Files:
-
- 4 added
- 2 deleted
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
docs/sphinx-docs/source/dev/dev.rst
r476d4e3 re8447d8 1 1 Developer Documentation 2 2 ======================= 3 4 .. note:: In Windows use [Alt]-[Cursor left] to return to the previous page 3 5 4 6 Contents -
docs/sphinx-docs/source/user/tutorial.rst
rec860a8f re8447d8 6 6 ======== 7 7 8 .. note:: In Windows use [Alt]-[Cursor left] to return to the previous page 9 8 10 :download:`Tutorial <../../../../sasview/media/Tutorial.pdf>` -
src/sas/sascalc/fit/MultiplicationModel.py
rcb4ef58 rfd62331 8 8 r""" 9 9 Use for P(Q)\*S(Q); function call must be in the order of P(Q) and then S(Q): 10 The model parameters are combined from both models, P(Q) and S(Q), except 1) ' effect_radius' of S(Q)11 which will be calculated from P(Q) via calculate_ER(), 12 and 2) 'scale' in P model which is synchronized w/ volfraction in S 10 The model parameters are combined from both models, P(Q) and S(Q), except 1) 'radius_effective' of S(Q) 11 which will be calculated from P(Q) via calculate_ER(), 12 and 2) 'scale' in P model which is synchronized w/ volfraction in S 13 13 then P*S is multiplied by a new parameter, 'scale_factor'. 14 14 The polydispersion is applicable only to P(Q), not to S(Q). … … 34 34 ## Parameter details [units, min, max] 35 35 self.details = {} 36 37 ##models 36 37 ## Define parameters to exclude from multiplication model 38 self.excluded_params={'radius_effective','scale','background'} 39 40 ##models 38 41 self.p_model = p_model 39 self.s_model = s_model 42 self.s_model = s_model 40 43 self.magnetic_params = [] 41 44 ## dispersion … … 45 48 ## New parameter:Scaling factor 46 49 self.params['scale_factor'] = 1 47 50 self.params['background'] = 0 51 48 52 ## Parameter details [units, min, max] 49 53 self._set_details() 50 54 self.details['scale_factor'] = ['', 0.0, numpy.inf] 51 55 self.details['background'] = ['',-numpy.inf,numpy.inf] 56 52 57 #list of parameter that can be fitted 53 self._set_fixed_params() 58 self._set_fixed_params() 54 59 ## parameters with orientation 55 60 for item in self.p_model.orientation_params: 56 61 self.orientation_params.append(item) 57 for item in self.p_model.magnetic_params: 58 self.magnetic_params.append(item) 62 for item in self.p_model.magnetic_params: 63 self.magnetic_params.append(item) 59 64 for item in self.s_model.orientation_params: 60 65 if not item in self.orientation_params: … … 66 71 multiplicity = 1 67 72 ## functional multiplicity of the model 68 self.multiplicity = multiplicity 69 73 self.multiplicity = multiplicity 74 70 75 # non-fittable parameters 71 self.non_fittable = p_model.non_fittable 72 self.multiplicity_info = [] 76 self.non_fittable = p_model.non_fittable 77 self.multiplicity_info = [] 73 78 self.fun_list = {} 74 79 if self.non_fittable > 1: 75 80 try: 76 self.multiplicity_info = p_model.multiplicity_info 81 self.multiplicity_info = p_model.multiplicity_info 77 82 self.fun_list = p_model.fun_list 78 83 self.is_multiplicity_model = True … … 82 87 self.is_multiplicity_model = False 83 88 self.multiplicity_info = [0] 84 89 85 90 def _clone(self, obj): 86 91 """ … … 96 101 #obj = copy.deepcopy(self) 97 102 return obj 98 99 103 104 100 105 def _set_dispersion(self): 101 106 """ … … 103 108 applied to s_model 104 109 """ 105 ##set dispersion only from p_model 110 ##set dispersion only from p_model 106 111 for name , value in self.p_model.dispersion.iteritems(): 107 self.dispersion[name] = value 108 112 self.dispersion[name] = value 113 109 114 def getProfile(self): 110 115 """ 111 116 Get SLD profile of p_model if exists 112 117 113 118 :return: (r, beta) where r is a list of radius of the transition points\ 114 119 beta is a list of the corresponding SLD values … … 121 126 x = None 122 127 y = None 123 128 124 129 return x, y 125 130 126 131 def _set_params(self): 127 132 """ 128 133 Concatenate the parameters of the two models to create 129 these model parameters 134 these model parameters 130 135 """ 131 136 132 137 for name , value in self.p_model.params.iteritems(): 133 if not name in self.params.keys() and name != 'scale':138 if not name in self.params.keys() and name not in self.excluded_params: 134 139 self.params[name] = value 135 140 136 141 for name , value in self.s_model.params.iteritems(): 137 #Remove the effect_radiusfrom the (P*S) model parameters.138 if not name in self.params.keys() and name != 'effect_radius':142 #Remove the radius_effective from the (P*S) model parameters. 143 if not name in self.params.keys() and name not in self.excluded_params: 139 144 self.params[name] = value 140 145 141 146 # Set "scale and effec_radius to P and S model as initializing 142 147 # since run P*S comes from P and S separately. 148 self._set_backgrounds() 143 149 self._set_scale_factor() 144 self._set_ effect_radius()145 150 self._set_radius_effective() 151 146 152 def _set_details(self): 147 153 """ 148 154 Concatenate details of the two models to create 149 this model's details 155 this model's details 150 156 """ 151 157 for name, detail in self.p_model.details.iteritems(): 152 if name != 'scale':158 if name not in self.excluded_params: 153 159 self.details[name] = detail 154 160 155 161 for name , detail in self.s_model.details.iteritems(): 156 if not name in self.details.keys() or name != 'effect_radius':162 if not name in self.details.keys() or name not in self.exluded_params: 157 163 self.details[name] = detail 158 164 165 def _set_backgrounds(self): 166 """ 167 Set component backgrounds to zero 168 """ 169 self.p_model.setParam('background',0) 170 self.s_model.setParam('background',0) 171 172 159 173 def _set_scale_factor(self): 160 174 """ … … 162 176 """ 163 177 value = self.params['volfraction'] 164 if value != None: 178 if value != None: 165 179 factor = self.p_model.calculate_VR() 166 180 if factor == None or factor == NotImplemented or factor == 0.0: … … 170 184 self.p_model.setParam('scale', value) 171 185 self.s_model.setParam('volfraction', val) 172 173 def _set_ effect_radius(self):186 187 def _set_radius_effective(self): 174 188 """ 175 189 Set effective radius to S(Q) model 176 190 """ 177 if not ' effect_radius' in self.s_model.params.keys():191 if not 'radius_effective' in self.s_model.params.keys(): 178 192 return 179 193 effective_radius = self.p_model.calculate_ER() 180 194 #Reset the effective_radius of s_model just before the run 181 195 if effective_radius != None and effective_radius != NotImplemented: 182 self.s_model.setParam(' effect_radius', effective_radius)183 196 self.s_model.setParam('radius_effective', effective_radius) 197 184 198 def setParam(self, name, value): 185 """ 199 """ 186 200 Set the value of a model parameter 187 201 188 202 :param name: name of the parameter 189 203 :param value: value of the parameter … … 191 205 # set param to P*S model 192 206 self._setParamHelper( name, value) 193 194 ## setParam to p model 195 # set 'scale' in P(Q) equal to volfraction 207 208 ## setParam to p model 209 # set 'scale' in P(Q) equal to volfraction 196 210 if name == 'volfraction': 197 211 self._set_scale_factor() 198 elif name in self.p_model.getParamList() :212 elif name in self.p_model.getParamList() and name not in self.excluded_params: 199 213 self.p_model.setParam( name, value) 200 201 ## setParam to s model 202 # This is a little bit abundant: Todo: find better way 203 self._set_ effect_radius()204 if name in self.s_model.getParamList() :214 215 ## setParam to s model 216 # This is a little bit abundant: Todo: find better way 217 self._set_radius_effective() 218 if name in self.s_model.getParamList() and name not in self.excluded_params: 205 219 if name != 'volfraction': 206 220 self.s_model.setParam( name, value) 207 221 208 222 209 223 #self._setParamHelper( name, value) 210 224 211 225 def _setParamHelper(self, name, value): 212 226 """ … … 228 242 self.params[item] = value 229 243 return 230 244 231 245 raise ValueError, "Model does not contain parameter %s" % name 232 233 246 247 234 248 def _set_fixed_params(self): 235 249 """ … … 240 254 241 255 self.fixed.sort() 242 243 256 257 244 258 def run(self, x = 0.0): 245 """ 259 """ 246 260 Evaluate the model 247 261 248 262 :param x: input q-value (float or [float, float] as [r, theta]) 249 263 :return: (scattering function value) 250 264 """ 251 265 # set effective radius and scaling factor before run 252 self._set_ effect_radius()266 self._set_radius_effective() 253 267 self._set_scale_factor() 254 268 return self.params['scale_factor'] * self.p_model.run(x) * \ 255 self.s_model.run(x) 269 self.s_model.run(x) + self.params['background'] 256 270 257 271 def runXY(self, x = 0.0): 258 """ 272 """ 259 273 Evaluate the model 260 274 261 275 :param x: input q-value (float or [float, float] as [qx, qy]) 262 276 :return: scattering function value 263 """ 277 """ 264 278 # set effective radius and scaling factor before run 265 self._set_ effect_radius()279 self._set_radius_effective() 266 280 self._set_scale_factor() 267 281 out = self.params['scale_factor'] * self.p_model.runXY(x) * \ 268 self.s_model.runXY(x) 282 self.s_model.runXY(x) + self.params['background'] 269 283 return out 270 271 ## Now (May27,10) directly uses the model eval function 284 285 ## Now (May27,10) directly uses the model eval function 272 286 ## instead of the for-loop in Base Component. 273 287 def evalDistribution(self, x = []): 274 """ 288 """ 275 289 Evaluate the model in cartesian coordinates 276 290 277 291 :param x: input q[], or [qx[], qy[]] 278 292 :return: scattering function P(q[]) 279 293 """ 280 294 # set effective radius and scaling factor before run 281 self._set_ effect_radius()295 self._set_radius_effective() 282 296 self._set_scale_factor() 283 297 out = self.params['scale_factor'] * self.p_model.evalDistribution(x) * \ 284 self.s_model.evalDistribution(x) 298 self.s_model.evalDistribution(x) + self.params['background'] 285 299 return out 286 300 … … 288 302 """ 289 303 Set the dispersion object for a model parameter 290 304 291 305 :param parameter: name of the parameter [string] 292 306 :dispersion: dispersion object of type DispersionModel … … 299 313 return value 300 314 except: 301 raise 315 raise 302 316 303 317 def fill_description(self, p_model, s_model): … … 306 320 """ 307 321 description = "" 308 description += "Note:1) The effect_radius(effective radius) of %s \n"%\322 description += "Note:1) The radius_effective (effective radius) of %s \n"%\ 309 323 (s_model.name) 310 324 description += " is automatically calculated " … … 318 332 description += " for details of individual models." 319 333 self.description += description 320 -
src/sas/sasgui/perspectives/calculator/media/python_shell_help.rst
rd85c194 rafb93df 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 .. Text revised during Code Camp V in Oct 2016. 5 6 6 Python Shell Tool 7 ================= 7 .. _Python_shell: 8 9 Python Shell-Editor Tool 10 ======================== 8 11 9 12 Description 10 13 ----------- 11 14 12 This is a Python shell/editor (PyCrust) provided with WxPython. An editing 13 notebook will show up when a Python file is created/loaded with the *New* or 14 *Open* options on the menu. 15 This is a Python shell/editor provided with WxPython. 15 16 16 *Run* enables the editor to compile and run the Python code. 17 For the help about Python, visit the website http://docs.python.org/tutorial/ 17 18 18 For the details about the Python, visit the website http://docs.python.org/tutorial/ 19 .. note:: This shell/editor has its own help, but the Help() and Credits() calls do not work on Macs. 19 20 20 The NumPy, SciPy, and Matplotlib, etc, libraries are shipped with SasView. 21 However, some functionality may not work. 21 The NumPy, SciPy, and Matplotlib, etc, libraries are shipped with SasView and so functions from these can be imported into the shell/editor, however, some functionality may not work. 22 22 23 PyCrust has its own Help. 23 .. image:: new_pycrust_example.png 24 :align: center 24 25 25 *NOTE! The Help() and Credits() calls do not work on Macs.* 26 When a Python file, for example a fitting model, is created or loaded with the *New* or *Open* options from the menu, a new tab opens with an editing notebook. 26 27 27 .. ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 28 .. image:: new_pycrust_example_2.png 29 :align: center 28 30 29 Example 30 ------- 31 If a Python (.py) model has a linked C (.c) subroutine *in the same folder* then the shell/editor will open both! However input focus is usually transferred to the tab with the .c file. 31 32 32 An example calling the Matplotlib plotting gallery: 33 34 .. image:: pycrust_example.png 33 To compile a model, select *Run* > *Check Model* from the shell/editor menu. If the model contains a unit test (which it should!!!) then this will also run and a popup window will report the success/failure of the test. 35 34 36 35 .. ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 37 36 38 .. note:: This help document was last changed by Steve King, 1 9Feb201537 .. note:: This help document was last changed by Steve King, 10Oct2015 -
src/sas/sasgui/perspectives/fitting/media/fitting.rst
r2a6d757 re8447d8 3 3 Fitting Documentation 4 4 ===================== 5 6 .. note:: In Windows use [Alt]-[Cursor left] to return to the previous page 5 7 6 8 .. toctree:: -
src/sas/sasgui/perspectives/fitting/media/fitting_help.rst
r05829fb rafb93df 141 141 From the *Fitting* option in the menu bar, select *Edit Custom Model*. 142 142 143 .. image:: edit_model_menu. bmp143 .. image:: edit_model_menu.png 144 144 145 145 and then one of the options 146 146 147 * *New* - to create a new custom model template148 * *Sum|Multi(p1,p2)* - to create a new model by summing/multiplying existing modelsin the model library149 * *Advanced* - to edit a new custom model147 * *New* - to create a custom model template with a help dialog 148 * *Sum|Multi(p1,p2)* - to create a custom model by summing/multiplying *existing models* in the model library 149 * *Advanced* - to create/edit a custom model in a Python shell 150 150 * *Delete* - to delete a custom model 151 * *Load* - to (re-)load custom models 151 152 152 153 New … … 184 185 ^^^^^^^^ 185 186 186 Selecting this option shows all the custom models in the plugin model folder 187 188 *C:\\Users\\ [username]\\.sasview\\plugin_models* - (on Windows)187 Selecting this option shows all the custom models in the plugin model folder, on Windows this is 188 189 *C:\\Users\\{username}\\.sasview\\plugin_models* 189 190 190 191 You can edit, modify, and save the Python code in any of these models using the 191 *Advanced Custom Model Editor*. 192 193 See :ref:`Writing_a_Plugin` for details on the plugin format. 194 195 *NB: Sum/Product models are still using the SasView 3.x model format. Unless 196 you are confident about what you are doing, it is recommended that you 197 only modify lines denoted with the ## <----- comments!* 198 199 When editing is complete, select *Run -> Compile* from the *Model Editor* menu bar. An 200 *Info* box will appear with the results of the compilation and model unit tests. The 201 model will only be usable if the tests 'pass'. 192 *Advanced Custom Model Editor*. Note that this is actually the same tool as the :ref:`Python_shell` . 193 194 For details of the SasView plugin model format see :ref:`Writing_a_Plugin` . 195 196 .. note:: Model files generated with the Sum/Multi option are still using the SasView 3.x model format. Unless you are confident about what you are doing, it is recommended that you only modify lines denoted with the ## <----- comments! 197 198 When editing is complete, select *Run* > *Check Model* from the *Advanced Custom Model Editor* menu bar. An *Info* box will appear with the results of the compilation and model unit tests. The model will only be usable if the tests 'pass'. 202 199 203 200 To use the model, go to the relevant *Fit Page*, select the *Customized Models* 204 201 category and then select the model from the drop-down menu. 205 202 206 *NB: Any changes to a custom model generated in this way only become effective after* 207 *it is re-selected from the model drop-down menu on the Fit Page.* 203 Any changes to a custom model generated in this way only become effective *after* it is re-selected from the model drop-down menu on the FitPage. 208 204 209 205 Delete … … 213 209 214 210 *NB: Custom models shipped with SasView cannot be removed in this way.* 211 212 Load 213 ^^^^ 214 215 This option loads (or re-loads) all models present in the plugin model folder. 215 216 216 217 .. ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
Note: See TracChangeset
for help on using the changeset viewer.