Adaptive Tracking Task

Technical Manual

Script Author: Katja Borchert, Ph.D. (katjab@millisecond.com), Millisecond

Created: January 05, 2025

Last Modified: January 17, 2025 by K. Borchert (katjab@millisecond.com), Millisecond

Script Copyright © Millisecond Software, LLC

Background

This script implements Millisecond's version of an Adaptive Tracking Task originally proposed by Borland & Nicholson (1984) to measure visuomotor coordination and vigilance.

In contrast to the Inquisit Pursuit Rotor Task, in which the speed of the circle is predictable in its speed and movement pattern, the direction of the moving circle in the Adaptive Tracking Task is unpredictable and its speed is continuously updated based on a participant's performance.

The default settings of the Inquisit Adaptive Tracking are set for running the task on an ipad sized touchscreen. If a touchscreen is detected, the mouse cursor is turned off and participants need to engage with the task using fingers/stylus pens as the tracking device. On non-touchscreens, the mouse cursor is turned on and participants need to engage with the task using the computer mouse to track the circle.

References

Borland, R. G., Nicholson, A. N. Visual motor co-ordination and dynamic visual acuity. Br J Clin Pharmacol. 18, Suppl 1. 69S-72S (1984).

Foulkes, A. J. M., & Miall, R. C. (2000). Adaptation to visual feedback delays in a human manual tracking task. Experimental Brain Research, 131(1), 101–110. https://doi.org/10.1007/s002219900286

WALES, R., & BLAKE, R. R. (1970). Rule for Obtaining 75% Threshold with the Staircase Method. Journal of the Optical Society of America (1930), 60(2), 284. https://doi.org/10.1364/JOSA.60.0284_1

Duration

5 minutes

Description

Participants are asked to track an unpredictable, moving yellow circle on the screen with their finger or stylus (or mouse cursor on non-touchscreens) for 4 minutes. The speed of the yellow circle is continuously updated based on a participant's ability to keep their finger/stylus on the yellow circle.

Procedure

(1) Screen Size Check: the script checks that the current screen is large enough for the default settings of the
script (here: 19.2cmx14.4cm)

(2) Practice: default for 30seconds
Runs the tracking test for 30seconds (see section Editable Parameters for timing)

(3) Adaptive Testing Block: default for 4 minutes (see section Editable Parameters for timing)

Each tracking block runs several trial elements (trial.tracking):
- each trial.tracking runs an animated stimulus that travels from one (inflection) point (P1) to the next (P2), at a
a pre-determined speed. The duration of each trial.tracking depends on the pixel distance that the dot needs to
travel and the current speed
=> The more pixels need to be traveled, the longer the trial (so the animation speed appears consistent).


Pseudo-Random Movement Coordinates
The calculation of the pseudo-random movement coordinates is based on the procedure described
by Foulkes & Miall (2000); with some modifications.

The end inflection point P2's coordinates are calculated at the beginning of each trial anew
via 5 sinusoidal, nonharmonious functions (separate ones for each axis) with:
- a fixed amplitude (that is randomly adjusted up or down by 10% for each function), see parameters.amplitude
- that differ in their frequencies (non-harmonious, stay fixed throughout) and
- their phases (phases are sampled at random for each function any time the wave functions are generated).

=> The script selects the y-coordinates of each function at timepoint t (script.elapsedTime), converts them
into a pixel value for the current screen, and then takes the average value for the new position coordinate.


Speed Adjustments: "One Up; 2 Down" Staircase
trial.tracking records the pixel difference btw. the mouse (finger) coordinates and the center of the
target every ~16ms (depends on refreshRateInterval of current device; 16.67ms is the refreshRateInterval of a 60Hz device)
- pixel distancePX (Euklidean distance)
- error pixels (any pixel difference in excess of the target radius:
errorPX = distancePX-targetRadiusPX IF distancePX > targetRadiusPX)
- boolean ON/OFF (OFF = error pixels are positive; ON = no error pixels);

At the end of each trial.tracking, the script checks the proportion of times participants was OFF the target
and scores accuracy as follows:
=> 85%+ correct responses is scored as "CORRECT"
=> less than that is scored as "INCORRECT"

The script uses a "one-up, two-down" staircase procedure to get to a ~70%* threshold
(~70% of the time participant gets a correct evaluation)
This means the stimulus intensity is increased by one step after a single incorrect response
(= make it easier),
and decreased after two consecutive correct responses (make it harder).
=> after 1 incorrect response:
increasing stimulus intensity => make it easier => reduce speed by stepsize
=> after 2 consecutive correct responses:
decreasing stimulus intensity => make it harder => increase speed by stepsize

•Wales&Blake (1970) estimate that the "one-up, two-down" staircase procedure converges
closer to 65% threshold

Stimuli

