# -*- coding: utf-8 -*-
#
-# Copyright (C) 2008-2010 Alberto Gomez-Casado
-# Fabrizio Benedetti
-# Massimo Sandal <devicerandom@gmail.com>
-# W. Trevor King <wking@drexel.edu>
+# Copyright (C) 2010-2012 W. Trevor King <wking@drexel.edu>
#
# This file is part of Hooke.
#
-# Hooke is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
+# Hooke is free software: you can redistribute it and/or modify it under the
+# terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or (at your option) any
+# later version.
#
-# Hooke is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Lesser General Public License for more details.
+# Hooke is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+# A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+# details.
#
-# You should have received a copy of the GNU Lesser General Public
-# License along with Hooke. If not, see
-# <http://www.gnu.org/licenses/>.
+# You should have received a copy of the GNU Lesser General Public License
+# along with Hooke. If not, see <http://www.gnu.org/licenses/>.
"""The ``convfilt`` module provides :class:`ConvFiltPlugin` and
for convolution-based filtering of :mod:`hooke.curve.Curve`\s.
from ..command import Command, Argument, Success, Failure
from ..config import Setting
-from ..experiment import VelocityClamp
-from ..plugin import Plugin, argument_to_setting
-from ..plugin.curve import CurveArgument
-from ..plugin.playlist import FilterCommand
-from ..plugin.vclamp import scale
+from ..util.fit import PoorFit
from ..util.peak import find_peaks, find_peaks_arguments, Peak, _kwargs
+from . import Plugin, argument_to_setting
+from .curve import CurveArgument
+from .playlist import FilterCommand
class ConvFiltPlugin (Plugin):
def __init__(self):
super(ConvFiltPlugin, self).__init__(name='convfilt')
self._arguments = [ # for Command initialization
- Argument('convolution', type='float', count='-1',
+ Argument('convolution', type='float', count=-1,
default=[11.0]+[-1.0]*11, help="""
Convolution vector roughly matching post-peak cantilever rebound.
This should roughly match the shape of the feature you're looking for.
('max cut', 0.2),
('min deviations', 5.0),
('min points', 1),
- ('see double', 10e-9),
+ ('see double', 10), # TODO: points vs. meters. 10e-9),
]:
argument = [a for a in self._arguments if a.name == key][0]
argument.default = value
deflection arrays.
"""
curve = params['curve']
- if curve.info['experiment'] != VelocityClamp:
- raise Failure('%s operates on VelocityClamp experiments, not %s'
- % (self.name, curve.info['experiment']))
- for col in ['surface distance (m)', 'deflection (N)']:
- if col not in curve.data[0].info['columns']:
- scale(hooke, curve)
data = None
for block in curve.data:
if block.info['name'].startswith('retract'):
params['curve'] = curve
inq = Queue()
outq = Queue()
- conv_command = [c for c in self.hooke.commands
- if c.name=='convolution peaks'][0]
+ conv_command = self.hooke.command_by_name['convolution peaks']
conv_command.run(hooke, inq, outq, **params)
peaks = outq.get()
+ if isinstance(peaks, UncaughtException) \
+ and isinstance(peaks.exception, PoorFit):
+ return False
if not (isinstance(peaks, list) and (len(peaks) == 0
or isinstance(peaks[0], Peak))):
raise Failure('Expected a list of Peaks, not %s' % peaks)