- Timestamp:
- Jan 9, 2017 9:49:16 AM (8 years ago)
- Branches:
- 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
- Children:
- 87cc73a
- Parents:
- a66ff280
- Location:
- src/sas/qtgui
- Files:
-
- 1 added
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
src/sas/qtgui/GUITests.py
rd3ca363 rb46f285 20 20 from UnitTesting import WindowTitleTest 21 21 from UnitTesting import SetGraphRangeTest 22 from UnitTesting import LinearFitTest 22 23 23 24 def suite(): … … 42 43 unittest.makeSuite(WindowTitleTest.WindowTitleTest, 'test'), 43 44 unittest.makeSuite(SetGraphRangeTest.SetGraphRangeTest, 'test'), 45 unittest.makeSuite(LinearFitTest.LinearFitTest, 'test'), 44 46 ) 45 47 return unittest.TestSuite(suites) -
src/sas/qtgui/LinearFit.py
rfed94a2 rb46f285 38 38 self.yLabel = ylabel 39 39 40 self.x_is_log = self.xLabel == "log10(x)" 41 self.y_is_log = self.yLabel == "log10(y)" 42 40 43 self.txtFitRangeMin.setValidator(QtGui.QDoubleValidator()) 41 44 self.txtFitRangeMax.setValidator(QtGui.QDoubleValidator()) … … 108 111 self.xminFit, self.xmaxFit = self.range() 109 112 110 xminView = self.xminFit 111 xmaxView = self.xmaxFit 112 xmin = xminView 113 xmax = xmaxView 113 xmin = self.xminFit 114 xmax = self.xmaxFit 115 xminView = xmin 116 xmaxView = xmax 117 114 118 # Set the qmin and qmax in the panel that matches the 115 119 # transformed min and max 116 120 #value_xmin = X_VAL_DICT[self.xLabel].floatTransform(xmin) 117 121 #value_xmax = X_VAL_DICT[self.xLabel].floatTransform(xmax) 122 118 123 value_xmin = self.floatInvTransform(xmin) 119 124 value_xmax = self.floatInvTransform(xmax) … … 121 126 self.txtRangeMax.setText(formatNumber(value_xmax)) 122 127 128 tempx, tempy, tempdy = self.origData() 129 130 # Find the fitting parameters 131 self.cstA = fittings.Parameter(self.model, 'A', self.default_A) 132 self.cstB = fittings.Parameter(self.model, 'B', self.default_B) 133 tempdy = numpy.asarray(tempdy) 134 tempdy[tempdy == 0] = 1 135 136 if self.x_is_log: 137 xmin = numpy.log10(xmin) 138 xmax = numpy.log10(xmax) 139 140 chisqr, out, cov = fittings.sasfit(self.model, 141 [self.cstA, self.cstB], 142 tempx, tempy, tempdy, 143 xmin, xmax) 144 # Use chi2/dof 145 if len(tempx) > 0: 146 chisqr = chisqr / len(tempx) 147 148 # Check that cov and out are iterable before displaying them 149 errA = numpy.sqrt(cov[0][0]) if cov is not None else 0 150 errB = numpy.sqrt(cov[1][1]) if cov is not None else 0 151 cstA = out[0] if out is not None else 0.0 152 cstB = out[1] if out is not None else 0.0 153 154 # Reset model with the right values of A and B 155 self.model.setParam('A', float(cstA)) 156 self.model.setParam('B', float(cstB)) 157 158 tempx = [] 159 tempy = [] 160 y_model = 0.0 161 162 # load tempy with the minimum transformation 163 y_model = self.model.run(xmin) 164 tempx.append(xminView) 165 tempy.append(numpy.power(10, y_model) if self.y_is_log else y_model) 166 167 # load tempy with the maximum transformation 168 y_model = self.model.run(xmax) 169 tempx.append(xmaxView) 170 tempy.append(numpy.power(10, y_model) if self.y_is_log else y_model) 171 172 # Set the fit parameter display when FitDialog is opened again 173 self.Avalue = cstA 174 self.Bvalue = cstB 175 self.ErrAvalue = errA 176 self.ErrBvalue = errB 177 self.Chivalue = chisqr 178 179 # Update the widget 180 self.txtA.setText(formatNumber(self.Avalue)) 181 self.txtAerr.setText(formatNumber(self.ErrAvalue)) 182 self.txtB.setText(formatNumber(self.Bvalue)) 183 self.txtBerr.setText(formatNumber(self.ErrBvalue)) 184 self.txtChi2.setText(formatNumber(self.Chivalue)) 185 186 #self.parent.updatePlot.emit((tempx, tempy)) 187 self.parent.emit(QtCore.SIGNAL('updatePlot'), (tempx, tempy)) 188 189 def origData(self): 123 190 # Store the transformed values of view x, y and dy before the fit 124 xmin_check = numpy.log10(xmin) 191 xmin_check = numpy.log10(self.xminFit) 192 # Local shortcuts 125 193 x = self.data.view.x 126 194 y = self.data.view.y 127 195 dy = self.data.view.dy 128 196 129 if self.y Label == "log10(y)":130 if self.x Label == "log10(x)":197 if self.y_is_log: 198 if self.x_is_log: 131 199 tempy = [numpy.log10(y[i]) 132 200 for i in range(len(x)) if x[i] >= xmin_check] … … 140 208 tempdy = dy 141 209 142 if self.x Label == "log10(x)":210 if self.x_is_log: 143 211 tempx = [numpy.log10(x) for x in self.data.view.x if x > xmin_check] 144 212 else: 145 tempx = self.data.view.x 146 147 # Find the fitting parameters 148 # Always use the same defaults, so that fit history 149 # doesn't play a role! 150 self.cstA = fittings.Parameter(self.model, 'A', self.default_A) 151 self.cstB = fittings.Parameter(self.model, 'B', self.default_B) 152 tempdy = numpy.asarray(tempdy) 153 tempdy[tempdy == 0] = 1 154 155 if self.xLabel == "log10(x)": 156 chisqr, out, cov = fittings.sasfit(self.model, 157 [self.cstA, self.cstB], 158 tempx, tempy, 159 tempdy, 160 numpy.log10(xmin), 161 numpy.log10(xmax)) 162 else: 163 chisqr, out, cov = fittings.sasfit(self.model, 164 [self.cstA, self.cstB], 165 tempx, tempy, tempdy, 166 xminView, xmaxView) 167 # Use chi2/dof 168 if len(tempx) > 0: 169 chisqr = chisqr / len(tempx) 170 171 # Check that cov and out are iterable before displaying them 172 errA = numpy.sqrt(cov[0][0]) if cov is not None else 0 173 errB = numpy.sqrt(cov[1][1]) if cov is not None else 0 174 cstA = out[0] if out is not None else 0.0 175 cstB = out[1] if out is not None else 0.0 176 177 # Reset model with the right values of A and B 178 self.model.setParam('A', float(cstA)) 179 self.model.setParam('B', float(cstB)) 180 181 tempx = [] 182 tempy = [] 183 y_model = 0.0 184 # load tempy with the minimum transformation 185 if self.xLabel == "log10(x)": 186 y_model = self.model.run(numpy.log10(xmin)) 187 tempx.append(xmin) 188 else: 189 y_model = self.model.run(xminView) 190 tempx.append(xminView) 191 192 if self.yLabel == "log10(y)": 193 tempy.append(numpy.power(10, y_model)) 194 else: 195 tempy.append(y_model) 196 197 # load tempy with the maximum transformation 198 if self.xLabel == "log10(x)": 199 y_model = self.model.run(numpy.log10(xmax)) 200 tempx.append(xmax) 201 else: 202 y_model = self.model.run(xmaxView) 203 tempx.append(xmaxView) 204 205 if self.yLabel == "log10(y)": 206 tempy.append(numpy.power(10, y_model)) 207 else: 208 tempy.append(y_model) 209 # Set the fit parameter display when FitDialog is opened again 210 self.Avalue = cstA 211 self.Bvalue = cstB 212 self.ErrAvalue = errA 213 self.ErrBvalue = errB 214 self.Chivalue = chisqr 215 216 # Update the widget 217 self.txtA.setText(formatNumber(self.Avalue)) 218 self.txtAerr.setText(formatNumber(self.ErrAvalue)) 219 self.txtB.setText(formatNumber(self.Bvalue)) 220 self.txtBerr.setText(formatNumber(self.ErrBvalue)) 221 self.txtChi2.setText(formatNumber(self.Chivalue)) 222 223 #self.parent.updatePlot.emit((tempx, tempy)) 224 self.parent.emit(QtCore.SIGNAL('updatePlot'), (tempx, tempy)) 213 tempx = x 214 215 return tempx, tempy, tempdy 225 216 226 217 def checkFitValues(self, item): … … 234 225 p_pink = item.palette() 235 226 p_pink.setColor(item.backgroundRole(), QtGui.QColor(255, 128, 128)) 227 item.setAutoFillBackground(True) 236 228 # Check for possible values entered 237 if self.x Label == "log10(x)":229 if self.x_is_log: 238 230 if float(value) > 0: 239 231 item.setPalette(p_white) … … 259 251 return numpy.sqrt(x) 260 252 elif self.xLabel == "x^(4)": 261 return numpy.sqrt( math.sqrt(x))253 return numpy.sqrt(numpy.sqrt(x)) 262 254 elif self.xLabel == "log10(x)": 263 255 return numpy.power(10, x) -
src/sas/qtgui/Plotter.py
ra66ff280 rb46f285 382 382 plot_dict = copy.deepcopy(self.plot_dict) 383 383 384 # Labels might have been changed 385 xl = self.ax.xaxis.label.get_text() 386 yl = self.ax.yaxis.label.get_text() 387 384 388 self.plot_dict = {} 385 389 … … 389 393 for ids in plot_dict: 390 394 if ids != id: 391 self.plot(data=plot_dict[ids], hide_error=plot_dict[ids].hide_error) 395 self.plot(data=plot_dict[ids], hide_error=plot_dict[ids].hide_error) 396 397 # Reset the labels 398 self.ax.set_xlabel(xl) 399 self.ax.set_ylabel(yl) 400 self.canvas.draw() 392 401 393 402 def onFreeze(self, id): … … 443 452 self.xscale = xscale 444 453 self.yscale = yscale 454 455 # Plot the updated chart 456 self.removePlot(id) 457 458 # This assignment will wrap the label in Latex "$" 445 459 self.xLabel = new_xlabel 446 460 self.yLabel = new_ylabel 447 # Plot the updated chart448 self.removePlot(id)449 461 # Directly overwrite the data to avoid label reassignment 450 462 self._data = current_plot -
src/sas/qtgui/Plotter2D.py
r9290b1a rb46f285 85 85 zmax=zmax_2D_temp) 86 86 87 def c ontextMenu(self):87 def createContextMenu(self): 88 88 """ 89 89 Define common context menu and associated actions for the MPL widget … … 91 91 self.defaultContextMenu() 92 92 93 def c ontextMenuQuickPlot(self):93 def createContextMenuQuick(self): 94 94 """ 95 95 Define context menu and associated actions for the quickplot MPL widget -
src/sas/qtgui/UnitTesting/GuiUtilsTest.py
r27313b7 rb46f285 346 346 self.assertFalse(os.path.isfile(file_name)) 347 347 348 def testXYTransform(self): 349 """ Assure the unit/legend transformation is correct""" 350 data = Data1D(x=[1.0, 2.0, 3.0], y=[10.0, 11.0, 12.0], 351 dx=[0.1, 0.2, 0.3], dy=[0.1, 0.2, 0.3]) 352 353 xLabel, yLabel, xscale, yscale = xyTransform(data, xLabel="x", yLabel="y") 354 self.assertEqual(xLabel, "()") 355 self.assertEqual(xscale, "linear") 356 self.assertEqual(yscale, "linear") 357 358 xLabel, yLabel, xscale, yscale = xyTransform(data, xLabel="x^(2)", yLabel="1/y") 359 self.assertEqual(xLabel, "^{2}(()^{2})") 360 self.assertEqual(yLabel, "1/(()^{-1})") 361 self.assertEqual(xscale, "linear") 362 self.assertEqual(yscale, "linear") 363 364 xLabel, yLabel, xscale, yscale = xyTransform(data, xLabel="x^(4)", yLabel="ln(y)") 365 self.assertEqual(xLabel, "^{4}(()^{4})") 366 self.assertEqual(yLabel, "\\ln{()}()") 367 self.assertEqual(xscale, "linear") 368 self.assertEqual(yscale, "linear") 369 370 xLabel, yLabel, xscale, yscale = xyTransform(data, xLabel="ln(x)", yLabel="y^(2)") 371 self.assertEqual(xLabel, "\\ln{()}()") 372 self.assertEqual(yLabel, "^{2}(()^{2})") 373 self.assertEqual(xscale, "linear") 374 self.assertEqual(yscale, "linear") 375 376 xLabel, yLabel, xscale, yscale = xyTransform(data, xLabel="log10(x)", yLabel="y*x^(2)") 377 self.assertEqual(xLabel, "()") 378 self.assertEqual(yLabel, " \\ \\ ^{2}(()^{2})") 379 self.assertEqual(xscale, "log") 380 self.assertEqual(yscale, "linear") 381 382 xLabel, yLabel, xscale, yscale = xyTransform(data, xLabel="log10(x^(4))", yLabel="y*x^(4)") 383 self.assertEqual(xLabel, "^{4}(()^{4})") 384 self.assertEqual(yLabel, " \\ \\ ^{4}(()^{16})") 385 self.assertEqual(xscale, "log") 386 self.assertEqual(yscale, "linear") 387 388 xLabel, yLabel, xscale, yscale = xyTransform(data, xLabel="x", yLabel="1/sqrt(y)") 389 self.assertEqual(yLabel, "1/\\sqrt{}(()^{-0.5})") 390 self.assertEqual(yscale, "linear") 391 392 xLabel, yLabel, xscale, yscale = xyTransform(data, xLabel="x", yLabel="log10(y)") 393 self.assertEqual(yLabel, "()") 394 self.assertEqual(yscale, "log") 395 396 xLabel, yLabel, xscale, yscale = xyTransform(data, xLabel="x", yLabel="ln(y*x)") 397 self.assertEqual(yLabel, "\\ln{( \\ \\ )}()") 398 self.assertEqual(yscale, "linear") 399 400 xLabel, yLabel, xscale, yscale = xyTransform(data, xLabel="x", yLabel="ln(y*x^(2))") 401 self.assertEqual(yLabel, "\\ln ( \\ \\ ^{2})(()^{2})") 402 self.assertEqual(yscale, "linear") 403 404 xLabel, yLabel, xscale, yscale = xyTransform(data, xLabel="x", yLabel="ln(y*x^(4))") 405 self.assertEqual(yLabel, "\\ln ( \\ \\ ^{4})(()^{4})") 406 self.assertEqual(yscale, "linear") 407 408 xLabel, yLabel, xscale, yscale = xyTransform(data, xLabel="x", yLabel="log10(y*x^(4))") 409 self.assertEqual(yLabel, " \\ \\ ^{4}(()^{4})") 410 self.assertEqual(yscale, "log") 411 348 412 class FormulaValidatorTest(unittest.TestCase): 349 413 """ Test the formula validator """ -
src/sas/qtgui/UnitTesting/Plotter2DTest.py
r27313b7 rb46f285 74 74 """ Test the right click menu """ 75 75 self.plotter.data = self.data 76 self.plotter.createContextMenuQuick() 76 77 actions = self.plotter.contextMenu.actions() 77 78 self.assertEqual(len(actions), 7) -
src/sas/qtgui/UnitTesting/PlotterTest.py
raadf0af1 rb46f285 69 69 self.assertTrue(FigureCanvas.draw.called) 70 70 71 def testC ontextMenuQuickPlot(self):71 def testCreateContextMenuQuick(self): 72 72 """ Test the right click menu """ 73 73 self.plotter.createContextMenuQuick() … … 112 112 self.assertTrue(self.plotter.properties.exec_.called) 113 113 114 def testXYTransform(self): 115 """ Assure the unit/legend transformation is correct""" 116 self.plotter.plot(self.data) 117 118 self.plotter.xyTransform(xLabel="x", yLabel="y") 114 def testXyTransform(self): 115 """ Tests the XY transformation and new chart update """ 116 self.plotter.plot(self.data) 117 118 # Transform the points 119 self.plotter.xyTransform(xLabel="x", yLabel="log10(y)") 120 121 # Assure new plot has correct labels 119 122 self.assertEqual(self.plotter.ax.get_xlabel(), "$()$") 120 123 self.assertEqual(self.plotter.ax.get_ylabel(), "$()$") 121 122 self.plotter.xyTransform(xLabel="x^(2)", yLabel="1/y") 123 self.assertEqual(self.plotter.ax.get_xlabel(), "$^{2}(()^{2})$") 124 self.assertEqual(self.plotter.ax.get_ylabel(), "$1/(()^{-1})$") 125 126 self.plotter.xyTransform(xLabel="x^(4)", yLabel="ln(y)") 127 self.assertEqual(self.plotter.ax.get_xlabel(), "$^{4}(()^{4})$") 128 self.assertEqual(self.plotter.ax.get_ylabel(), "$\\ln{()}()$") 129 130 self.plotter.xyTransform(xLabel="ln(x)", yLabel="y^(2)") 131 self.assertEqual(self.plotter.ax.get_xlabel(), "$\\ln{()}()$") 132 self.assertEqual(self.plotter.ax.get_ylabel(), "$^{2}(()^{2})$") 133 134 self.plotter.xyTransform(xLabel="log10(x)", yLabel="y*x^(2)") 135 self.assertEqual(self.plotter.ax.get_xlabel(), "$()$") 136 self.assertEqual(self.plotter.ax.get_ylabel(), "$ \\ \\ ^{2}(()^{2})$") 137 138 self.plotter.xyTransform(xLabel="log10(x^(4))", yLabel="y*x^(4)") 139 self.assertEqual(self.plotter.ax.get_xlabel(), "$^{4}(()^{4})$") 140 self.assertEqual(self.plotter.ax.get_ylabel(), "$ \\ \\ ^{4}(()^{16})$") 141 142 self.plotter.xyTransform(xLabel="x", yLabel="1/sqrt(y)") 143 self.assertEqual(self.plotter.ax.get_ylabel(), "$1/\\sqrt{}(()^{-0.5})$") 144 145 self.plotter.xyTransform(xLabel="x", yLabel="log10(y)") 146 self.assertEqual(self.plotter.ax.get_ylabel(), "$()$") 147 148 self.plotter.xyTransform(xLabel="x", yLabel="ln(y*x)") 149 self.assertEqual(self.plotter.ax.get_ylabel(), "$\\ln{( \\ \\ )}()$") 150 151 self.plotter.xyTransform(xLabel="x", yLabel="ln(y*x^(2))") 152 self.assertEqual(self.plotter.ax.get_ylabel(), "$\\ln ( \\ \\ ^{2})(()^{2})$") 153 154 self.plotter.xyTransform(xLabel="x", yLabel="ln(y*x^(4))") 155 self.assertEqual(self.plotter.ax.get_ylabel(), "$\\ln ( \\ \\ ^{4})(()^{4})$") 156 157 self.plotter.xyTransform(xLabel="x", yLabel="log10(y*x^(4))") 158 self.assertEqual(self.plotter.ax.get_ylabel(), "$ \\ \\ ^{4}(()^{4})$") 124 # ... and scale 125 self.assertEqual(self.plotter.xscale, "linear") 126 self.assertEqual(self.plotter.yscale, "log") 127 # See that just one plot is present 128 self.assertEqual(len(self.plotter.plot_dict), 1) 129 self.assertEqual(len(self.plotter.ax.collections), 1) 159 130 160 131 def testAddText(self): … … 250 221 self.assertNotEqual(self.plotter.ax.get_ylim(), new_y) 251 222 223 def testOnLinearFit(self): 224 """ Checks the response to LinearFit call """ 225 pass 226 227 def testOnRemovePlot(self): 228 """ Assure plots get removed when requested """ 229 pass 230 231 def testRemovePlot(self): 232 """ Test plot removal """ 233 pass 234 235 def testOnToggleHideError(self): 236 """ Test the error bar toggle on plots """ 237 pass 238 239 def testOnFitDisplay(self): 240 """ Test the fit line display on the chart """ 241 pass 242 252 243 if __name__ == "__main__": 253 244 unittest.main() -
src/sas/qtgui/run_tests.bat
rd3ca363 rb46f285 19 19 python -m UnitTesting.AddTextTest 20 20 python -m UnitTesting.SetGraphRangeTest 21 python -m UnitTesting.LinearFitTest -
src/sas/qtgui/run_tests.sh
rd3ca363 rb46f285 18 18 python -m UnitTesting.AddTextTest 19 19 python -m UnitTesting.SetGraphRangeTest 20 python -m UnitTesting.LinearFitTest
Note: See TracChangeset
for help on using the changeset viewer.