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

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 b1e36a3 was b1e36a3, checked in by Piotr Rozyczko <rozyczko@…>, 7 years ago

FittingWidget? code review SASVIEW-561

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