diff --git a/Framework/PythonInterface/plugins/algorithms/LoadGudrunOutput.py b/Framework/PythonInterface/plugins/algorithms/LoadGudrunOutput.py index e4df7f8e1161717cb0d2c97b20a3d5aac0bebc91..49727e573dd0ad46976f819765470d459669ad03 100644 --- a/Framework/PythonInterface/plugins/algorithms/LoadGudrunOutput.py +++ b/Framework/PythonInterface/plugins/algorithms/LoadGudrunOutput.py @@ -1,5 +1,6 @@ from __future__ import (absolute_import, division, print_function) -from mantid.api import FileProperty, WorkspaceProperty, PythonAlgorithm, AlgorithmFactory, FileAction +from mantid.api import (FileProperty, WorkspaceProperty, PythonAlgorithm, + AlgorithmFactory, FileAction, PropertyMode) from mantid.kernel import Direction from mantid.simpleapi import LoadAscii, CreateWorkspace @@ -19,16 +20,38 @@ class LoadGudrunOutput(PythonAlgorithm): def PyInit(self): self.declareProperty(FileProperty(name='InputFile', defaultValue='', action=FileAction.Load, - extensions=['dcs01', 'mdcs01', 'mint01', 'mdor01', 'mgor01'])) - self.declareProperty(WorkspaceProperty(name='OutputWorkspace', defaultValue='', direction=Direction.Output)) + extensions=[".dcs01", + ".mdsc01", + ".mint01", + ".mdor01", + ".mgor01"]), + doc="Gudrun output file to be loaded.") + self.declareProperty(WorkspaceProperty(name='OutputWorkspace', defaultValue='', + direction=Direction.Output, + optional=PropertyMode.Optional), + doc="If No OutputWorkspace is provided, then the workpsace name " + "will be obtained from the meta data in the input file.") def PyExec(self): input_file = self.getProperty('InputFile').value output_ws = self.getPropertyValue('OutputWorkspace') + if not output_ws: + output_ws = self.get_title(input_file) number_of_columns, data_line_start = self.find_number_of_columns(input_file) self.load_gudrun_file(input_file, output_ws, number_of_columns, data_line_start) self.setProperty('OutputWorkspace', output_ws) + def get_title(self, input_file): + """ + Return the title from the file meta data + :param input_file: file to get meta data from + :return: (title) + """ + with open(input_file, 'r') as gudrun_file: + first_line = gudrun_file.readline() + first_line = first_line[2:] + return first_line.replace('.', '-') + def find_number_of_columns(self, input_file): """ Evaluate how many columns of data there are in the file @@ -50,7 +73,7 @@ class LoadGudrunOutput(PythonAlgorithm): :param output_workspace: The workspace to be the result of the load :param number_of_columns: The number of columns in the file being loaded :param first_data_line: The first line to expect data on - :return: The outputWorkspace of the Load Algoritm + :return: The outputWorkspace of the Load Algorithm """ if number_of_columns % 2 == 0: diff --git a/Framework/PythonInterface/test/python/plugins/algorithms/LoadGudrunOutputTest.py b/Framework/PythonInterface/test/python/plugins/algorithms/LoadGudrunOutputTest.py index e6e2aa19cc21d185a07b780599912834d07a77aa..2f3a08e2d1e3c3d707fdb19a26d97bc5c2c1e31c 100644 --- a/Framework/PythonInterface/test/python/plugins/algorithms/LoadGudrunOutputTest.py +++ b/Framework/PythonInterface/test/python/plugins/algorithms/LoadGudrunOutputTest.py @@ -8,14 +8,14 @@ import tempfile class LoadGudrunOutputTest(unittest.TestCase): def setUp(self): - self.file_name = 'POLARIS00097947-min{}' + self.file_name = 'POLARIS00097947-min{}01' def test_valid_extensions(self): - self.assertIsNotNone(LoadGudrunOutput(InputFile=self.file_name.format('.dcs01'), OutputWorkspace='out_ws')) - self.assertIsNotNone(LoadGudrunOutput(InputFile=self.file_name.format('.mdcs01'), OutputWorkspace='out_ws')) - self.assertIsNotNone(LoadGudrunOutput(InputFile=self.file_name.format('.mint01'), OutputWorkspace='out_ws')) - self.assertIsNotNone(LoadGudrunOutput(InputFile=self.file_name.format('.mdor01'), OutputWorkspace='out_ws')) - self.assertIsNotNone(LoadGudrunOutput(InputFile=self.file_name.format('.mgor01'), OutputWorkspace='out_ws')) + self.assertIsNotNone(LoadGudrunOutput(InputFile=self.file_name.format('.dcs'), OutputWorkspace='out_ws')) + self.assertIsNotNone(LoadGudrunOutput(InputFile=self.file_name.format('.mdcs'), OutputWorkspace='out_ws')) + self.assertIsNotNone(LoadGudrunOutput(InputFile=self.file_name.format('.mint'), OutputWorkspace='out_ws')) + self.assertIsNotNone(LoadGudrunOutput(InputFile=self.file_name.format('.mdor'), OutputWorkspace='out_ws')) + self.assertIsNotNone(LoadGudrunOutput(InputFile=self.file_name.format('.mgor'), OutputWorkspace='out_ws')) def test_invalid_extension(self): self.assertRaises(ValueError, LoadGudrunOutput, 'file.nxs', 'out_ws') @@ -24,31 +24,31 @@ class LoadGudrunOutputTest(unittest.TestCase): self.assertRaises(ValueError, LoadGudrunOutput, 'file.dcs01', 'out_ws') def test_load_dcs(self): - actual = LoadGudrunOutput(self.file_name.format('.dcs01')) + actual = LoadGudrunOutput(self.file_name.format('.dcs')) self.assertIsInstance(actual, Workspace) self.assertEqual(actual.getNumberBins(), 100) self.assertEqual(actual.getNumberHistograms(), 5) def test_load_mdsc(self): - actual = LoadGudrunOutput(self.file_name.format('.mdcs01')) + actual = LoadGudrunOutput(self.file_name.format('.mdcs')) self.assertIsInstance(actual, Workspace) self.assertEqual(actual.getNumberBins(), 100) self.assertEqual(actual.getNumberHistograms(), 1) def test_load_mint(self): - actual = LoadGudrunOutput(self.file_name.format('.mint01')) + actual = LoadGudrunOutput(self.file_name.format('.mint')) self.assertIsInstance(actual, Workspace) self.assertEqual(actual.getNumberBins(), 100) self.assertEqual(actual.getNumberHistograms(), 1) def test_load_mdor(self): - actual = LoadGudrunOutput(self.file_name.format('.mdor01')) + actual = LoadGudrunOutput(self.file_name.format('.mdor')) self.assertIsInstance(actual, Workspace) self.assertEqual(actual.getNumberBins(), 100) self.assertEqual(actual.getNumberHistograms(), 1) def test_load_mgor(self): - actual = LoadGudrunOutput(self.file_name.format('.mgor01')) + actual = LoadGudrunOutput(self.file_name.format('.mgor')) self.assertIsInstance(actual, Workspace) self.assertEqual(actual.getNumberBins(), 100) self.assertEqual(actual.getNumberHistograms(), 1) @@ -65,6 +65,14 @@ class LoadGudrunOutputTest(unittest.TestCase): tmp.close() self.assertRaises(ValueError, LoadGudrunOutput, tmp.name, 'out_ws') + def test_rename_with_default_output(self): + actual = LoadGudrunOutput(InputFile=self.file_name.format('.dcs'), OutputWorkspace='') + self.assertEqual(actual.name(), 'POLARIS00097947-dcs01') + + def test_name_when_given(self): + actual = LoadGudrunOutput(InputFile=self.file_name.format('.dcs'), OutputWorkspace='actual') + self.assertEqual(actual.name(), 'actual') + if __name__ == '__main__': unittest.main() diff --git a/qt/widgets/common/src/FileDialogHandler.cpp b/qt/widgets/common/src/FileDialogHandler.cpp index bc3a94bce8bcbe4704f96c5a2cac7e3d304bcd78..ba9835be2006feeba40d1606efd00a9c40b93ddd 100644 --- a/qt/widgets/common/src/FileDialogHandler.cpp +++ b/qt/widgets/common/src/FileDialogHandler.cpp @@ -161,6 +161,9 @@ QString getFilter(const std::vector<std::string> &exts) { */ QString formatExtension(const std::string &extension) { QString formattedExtension = QString::fromStdString(extension); + if (extension.empty()) { + return formattedExtension; + } if (extension.at(0) == '*' && extension.at(1) == '.') { return formattedExtension; } else {