source: sasview/src/sas/qtgui/Perspectives/Fitting/FittingPerspective.py @ 6a9559d

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 6a9559d was d84bc69, checked in by wojciech, 7 years ago

Conflict resolved

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