def __init__(self, *args, **kwargs): """ kwarg keys: name weight arm_ratio order """ # this filter bank has a name ScalarFilterBase.__init__(self, *args, **kwargs) """ This filter bank looks like this: |---------------------------------------------| | | | -------------- | | ----------- | diffr M1 |---------------|----> slope | / -------------- | px --->|- | | \ | | \ -------------------- | | \---------| dbl-diffr M1/2 |------------|----> curvature | -------------------- | | | |---------------------------------------------| """ # aux this_order = kwargs.get('order', 1) name_slope_arm = "%s-slope" % kwargs.get('name', 'scf') name_curv_arm = "%s-curv" % kwargs.get('name', 'scf') # the slope filter self._slope_filter = ScalarHomogeneousDifferencer(name=name_slope_arm, order=this_order, weight=1.0) # the curvature filter. This filter is a chain of two half-M1 differencers self._curv_filter = ScalarHomogeneousDoubleDifferencer(name=name_curv_arm, order=this_order, weight=1.0) self._meta_data_queue = deque() #-------------------------------------------------------------------- # in this pythonic environ need to have more explicit assurance that the filter is made self._is_made = False
class SlopeCurvatureFilterBank(ScalarFilterBase): def __init__(self, *args, **kwargs): """ kwarg keys: name weight arm_ratio order """ # this filter bank has a name ScalarFilterBase.__init__(self, *args, **kwargs) """ This filter bank looks like this: |---------------------------------------------| | | | -------------- | | ----------- | diffr M1 |---------------|----> slope | / -------------- | px --->|- | | \ | | \ -------------------- | | \---------| dbl-diffr M1/2 |------------|----> curvature | -------------------- | | | |---------------------------------------------| """ # aux this_order = kwargs.get('order', 1) name_slope_arm = "%s-slope" % kwargs.get('name', 'scf') name_curv_arm = "%s-curv" % kwargs.get('name', 'scf') # the slope filter self._slope_filter = ScalarHomogeneousDifferencer(name=name_slope_arm, order=this_order, weight=1.0) # the curvature filter. This filter is a chain of two half-M1 differencers self._curv_filter = ScalarHomogeneousDoubleDifferencer(name=name_curv_arm, order=this_order, weight=1.0) self._meta_data_queue = deque() #-------------------------------------------------------------------- # in this pythonic environ need to have more explicit assurance that the filter is made self._is_made = False #-------------------------------------------------------------------- # main interface # make the differencer, which makes the two underlying filters def make(self, slope_M1): # simply make the slope and curvature filters, use M1/2 for the curvature filter. self._slope_filter.make(slope_M1) self._curv_filter.make(slope_M1/2.0) self._meta_data_queue = deque(maxlen=slope_M1) # set self._is_made = True def reset(self): self._slope_filter.reset() self._curv_filter.reset() def relevel(self, v): self._slope_filter.relevel(v) self._curv_filter.relevel(v) def update(self, v, meta_data=None): self._slope_filter.update(v) self._curv_filter.update(v) if meta_data: self._meta_data_queue.append(meta_data) def value(self): # return a tuple (slope, curvature) return [self._slope_filter.value(), self._curv_filter.value()] def getMetaDataQueue(self): return self._meta_data_queue def isReady(self): return self._slope_filter.isReady() and self._curv_filter.isReady() def isMade(self): return self._is_made #-------------------------------------------------------------------- # getters def getProperties(self): prop = {} prop['order'] = self._slope_filter.getOrder() prop['name'] = self._name prop['weight'] = self._weight return prop def getArms(self): return {'slope': self._slope_filter, 'curve': self._curv_filter}