diff --git a/nionswift_plugin/nion_experimental_tools/SequenceSplitJoin.py b/nionswift_plugin/nion_experimental_tools/SequenceSplitJoin.py index 19d47bf..0711a2b 100755 --- a/nionswift_plugin/nion_experimental_tools/SequenceSplitJoin.py +++ b/nionswift_plugin/nion_experimental_tools/SequenceSplitJoin.py @@ -57,7 +57,7 @@ def sequence_join(api: Facade.API_1, window: Facade.DocumentWindow, display_item # For line plots with multiple display layers we want to copy the display properties so that the joined item # look like the original display items. We copy the display properties of the first display item, but only # if the number of display layers is the same for all input display items. - display_layers = None + display_layers_list = None legend_position = None display_type = None copy_display_properties = False @@ -69,18 +69,18 @@ def sequence_join(api: Facade.API_1, window: Facade.DocumentWindow, display_item data_item_xdata = data_item.xdata if (data_item_xdata is not None and len(display_item.data_items) == 1 and len(data_item_xdata.data_shape) > 1 and (data_item_xdata.datum_dimension_count == 1 or display_item.display_type == 'line_plot')): - if i== 0: - display_layers = copy.deepcopy(display_item._display_item.display_layers) + if i == 0: + display_layers_list = display_item._display_item.display_layers_list legend_position = display_item._display_item.get_display_property('legend_position') display_type = display_item._display_item.display_type copy_display_properties = True - elif display_layers is not None: - copy_display_properties &= len(display_layers) == len(display_item._display_item.display_layers) + elif display_layers_list is not None: + copy_display_properties &= len(display_layers_list) == len(display_item._display_item.display_layers) if not data_items: return None - result_data_item = api.library.create_data_item_from_data(numpy.zeros((1, 1, 1))) + result_data_item = api.library.create_data_item() api.library.create_computation("nion.join_sequence", inputs={"src_list": data_items}, outputs={"target": result_data_item}) @@ -89,11 +89,8 @@ def sequence_join(api: Facade.API_1, window: Facade.DocumentWindow, display_item window._document_controller.show_display_item(result_display_item) if copy_display_properties: - if display_layers is not None: - while result_display_item.display_layers: - result_display_item.remove_display_layer(0) - for display_layer in display_layers: - result_display_item.append_display_layer(display_layer) + if display_layers_list: + result_display_item.display_layers_list = display_layers_list if legend_position is not None: result_display_item.set_display_property('legend_position', legend_position) if display_type is not None: diff --git a/nionswift_plugin/nion_experimental_tools/test/MultiDimensionalProcessing_test.py b/nionswift_plugin/nion_experimental_tools/test/MultiDimensionalProcessing_test.py index 0459cb4..6e94708 100755 --- a/nionswift_plugin/nion_experimental_tools/test/MultiDimensionalProcessing_test.py +++ b/nionswift_plugin/nion_experimental_tools/test/MultiDimensionalProcessing_test.py @@ -478,7 +478,7 @@ def test_align_image_sequence_computation(self) -> None: self.assertIn("Align/Integrate - Integrated Sequence", result_data_item.title) self.assertIn("Align/Integrate - Shifts", shifts.title) - def test_sequence_join_computation(self) -> None: + def test_sequence_join_computation_2d(self) -> None: with create_memory_profile_context() as test_context: document_controller = test_context.create_document_controller_with_application() document_model = document_controller.document_model @@ -503,6 +503,31 @@ def test_sequence_join_computation(self) -> None: self.assertFalse(any(computation.error_text for computation in document_model.computations)) self.assertIn("(Join Sequence)", result_data_item.title) + def test_sequence_join_computation_1d(self) -> None: + with create_memory_profile_context() as test_context: + document_controller = test_context.create_document_controller_with_application() + document_model = document_controller.document_model + api = Facade.get_api("~1.0", "~1.0") + # setup + xdata1 = DataAndMetadata.new_data_and_metadata(numpy.random.randn(8,8), data_descriptor=DataAndMetadata.DataDescriptor(True, 0, 1)) + data_item1 = DataItem.new_data_item(xdata1) + data_item1.title = "A" + document_model.append_data_item(data_item1) + display_item1 = document_model.get_display_item_for_data_item(data_item1) + xdata2 = DataAndMetadata.new_data_and_metadata(numpy.random.randn(8,8), data_descriptor=DataAndMetadata.DataDescriptor(True, 0, 1)) + data_item2 = DataItem.new_data_item(xdata2) + data_item2.title = "A" + document_model.append_data_item(data_item2) + display_item2 = document_model.get_display_item_for_data_item(data_item2) + # make computation and execute + result_data_item = SequenceSplitJoin.sequence_join(api, Facade.DocumentWindow(document_controller), [Facade.Display(display_item1), Facade.Display(display_item2)]) + document_model.recompute_all() + document_controller.periodic() + # check results + self.assertEqual(3, len(document_model.data_items)) + self.assertFalse(any(computation.error_text for computation in document_model.computations)) + self.assertIn("(Join Sequence)", result_data_item.title) + def test_sequence_split_computation(self) -> None: with create_memory_profile_context() as test_context: document_controller = test_context.create_document_controller_with_application()