From Bcontrol

Click here for some simple example code using the @water plugin.

From the Matlab help file, "help @water/WaterValvesSection"

% [x, y] = WaterValvesSection(obj, action, x, y)
% This plugin uses the water calibration table (constructed using
% @WaterCalibrationTable) to automatically translate from a desired water
% delivery amount into a time for which the water valve should be left
% open.
% GUI DISPLAY: Puts up two numerical editable fields, Left microliters and
% Right microliters, where the user can insert the desired dispense amount.
% To the right of these will be two display fields showing the
% corresponding times for which the valves should be left open. A title
% will be above all these GUI fields. If the GUIs for the desired amounts
% are edited by a user, (or changed by loading Solo settings), the dispense
% times will be automatically recalculated.
% Note that @WaterCalibrationTable figures out dispense times for amounts
% that are within 15% of the calibrated data points that it has; and that
% calibrations have finite lifetimes. If asking for a value that is beyond
% the known range of the calibration table, or the calibration table is out
% of date, a warning window will go up, dispense times will acquire a red
% background, and dispense times will go to a default value of 0.01 (i.e.,
% essentially nothing.) If your dispense times have a red background, that
% means "recalibrate your table before using them" !!
% -----------------------
% obj      Default object argument.
% action   One of:
%   'init' x y 
%            Initializes the plugin and sets up the GUI for it. Requires
%            two extra arguments, which will be the (x, y) coords, in
%            pixels, of the lower left hand corner of where this plugin's
%            GUI elements will start to be displayed in the current figure.
%            Returns [x, y], the position of the top left hand corner of
%            the plugin's GUI elements after they have been added to the
%            current figure.
%       Optional Params:
%       'streak_gui' 0 
%            If 'streak_gui' is passed and set to 1 during init, then two
%            parameters are made visible that involve gemoetrically
%            increasing rewards for consecutive correct answers, ie.
%            'streaks': Streak_base and Streak_max.  See 'get_water_times'
%            for further details.
%            e.g. [x,y]=WaterValvesSection(obj,'init',x,y,'streak_gui',1);
%   'set_water_amounts'  l_uL r_uL
%            Requires two extra arguments; sets the GUI parameter for left
%            volume to the first of these, l_uL, and sets the GUI
%            parameter for right volume to the second, r_uL; then
%            recalculates the appropriate water dispense times. This action
%            is provided here to allow a command-line way of changing the
%            GUIs for left and right volume; the user can also change them
%            by hand, directly in the GUI.
%   'get_water_times'  [streak_length=0]
%            Returns two values, LeftTime, and RightTime, which are the
%            water valve opening times that were calculated to correspond
%            to the GUI dispense amounts. Example call:
%              WaterValvesSection(obj,'get_water_times', 3);
%        Optional Params:
%            If an extra argument is passed in, this argument will be taken
%            to represent the "streak_length", i.e., the number of
%            immediately previous consecutive correct responses by the
%            subject. For example, if the previous four trials were miss,
%            correct, correct, correct, the streak would be three and you
%            could make the call as in:
%               WaterValvesSection(obj,'get_water_times', 3);
%            If this param is passed in, the returned Water time values are
%            augmented by the formula:
%               water_time*Streak_base^min(streak_length,Streak_max);
%            Generally you want Streak_base > 1, so that there is more
%            water for longer streaks.
%   'calculate'
%            Force a recalculation of water dispanse times. This call
%            should normally never be needed by the user, since both
%            command line and GUI modes of changing desired dispense times
%            automaticaly force the recalculation.
%   'reinit' Delete all of this section's GUIs and data, and reinit, at the
%            same position on the same figure as the original section GUI
%            was placed.