source: sasview/src/sas/qtgui/Perspectives/Fitting/FittingUtilities.py @ a9b568c

ESS_GUIESS_GUI_DocsESS_GUI_batch_fittingESS_GUI_bumps_abstractionESS_GUI_iss1116ESS_GUI_iss879ESS_GUI_iss959ESS_GUI_openclESS_GUI_orderingESS_GUI_sync_sascalc
Last change on this file since a9b568c was a9b568c, checked in by Piotr Rozyczko <rozyczko@…>, 7 years ago

Sprint demo issues addressed.

  • Property mode set to 100755
File size: 6.5 KB
Line 
1from PyQt4 import QtGui
2from PyQt4 import QtCore
3
4def replaceShellName(param_name, value):
5    """
6    Updates parameter name from <param_name>[n_shell] to <param_name>value
7    """
8    assert '[' in param_name
9    return param_name[:param_name.index('[')]+str(value)
10
11def getIterParams(model):
12    """
13    Returns a list of all multi-shell parameters in 'model'
14    """
15    return list(filter(lambda par: "[" in par.name, model.iq_parameters))
16
17def getMultiplicity(model):
18    """
19    Finds out if 'model' has multishell parameters.
20    If so, returns the name of the counter parameter and the number of shells
21    """
22    iter_params = getIterParams(model)
23    param_name = ""
24    param_length = 0
25    if iter_params:
26        param_length = iter_params[0].length
27        param_name = iter_params[0].length_control
28        if param_name is None and '[' in iter_params[0].name:
29            param_name = iter_params[0].name[:iter_params[0].name.index('[')]
30    return (param_name, param_length)
31
32def addParametersToModel(parameters, model):
33    """
34    Update local ModelModel with sasmodel parameters
35    """
36    multishell_parameters = getIterParams(parameters)
37    multishell_param_name, _ = getMultiplicity(parameters)
38
39    for param in parameters.iq_parameters:
40        # don't include shell parameters
41        if param.name == multishell_param_name:
42            continue
43        # Modify parameter name from <param>[n] to <param>1
44        item_name = param.name
45        if param in multishell_parameters:
46            continue
47        #    item_name = replaceShellName(param.name, 1)
48
49        item1 = QtGui.QStandardItem(item_name)
50        item1.setCheckable(True)
51        # check for polydisp params
52        if param.polydisperse:
53            poly_item = QtGui.QStandardItem("Polydispersity")
54            item1_1 = QtGui.QStandardItem("Distribution")
55            # Find param in volume_params
56            for p in parameters.form_volume_parameters:
57                if p.name != param.name:
58                    continue
59                item1_2 = QtGui.QStandardItem(str(p.default))
60                item1_3 = QtGui.QStandardItem(str(p.limits[0]))
61                item1_4 = QtGui.QStandardItem(str(p.limits[1]))
62                item1_5 = QtGui.QStandardItem(p.units)
63                poly_item.appendRow([item1_1, item1_2, item1_3, item1_4, item1_5])
64                break
65            # Add the polydisp item as a child
66            item1.appendRow([poly_item])
67        # Param values
68        item2 = QtGui.QStandardItem(str(param.default))
69        # TODO: the error column.
70        # Either add a proxy model or a custom view delegate
71        #item_err = QtGui.QStandardItem()
72        item3 = QtGui.QStandardItem(str(param.limits[0]))
73        item4 = QtGui.QStandardItem(str(param.limits[1]))
74        item5 = QtGui.QStandardItem(param.units)
75        model.appendRow([item1, item2, item3, item4, item5])
76
77def addSimpleParametersToModel(parameters, model):
78    """
79    Update local ModelModel with sasmodel parameters
80    """
81    for param in parameters.iq_parameters:
82        # Create the top level, checkable item
83        item_name = param.name
84        item1 = QtGui.QStandardItem(item_name)
85        item1.setCheckable(True)
86        # Param values
87        item2 = QtGui.QStandardItem(str(param.default))
88        # TODO: the error column.
89        # Either add a proxy model or a custom view delegate
90        #item_err = QtGui.QStandardItem()
91        item3 = QtGui.QStandardItem(str(param.limits[0]))
92        item4 = QtGui.QStandardItem(str(param.limits[1]))
93        item5 = QtGui.QStandardItem(param.units)
94        model.appendRow([item1, item2, item3, item4, item5])
95
96def addCheckedListToModel(model, param_list):
97    """
98    Add a QItem to model. Makes the QItem checkable
99    """
100    assert isinstance(model, QtGui.QStandardItemModel)
101    item_list = [QtGui.QStandardItem(item) for item in param_list]
102    item_list[0].setCheckable(True)
103    model.appendRow(item_list)
104
105def addHeadersToModel(model):
106    """
107    Adds predefined headers to the model
108    """
109    model.setHeaderData(0, QtCore.Qt.Horizontal, QtCore.QVariant("Parameter"))
110    model.setHeaderData(1, QtCore.Qt.Horizontal, QtCore.QVariant("Value"))
111    model.setHeaderData(2, QtCore.Qt.Horizontal, QtCore.QVariant("Min"))
112    model.setHeaderData(3, QtCore.Qt.Horizontal, QtCore.QVariant("Max"))
113    model.setHeaderData(4, QtCore.Qt.Horizontal, QtCore.QVariant("[Units]"))
114
115def addPolyHeadersToModel(model):
116    """
117    Adds predefined headers to the model
118    """
119    model.setHeaderData(0, QtCore.Qt.Horizontal, QtCore.QVariant("Parameter"))
120    model.setHeaderData(1, QtCore.Qt.Horizontal, QtCore.QVariant("PD[ratio]"))
121    model.setHeaderData(2, QtCore.Qt.Horizontal, QtCore.QVariant("Min"))
122    model.setHeaderData(3, QtCore.Qt.Horizontal, QtCore.QVariant("Max"))
123    model.setHeaderData(4, QtCore.Qt.Horizontal, QtCore.QVariant("Npts"))
124    model.setHeaderData(5, QtCore.Qt.Horizontal, QtCore.QVariant("Nsigs"))
125    model.setHeaderData(6, QtCore.Qt.Horizontal, QtCore.QVariant("Function"))
126
127def addShellsToModel(parameters, model, index):
128    """
129    Find out multishell parameters and update the model with the requested number of them
130    """
131    multishell_parameters = getIterParams(parameters)
132
133    for i in xrange(index):
134        for par in multishell_parameters:
135            # Create the name: <param>[<i>], e.g. "sld1" for parameter "sld[n]"
136            param_name = replaceShellName(par.name, i+1)
137            item1 = QtGui.QStandardItem(param_name)
138            item1.setCheckable(True)
139            # check for polydisp params
140            if par.polydisperse:
141                poly_item = QtGui.QStandardItem("Polydispersity")
142                item1_1 = QtGui.QStandardItem("Distribution")
143                # Find param in volume_params
144                for p in parameters.form_volume_parameters:
145                    if p.name != par.name:
146                        continue
147                    item1_2 = QtGui.QStandardItem(str(p.default))
148                    item1_3 = QtGui.QStandardItem(str(p.limits[0]))
149                    item1_4 = QtGui.QStandardItem(str(p.limits[1]))
150                    item1_5 = QtGui.QStandardItem(p.units)
151                    poly_item.appendRow([item1_1, item1_2, item1_3, item1_4, item1_5])
152                    break
153                item1.appendRow([poly_item])
154
155            item2 = QtGui.QStandardItem(str(par.default))
156            item3 = QtGui.QStandardItem(str(par.limits[0]))
157            item4 = QtGui.QStandardItem(str(par.limits[1]))
158            item5 = QtGui.QStandardItem(par.units)
159            model.appendRow([item1, item2, item3, item4, item5])
160
Note: See TracBrowser for help on using the repository browser.