provided by Millisecond

Instructions

provided by Millisecond - can be edited in script adaptivetrackingtask_instructions_inc.iqjs

Summary Data

File Name: adaptivetrackingtask_summary*.iqdat

Data Fields

NameDescription
inquisit.version Inquisit version number
computer.platform Device platform: win | mac |ios | android
computer.platform Device platform: win | mac |ios | android
computer.touch 0 = device has no touchscreen capabilities; 1 = device has touchscreen capabilities
computer.hasKeyboard 0 = no external keyboard detected; 1 = external keyboard detected
startdate Date script was run
starttime Time script was started
subjectid Assigned subject id number
groupid Assigned group id number
sessionid Assigned session id number
elapsedtime Time it took to run script (in ms); measured from onset to offset of script
completed 0 = Test was not completed
1 = Test was completed
display.height The height of the current screen in pixels
display.canvasHeight The height of the current active canvas in pixels (active canvas = part of the screen used to run the script)
display.refreshInterval The refreshinterval (in ms) of the current display
expressions.pxPerMM Px/mm conversion number for the current display
targetRadiusPX Radius of target circle in pixels
propCorrect Proportion of test trials that were considered 'correct' (finger/mouse was ON target 85% or above)
given that this task is adaptive, the propCorrect should be relatively similar across participants
and converge somewhere around 65%-70%
meanSpeedPXPerMS The mean speed in px/ms
meanSpeedMMPerMS The mean speed in mm/ms
meanSpeedPctPerMS The mean speed in pct/ms
meanTargetDistancePX The mean target distance btw. participant's coordinates and circle center (calculated as Euklidean distances) in pixels
meanTargetDistanceMM The mean target distance btw. participant's coordinates and circle center (calculated as Euklidean distances) in mm
meanTargetDistancePct The current mean target distance btw. participant's coordinates and circle center (calculated as Euklidean distances) in percentages (screen height percentages)
countLiftOffs Only relevant for touchscreens: counts the number of times participants lifted finger/stylus from the screen
(mouse cursor will stay on the screen even if participants lifts finger from mouse button)

Raw Data

File Name: adaptivetrackingtask_raw*.iqdat

Data Fields

NameDescription
build Inquisit version number
computer.platform Device platform: win | mac |ios | android
computer.touch 0 = device has no touchscreen capabilities; 1 = device has touchscreen capabilities
computer.hasKeyboard 0 = no external keyboard detected; 1 = external keyboard detected
date Date the session was run
time Time the session was run
subject Participant ID
group Group number
session Session number
display.height The height of the current screen in pixels
display.canvasHeight The height of the current active canvas in pixels (active canvas = part of the screen used to run the script)
display.refreshInterval The refreshinterval (in ms) of the current display
expressions.pxPerMM Px/mm conversion number for the current display
targetRadiusPX Radius of target circle in pixels
blockcode The name the current block (built-in Inquisit variable)
blocknum The number of the current block (built-in Inquisit variable)
trialcode The name of the currently recorded trial (built-in Inquisit variable)
trialnum The number of the currently recorded trial (built-in Inquisit variable)
trialnum is a built-in Inquisit variable; it counts all trials run
even those that do not store data to the data file.
startSpeedPctPerMS The starting speed in pct/ms (PARAMETER)
startSpeedPXPerMS The starting speed in px/ms
startSpeedMMPerMS The starting speed in mm/ms
stepsizePX The stepsize in px/ms
stepsizeMM The stepsize in mm/ms
response The response of participant
during tracking, only response 'liftOff' will be noted in the data file.
correct Correctness of response
trial.tracking: at the end of trial.tracking, the proportion of recorded OFF-target responses is categorized in two binary categories
error (0): more than 75% of recorded responses were OFF target
correct (1): 25% or fewer recorded responses were OFF target
latency Response latency (in ms); does not apply to trial.tracking by design; latency is always as long as values.trialDuration
and is independent of participants' responses
timeStampTrackingStart Rough timestamp of the start of the tracking procedure
trialCounter Tracks the number of trials (trials = movement from one inflection point to the next)
x1 The starting horizontal pixel coordinate of the circle
y1 The starting vertical pixel coordinate of the circle
x2 The ending horizontal pixel coordinate of the circle
y2 The ending vertical pixel coordinate of the circle
changeDistance The Euklidean distance from beginning to end point in pixels
trialDuration The calculated duration of the trial (duration of animation)
speed The speed of the current circle (in px/ms)
list.trialOffTimes.mean The proportion of times participant's coordinates have been recorded off the circle during the current trial
adjust 0 = no speed adjustment; 1 = speed adjusted for next trial
nextSpeed The adjusted speed (if any) at the end of the trial
meanSpeedPXPerMS The current mean speed in px/ms
meanSpeedMMPerMS The current mean speed in mm/ms
meanSpeedPctPerMS The current mean speed in pct/ms
meanTargetDistancePX The current mean target distance btw. participant's coordinates and circle center (calculated as Euklidean distances) in pixels
meanTargetDistanceMM The current mean target distance btw. participant's coordinates and circle center (calculated as Euklidean distances) in mm
meanTargetDistancePct The current mean target distance btw. participant's coordinates and circle center (calculated as Euklidean distances) in percentages (screen height percentages)
countLiftOffs Only relevant for touchscreens: counts the number of times participants lifted finger/stylus from the screen
(mouse cursor will stay on the screen even if participants lifts finger from mouse button)

