Question about how calibrator works

Hi Chris,

Since our last batch of MWorks questions we’ve been moving along pretty smoothly with training and calibrating our monkeys. As we’ve gotten more experience with the setup, a somewhat subtle issue (I hesitate to call it a bug) has cropped up. The problem we are having is that we are unable to get the fixation window tighter than 3-4 degrees.

We converted the calibration to run (nearly) perpetually per your instructions you sent to Yvonne a few weeks ago. One possibility I think could be causing this is if each cycle of its run averages into a ever-tightening calibration. Does it do this or does it start with the previous run and make a new one each time?

Another idea is that this is caused by some combination of the angle of the screen and camera and monkey that the solver can’t solve. When the monkey misses, the calibration is usually off only in one or two of the points on the screen. Are there any angles or distances in particular to watch out for that could be difficult for the solver?

Anyways, I think if I understood how the calibrator worked it would go a long way towards helping troubleshoot it. And of course I’d be grateful for any other thoughts on this issue.

Thanks,

Simon

Hi Simon,

One possibility I think could be causing this is if each cycle of its run averages into a ever-tightening calibration. Does it do this or does it start with the previous run and make a new one each time?

The calibrator will keep all acquired samples (and use them to compute new calibrations) until you invoke the clear_calibration action. The continuous calibration protocol I described to Yvonne clears the calibration only once, at the beginning of the protocol. If you want to discard old samples after every iteration, you need to add a clear_calibration at the beginning or end of calibration_list (i.e. outside of its outermost range replicator):

list calibration_list (selection = random_without_replacement) {
    clear_calibration (eye_calibrator)
    range_replicator (
        variable = cal_fix_pos_x
        from = -15
        to = 15
        step = 15
    ) {
        range_replicator (
            variable = cal_fix_pos_y
...

Are there any angles or distances in particular to watch out for that could be difficult for the solver?

If the monkey is too close to the display, then MWork’s conversion between pixels and visual angle becomes invalid. See this comment for details.

You’re using an EyeLink eye tracker, correct? Other folks have had trouble using MWorks’ eye calibrator with EyeLink trackers connected via Ethernet, including Arash while he was here in the Dicarlo Lab. In that case, I think the issue was resolved by switching from an EyeLink II to an EyeLink 1000, which unfortunately means we never actually figured out what the problem was. Maybe Arash can recall more details?

Chris

Thanks Chris, I’ll put that in and try it out next week. Arash recalls that
you guys once had a calibration script that averaged three coordinates for
each point before sending to the calibrator’s solver. If we want to try
that, how would you recommend going about implementing it?

Simon

Hi Simon,

Arash recalls that you guys once had a calibration script that averaged three coordinates for each point before sending to the calibrator’s solver. If we want to try that, how would you recommend going about implementing it?

The calibration protocol I gave to Yvonne already averages over its inputs, by using begin_calibration_average and end_calibration_average_and_take_sample. The number of samples in each average is determined by the fixation duration required for the calibration to succeed (cal_timer in my protocol).

Is there some other averaging technique that Arash is remembering?

Chris