-# Copyright (C) 2010 W. Trevor King <wking@drexel.edu>
+# Copyright (C) 2010-2012 W. Trevor King <wking@tremily.us>
#
# 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 `curve` module provides :class:`Curve` and :class:`Data` for
storing force curves.
import numpy
from .command_stack import CommandStack
-from . import experiment
class NotRecognized (ValueError):
The data-type is also YAMLable (see :mod:`hooke.util.yaml`).
>>> import yaml
- >>> print yaml.dump(d)
+ >>> s = yaml.dump(d)
+ >>> print s
!hooke.curve.DataInfo
columns: [distance (m), force (N)]
<BLANKLINE>
+ >>> z = yaml.load(s)
+ >>> z
+ Data([], shape=(0, 0), dtype=float32)
"""
def __new__(subtype, shape, dtype=numpy.float, buffer=None, offset=0,
strides=None, order=None, info=None):
would consist of the approach data and the retract data. Metadata
would be the temperature, cantilever spring constant, etc.
- Two important :attr:`info` settings are `filetype` and
- `experiment`. These are two strings that can be used by Hooke
- commands/plugins to understand what they are looking at.
-
- * :attr:`info['filetype']` should contain the name of the exact
- filetype defined by the driver (so that filetype-speciofic
- commands can know if they're dealing with the correct filetype).
- * :attr:`info['experiment']` should contain an instance of a
- :class:`hooke.experiment.Experiment` subclass to identify the
- experiment type. For example, various
- :class:`hooke.driver.Driver`\s can read in force-clamp data, but
- Hooke commands could like to know if they're looking at force
- clamp data, regardless of their origin.
+ Each :class:`Data` block in :attr:`data` must contain an
+ :attr:`info['name']` setting with a unique (for the parent
+ curve) name identifying the data block. This allows plugins
+ and commands to access individual blocks.
- Another important attribute is :attr:`command_stack`, which holds
- a :class:`~hooke.command_stack.CommandStack` listing the commands
- that have been applied to the `Curve` since loading.
+ Each curve maintiains a :class:`~hooke.command_stack.CommandStack`
+ (:attr:`command_stack`) listing the commands that have been
+ applied to the `Curve` since loading.
The data-type is pickleable, to ensure we can move it between
processes with :class:`multiprocessing.Queue`\s.
return self.__str__()
def set_path(self, path):
+ if path != None:
+ path = os.path.expanduser(path)
self.path = path
if self.name == None and path != None:
self.name = os.path.basename(path)