-"""Defines :class:`CutPlugin` and :class:`CutCommand`.
+# Copyright (C) 2009-2010 Fabrizio Benedetti
+# Massimo Sandal <devicerandom@gmail.com>
+# 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 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/>.
+
+"""The `cut` module provides :class:`CutPlugin` and
+:class:`CutCommand`.
"""
-from ..command import Command, Argument
+from ..command import Command, Argument, Failure
from ..plugin import Plugin
class CutPlugin (Plugin):
def __init__(self):
super(CutPlugin, self).__init__(name='cut')
+ self._commands = [CutCommand(self)]
+
+
+# Define common or complicated arguments
+
+def current_curve_callback(hooke, command, argument, value):
+ playlist = hooke.playlists.current()
+ if playlist == None:
+ raise Failure('No playlists loaded')
+ curve = playlist.current()
+ if curve == None:
+ raise Failure('No curves in playlist %s' % playlist.name)
+ return curve
+
+CurveArgument = Argument(
+ name='curve', type='curve', callback=current_curve_callback,
+ help="""
+:class:`hooke.curve.Curve` to cut from. Defaults to the current curve.
+""".strip())
- def commands(self):
- return [CutCommand()]
+
+# Define commands
class CutCommand (Command):
"""Cut the selected signal between two points and write it to a file.
The data is saved in TAB-delimited ASCII text, where the first column
is "x" and the second is "y". There is no header row.
"""
- def __init__(self):
+ def __init__(self, plugin):
super(CutCommand, self).__init__(
name='cut',
arguments=[
- Argument(name='curve', type='curve', optional=False, help="""
-:class:``hooke.curve.Curve`` to cut from.
-""".strip()),
+ CurveArgument,
Argument(name='block', aliases=['set'], type='int', default=0,
help="""
Data block to save. For an approach/retract force curve, `0` selects
File name for the output data.
""".strip()),
],
- help=self.__doc__)
+ help=self.__doc__, plugin=plugin)
+
+ def _run(self, hooke, inqueue, outqueue, params):
+ if params['curve'] == None:
+ params['curve'] = hooke.playlists.current().current()
- def _run(inqueue, outqueue, params):
i_min = min([p.index for p in params['points']])
i_max = max([p.index for p in params['points']])