Skip to content

Commit

Permalink
Merge pull request #1556 from SasView/ESS_GUI_1546_plot_woes
Browse files Browse the repository at this point in the history
Fixed the edge cases and added a beefy unit test. #1546
  • Loading branch information
m2cci-NMZ committed May 29, 2020
2 parents 22ee686 + 2b002d7 commit 04f73b8
Show file tree
Hide file tree
Showing 2 changed files with 99 additions and 3 deletions.
5 changes: 4 additions & 1 deletion src/sas/qtgui/MainWindow/DataExplorer.py
Original file line number Diff line number Diff line change
Expand Up @@ -1044,7 +1044,10 @@ def isPlotShown(self, plot):
"""
if not hasattr(plot, 'name'):
return False
ids_vals = [val.data[0].name for val in self.active_plots.values()]

ids_vals = [val.data[0].name for val in self.active_plots.values()
if val.data[0].plot_role != Data1D.ROLE_DATA or
isinstance(val.data[0], Data2D)]

return plot.name in ids_vals

Expand Down
97 changes: 95 additions & 2 deletions src/sas/qtgui/MainWindow/UnitTesting/DataExplorerTest.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,14 @@
import path_prepare

# Local
from sas.qtgui.Plotting.PlotterData import Data1D
from sas.qtgui.Plotting.PlotterData import Data1D, Data2D
from sas.sascalc.dataloader.loader import Loader
from sas.qtgui.MainWindow.DataManager import DataManager

from sas.qtgui.MainWindow.DataExplorer import DataExplorerWindow
from sas.qtgui.MainWindow.GuiManager import GuiManager
from sas.qtgui.Utilities.GuiUtils import *
from UnitTesting.TestUtils import QtSignalSpy
from sas.qtgui.UnitTesting.TestUtils import QtSignalSpy
from sas.qtgui.Plotting.Plotter import Plotter
from sas.qtgui.Plotting.Plotter2D import Plotter2D
import sas.qtgui.Plotting.PlotHelper as PlotHelper
Expand Down Expand Up @@ -917,6 +917,99 @@ def testClosePlotsForItem(self):
self.assertEqual(len(PlotHelper.currentPlots()), 0)
self.assertEqual(len(self.form.plot_widgets), 0)

def testPlotsFromMultipleData1D(self):
"""
Tests interplay between plotting 1D datasets and plotting
a single 1D dataset from two separate fit tabs
GH issue 1546
"""
# prepare active_plots
plot1 = Plotter(parent=self.form)
data1 = Data1D()
data1.name = 'p1'
data1.plot_role = Data1D.ROLE_DATA
plot1.data = data1

plot2 = Plotter(parent=self.form)
data2 = Data1D()
data2.name = 'M2 [p1]'
data2.plot_role = Data1D.ROLE_DEFAULT
plot2.data = data2

plot3 = Plotter(parent=self.form)
data3 = Data1D()
data3.name = 'Residuals for M2[p1]'
data3.plot_role = Data1D.ROLE_RESIDUAL
plot3.data = data3

# pretend we're displaying three plots
self.form.active_plots['p1'] = plot1
self.form.active_plots['M2 [p1]'] = plot2
self.form.active_plots['Residuals for M2[p1]'] = plot3

# redoing plots from the same tab
# data -> must be shown
self.assertFalse(self.form.isPlotShown(data1))

# model and residuals are already shown
self.assertTrue(self.form.isPlotShown(data2))
self.assertTrue(self.form.isPlotShown(data3))

# Try from different fit page
plot4 = Plotter(parent=self.form)
data4 = Data1D()
data4.name = 'M1 [p1]'
data4.plot_role = Data1D.ROLE_DEFAULT
plot4.data = data1
# same data but must show, since different model
self.assertFalse(self.form.isPlotShown(data4))

def testPlotsFromMultipleData2D(self):
"""
Tests interplay between plotting 2D datasets and plotting
a single 2D dataset from two separate fit tabs
GH issue 1546
"""
# prepare active_plots
plot1 = Plotter(parent=self.form)
data1 = Data2D()
data1.name = 'p1'
data1.plot_role = Data1D.ROLE_DATA
plot1.data = data1

plot2 = Plotter(parent=self.form)
data2 = Data2D()
data2.name = 'M2 [p1]'
data2.plot_role = Data1D.ROLE_DEFAULT
plot2.data = data2

plot3 = Plotter(parent=self.form)
data3 = Data2D()
data3.name = 'Residuals for M2[p1]'
data3.plot_role = Data1D.ROLE_RESIDUAL
plot3.data = data3

# pretend we're displaying three plots
self.form.active_plots['p1'] = plot1
self.form.active_plots['M2 [p1]'] = plot2
self.form.active_plots['Residuals for M2[p1]'] = plot3

# redoing plots from the same tab
# data -> Already there, don't show
self.assertTrue(self.form.isPlotShown(data1))

# model and residuals are already shown
self.assertTrue(self.form.isPlotShown(data2))
self.assertTrue(self.form.isPlotShown(data3))

# Try from different fit page
plot4 = Plotter(parent=self.form)
data4 = Data2D()
data4.name = 'M1 [p1]'
plot4.data = data1
# same data but must show, since different model
self.assertFalse(self.form.isPlotShown(data4))


if __name__ == "__main__":
unittest.main()

0 comments on commit 04f73b8

Please sign in to comment.