MATLAB implementation of Watson's Quest+
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
questplus Initialize fields to be used by qpUpdate to empty matrix. Aug 2, 2018



mQUESTPlus is a MATLAB implementation of Watson's QUEST+.

The method and Mathematica code are described in the paper: Watson, A. B. (2017). "QUEST+: A general multidimensional Bayesian adaptive psychometric method". Journal of Vision, 17(3):10, 1-27.

This implementation follows quite closely the division into separate functions described in the paper and illustrated in the Mathematica notebook. The place to start is probably the demonstration/test progams in the demos directory. These reprise a number of figures in the Watson paper as well as calculations illustrated by the Mathematica notebook that accompanies the paper.

One nice thing done in the Mathematica implementation that is not done here (sorry, life is short) is a set of plotting routines. Adding these would be a nice enhancement.

The demo program qpQuestPlusPaperSimpleExampleDemos uses high-level function qpRun to reprise a number of figures in the QUEST+ paper. This would be a good thing to try just to make sure your installation is working properly and to convince yourself that this implementation reproduces basic properties of QUEST+.

The demo program qpQuestPlusCoreFunctionDemo is a good place to look if you want to see how QUEST+'s core functions (qpParams, qpInitialize, qpQuery, qpUpdate, qpFit) might be used in a custom psychophysical experimental program, if you did not want to simply let qpRun orchestrate things for you. This demo is very short and will give a sense of how simple it is to use QUEST+. More lines of code are devoted to printing output and plotting than to the actual interface with QUEST+.

The paper describes two high level functions to access the core routines, QuestPlus and QpRun. The latter provides an illustration of how to customize the use of the core routines. Here there is no qpQuestPlus function, just a qpRun. The qpRun function, however, behaves the way the qpQuestPlus function would, so it serves both purposes. Use of the qpRun function is illustrated in demos qpQuestPlusPaperSimpleExamplesDemo, qpQuestPlusCSFDemo, and qpQuestPlusCircularCatDemo.

Use "help mQUESTPlus" at the Matlab prompt to access the contents of the package, and then from you can click through to the routines in each subdirectory.

Similarly, "doc mQUESTPlus" at the Matlab prompt will bring up the Matlab documentation viewer and then you can click within that to explore the toolbox.

For each individual function, using "help qpRoutineName" or "doc qpRoutineName" will provide usage for that routine.

Note that the current implementation only allows specification of a uniform prior over the gridded parameters, and the current qpFit only provides a maximum likelihood fit. Extending to a user specified prior would not be difficult. See issue #2.


This implementation depends on the following Matlab toolboxes: optimization -- used for fmincon numerical optimization routine in qpFit. stats -- used for computing things related to probability distributions. The dependence on the stats toolbox could probably be worked around fairly easily.


If you use our ToolboxToolbox (highly recommended,, simply type "tbUse('mQUESTPlus')" at the Matlab prompt to obtain mQUESTPlus and put it onto your Matlab path.

Alternately, you can obtain mQUESTPlus from, either by cloning the repository or by downloading and unpacking a zip file. Then add it to your Matlab path.

Known issues and bugs

See issues section of this ( gitHub site for a list known issues, limitations and possible future enhancements. Please post an issue if you encounter a bug or wish to make a suggestion. We are happy to review and incorporate improvements and enhancements, either via gitHub pull requests or if you just let us know via the issues or email (


mQUESTPlus is released under the MIT open source license.

If you make use of the software in support of a publication, please cite it (in addition to the Watson paper) as: Brainard, D. H. (2017) "mQUESTPlus: A Matlab implementation of QUEST+",


This implementation is due to David Brainard, (c) 2017 David Brainard.

Sources include the paper above and the Mathematica notebook provided as supplemental material for the paper (an updated version of which was provided to me by Watson).

There is separate earlier Matlab implementation of QUEST+ written by P. R. Jones ( from Joshua Solomon's laboratory ( The Jones implementation is organized differently from this one. Studying it was useful, however, for thinking about ways to translate Mathematica data structures into Matlab. The one place where there was fairly direct carryover in data structure format is noted specifically by a comment in the code.

Denis Pelli provided useful feedback on the implementation and documentation.

mQUESTPlus includes allcomb.m by Jos van der Geest, obtained from Matlab Central, along with its license.

mQUESTPlus includes von_mises_cdf by Geoffrey Hill, MATLAB translation by John Burkardt. This is released under the the GNU LGPL license, according to its header comments.