ld2daps/ld2dap/Differential.py

65 lines
2.1 KiB
Python

#!/usr/bin/python
# -*- coding: utf-8 -*-
# \file Differential.py
# \brief TODO
# \author Florent Guiotte <florent.guiotte@gmail.com>
# \version 0.1
# \date 16 avril 2018
#
# TODO details
from ld2dap.core import Filter, Stack
import numpy as np
class Differential(Filter):
def __init__(self, overflow='auto'):
super().__init__(self.__class__.__name__)
self.overflow = overflow
def _process(self, data, metadata):
self.logger.info('Run differential on stack of size {}'.format(data.shape))
raster_list = list()
metadata_new = list()
offset = 0
for stack in metadata:
self.logger.debug('{}'.format(stack))
overflow = (data[:, :, stack.begin:stack.end-1] >
data[:, :, stack.begin+1:stack.end]).any() and \
str(data.dtype).startswith('u')
dtype = data.dtype
if overflow:
self.logger.warn('Overflow detected')
if self.overflow == 'auto':
dtype = np.dtype(str(data.dtype).lstrip('u'))
self.logger.info('Changing dtype from {} to {}'.format(
data.dtype, dtype))
raster_list.append(np.subtract(data[:, :, stack.begin+1:stack.end],
data[:, :, stack.begin:stack.end-1], dtype=dtype))
size_new = stack.end - stack.begin - 1
stack_new = Stack(offset, size_new)
for i in range(len(stack_new.desc)):
desc = stack.desc[i].copy()
desc.append(':Differential:')
desc.extend(stack.desc[i+1])
stack_new.desc[i] = desc
metadata_new.append(stack_new)
for i in range(len(stack_new.symb)):
symb = list() #['D(']
symb.extend(stack.symb[i])
symb.append(' - ')
symb.extend(stack.symb[i+1])
#symb.append(')')
stack_new.symb[i] = symb
offset += size_new
data = np.dstack(raster_list)
return data, metadata_new