From: W. Trevor King Date: Sun, 15 Aug 2010 14:41:18 +0000 (-0400) Subject: Added test/tutorial.py. Works until you get to note_filter_playlist X-Git-Url: http://git.tremily.us/?p=hooke.git;a=commitdiff_plain;h=9f4b5f7dc5f5dd55d69d0cc98cfc38708e09a246 Added test/tutorial.py. Works until you get to note_filter_playlist --- diff --git a/doc/tutorial.txt b/doc/tutorial.txt index b3cfa65..714c597 100644 --- a/doc/tutorial.txt +++ b/doc/tutorial.txt @@ -223,11 +223,10 @@ to :file:`hooke.log`. Usually curves you annotated are useful later. You can create a playlist for only annotated curves with - hooke> note_filter_playlist --name c:\curves\nice.hkp + hooke> note_filter_playlist --output_playlist nice_list -will create sub-playlist :file:`c:\curves\nice.hkp`. Make sure that -the target directory (here :file:`c:\curves\`) already exists before -doing that. +will create sub-playlist `nice_list`. Remember to save the new list +if you like it. If you change your mind about a note, you can remove it by setting a blank note string with ``set_note ''``. @@ -239,9 +238,13 @@ You can export Hooke curves as images and as text columns. To export as images or text, use the ``export_block`` command. Supported formats are PNG (Portable Network Graphic, raster) and EPS (Encapsulated Postscript, vector). The export format is determined by -the filename extension, so ``export_block foo.png``, ``export_block -foo.eps``, and ``export_block foo.txt`` will save PNG, EPS, and -TAB-delimited text files respectively. +the filename extension, so ``export_block --output foo.png``, +``export_block --output foo.eps``, and ``export_block --output +foo.txt`` will save PNG, EPS, and TAB-delimited text files +respectively. + +.. todo:: Currently no PNG or EPS output, use the GUI and the plot + panel's toolbar for non-text exports. .. todo:: Multiple cycles in exported data? Solution: blank lines for "breaks", add option to extract specific sections using Python's @@ -269,6 +272,8 @@ you click a point, a blue dot should appear. When you click the second point, the distances will appear in the output panel. If you want to know the coordinates of a single point, left click on it. +.. todo:: Add description of ``delta``'s command line interface. + Hooke automatically adjusts the position of the clicked point to the nearest point in the graph, so you will be always measuring distances and forces between points in the graph. @@ -276,6 +281,8 @@ and forces between points in the graph. Worm like chain and freely jointed chain fitting ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.. todo:: Update WLC fitting tutorial section. + You can measure by hand the parameters relative to a force peak using a worm-like chain fitting with the ``fit`` command. The command by default automatically finds the contact point, asks for two points @@ -290,6 +297,7 @@ line for details. Multiple curve fitting and measuring ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.. todo:: Update multiple curve fitting tutorial section. You can cycle through all your current playlist obtaining WLC fit, FJC fit, rupture force and slope (loading rate) information from each @@ -302,6 +310,8 @@ current curve before fitting all the files in your playlist, use Fast curve reviewing and saving ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.. todo:: Update curve review tutorial section. + When automatic routines are not good enough to filter your data, use ``review`` command to cycle through your playlist presenting ten curves in the same graph. You can then enter the numbers of the @@ -314,5 +324,6 @@ Configuring Hooke You can set environment variables to influence the behaviour of Hooke. The command to use is ``set_config``. Use ``get_config`` to read a particular option and ``print_config`` to display the entire -configuration file. Any changes to the configuration will be saved -when you exit Hooke, see :doc:`config` for details. +configuration file. To save changes, either run ``save_config`` or +start Hooke with the ``--save-config`` option. See :doc:`config` for +details. diff --git a/test/tutorial.py b/test/tutorial.py new file mode 100644 index 0000000..58d2b10 --- /dev/null +++ b/test/tutorial.py @@ -0,0 +1,262 @@ +# Copyright (C) 2010 W. Trevor King +# +# 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 +# . + +""" +Test the commands listed in :file:`doc/tutorial.txt`. + +>>> import os +>>> import os.path +>>> from hooke.hooke import Hooke, HookeRunner +>>> h = Hooke() +>>> r = HookeRunner() + +*Help* + +>>> h = r.run_lines(h, ['help']) # doctest: +ELLIPSIS + +Documented commands (type help ): +======================================== +... +>>> h = r.run_lines(h, ['help load_playlist']) +Command: load_playlist + +Arguments: + +help BOOL (bool) Print a help message. +output_playlist STRING (string) Name of the new playlist (defaults to + an auto-generated name). +input FILE (file) File name for the input playlist. +drivers DRIVER (driver) Drivers for loading curves. + +Load a playlist. + +---- +Usage: load_playlist [options] input + +*Creating a playlist* + +>>> h = r.run_lines(h, ['cd --path .']) +Success + +>>> h = r.run_lines(h, ['pwd']) # doctest: +ELLIPSIS +/.../hooke +Success + +>>> h = r.run_lines(h, ['ls']) # doctest: +ELLIPSIS +REPORT_UDIFF +.hg +... +AUTHORS +... +README +... +hooke +... +Success + +>>> h = r.run_lines(h, ['new_playlist --output_playlist mylist']) +Success + +>>> h = r.run_lines(h, ['jump_to_playlist -- -1']) +Success + +>>> h = r.run_lines(h, ['get_playlist']) + +Success + +>>> h = r.run_lines(h, ['glob_curves_to_playlist test/data/vclamp_picoforce/*'] +... ) # doctest: +ELLIPSIS + + + + +... + +Success + +>>> playlist_already_exists = os.path.exists('mylist.hkp') +>>> playlist_already_exists +False +>>> h = r.run_lines(h, ['save_playlist --output mylist']) +Success + +>>> os.path.isfile('mylist.hkp') +True +>>> h = r.run_lines(h, ['load_playlist --output_playlist other_list mylist']) + +Success + +>>> if playlist_already_exists == False: +... os.remove('mylist.hkp') + +*Navigating the playlist* + +>>> h = r.run_lines(h, ['get_curve']) + +Success + +>>> h = r.run_lines(h, ['next_curve']) +Success + +>>> h = r.run_lines(h, ['get_curve']) + +Success + +>>> h = r.run_lines(h, ['previous_curve']) +Success + +>>> h = r.run_lines(h, ['get_curve']) + +Success + +>>> h = r.run_lines(h, ['curve_index']) +0 +Success + +>>> h = r.run_lines(h, ['previous_curve']) +Success + +>>> h = r.run_lines(h, ['get_curve']) + +Success + +>>> h = r.run_lines(h, ['curve_index']) +101 +Success + +>>> h = r.run_lines(h, ['next_curve']) +Success + +>>> h = r.run_lines(h, ['get_curve']) + +Success + +>>> h = r.run_lines(h, ['curve_index']) +0 +Success + +>>> h = r.run_lines(h, ['jump_to_curve 14']) +Success + +>>> h = r.run_lines(h, ['get_curve']) + +Success + +>>> h = r.run_lines(h, ['curve_index']) +14 +Success + + +>>> h = r.run_lines(h, ['get_playlist']) + +Success + +>>> h = r.run_lines(h, ['next_playlist']) +Success + +>>> h = r.run_lines(h, ['get_playlist']) + +Success + +>>> h = r.run_lines(h, ['previous_playlist']) +Success + +>>> h = r.run_lines(h, ['get_playlist']) + +Success + +>>> h = r.run_lines(h, ['playlist_index']) +0 +Success + +>>> h = r.run_lines(h, ['previous_playlist']) +Success + +>>> h = r.run_lines(h, ['get_playlist']) + +Success + +>>> h = r.run_lines(h, ['playlist_index']) +1 +Success + +>>> h = r.run_lines(h, ['next_playlist']) +Success + +>>> h = r.run_lines(h, ['get_playlist']) + +Success + +>>> h = r.run_lines(h, ['playlist_index']) +0 +Success + +>>> h = r.run_lines(h, ['jump_to_playlist 1']) +Success + +>>> h = r.run_lines(h, ['get_playlist']) + +Success + +>>> h = r.run_lines(h, ['playlist_index']) +1 +Success + + +*Taking notes* + +>>> h = r.run_lines(h, ['''set_note "Hi there.\\nI'm a note"''']) +Success + +>>> h = r.run_lines(h, ['note_filter_playlist --output_playlist filtered']) +>>> h = r.run_lines(h, ['get_playlist']) +>>> h = r.run_lines(h, ['jump_to_playlist -- -1']) +>>> h = r.run_lines(h, ['get_playlist']) +>>> h = r.run_lines(h, ['get_curve']) +>>> h = r.run_lines(h, ['curve_index']) +>>> h = r.run_lines(h, ['jump_to_curve -- -1']) +>>> h = r.run_lines(h, ['get_curve']) +>>> h = r.run_lines(h, ['curve_index']) +>>> h = r.run_lines(h, ['get_note']) +>>> h = r.run_lines(h, ['set_note ""']) +>>> h = r.run_lines(h, ['get_note']) + +*Exporting curves* + +>>> os.path.exists('mycurve.dat') +>>> h = r.run_lines(h, ['export_bock --output mycurve.dat']) +>>> os.path.isfile('mycurve.dat') + +*Measuring distances and forces* + +>>> h = r.run_lines(h, ['delta 300 500']) + +*Worm like chain and freely jointed chain fitting* + +*Multiple curve fitting and measuring* + +*Fast curve reviewing and saving* + +*Configuring Hooke* + +>>> h = r.run_lines(h, ['set_config conditions temperature 300.0']) +>>> h = r.run_lines(h, ['get_config conditions temperature']) +>>> h = r.run_lines(h, ['set_config conditions temperature 295.3']) +>>> h = r.run_lines(h, ['get_config conditions temperature']) +>>> h = r.run_lines(h, ['print_config']) +>>> h = r.run_lines(h, ['save_config']) +"""