source: sasview/src/sas/qtgui/Perspectives/Fitting/Fitting.py @ 8bdb6f5

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 8bdb6f5 was 8bdb6f5, checked in by wojciech, 7 years ago

Reading from sasmodels parameter dict

  • Property mode set to 100755
File size: 7.3 KB
Line 
1import sys
2import json
3import  os
4from PyQt4 import QtGui
5from PyQt4 import QtCore
6
7from UI.fitting import Ui_Dialog
8
9from sasmodels import generate
10from sasmodels import modelinfo
11
12from collections import defaultdict
13from sas.sasgui.guiframe.CategoryInstaller import CategoryInstaller
14
15class prototype(QtGui.QDialog, Ui_Dialog):
16    def __init__(self):
17        super(prototype, self).__init__()
18        self._model_model = QtGui.QStandardItemModel()
19        self._poly_model = QtGui.QStandardItemModel()
20        self.setupUi(self)
21
22        self._readCategoryInfo()
23        cat_list = sorted(self.master_category_dict.keys())
24        self.comboBox.addItems(cat_list)
25        self.tableView.setModel(self._model_model)
26
27        model_list = self.master_category_dict['Cylinder']
28        for (model, enabled) in model_list:
29            self.comboBox_2.addItem(model)
30        self.setModelModel('barbell')
31
32        self.pushButton.setEnabled(False)
33        self.checkBox_3.setEnabled(False)
34        self.checkBox_4.setEnabled(False)
35        self.label_20.setText("---")
36        self.label_21.setText("---")
37        self.label_24.setText("---")
38
39        #self.setTableProperties(self.tableView)
40
41        self.tableView_2.setModel(self._poly_model)
42        self.setPolyModel()
43        self.setTableProperties(self.tableView_2)
44
45        for row in range(2):
46            c = QtGui.QComboBox()
47            c.addItems(['rectangle','array','lognormal','gaussian','schulz',])
48            i = self.tableView_2.model().index(row,6)
49            self.tableView_2.setIndexWidget(i,c)
50
51    def _readCategoryInfo(self):
52        """
53        Reads the categories in from file
54        """
55        self.master_category_dict = defaultdict(list)
56        self.by_model_dict = defaultdict(list)
57        self.model_enabled_dict = defaultdict(bool)
58
59        try:
60            categorization_file = CategoryInstaller.get_user_file()
61            if not os.path.isfile(categorization_file):
62                categorization_file = CategoryInstaller.get_default_file()
63            cat_file = open(categorization_file, 'rb')
64            self.master_category_dict = json.load(cat_file)
65            self._regenerate_model_dict()
66            cat_file.close()
67        except IOError:
68            raise
69            print 'Problem reading in category file.'
70            print 'We even looked for it, made sure it was there.'
71            print 'An existential crisis if there ever was one.'
72
73    def _regenerate_model_dict(self):
74        """
75        regenerates self.by_model_dict which has each model name as the
76        key and the list of categories belonging to that model
77        along with the enabled mapping
78        """
79        self.by_model_dict = defaultdict(list)
80        for category in self.master_category_dict:
81            for (model, enabled) in self.master_category_dict[category]:
82                self.by_model_dict[model].append(category)
83                self.model_enabled_dict[model] = enabled
84
85       
86    def setModelModel(self, model_name):
87        # Crete/overwrite model items
88
89        model_name = str(model_name)
90        kernel_module = generate.load_kernel_module(model_name)
91        parameters = modelinfo.make_parameter_table(getattr(kernel_module, 'parameters', []))
92
93        #TODO: scaale and background are implicit in sasmodels and needs to be added
94        item1 = QtGui.QStandardItem('scale')
95        item1.setCheckable(True)
96        item2 = QtGui.QStandardItem('1.0')
97        item3 = QtGui.QStandardItem('0.0')
98        item4 = QtGui.QStandardItem('inf')
99        item5 = QtGui.QStandardItem('')
100        self._model_model.appendRow([item1, item2, item3, item4, item5])
101
102        item1 = QtGui.QStandardItem('background')
103        item1.setCheckable(True)
104        item2 = QtGui.QStandardItem('0.001')
105        item3 = QtGui.QStandardItem('-inf')
106        item4 = QtGui.QStandardItem('inf')
107        item5 = QtGui.QStandardItem('1/cm')
108        self._model_model.appendRow([item1, item2, item3, item4, item5])
109
110        #TODO: iq_parameters are used here. If orientation paramateres or magnetic are needed kernel_paramters should be used instead
111        #For orientation and magentic parameters param.type needs to be checked
112        for param in parameters.iq_parameters:
113            item1 = QtGui.QStandardItem(param.name)
114            item1.setCheckable(True)
115            item2 = QtGui.QStandardItem(str(param.default))
116            item3 = QtGui.QStandardItem(str(param.limits[0]))
117            item4 = QtGui.QStandardItem(str(param.limits[1]))
118            item5 = QtGui.QStandardItem(param.units)
119            self._model_model.appendRow([item1, item2, item3, item4, item5])
120
121        self._model_model.setHeaderData(0, QtCore.Qt.Horizontal, QtCore.QVariant("Parameter"))
122        self._model_model.setHeaderData(1, QtCore.Qt.Horizontal, QtCore.QVariant("Value"))
123        self._model_model.setHeaderData(2, QtCore.Qt.Horizontal, QtCore.QVariant("Min"))
124        self._model_model.setHeaderData(3, QtCore.Qt.Horizontal, QtCore.QVariant("Max"))
125        self._model_model.setHeaderData(4, QtCore.Qt.Horizontal, QtCore.QVariant("[Units]"))
126
127    def setTableProperties(self, table):
128
129        table.setStyleSheet("background-image: url(model.png);")
130
131        # Table properties
132        table.verticalHeader().setVisible(False)
133        table.setAlternatingRowColors(True)
134        table.setSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.Expanding)
135        table.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)
136        # Header
137        header = table.horizontalHeader()
138        header.setResizeMode(QtGui.QHeaderView.Stretch)
139        header.setStretchLastSection(True)
140
141    def setPolyModel(self):
142        item1 = QtGui.QStandardItem("Distribution of radius")
143        item1.setCheckable(True)
144        item2 = QtGui.QStandardItem("0")
145        item3 = QtGui.QStandardItem("")
146        item4 = QtGui.QStandardItem("")
147        item5 = QtGui.QStandardItem("35")
148        item6 = QtGui.QStandardItem("3")
149        item7 = QtGui.QStandardItem("")
150        self._poly_model.appendRow([item1, item2, item3, item4, item5, item6, item7])
151        item1 = QtGui.QStandardItem("Distribution of thickness")
152        item1.setCheckable(True)
153        item2 = QtGui.QStandardItem("0")
154        item3 = QtGui.QStandardItem("")
155        item4 = QtGui.QStandardItem("")
156        item5 = QtGui.QStandardItem("35")
157        item6 = QtGui.QStandardItem("3")
158        item7 = QtGui.QStandardItem("")
159        self._poly_model.appendRow([item1, item2, item3, item4, item5, item6, item7])
160
161        self._poly_model.setHeaderData(0, QtCore.Qt.Horizontal, QtCore.QVariant("Parameter"))
162        self._poly_model.setHeaderData(1, QtCore.Qt.Horizontal, QtCore.QVariant("PD[ratio]"))
163        self._poly_model.setHeaderData(2, QtCore.Qt.Horizontal, QtCore.QVariant("Min"))
164        self._poly_model.setHeaderData(3, QtCore.Qt.Horizontal, QtCore.QVariant("Max"))
165        self._poly_model.setHeaderData(4, QtCore.Qt.Horizontal, QtCore.QVariant("Npts"))
166        self._poly_model.setHeaderData(5, QtCore.Qt.Horizontal, QtCore.QVariant("Nsigs"))
167        self._poly_model.setHeaderData(6, QtCore.Qt.Horizontal, QtCore.QVariant("Function"))
168
169        self.tableView_2.resizeColumnsToContents()
170        header = self.tableView_2.horizontalHeader()
171        header.ResizeMode(QtGui.QHeaderView.Stretch)
172        header.setStretchLastSection(True)
173
174
175if __name__ == "__main__":
176    app = QtGui.QApplication([])
177    dlg = prototype()
178    dlg.show()
179    sys.exit(app.exec_())
Note: See TracBrowser for help on using the repository browser.