14. User interfaces

Most of DEMETER makes no particular assumptions about how you will be interacting with it. There is no special exception handling beyond what comes normally with perl. In the case of, for instance, failed sanity checks on a fitting model, error messages are sent to perl's normal warn and die channels on STDERR. The only sense in which there is an “application interface” is due to the fact that DEMETER uses Moose, so one interacts with DEMETER in essentially the way one would interact with a class system written in Moose. Any special functionality for a particular style of user interface is something that needs to be explicitly enabled in your DEMETER-using program.

14.1. Command line interface

DEMETER has a lot of neat features that get enabled when you explicitly set the ui attibute of the Mode object to be screen. The best way to do this is at the very beginning of your program, when you import DEMETER.

#!/usr/bin/perl
use Demeter qw(:ui=screen);

Setting the ui “pragma” in this way makes DEMETER assume at compile time that you program will be using a command line UI. Doing so at this stage will enable the full compliment of rich CLI features.

You can also switch to screen mode during the course of your program, like so:

$any_object -> mo -> ui('screen');

However, setting screen mode this way cannot enable all the features.

The features that get turned on by screen mode include:

Progress
A spinner or counter feature will be displayed during time consuming operations. The time consuming operations include fitting, deserializing a fit, running the pathfinder, and building a histogram. In screen mode, your objects will have a thingy attribute which is set to an anonymous array containing the frames of the spinner. You can change the spinner by changing that attribute. Term::Twiddle is used to make the spinner.
Colored feedack
Feedback from the executions of FEFF and IFEFFIT will be highlighted using Term::ANSIColor. This is mostly used to draw attention to warning and error messages as well as certain kinds of status messages.
Colored exception handling
Errors and problems that result in a call to warn or die will get a bit of collor coding (yellow and red text respectively. These will also return complete stack traces to help debugging efforts.
Fit interview

You have access to the fit interview, which provides a bit of keyboard driven interaction for plotting, examining parameter values, reading and log files. You can think of this as a poor man's ARTEMIS. Just do

$fit_object -> interview;

after a fit.

Pause

You have a simple way of pausing the flow of your script and displaying a prompt.

$any_object -> pause;

This will pause the flow of your program and print Hit return to continue> in underlined text. You can specify the text by doing:

$any_object -> pause("Try to jump up and down three times before the fit finishes...");

This is particularly useful when using the gnuplot plotting backend. Gnuplot's normal behavior is to close at the end of the script. Using the pause allows you time to examine a plot before ending your program.

14.2. Graphical interface

Describing GUIs is well beyond the scope of this document. DEMETER can be used with just about any interface toolkit. GUIs for ARTEMIS, ATOMS, and HEPHAESTUS using wxWindows come with the DEMETER package and there is substantial functionality for Wx that has been baked into those parts of DEMETER. But there is nothing that explicitly ties anything described in this document to Wx.

14.3. Web interface

Todo

Expose some fraction (possibly all...) of DEMETER via XML-RPC.

14.4. Plotting backends

  • pgplot
  • gnuplot
  • singlefile, not really a display backend, more of an export tool for using some other program to make beautiful, publication-quality plots



DEMETER is copyright © 2009-2016 Bruce Ravel – This document is copyright © 2016 Bruce Ravel

This document is licensed under The Creative Commons Attribution-ShareAlike License.

If DEMETER and this document are useful to you, please consider supporting The Creative Commons.