Sanjay Manohar's MATLAB Library (matlib)
=
These files are helpers for designing experiments with PsychToolbox and Eyelink, and for analysis of behavioural data. They include:
* 2dimensional data visualisation
* Basic matrix functions
* Structure operations
* Simple graphical functions
* Reaction time functions
* Eye movement analysis functions
* Sanjay's experiment framework
2dimensional data visualisation

Useful for looking at data consisting of paired measurements.
* conditionalPlot
This is designed to do a betweensubjects comparison of one variable conditioned on another  when two variables are measured per trial. For example, if you supply the RT and accuracy for each trial, it will generate a conditional accuracy plot. Can handle multiple conditions and multiple subjects.
* plotBins
This plots the mean Y value in each quantile bin of X. The error bar is the standard deviation of the Y values in each bin.
* plotBinsQuantiled
Use this to plot the quantile levels of a Y variable, when datapoints are binned according to the quantile of another X variable.
* plotBinsQuantiledGrid
Plot a mesh of quantile levels of two variables, X and Y, when both variables are binned according to quantiles. The deviation of the lines from a rectangular grid thus indicates deviations from independence.
* scatterRegress
Shortcut function that works like scatter, then also does a linear regression and plots the fit line.
* heatmap
This functions like scatter, but plots a heatmap of the density of points.
Basic matrix functions

Some of these functions really ought to be included in Matlab! My implementations are not fast, but they are terser than writing loops etc.
* nancat
This allows you to concatenate any arrays  even if they are of different sizes. The syntax is the same as the normal "cat". Any items that are smaller are padded with nans on all the relevant dimensions
* pivot
Does what a pivottable does in excel. Converts data in "long form" to an ndimensional table. The last column is treated as values, the earlier columns as categories.
* dePivot
Undoes what "pivot" did. Converts an ndimensional table into longform, with a "condition" column for each dimension of the input.
* anovanTable
Performs an Ndimensional anova, given an Ndimensional matrix. Simply supply the matrix, where there is one measurement per cell. All the other parameters are the same as for anovan  so to perform repeated measures, use "random" on one of your matrix dimensions.
* groupMeans
Group an ndimensional array according to conditions specified in a identicalsized array. The conditions are categorical, and are used to divide the data into groups. Then the mean is taken for each group, along the specified dimension.
* alignRight
Takes a matrix that has nanpadding, and "rightaligns" the values by removing trailing nans from each row. For example, if subjects (rows) have different numbers of trials (columns), you might have "nan"s in the last columns for some subjects. This function would allow you to look at the last trial, penultimate trial etc.
* nanassign
Performs assignments like MATRIX(4,:)=VECTOR, but it avoids "dimensional agreement". Like "nancat", it pads missing regions with "nan". For example, if you are creating a matrix of subject x trial, you can use this to assign data from each subject.
* removeIdenticals
Remove sequential repeated values in a vector.
* findregions
Segments a vector by giving the starts and stops of sequences of repeated values.
* matrixRowIndices
Allows you to index into a matrix, using a different column from each row. The vector of indices has the same size as the columnheight of the matrix, and each element corresponds to a row. The number indicates which column to extract.
* smoothn
Smoothing that works along one dimension of an ndim array. It is similar to using conv2 with a 1dimensional filter
* first
retrieves the first element of an array. Equivalent to X(1). Useful when chaining commands  allows you to extract the first value without storing the whole array anywhere. Was very useful before the find function allowed a count parameter.
* flat Flattens a matrix into a vector. Equivalent to X(:), but usefult when chaining commands.
* nanzscore
Zscore that leaves nan as nan, ignoring those values when calculating the mean and standard deviation. this is useful for imputation, allowing "nan" to be replaced by "0" in some cases.
* linspace
Wrapped the original "linspace" to allow vector endpoints, and thus generate linearly spaced vector outputs.
* nan2zero
Converts nans to zeros, as though you had done "X(isnan(X))=0;". This is useful for removing nans within chained functions.
* bool2nan
Converts 1s to nans, leaves 0s as 0s, as though you had done "X(X>0)=nan;". Useful for masking out unwanted values in a large matrix, e.g. RT+bool2nan(RT<0) removes negative RTs.
* inversePermutation
Works out what permutation order you need, to get from one sequence to another. For example, the inverse permutation to get [1 2 3 4 5] from [1 5 2 3 4] is [1 3 4 5 2].
Structure operations
* workspace2struct
Returns a structure containing all the variables and values from the current workspace  just as though you had performed "save;X=load".
* struct2workspace
Dumps fields from the given structure into the current workspace.
* transpIndex
Takes an array of structures, and puts the index of the structure inside onto the individual fields. In other words, it is like using catStruct to concatenate all the structures in the array, so that the fields have extra dimensions. Only works when the fields are numerical arrays.
* removeIndexFromAllFields
In a structure whose fields are all arrays of the same length, (corresponding to trials for instance,) this allows a single element (trial) to be removed from each field.
* catStruct
Allows concatenation of structures which have the same fields, by individually concatenating each of their individual fields. Only works when the fields are arrays.
* ensureStructsAssignable
This creates an altered version of a structure to try and make it assignmentcompatible with another structure  i.e. it creates fields that are missing. Both structures may need to be altered to make them compatible. This may be necessary if you want to concatenate two structures using [] or cat.
Simple graphical functions

