- Timestamp:
- Aug 30, 2017 10:32:35 AM (7 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, magnetic_scatt, release-4.2.2, ticket-1009, ticket-1094-headless, ticket-1242-2d-resolution, ticket-1243, ticket-1249, ticket885, unittest-saveload
- Children:
- f1495ff
- Parents:
- 9f703d0
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/sas/sasgui/perspectives/calculator/model_editor.py
r9f703d0 r14fbdba 106 106 self.model2_string = "cylinder" 107 107 self.name = 'Sum' + M_NAME 108 self.factor = 'scale_factor'109 108 self._notes = '' 110 109 self._operator = '+' … … 133 132 self.model2_name = str(self.model2.GetValue()) 134 133 self.good_name = True 135 self.fill_op rator_combox()134 self.fill_operator_combox() 136 135 137 136 def _layout_name(self): … … 491 490 a sum or multiply model then create the appropriate string 492 491 """ 493 494 492 name = '' 495 496 493 if operator == '*': 497 494 name = 'Multi' 498 495 factor = 'background' 499 f_oper = '+'500 496 else: 501 497 name = 'Sum' 502 498 factor = 'scale_factor' 503 f_oper = '*' 504 505 self.factor = factor 499 506 500 self._operator = operator 507 self.explanation = " Plugin Model = %s %s (model1 %s model2)\n" % \508 (self.factor, f_oper, self._operator)501 self.explanation = (" Plugin_model = scale_factor * (model_1 {} " 502 "model_2) + background").format(operator) 509 503 self.explanationctr.SetLabel(self.explanation) 510 504 self.name = name + M_NAME 511 505 512 506 513 def fill_op rator_combox(self):507 def fill_operator_combox(self): 514 508 """ 515 509 fill the current combobox with the operator … … 536 530 description = name1 + self._operator + name2 537 531 operator_text = self._operator_choice.GetValue() 538 if '+' in operator_text: 539 factor = 'scale_factor' 540 f_oper = '*' 541 default_val = '1.0' 542 else: 543 factor = 'background' 544 f_oper = '+' 545 default_val = '0.0' 532 f_oper = '*' if '+' in operator_text else '+' 546 533 path = self.fname 547 try:548 out_f = open(path, 'w')549 except:550 raise551 534 output = SUM_TEMPLATE.format(model1=name1, model2=name2, 552 scale_factor_default=default_val, factor_operator=f_oper, 553 operator=self._operator, description=description) 554 output = output.replace("scale_factor", factor) 555 out_f.write(output + "\n") 556 out_f.close() 535 scale_factor_default=1.0, background_default=0.001, 536 factor_operator=f_oper, operator=self._operator, 537 description=description) 538 if self._operator == '*': 539 # Multiplication models only have 1 overall scale factor. Don't use 540 # sub-models' individual scales as fitting params 541 output = output.replace("if name == 'background'", 542 "if name == 'background' or name == 'scale'") 543 with open(self.fname, 'w') as out_f: 544 out_f.write(output + "\n") 557 545 558 546 def compile_file(self, path): … … 1280 1268 ## New parameter:scaling_factor 1281 1269 self.params['scale_factor'] = {scale_factor_default} 1270 # Set each model's background to 0, and define our own background param 1271 if 'background' in self.p_model1.params: 1272 self.p_model1.setParam('background', 0.0) 1273 if 'background' in self.p_model2.params: 1274 self.p_model2.setParam('background', 0.0) 1275 self.params['background'] = {background_default} 1282 1276 1283 1277 ## Parameter details [units, min, max] 1284 1278 self._set_details() 1285 1279 self.details['scale_factor'] = ['', 0.0, numpy.inf] 1286 1280 self.details['background'] = ['1/cm', 0.0, numpy.inf] 1287 1281 1288 1282 #list of parameter that can be fitted … … 1385 1379 def _set_params(self): 1386 1380 for name , value in self.p_model1.params.iteritems(): 1387 # No 2D-supported 1388 #if name not in self.p_model1.orientation_params: 1381 # Don't use the model's background param - we've defined our own 1382 if name == 'background': 1383 continue 1389 1384 new_name = "p1_" + name 1390 self.params[new_name] = value1385 self.params[new_name] = value 1391 1386 1392 1387 for name , value in self.p_model2.params.iteritems(): 1393 # No 2D-supported 1394 #if name not in self.p_model2.orientation_params: 1388 # Don't use the model's background param - we've defined our own 1389 if name == 'background': 1390 continue 1395 1391 new_name = "p2_" + name 1396 self.params[new_name] = value1392 self.params[new_name] = value 1397 1393 1398 1394 # Set "scale" as initializing … … 1402 1398 def _set_details(self): 1403 1399 for name ,detail in self.p_model1.details.iteritems(): 1400 if name == 'background': 1401 continue 1404 1402 new_name = "p1_" + name 1405 1403 #if new_name not in self.orientation_params: … … 1407 1405 1408 1406 for name ,detail in self.p_model2.details.iteritems(): 1407 if name == 'background': 1408 continue 1409 1409 new_name = "p2_" + name 1410 1410 #if new_name not in self.orientation_params: … … 1432 1432 if new_name in self.p_model2.getParamList(): 1433 1433 self.p_model2.setParam(new_name, value) 1434 elif name == 'scale_factor' :1435 self.params[ 'scale_factor'] = value1434 elif name == 'scale_factor' or name == 'background': 1435 self.params[name] = value 1436 1436 else: 1437 1437 raise ValueError, "Model does not contain parameter %s" % name … … 1490 1490 self._set_scale_factor() 1491 1491 return self.params['scale_factor'] {factor_operator} \ 1492 (self.p_model1.run(x) {operator} self.p_model2.run(x)) 1492 (self.p_model1.run(x) {operator} self.p_model2.run(x)) + self.params['background'] 1493 1493 1494 1494 def runXY(self, x = 0.0): 1495 1495 self._set_scale_factor() 1496 1496 return self.params['scale_factor'] {factor_operator} \ 1497 (self.p_model1.runXY(x) {operator} self.p_model2.runXY(x)) 1497 (self.p_model1.runXY(x) {operator} self.p_model2.runXY(x)) + self.params['background'] 1498 1498 1499 1499 ## Now (May27,10) directly uses the model eval function … … 1503 1503 return self.params['scale_factor'] {factor_operator} \ 1504 1504 (self.p_model1.evalDistribution(x) {operator} \ 1505 self.p_model2.evalDistribution(x)) 1505 self.p_model2.evalDistribution(x)) + self.params['background'] 1506 1506 1507 1507 def set_dispersion(self, parameter, dispersion):
Note: See TracChangeset
for help on using the changeset viewer.