Stream Data

File Name: adaptivetrackingtask_stream*.iqdat

Data Fields

NameDescription
inquisit.version Inquisit version number
computer.platform Device platform: win | mac |ios | android
computer.touch 0 = device has no touchscreen capabilities; 1 = device has touchscreen capabilities
computer.hasKeyboard 0 = no external keyboard detected; 1 = external keyboard detected
startDate Date the session was run
startTime Time the session was run
subjectId Participant ID
groupId Group number
sessionId Session number
display.height The height of the current screen in pixels
display.canvasHeight The height of the current active canvas in pixels (active canvas = part of the screen used to run the script)
display.refreshInterval The refreshinterval (in ms) of the current display
expressions.pxPerMM Px/mm conversion number for the current display
blockCode Name of the current block
trialCode Name of the current trial
elapsedTime Session duration in ms
trialCounter Tracks the number of trials (trials = movement from one inflection point to the next) run in the current block
speed Current speed (in px/ms)
trialDuration The current trialDuration (in ms)
x1 The starting horizontal pixel coordinate of the circle
y1 The starting vertical pixel coordinate of the circle
x2 The ending horizontal pixel coordinate of the circle
y2 The ending vertical pixel coordinate of the circle
mouse.x The current horizontal cursor/finger coordinate in pixels
mouse.y The current vertical cursor/finger coordinate in pixels
shape.dotAnimated.x The current horizontal pixel coordinate of the moving circle
shape.dotAnimated.y The current vertical pixel coordinate of the moving circle
offTarget 1 = the participant's coordinates are OFF the target at time of recording
0 = the participant's coordinates are ON the target at time of recording
targetDistancePX The Euklidean distance (in px) btw. center of circle and participant's coordinates at time of recording
targetRadiusPX The radius (in px) of the circle
errorPX The calculated errors (in px); calculated as IF (targetDistance > targetRadius){error = targetDistance-targetRadius)
Example
1. targetRadius = 80px, distance = 90px => error = 90px-80px = 10px
2. targetRadius = 80px, distance = 60px => error = 0px (coordinates are on the circle)
countLiftOffs Only relevant for touchscreens: counts the number of times participants lifted finger/stylus from the screen
(mouse cursor will stay on the screen even if participants lifts finger from mouse button)

Parameters

The procedure can be adjusted by setting the following parameters.

NameDescriptionDefault
Color Parameter
canvasColor Display color of the actively used portion of the screen (the 'canvas')
if set to a color other than the screenColor, you can distinguish the active canvas
from the inactive portion of the screen
black
screenColor Color of the screen not used by the canvas ('inactive screen')gray
defaultTextColor Default color of text itemswhite
Sizing Parameters
targetDiameterPct Percentual size of the target diameter (relative to canvasHeight)10%
amplitude The fixed amplitude used for the 5 non-harmonious sinusoidal wave functions
to generate the random target movement (possible range: 0.2-0.9)
The amplitude in this script controls the (predictable) distances
btw. inflection points in the target's movement pattern
=> The higher the amplitude, the longer the distances traveled from one inflection point to the next
inflection point here: the points where the dot may randomly change its direction (and speed)
in this script an amplitude of 1 would mean that a point can move 1/2 the screen in one predictable movement
0.6
Speed Adjustment
startSpeedPctPerMS The starting speed (in canvasHeight pct/ms) that is used to travel from one
inflection point to the next
0.015% vertical height per ms => the target moves 0.015% of the canvasHeight per ms
for ABSOLUTE screen sizes (default), this translates to 0.0216mm/ms => 2.16 cm/s
0.015
stepSize Adjustment steps (in pct/mm)0.001
Task Design Elements
timeoutPracticeMS The duration (in ms) of the practice round30000
timeoutTestMS The duration (in ms) of the test round240000
minOnTargetPropCorrect The minimum proportion of ON target measures per trial that results in a 'correct' trial performance evaluation0.85
Miscellaneous
skipScreenSizeCheck False = screenSize check is run ( screen size is checked for minimum size of 192mmx144mm)
true = screenSize is NOT checked
false