Perturbations

The segmented trajectory of any target participating in a Maestro trial may be modulated by a perturbation waveform. These trajectory perturbations are defined not in the trial object itself, but as distinct objects stored under the Perturbations branch of the experiment document's object tree. Four classes of perturbations are currently supported

Observe that all perturbations are unit-amplitude (or, in the case of gaussian noise, unit standard deviation). Users can scale any perturbation used in a trial by setting the Gain attribute in that trial's perturbations table.

As with the other object types in a Maestro document, perturbation objects are created, removed, and renamed via operations on the document object tree. To view the definition of any perturbation waveform, double-click on its label in the object tree to load it into the Perturbations Editor, which is the last tab pane in the tabbed window on the right side of the frame window's client area. Unlike Maestro's other object editors, the Perturbations Editor displays the definitions of all perturbations in a single table that fills the editor panel. Each row displays a different perturbation object. When you double-click on the name of any perturbation in the object tree, this editor is brought to the front of the tabbed window, and the table row displaying the selected perturbation is highlighted. The first three columns in the grid display the name of the perturbation, its type, and its duration in milliseconds. The remaining columns in the grid display additional parameters that are unique to each type. To see the identity of the parameter displayed in any of these remaining columns, simply right-click on the cell. The parameter name briefly appears in a tooltip immediately above the cell.


If you've read the description of some of the other grid controls found on Maestro's user interface, then you probably know how to edit the parameters displayed in this grid. To change the perturbation type, simply right-click on the cell. You can also double-click the cell to invoke a combo box, but since there are only three types to choose from, the right-click is faster. All other parameters in the grid are numeric values, either integral or floating-point. To edit these, double-click on the cell and enter the new value in the in-place edit control that appears on top of the cell. Maestro will automatically correct any invalid entries.

Random number generators for the noise perturbations

The pseudo-random number generator for the uniform noise perturbation was adapted from the "ran1" algorithm presented in Numerical Recipes in C (Press, WH; et al. "Numerical recipes in C: the art of scientific computing". New York: Cambridge University Press, Copyright 1988-1992; p 282). The algorithm uses a 32-entry table to shuffle the output of a "Minimal Standard" linear congruential generator, of the form On+1 = (A·On) % M (with A and M carefully chosen). The 32-bit integers output by the algorithm fall in the range [1..M-1]; dividing by M gives a double-valued output in (0..1).

Similarly, the pseudo-random number generator for the gaussian noise perturbation is based on the "gasdev" algorithm described on p.289 of Numerical Recipes in C. This algorithm uses the polar form of the Box-Muller transformation to transform a sequence of uniform deviates (generated by the "ran1" algorithm) into a sequence of Gaussian deviates.

It is important to note that, for reproducibility, each noise perturbation has its own "private" random number generator!

In accordance with the publisher's licensing policy for Numerical Recipes in C, these algorithms are not distributable in source code form without obtaining a suitable license. If you wish to reproduce number sequences produced by these algorithms, you can consult the text. That should not be necessary, however, since the Matlab MEX function that reads in Maestro data files -- readcxdata() -- takes into account the effects of all supported perturbations when calculating the expected trajectories of trial targets (but only for data files generated by version 1.3.2 or later).