Changeset 18b7ca96 in sasview for src/sas/sasgui/perspectives/fitting/pagestate.py
- Timestamp:
- Jan 13, 2017 8:52:21 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, 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:
- eb2dc13
- Parents:
- 1905128 (diff), 12361fd (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. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/sas/sasgui/perspectives/fitting/pagestate.py
raf08e55 r18b7ca96 25 25 from lxml import etree 26 26 27 from sasmodels import convert 27 28 import sasmodels.weights 28 29 … … 271 272 # store value of chisqr 272 273 self.tcChi = None 274 self.version = (1,0,0) 273 275 274 276 def clone(self): … … 349 351 obj.cb1 = copy.deepcopy(self.cb1) 350 352 obj.smearer = copy.deepcopy(self.smearer) 353 obj.version = copy.deepcopy(self.version) 351 354 352 355 for name, state in self.saved_states.iteritems(): … … 355 358 obj.saved_states[copy_name] = copy_state 356 359 return obj 360 361 def _old_first_model(self): 362 """ 363 Handle save states from 4.0.1 and before where the first item in the 364 selection boxes of category, formfactor and structurefactor were not 365 saved. 366 :return: None 367 """ 368 if self.formfactorcombobox == '': 369 if self.categorycombobox == '' and len(self.parameters) == 3: 370 self.categorycombobox = "Shape-Independent" 371 self.formfactorcombobox = 'PowerLawAbsModel' 372 elif self.categorycombobox == '' and len(self.parameters) == 9: 373 self.categorycombobox = 'Cylinder' 374 self.formfactorcombobox = 'barbell' 375 elif self.categorycombobox == 'Shapes': 376 self.formfactorcombobox = 'BCCrystalModel' 377 elif self.categorycombobox == 'Uncategorized': 378 self.formfactorcombobox = 'LineModel' 379 elif self.categorycombobox == 'StructureFactor': 380 self.structurecombobox = 'HardsphereStructure' 381 elif self.categorycombobox == 'Customized Models': 382 self.formfactorcombobox = 'MySumFunction' 383 elif self.categorycombobox == 'Ellipsoid': 384 self.formfactorcombobox = 'core_shell_ellipsoid' 385 elif self.categorycombobox == 'Lamellae': 386 self.formfactorcombobox = 'lamellar' 387 elif self.categorycombobox == 'Paracrystal': 388 self.formfactorcombobox = 'bcc_paracrystal' 389 elif self.categorycombobox == 'Parallelepiped': 390 self.formfactorcombobox = 'core_shell_parallelepiped' 391 elif self.categorycombobox == 'Shape Independent': 392 self.formfactorcombobox = 'be_polyelectrolyte' 393 elif self.categorycombobox == 'Sphere': 394 self.formfactorcombobox = 'adsorbed_layer' 395 elif self.categorycombobox == 'Structure Factor': 396 self.formfactorcombobox = 'hardsphere' 397 398 @staticmethod 399 def param_remap_to_sasmodels_convert(params, is_string=False): 400 """ 401 Remaps the parameters for sasmodels conversion 402 403 :param params: list of parameters (likely self.parameters) 404 :return: remapped dictionary of parameters 405 """ 406 p = dict() 407 for fittable, name, value, _, uncert, lower, upper, units in params: 408 if not value: 409 value = numpy.nan 410 if not uncert or uncert[1] == '' or uncert[1] == 'None': 411 uncert[0] = False 412 uncert[1] = numpy.nan 413 if not upper or upper[1] == '' or upper[1] == 'None': 414 upper[0] = False 415 upper[1] = numpy.nan 416 if not lower or lower[1] == '' or lower[1] == 'None': 417 lower[0] = False 418 lower[1] = numpy.nan 419 if is_string: 420 p[name] = str(value) 421 else: 422 p[name] = float(value) 423 p[name + ".fittable"] = bool(fittable) 424 p[name + ".std"] = float(uncert[1]) 425 p[name + ".upper"] = float(upper[1]) 426 p[name + ".lower"] = float(lower[1]) 427 p[name + ".units"] = units 428 return p 429 430 @staticmethod 431 def param_remap_from_sasmodels_convert(params): 432 """ 433 Converts {name : value} map back to [] param list 434 :param params: parameter map returned from sasmodels 435 :return: None 436 """ 437 p_map = [] 438 for name, info in params.iteritems(): 439 if ".fittable" in name or ".std" in name or ".upper" in name or \ 440 ".lower" in name or ".units" in name: 441 pass 442 else: 443 fittable = params.get(name + ".fittable", True) 444 std = params.get(name + ".std", '0.0') 445 upper = params.get(name + ".upper", 'inf') 446 lower = params.get(name + ".lower", '-inf') 447 units = params.get(name + ".units") 448 if std is not None and std is not numpy.nan: 449 std = [True, str(std)] 450 else: 451 std = [False, ''] 452 if lower is not None and lower is not numpy.nan: 453 lower = [True, str(lower)] 454 else: 455 lower = [True, '-inf'] 456 if upper is not None and upper is not numpy.nan: 457 upper = [True, str(upper)] 458 else: 459 upper = [True, 'inf'] 460 param_list = [bool(fittable), str(name), str(info), 461 "+/-", std, lower, upper, str(units)] 462 p_map.append(param_list) 463 return p_map 464 465 def _convert_to_sasmodels(self): 466 """ 467 Convert parameters to a form usable by sasmodels converter 468 469 :return: None 470 """ 471 # Create conversion dictionary to send to sasmodels 472 self._old_first_model() 473 p = self.param_remap_to_sasmodels_convert(self.parameters) 474 structurefactor, params = convert.convert_model(self.structurecombobox, 475 p, False, self.version) 476 formfactor, params = convert.convert_model(self.formfactorcombobox, 477 params, False, self.version) 478 if len(self.str_parameters) > 0: 479 str_pars = self.param_remap_to_sasmodels_convert( 480 self.str_parameters, True) 481 formfactor, str_params = convert.convert_model( 482 self.formfactorcombobox, str_pars, False, self.version) 483 for key, value in str_params.iteritems(): 484 params[key] = value 485 486 if self.formfactorcombobox == 'SphericalSLDModel': 487 self.multi_factor += 1 488 self.formfactorcombobox = formfactor 489 self.structurecombobox = structurefactor 490 self.parameters = [] 491 self.parameters = self.param_remap_from_sasmodels_convert(params) 357 492 358 493 def _repr_helper(self, list, rep): … … 682 817 683 818 attr = newdoc.createAttribute("version") 684 attr.nodeValue = '1.0' 819 import sasview 820 attr.nodeValue = sasview.__version__ 821 # attr.nodeValue = '1.0' 685 822 top_element.setAttributeNode(attr) 686 823 … … 875 1012 raise RuntimeError, msg 876 1013 877 if node.get('version') and node.get('version') == '1.0': 1014 if node.get('version'): 1015 # Get the version for model conversion purposes 1016 self.version = tuple(int(e) for e in 1017 str.split(node.get('version'), ".")) 1018 # The tuple must be at least 3 items long 1019 while len(self.version) < 3: 1020 ver_list = list(self.version) 1021 ver_list.append(0) 1022 self.version = tuple(ver_list) 878 1023 879 1024 # Get file name … … 1191 1336 name = original_fname 1192 1337 state.data.group_id = name 1338 state.version = fitstate.version 1193 1339 # store state in fitting 1194 1340 self.call_back(state=state,
Note: See TracChangeset
for help on using the changeset viewer.