EyeLink updates

Hi Arash, Simon, & Archer,

The current MWorks nightly build contains several enhancements to the EyeLink interface that we discussed recently:

  1. EyeLink blink, saccade, and fixation states are now sent to MWorks and can be stored in variables.
  2. EyeLink-driven calibration is now supported.

I’ve attached a short example experiment that demonstrates the new features.

The blink, saccade, and fixation stuff is very simple: Just set the appropriate parameter to a variable name, and that variable will be set to true/false whenever the corresponding state is entered/exited. Now that these are available, there’s probably no reason to use MWorks’ eye monitor. In fact, there’s probably no need to monitor saccades at all (as they are mutually exclusive with fixation). However, you will still need a fixation point to know that the monkey is fixating on the correct spot.

When updating your experiments, you should replace the existing tests for fixation:

eye_on_fixation_point and (not eye_in_saccade)


eye_fixating and eye_on_fixation_point

and replace the tests for broken fixation:

not (eye_on_fixation_point or eye_in_saccade)


not (eye_blinking or (eye_fixating and eye_on_fixation_point))

The calibration support is described in the docs and demonstrated in the example experiment. In short, you have to arrange for a fixation target to be drawn on MWorks’ stimulus display when and where the tracker wants. Then, you use the new eyelink_tracker_setup action to launch the setup screen on the EyeLink host PC. At that point, your MWorks experiment is paused until you exit the setup screen. You initiate the calibration process via the EyeLink PC. The calibration results are stored on the EyeLink PC (and I believe they persist between sessions, though I’m not certain).

Note that if you’re doing EyeLink-side calibration, your MWorks experiment should use the “screen gaze” coordinates (eye_rx/eye_ry/eye_lx/eye_ly), not the pupil coordinates, which are uncalibrated.

When you get a chance, please give these new features a try, and let me know if you have any questions.


Attachment: eyelink_demo.mwel.zip (683 Bytes)

You rock Chris, thanks.

We will try and report.

Have a great weekend,

Hi Arash, Simon, & Archer,

Just wanted to check in on this. Have you had a chance to test the new EyeLink features? If so, have they resolved any of the EyeLink issues you were having (e.g. calibration difficulties)?


Hi Chris,

Thanks so much for making this for us. I had been holding off on
implementing it in my ongoing experiment because it required updating
MWorks and changing some of the code. But I recently got to a point where
it made sense to get better eye tracking so I took the plunge. First of
all, it’s awesome. It certainly has my vote for MWorks feature-of-the-year.
I do have one thing I wanted to report back to you on. After I first put it
all together, I was having problems with MWorks never allowing a trial to
get started. I figured out that this was because it was detecting lots and
lots of saccades that were noise or so small I didn’t care about. Reza, our
eye movements expert tells me that Eyelink’s internal calibration is great
but its on line saccade detection is not. So in the end, I just removed the
requirement that the monkey be fixating on a fixation point to count it as
fixated upon in the fixation-checks, and instead only require that the eye
be within the boundary. And since the calibration is so accurate (less than
1 degree diameter!) it seems good enough. That said, it might still be nice
to make fixation and saccade detection possible and tunable within MWorks,
so I will probably be putting an eye_monitor back in for saccade detection
rather than relying on Eyelink. Just thought you might like to know that in
case someone else asks. I’ll let you know if I encounter anything else
weird, but it seems to be working perfectly right now.



Hi Simon,

Thanks for testing and report back. I’m glad to hear that things are mostly working well.

Regarding saccade/fixation detection, have you tried tweaking the EyeLink’s saccadic thresholds? Section 4.3.5 of the EyeLink 1000 Plus User Manual describes three settings (saccade_velocity_threshold, saccade_acceleration_threshold, and saccade_motion_threshold) that can be changed. Maybe you can convince it to be a little more forgiving of small eye movements?

If not, you can always use MWorks’ eye monitor instead, as you noted.