Behavioral Control in MATLAB



October, 2014
May, 2014
August, 2013
September, 2012
July, 2011
September, 2010
February, 2010
June, 2009
December, 2008
October, 2008
September, 2008
July, 2008
May, 2008
April, 2008
March, 2008
February, 2008
January, 2008


October, 2014

May, 2014


  • MonkeyLogic can now run with Java enabled. The "-nojvm" option is no longer required, and more recent (32-bit) versions of Matlab are now supported. Support for 64-bit Matlab is still pending.
  • Multiple ports can now be used for a single digital output.
  • A receptive field mapping routine is now available. Full documentation to follow (contact us for specifics in the meantime).
  • ...Bug Fixes

  • A bug causing ShowCursor to crash has been fixed.
  • Square ("sqr") objects are now played back in BehaviorSummary.
  • A small inaccuracy in setting and saving fixation targets during eye calibration has been fixed.
  • A new line is now created after the header in the generate_condition function.
  • A bug was fixed that had caused MonkeyLogic to crash if acquirefix was called with multiple targets, but the subject did not fixate on any of them.
  • The set_object_path function has been fixed such that stopping and starting a stimulus will pick-up where it left off.

  • August, 2013


    • The function eventmarker can now be called with multiple codes (the codes must be in the form of a row vector)
    • The Gen taskobject can now refer to a function that picks movie files, rather than simply generating them.
    • When using set_object_path to display moving stimulus objects, toggling that object off then back on will now cause it to re-display at its last position, rather than where it had originally started.
    • The reposition_object function can now be used to reposition stimulus objects when they are visible as well as invisible (previously had required objects to be invisible at the time of repositioning).
    • A new video test run at the beginning of each task session now measures the actual screen refresh rate (which can differ from the rate set in the menu, depending on the capabilities of the video card). This value is stored in the BHV structure as BHV.ActualVideoRefreshRate.
    • TrialRecord Structure: TrialRecord.CurrentConditionInfo and TrialRecord.CurrendConditionStimulusInfo can now be referred to simply as Info and StimulusInfo, respectively.

    ...Bug Fixes

    • Individual TTL ports can now be triggered multiple times within a single trial.
    • Fixed a bug that appended editable variables changed in one experiment to the BHV file from the previous experiment if MonkeyLogic had not been closed between these sessions.
    • Fixed a bug that prevented some BHV files from being read if the user paused the experiement to edit variables.
    • Fixed a bug that caused some images picked using the Gen function to become distorted.
    • Fixed typos and missing variable names in the generate_condition function.
    • Fixed a bug that prevented the use of SND taskobjects.
    • Fixed a bug that caused a new experiment to start and the BHV file to be over-written if the RUN button was double-clicked.
    • Fixed a bug that caused the first frame in movies to be played twice.
    • The fid parameter can now be specified after the header parameter when using generate_condition without the resulting file showing up blank.
    • Full-screen images can now be displayed without encountering any errors.

    September, 2012


    • The maximum trial length has been increased from 2^16 to 2^32 milliseconds.
    • Because of intermittent, chunked data uploads from DAQ cards, some analog data at the end of a trial (usually about 0-50 ms worth of data) might have been "clipped" in earlier versions of MonkeyLogic; this problem has been fixed by requiring trials to wait until the final data chunk has been uploaded before entering the inter-trial-interval.
    • The "Min Cycle Rate" indicator on the experimenter's control screen has been replaced by the more informative "Max Latency" indicator.
    • The "Gen" TaskObject can now return user-generated movies.
    • The generate_condition function has been re-written to use a new, clearer syntax.
    • Three additional TrialError codes have been documented.
    • The control-screen background color is now always black, for maximum contrast.
    • The photodiode now alternates between white and black, not white and the background-color, for maximum contrast. In addition, a bug which had caused the photodiode to toggle with every subject-screen joystick-cursor update, rather than with the appearance or disappearance of stimuli, has been fixed. It will still toggle with every frame of a playing movie.
    • Two additional button inputs have been added (for a total of 5).
    • Users can now employ "tic" and "toc" commands in the timing script without affecting the internal timing functions of MonkeyLogic.
    • If the file version of a BHV file being read is higher than that which your current version of monkeylogic can produce (via "bhv_write"), a warning will be generated to indicate that file may be incompatible with the current version of bhv_read.
    • The "Video Test" option in the MonkeyLogic main menu will now report the empiric refresh interval, to confirm the video hardware is capable of operating at the selected refresh rate.
    • Video support for UHDTV and 4K screen resolutions have been added.
    • MonkeyLogic will now automatically check for updates every 30 days.
    • A new section has been added to the online documentation: Understanding Video Timing.
    • A new section describing Condition- and Block-Selection functions, and Block-Change functions, has been added to the online documentation.

    ...Bug Fixes

    • The BehaviorSummary graph now appears reliably at the end of a task run.
    • Previously, calling the timing script function "showcursor" without any other visible visual stimuli (such as calling it before the first instance "toggleobject") would not produce the desired result of showing the cursor position on the subject screen; this has been fixed.
    • The TrialRecord.CurrentTrialWithinBlock has been fixed to accurately reflect the ordinal number of the current trial in the current block in certain circumstances where it had been providing a wrong value (specifically, when a "Block Change Function" had been in-use).
    • Bugs in the "Gen" TaskObject functionality have been resolved.
    • The "abort_trial" function is now documented, and has been fixed so that all active visual stimuli are turned off on the same screen refresh.
    • A bug in the goodmonkey function has been fixed so that the inter-reward interval is not reset to 40ms each time a new number of reward pulses is specified. In addition, the syntax of this function has been modified to be more consistent with other aspects of MonkeyLogic (the old syntax should still be recognized).
    • A bug in generate_condition that occasionally produced incorrect outputs for TaskObject arguments has been fixed, along with the syntactical update (Thanks to Alden Hung, NIH).
    • A bug that prevented non-pre-processed movies from running has been fixed (thanks to Alden Hung, NIH).
    • A recently-introduced bug that broke the "MonkeyLogic Latency Test" functionality has been fixed.

    July, 2011


    • Trial Order randomization now uses an updated (non-deprecated) version of the random seed generator.
    • Initio.m - At the header of initio.m, there are several presets to allow configuration of the data acquisition hardware's input ranges. As these may not reflect the ranges of the hardware you are using, we suggest that you change these values to better fit your own experimental setup.
      %for manual editing:
      configIO.AI.BufferingConfig = [16 1024]; %[1 2000];
      configIO.AI.InputRange = [-10 10];
      configIO.Reward.TriggerValue = 5; %if analog, number of volts to trigger or hold at (will be "1" if digital).
      Change buffer size: In case you want to run longer trials (with the current setup, the longest trials will last ~16 seconds), you will need to increase the BufferingConfig value. The range in the comment %[1 2000]; indicates the maximum and minimum values.
      Eyetracker voltage: The InputRange parameter defines the range of voltages that Monkeylogic expects from the eyetracker or other input devices. This can be adjusted to fit your own device's input voltages.
      Trigger value: The TriggerValue parameter determines the voltage at which the reward is dispensed. This can be adjusted to suit your reward setup.
    • Preload videos - In case you need to run a single video repeatedly over the course of an experiment, the 'Preload Videos' option ensures that the video is loaded on the first trial and the preloaded frames are retained for the duration of the experiment, ensuring that there are no delays between trials.
      To use this, set the value of the MLConfig.PreloadVideo in the experiment's configuration file to 1 and save the .mat file.
    • Registering NI DAQ - In order to set up the hardware devices for Monkeylogic, they first need to be registered in Matlab through the daqregister command. Matlab first needs to be run in Administrator mode for this to work. For NI devices, the adaptor is called 'nidaq'.
    • Size of pic taskobject in the conditions' file is in pixels - While specifying the pic taskobject in the conditions' file (filename, Xpos, Ypos, Width, Height), you have two optional resizing parameters, Width & Height that need to be specified in pixels, not in degrees of visual angle. Xpos & Ypos, however, are to be specified in degrees of visual angle.
    • ML Helper - An updated version of ML Helper is available (the program that disables keyboard and mice during the trial). New features are:
      • Ctrl + Alt + Shift + Q: This will cause mlhelper to release the keyboard and mouse and exit. This should only be used when monkeylogic crashes entirely in a way that doesn't tell mlhelper to stop running.
      • Ctrl + Alt + Shift + T: This will cause mlhelper to toggle between completely releasing the keyboard and mouse, and re-disabling whatever was disabled before the toggle was performed (by pressing the keystroke again).
    • Goodmonkey function - The goodmonkey function has been modified with additional input parameters. These additional input parameters must now be specified as parameter / value pairs. The current list of parameters is:
      a. 'num_reward' - this parameter takes in a number that specifies how many rewards are to be dispensed after successful completion of a trial.
      b. 'pause_time' - this parameter takes in an interval of time (in ms) that occurs between multiple rewards. Please specify this parameter only when specifying num_rewards > 1.
      c. 'trigger_val' - this parameter is new. It allows you to specify a variable voltage to goodmonkey to output to the reward line. The default voltage is 5V (as specified in initio.m), and this parameter can be used to change that value. This will only work if the reward is assigned to an analog output.
      goodmonkey(120, 'num_reward', 3, 'pause_time', 40, 'trigger_val', 4.5)
      The above call has goodmonkey deliver 3 user-specified rewards of duration 120 ms with a pause of 40 ms between them. It delivers a voltage of 4.5 V to the analog output line that has been assigned to the reward.
    • Default Configuration file - A default_cfg.mat has been added to the Monkeylogic package. Please ensure to copy this into your experiment directory before running Monkeylogic.

    ...Bug Fixes

    • Some earlier versions of bhv_read could not read certain BHV file versions.
      ??? Error: The input character is not valid in MATLAB statements or expressions.
      Error in ==> bhv_read at 155
      BHV.InfoByCond{i} = eval(sprintf('struct(%s)',BHV.InfoByCond{i}));

      Error in ==> behaviorsummary at 60
      bhv = bhv_read(inputfile);
      If you see the error above, this is a known bug some old (pre Monkeylogic 1.0) versions of bhv_read. Please upgrade to the latest version to fix this issue.
    • Joystick changes (trialholder.m, eyejoytrack function) - The joystick input has been fixed; in a previous version it took inputs from the eyetracker's x and y input positions.

    September, 2010

    ...New Features

    • The mouse and system keys are now disabled during task execution to prevent crashes due to loss of fullscreen window focus. (Special thanks to Chris Rishel.)
    • There is a new timing file command, "bhv_variable", that can be used to add custom variables to the behavior file. The syntax for this command is 'bhv_variable('var_name',var_value);'. The variable name should be a string of 32 letters or fewer, and the variable value should be a scalar or a vector of length 128 or less. The data type must be char or numeric, and all numeric data types will be cast to doubles. This command should be called once each trial for each new variable.
    • There is a new timing file command, "user_warning", that can be used to display a warning to the control screen. The 'user_warning' command should be called with a string and format arguments, just like fprintf. Warnings will appear in red in the upper left corner of the subject screen replica. A stack of warnings is maintained, and when the stack size is greater than one, the stack size is displayed along with the most recent warning. The user can hit the 'w' key to remove the most recent warning from the stack.
    • Skipped video frames will now be marked not only by command line output, but also by a warning, as by the 'user_warning' command, and by a code 200 eventmarker.
    • There is a new timing file command, "abort_trial". This will immediately terminate the current trial and enter the ITI. This will be marked by an error code 9. The 'abort_trial' command should be called with no arguments.
    • There is now a simulation mode than can be accessed by pressing 's' in the escape menu. This will override normal inputs to the eye position, joystick position, and buttons. The user then can then simulate eye and joystick motion and button status via the keyboard. Simulation Mode has its own documentation, which can be found here. (Special thanks to Sam Barnett.)
    • There is now an "Advanced" drop down menu in the main menu, accessible by running MonkeyLogic in Java mode (without the -nojvm option). This provides an option to turn off the mouse and system keys disabling feature. It also provides an option to preload all video data during initialization to cut down on large ITI lags in tasks that use large video files. This may cause memory errors in tasks with many large movies. Finally, there is an option to overload hardware-specific configuration settings with those in the local "default_cfg.mat" file.
    • There is now a timing file command, "set_frame_order", which can be used to rearrange the order of frames in a video task object. It should be called as "set_frame_order(task_object_number,frame_order);" The frame_order argument should be a vector of integers, greater than or equal to 1, and less than or equal to the number of frames. If the frame_order vector is not long enough to cover the entire display time, MonkeyLogic will pick up the frame order at frame k+1 where k is the length of the frame_order argument. The set_frame_order function can also be used to specify eventmarker codes to be fired in synchrony with the display of a specific movie frame. To use it this way, call "set_frame_order(...,event_frames,eventmarkers);" The event_frames and eventmarkers arguments should be vectors of equal length, so that when the frame specified by the n'th element of event_frames is displayed, an eventmarker with the code specified by the n'th element of eventmarkers will be fired.
    • The "eventmarker" timing file command can now take an optional argument to specify a target. Thus, "eventmarker(25,1);" will record an eventmarker code 25 in the behavior file but not strobe it to the digital output. Conversely, "eventmarker(25,2);" will strobe an eventmarket code 25 to the digital output, but not record it in the behavior file. (3 can be used to activate both output modes, as if no argument was used.) Default targets can be set by calling "eventmarker(target);". The "target" argument should be one of the following strings: "default", "explicit", "bhv", or "strobe". The "default" argument will cause eventmarker use both output modes, unless otherwise specified. The "explicit" argument will cause eventmarker to do nothing unless an explicit target (1 for behavior file, 2 for digital out, 3 for both) is given. The "bhv" argument will cause eventmarker to only output to the behavior file, and the "strobe" argument will cause eventmarker to only output to the digital out.

    ...Bug Fixes

    • Bug fixed so that when visual task objects are to be displayed off-screen MonkeyLogic will not crash. If off-screen position is generated by the conditions file, MonkeyLogic will exit gracefully. If it is generated by a call to reposition_object or set_object_path, MonkeyLogic will issue a warning (as with user_warning).
    • Bug fixed so that static image task objects will be always respect the size arguments optionally provided in the conditions file. (Static images are no longer preprocessed.)
    • Bug fixed so that SND task objects can now handle stereo sound files.
    • Preprocessed video files will now be broken up into chunks to avoid memory errors and segmentation faults.


    February, 2010

    ...New Features

    • The escape menu now appears when the task starts, before the first trial.
    • Three general analog inputs have been added to the Input/Output list in the main menu The data read by these lines are recorded and included in the behavior file, but have no effect on task execution.
    • In addition to the TaskObject columns, the Timing File, Block, and Info columns from the conditions file are now included in the behavior file in the fields TimingFileByCond, BlockByCond, and InfoByCond.
    • The eye-position centering hotkey, 'c', now centers the eye-position on the fixation point if there is exactly one displayed, and has no effect otherwise.
    • The set_object_path timing file command can now be used to move a fixation point and its associated fixation window to allow for smooth tracking in tasks.
    • The Esc button can now be pressed at any time (not just during the ITI) and the task will pause at the end of the current trial.
    • A working build of the SVI toolbox is now included in the Monkeylogic download.

    ...Bug Fixes

    • Bug fixed so that the Count Only Correct checkbox on the main menu will be properly saved to and loaded from the configuration file.
    • Bug fixed so that when the Count Only Correct setting and the Random w/out replacement condition selection setting are used together, blocks will successfully terminate after the specified number of correct trials.


    June, 2009

    ...New Features

    • The eye position can be adjusted during during a trial without stopping its execution by hitting the 'c' key. This will compose a translation to the eye calibration transform, moving the current eye position to the center of the screen. This translational component persists from trial to trial and to off-line eye calibration adjustment.
    • A text box has been added to the control screen which can be used to display text about the current trial using the new timing file command "user_text" which takes a single string as an argument and displays it on its own line. The string from the most recent call to user_text will be displayed at the top line of the text box, and the text scrolls down as new lines are added. Note that the control screen display is only updated during the inter-trial interval. So changes to this text box will appear when the trial is over.
    • The timing file command "set_iti" can be used to change the target length of the inter-trial interval that follows the current trial. set_iti takes a single integer argument that specifies the desired length of the ITI in milliseconds.
    • The way the conditions file is parsed has been changed so that the columns can be given in any order. The file header is now therefore required, in order to identify the columns. Valid column titles for the header are "Condition", "Frequency", "Block", "Timing File", "Info", and "TaskObject#1" through "TaskObject#9". These titles are not case sensitive. Also, the "Timing File" column is the only strictly required one. The rows are still required to be in order of condition number, so the "Condition" column is superfluous except that helps with the clarity of the file. If the "Frequency" column is absent, all conditions will be assumed to have the same relative frequency. And if the "Block" column is absent, all conditions will be placed in a single block.
    • An optional "Info" column can be added to the conditions file. This column allows you to place arbitrary information in key-value pairs that will be accessible from the timing file. For example a line from the Info column might read (including the single quotes, but not the double quotes) " 'angle',180,'dist',15 ". Then in the timing file, one could access these numbers from the structure "Info" with "Info.angle" or "Info.dist". In this condition, "Info.angle" would evaluate to 180 and "Info.dist" would evaluate to 15. This is equivalent to calling "Info = struct('angle',180,'dist',15)". If an Info column is included, then it must have an entry for every condition. Just as with the struct command, using "[]" in the Info column will create an empty Info structure for that condition.
    • A checkbox has been added to the main menu, which, if checked, will force the on-line eye-drift correction to use only the first fixation target. Otherwise, all eye-targets will be used for this adjustment.
    • For "pic" conditions, two new parameters, a width and height in pixels, can be optionally added after the position parameters. If present, these will force the image to be resized before it is displayed.

    ...Bug Fixes

    • Bug fixed so that the list of editable variables will fit correctly on the screen when the number of editable variables is large.
    • Bug fixed so the number of correct trials will be counted correctly for the purpose of changing the block when the "count only correct trials" option is enabled.
    • Bug fixed so the on-line eye-drift correction will only use fixations within the specified radius of a single fixation target.


    December, 2008

    ...New Features

    • Reward time can be adjusted by the user. In your timing file, you no longer need to include a 'reward_dur' editable variable, or a 'hotkey('r', 'goodmonkey(100);');' statement. These are automatic. Additionally, instead of calling goodmonkey with 'reward_dur' as the first parameter, use the string 'user' and the user-adjustable reward duration will be used. This reward duration is visible in the lower left of the control screen, and can be adjusted during a trial with the '-' and '=' keys on the keyboard. It starts at 120 ms, and pressing '-' will subtract 10, and pressing '=' will add 10. (The value displayed in the control screen will not be updated until a new trial starts.) You can still adjust reward_dur as if it were an editable variable by pressing 'esc' during the first 500 ms of the ITI then and pressing 'v' to edit variables.
    • The 'r' key can now be used to deliver a reward during the first 500 milliseconds of the ITI, just as it is used during the trial.
    • There is a check box in the Monkeylogic main menu, under the field where the number of trials per block is entered, that allows you to select whether you want only correct trials to count toward completing a block or whether you want all trials to count toward completing a block.
    • A performance bar has been added to the control screen representing recent performance. Absent any action, this will be the same as the overall performance. However, there is an option in the paused control screen menu (the 'r' key), that allows you to reset the this bar.
    • A row has been added to the status table in the mlwebsummary.html template file. It contains a cell for total number of correct trials and percent recent performance. Recent performance is as defined for the new performance bar in the control screen.

    ...Bug Fixes

    • Bug fixed so that the background color for the monkey's screen can be adjusted using the red, green, and blue values in the lower left of the monkeylogic main menu. Movies stimuli that are played over a non-black background will have all black pixels (pixels with rgb values of exactly [0,0,0]) replaced with the background color.
    • Bug fixed in the movie display code that prevented the second frame of all movies from being displayed. It should also be noted that the using the sequence toggleobject, eyejoytrack, toggleobject to turn on a movie stimulus, let it run for a time period specified by the maxtime parameter in eyejoytrack, and then turn it off, will display the movie for a several milliseconds longer than the time specified in the maxtime parameter.
    • Bug fixed so that using the "All" button to select all blocks in the 'blocks to run' list in the main menu will correctly update the 'first block' list.
    • Bug fixed so that Monkeylogic won't hang as the result of an ftp call failing to return. This fix requires the use of a new visual basic script (thanks to Chris Rishel).


    October, 2008

    ...New Features


    ...Bug Fixes

    • Bug fixed to properly compute pixels per degree when modifying the "diagonal size" field on the main menu (thanks to Steve McClellan).
    • Bug fixed to allow the inverted reward polarity option to take effect while calibrating eye-position.
    • Bug fixed so that single functions serving both as block-selectors and block-changers get called only once during the inter-trial-interval.
    • Bug fixed so that selecting HTML templates for web-updates works consistently.
    • Bug fixed so that changing conditions files appropriately updates the "editable" variables (thanks to Steve McClellan).


    September, 2008

    ...New Features

    • Full support for movie stimuli has been added:
      • One or more movies can be played while tracking behavior, and multiple movies can be started and stopped asynchronously using toggleobject.
      • Two new parameters have been added to toggleobject to control the playback of movies: MovieStartFrame and MovieStep.
      • Movies used in the conditions file will show up in the main menu, and the "position" slider can be used to scroll through the different frames. Pressing "test" here will play the movie forwards and backwards using currently-selected video settings, until a key is pressed.
      • Movies used in each task session will now be stored in the behavior (".bhv") file, alongside any static images (in addition, an option has been added to save only the first frame of each movie, in case those movies are very large).
      • Movies will play-back in the behaviorsummary window along with other trial events.
      • Images and movies are now handled more efficiently, so that processing large images or movies should not generally result in inadvertently-prolonged inter-trial-intervals. In addition, images and movies can now be pre-processed (by selecting the "process" option on the main menu) so that even very large movies will not delay the start of trials.
      • A section on "movie performance" with a figure depicting the temporal characteristics of behavioral tracking during movie presentation has been added to this site.
    • Support for translating visual stimuli has also been added:
      • Images and movies can be translated along any arbitrary path while tracking behavior.
      • The translation path is set with a new command: set_object_path.
      • Two new parameters have been added to toggleobject to modify translation: StartPosition and PositionStep.
    • Two timing limitations have been addressed (see the references for background information): The first-cycle behavioral tracking delay (using eyejoytrack) caused by drawing symbolic representations of visual stimuli and target rings, has been eliminated. This cycle now takes no longer than subsequent cycles that update the eye- or joystick trace (under 2 ms). In addition, the function "exit time" for toggleobject has been reduced to under 1 ms. Thanks to David Freedman and Steve McClellan for spotting the source of these delays.
    • The absolute trial time is now stored for each trial (as requested, for synchronization of fMRI-based tasks). See BHV file structure for details (BHV.AbsoluteTrialStartTime).
    • The "MonkeyLogic Latency Test" button on the main menu now launches a benchmark test to determine the latency between behavioral signal samples with and without movie presentation.
    • The subject's joystick cursor will now update every video frame; it is no longer tied to the "control-screen" update interval.
    • A new "User Plot" function (selected in the main menu) allows users to customize the graph area on the control-screen that would normally contain the reaction time histograms; it takes as input the TrialRecord structure, to access the behavioral data needed for plotting (thanks to Camillo Padoa-Schioppa).
    • Simple commands can now be sent to MonkeyLogic remotely, from the web update page.
    • Option added to manually alter the method of handling behavioral errors on-line (i.e., re-try immediately vs. re-try delayed vs. ignore). Press [esc] during ITI, then [x] as prompted.
    • The trialtime function now returns the non-rounded trial time (in milliseconds) and a second output argument, the current video frame number (relative to the beginning of the trial).
    • The toggleobject function now returns two outputs: the time (in ms) and video frame number (relative to the beginning of the trial) when the screen "flip" was called (not necessarily when it took effect).
    • A text warning will now appear if the user's desired ITI time is exceeded (e.g., due to the processing of large stimuli, or to ftp upload delays when web updates are in-use).
    • The Relative Frequency values in conditions files no longer must be integers.
    • The hotkey command now allows function keys (i.e., 'F1' through 'F12') to be specified as triggers.
    • Analog Input objects are now be automatically forced to use direct-memory-access (DMA) if available, in case they had defaulted to use interrupts. This will prevent "memory overflow" errors that might be encountered with higher transfer rates or more analog input channels if relying on interrupts.
    • The timing file can now use block-comments that span multiple lines (thanks to Steve McClellan).
    • The TrialRecord structure now includes the fields LastTrialAnalogData and LastTrialCodes:
      • LastTrialAnalogData contains the sub-fields EyeSignal and Joystick, each containing x- and y-vectors corresponding to the signals acquired on the most recent trial.
      • LastTrialCodes contains the sub-fields CodeNumbers and CodeTimes, in which the vectors corresponding to each, for the most recent trial, can be found.
    • Two references have been added to this web-site, documenting the performance and reliability of MonkeyLogic.
    • The trial exit time (see second reference publication) is now subtracted from the inter-trial-interval time to more accurately achieve the user's desired ITI.
    • A basic troubleshooting guide has been added to this web-site.

    ...Bug Fixes

    • Bug fixed that severely slowed the behavioral signal sampling frequency when button objects were in-use (thanks to David Freedman and Steve McClellan).
    • The control-screen will now preserve the correct aspect ratio when running with wide-screen monitors.
    • Bug fixed so that calling showcursor will not inadvertently cause recently extinguished stimuli to flash-on or the currently visible stimuli to flash-off.
    • Bug fixed so that the subject's joystick cursor is properly centered (thanks to Rollin Hu).
    • Bug fixed so that testing analog inputs using the I/O menu's "test" button will use the chosen analog input mode, e.g., "differential" vs. "single-ended" (thanks to Steve McClellan).
    • Bug fixed so that calibration points will appear in the correct position on wide-screen monitors.
    • Bug fixed so that the behavior graph will now accurately reflect trial errors when only small numbers of trials are available (< 50).
    • Bug fixed so that web updates will work when the monkeylogic directory and path contain spaces.
    • Bug fixed to allow stimulus images to have an x- or y-dimension of 1.
    • Bug fixed to allow timing scripts and directories to have names with more than one "dot."
    • Bug fixed so that getkeypress will now properly restore the user's selected run-time priority upon exiting.
    • Bug fixed in the example DMS task timing script.


    July, 2008

    • A dynamic HTML web page can now be created to track a subject's performance in real-time across a network.
    • Option added to manually switch blocks on-line: Press [esc] during ITI, then [b] as prompted; a selection menu listing all blocks will then appear.
    • Bug fixed to enable remote on-line behavioral updates.

    May, 2008

    • Hotkey function added to allow assignment of callback functions to key-presses during task execution.
    • A pull-down menu bar has been added to the main MonkeyLogic menu (it is visible only when running with JAVA enabled). New functions include:
      • Toggle for flipping reward output polarity (settings here will persist even when running without JAVA).
      • Remote alerts test message.
      • Access to change directory preferences.
    • Improved visual stimulus handling: the border around images is minimized and the video routines now work with newer graphics cards that have different requirements for storing data in video RAM (thanks to David Freedman).
    • Changes to editable variables are now tracked and stored in the BHV file (in the field "VariableChanges").
    • Fields can now be added to TrialRecord by the timing script, and these fields will be retrievable in other user-provided functions (e.g., block-selection functions).
    • The average behavioral tracking cycle rate for each trial is now stored in the BHV file (in the field, "CycleRate").


    April, 2008

    • Editable command added to allow modification of timing file variables on-the-fly during task execution (thanks to Tim Buschman and Valerie Yorgan).
    • Bug fixed to allow delivery of digital rewards during input calibration.
    • Bug fixed to allow eventmarker to accept and time-stamp multiple codes provided as a vector argument.
    • Timing files are now forced to be reloaded every time a task is run, obviating the need to restart MonkeyLogic each time after editing the timing script.
    • Conditions files are now reloaded automatically after editing.


    March, 2008

    • Improved recognition of [esc] key-presses to pause the task.
    • Support added for tracking one-dimensional analog and digital inputs (levers and buttons) in eyejoytrack (thanks to David Freedman).
    • Support added for bypassing conditions files and directly creating the TaskObject structures with "user-loop" functions (thanks to Camillo Padoa-Schioppa).
    • Support added for a much wider range of subject screen resolutions.
    • Added options to play-back trials at the original resolution and to create AVI movies from individual trials.


    February, 2008

    • Vertical-blank detection added to toggleobject, providing precise temporal information about stimulus onset and allowing direct eventmarker time-stamping of these events from within toggleobject.
    • Bug fixed to eliminate a memory leak in the graphics routines.
    • All video calls now act through the single function "mlvideo."


    January, 2008



    This site last updated: May, 2014
    © 2008-2014