//  [python]
def execute(self, si_sequence_data_item: API_1_0.DataItem, haadf_sequence_data_item: API_1_0.DataItem,
                align_index: int, align_region: API_1_0.Graphic):
        haadf_xdata = haadf_sequence_data_item.xdata
        si_xdata = si_sequence_data_item.xdata
        bounds = align_region.bounds
        translations = Core.function_sequence_measure_relative_translation(haadf_xdata,
                                                                           haadf_xdata[align_index],
                                                                           10, True, bounds=bounds)
        sequence_shape = haadf_sequence_data_item.xdata.sequence_dimension_shape
        c = int(numpy.prod(sequence_shape))
        haadf_result_data = numpy.empty_like(haadf_xdata.data)
        si_result_data = numpy.empty_like(si_xdata.data)

        align_data_shape = haadf_sequence_data_item.xdata.datum_dimension_shape
        align_axes_start_index = None
        for i in range(len(si_xdata.data_shape) - 1):
            if align_data_shape == si_xdata.data_shape[i:i+2]:
                align_axes_start_index = i
                break
        else:
            raise RuntimeError('Could not find axes that match the HAADF shape in SI data item.')

        si_translation = [0.0] * (len(si_xdata.data_shape) - len(sequence_shape))
        align_axes_start_index -= len(sequence_shape)
        assert align_axes_start_index >= 0

        for i in range(c):
            ii = numpy.unravel_index(i, sequence_shape)
            current_xdata = DataAndMetadata.new_data_and_metadata(haadf_xdata.data[ii])
            translation = translations.data[ii]
            haadf_result_data[ii] = Core.function_shift(current_xdata, tuple(translation)).data
            current_xdata = DataAndMetadata.new_data_and_metadata(si_xdata.data[ii])
            si_translation[align_axes_start_index] = translation[0]
            si_translation[align_axes_start_index+1] = translation[1]
            si_result_data[ii] = Core.function_shift(current_xdata, tuple(si_translation)).data

        self.__aligned_haadf_sequence = DataAndMetadata.new_data_and_metadata(haadf_result_data,
                                                                              intensity_calibration=haadf_xdata.intensity_calibration,
                                                                              dimensional_calibrations=haadf_xdata.dimensional_calibrations,
                                                                              metadata=haadf_xdata.metadata,
                                                                              data_descriptor=haadf_xdata.data_descriptor)
        self.__aligned_si_sequence = DataAndMetadata.new_data_and_metadata(si_result_data,
                                                                           intensity_calibration=si_xdata.intensity_calibration,
                                                                           dimensional_calibrations=si_xdata.dimensional_calibrations,
                                                                           metadata=si_xdata.metadata,
                                                                           data_descriptor=si_xdata.data_descriptor)