Functions for simple data visualisation
* errorBarPlot
The commonest task is to plot the means and standard errors of a set of data. This function takes means over dimension 1, plots dimension 2 as the xaxis, and dimension 3 as different lines. It uses either "errorbar", or else the "area" parameter can draw a shaded error region.
* pairwiseComparisons
Takes a matrix of data, with subjects as rows (as for errorBarPlot), and performs pairwise comparisons across columns. A matrix is returned, or "plot_p" draws horizontal "comparison lines" and pvalues over a previously drawn plot.
* plotn
Calls plot, but accepts ndimensional arrays. Can draw extra dimensions as different line colours, linestyles, or subplots, allowing 5 dimensions to be visualised. Can propagate the submatrices to any graph function, like "surf", errorBarPlot" or "imagesc"
* correlateStructFields
Performs all pairwise correlations across fields in an structurearray
* fitSigmoid
Fast simple fit and plot a sigmoid to data of various kinds.
* histcont
Continuous histogram, like "hist". Uses slidingwindow method to show frequency in each window, and is thus equivalent to a boxsmoothed histogram. Operates on ndimensional arrays, counting along the first dimension. Can return counts and do plot.
* makeSubplotScalesEqual
Use with the usual subplot syntax, except an array in place of the plot number. It goes through each of those plots, and ensures the scales are equal.
* makeXandYscalesEqual
For the current plot, make the X and Y axes the same.
* colourMap
This generates a colour from the current gradient. If you want to have 7 colours from the spectrum, the third one is colourMap(3,7). Calling colourMap with a Nx3 matrix (or an existing colourmap) will set the current axis default colour order. Handy for colouring a sequence of lines on the same axis.
Reaction time functions

* reciprobit
Plot a reciprocal probit plot of reaction times. Under this plot, a recinormal distribution appears as a straight line. This can separate trials by condition, and can plot the probit relative to the whole dataset, or relative to the individual conditions. Returns an intercept and slope of the fit line.
* ehazard
Calculates an empirical hazard function. Works a bit like ecdf, but calculates the conditional probability of an event given it has not already happened.
* vincentisedDelta
Plots a deltaplot of vincentised data. It takes the quantiles of the two reaction time distributions, and compares the values of the corresponding quantiles. It allows comparison of the shapes of two distributions.
* generalRaceModel4
This MonteCarlo simulates an Nhorse race between ballistic processes. It is optimised for fast sampling. It allows an arbitrary logic of start/stop/control when each process terminates, and can be used to predict multiple sequential responses and errorcorrections.
* generalRaceFit2
This is a companion to generalRaceModel, and fits the a race model to a given dataset. Data is given as an RT matrix for each responsetype, over a number of trials, and the model is run multiple times to obtain likelihoods of the parameters. Supported fitting algorithms include simulated annealing and genetic algorithm (with the appropriate matlab toolboxes). Experimental feature: can also be used to fit joint distributions of RT1 and RT2 when two responses occur in the same trial.
Eye movement analysis functions

These functions are designed for use with the Eyelink 1000 and the associated API. You will need a copy of edf2asc.exe supplied with the Eyelink to use the batchconversion functions  ensure that the exe is 'on your path'  e.g. in the c:\windows\system folder.
* readEDFASC
Convert the named edf file into a matlab structure. The structure will contain eye position, saccades and fixations as parsed by the Eyelink online parser, and any events sent to the eye tracker during the experiment. It uses an intermediate ASC file, and if the ASC already exists, it does not need the edf2asc program.
* edf2ascAll
Runs the edf2asc tool on each file in a directory, creating the ASC files.
readAllEDF
Reads multiple EDF files from a single experiment, into a matlab structure. Designed for use with Sanjays experiment framework.
* snipSaccades
A multipurpose tool for epoching and analysing saccades and pupil data. Handles rotation/reflection/translation, saccaderelated snipping, eventrelated snipping, baseline correction, blink removal +/ interpolation and more.
viewSaccadeData
This browses through each trial, displaying the both a screenbased plot and a timebased plot of the eye. Trial events and trial locations can be displayed from a parameter file, e.g. directly from Sanjays experiment framework.
Sanjay's Experiment Framework

These functions should provide a robust framework for developing experiments under PsychToolbox. The library does screen creation, eyelink initialisation, error handling, and runs a sequence of trials which can be automatically generated using a factorial design, with counterbalancing over the experiment.
* RunExperiment
Actually runs the experiment.
* createTrials
Create factorial design from the trial variables and block variables.
prepareScreen
Creates the screen window, loads image resources, and loads sound resources, into the experiment array.
* LogEvent
Logs events in the experiment. Will ensure they are logged on eyelink also, if connected.
* removeNonalphanumericChars
Does what it says.
* WaitForFixation2
Using eyelink, waits for the eye to remain on fixation spot for a given amount of time.
* WaitForSaccade3
Using eyelink, waits for a saccade to be made, of a given minimum size.
Importantly, it features:
graceful error handling,
automatic backup files,
ability to recontinue interrupted experiments.