58 lines
1.6 KiB
Python
58 lines
1.6 KiB
Python
#!/usr/bin/python
|
|
# -*- coding: utf-8 -*-
|
|
# \file Merger.py
|
|
# \brief TODO
|
|
# \author Florent Guiotte <florent.guiotte@gmail.com>
|
|
# \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()
|