#!/usr/bin/python # -*- coding: utf-8 -*- # \file Merger.py # \brief TODO # \author Florent Guiotte # \version 0.1 # \date 24 août 2018 # # TODO details from ld2dap.core import Filter, Output, Stacker import numpy as np class Merger(Filter): def __init__(self): super().__init__(self.__class__.__name__) """Merger Node, merge two stream inputs""" self.data = None self.metadata = None self.second = self.SecondInput(self) def process(self, data=None, metadata=None): """Override the Input override""" if data is not None: self.logger.info('Register first input') self.data = data self.metadata = metadata else: self.logger.info('Register second input') if self.second.data is None or self.data is None: return self.logger.info('Merging inputs') offset = self.data.shape[-1] data = np.dstack((self.data, self.second.data)) metadata = self.metadata for stack in self.second.metadata: stack.begin += offset stack.end += offset metadata.append(stack) for output in self.outputs: output.process(data, [x.copy() for x in metadata]) class SecondInput(Output): def __init__(self, merger): super().__init__(self.__class__.__name__) self.merger = merger self.data = None self.metadata = None def _process(self, data, metadata): self.data = data self.metadata = metadata self.merger.process()