This page will (eventually) tell you how to set up a plugin. Right now, it contains ad-hoc comments.
 What are Plugins and when would I use them?
A plugin is a piece of code that provides generic functionality useful to a host of training protocols. Examples are:
- Graphically seeing state progression and interaction with pokes on a trial-by-trial basis (like the graph on the top-left side of this page).
- Code for saving/loading of data and settings, and associated GUI buttons
- Automating training sessions so that Solo changes parameter values based on animal performance, removing the need for manual intervention.
- Using water delivery calibration tables
 What Plugins are available?
| Plugin class|
(what you inherit from in your 'class' statement)
|What it does|| Main method|
(what you call in your protocol)
|@antibias||Uses history of hits and misses to bias the next trial towards the type of trial the animal has been getting wrong most often||AntibiasSection|
|@comments||Simple plugin that provides a figure with a textbox window to write in day-by-day comments||CommentsSection|
|@distribui||Creates GUI interface for sampling from a random distribution. A few simple distribs are covered.||DistribInterface|
|@pokesplot||trial-by-trial, graphical display of behavioral events and RTLSM states||PokesPlotSection|
|@pokesplot2||An upgrade from pokesplot||PokesPlotSection|
|@punishui||Makes a GUI to define a punishment (sounds, timeouts, etc), and provides single simple call to add necessary states to state machine definition.||PunishInterface|
|@saveload||Load/Save Settings/Data files||SavingSection|
|@sessionmodel||Automate progression through training stages, both over trials and over days||SessionDefinition|
|@sessionmodel2||Updated version of sessionmodel||SessionDefinition|
|@sidesplot||Plots side of reward for each trial and indicates hits and misses||SidesPlotSection|
|@softpokestay||GUI for a soft poke stay (keep nose in poke, but allow exits shorter than grace period); provides single simple call to add states to state machine definition||SoftPokeStayInterface|
|@soundmanager||Manages naming and uploading sounds to the SoundServer||SoundManagerSection|
|@soundtable||Specifies and generates any number of sounds in the f1-gap-f2-gap structure; displays a table that easily manages characteristics of each sound, like prior probability of presentation and correct side choice.||SoundTableSection|
|@soundui||Creates UI elements for sounds (like Volume, Balance, etc) and talks to the SoundManager plug-in||SoundInterface|
|@sqlsummary||Sends a summary of each session to an sql server for quick analysis and rig debugging||sendsummary|
|@warnDanger||Makes a GUI to define a warning sound (during which poking doesn't matter) followed by a danger sound (during which poking matters), and provides single simple call to add necessary states to state machine definition.||WarnDangerInterface|
|@water||Water valve calibrator and look-up table for dispense times||WaterValvesSection|
 How to start using a Plugin
- In the constructor of your protocol, inherit from all the plugins you want to use.
For example, if you want to use 'saveload' and 'water', you would inherit from these Plugins are part of your 'class' statement.
obj = class(obj, mfilename, saveload, water);
- Call the method of the plugin that does the work. (for example, for Plugin 'saveload', this would be 'SavingSection').
[x, y] = SavingSection(obj, 'init', x, y);