Compensatory Tracking Task

Technical Manual

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

Created: January 15, 2025

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

Script Copyright © Millisecond Software, LLC

Background

This script implements a simple approximation of the compensatory tracking task COMPTRACK by Makeig & Jolley (Naval Research) to study vigilance.

The Inquisit implementation works with touch input (finger or stylus (recommended)) on touchscreens and mouse input on non-touchscreens. By default the task is run on a proportional screen, but can be easily modified to use an absolute screen canvas. Go to 'Defaults' section of this script and check instructions.

Original Compensatory Tracking Task 'CompTrack' by Makeig & Jolley (1995,Naval Research):

The basic task: keep a target on the center of a bull's eye The target sits on an 'imaginary' hill and three forces move it around: 1) a buffeting force 2) a slipping force (The slipping force always works outwards) 3) Participant forcing the target

Objectives of COMPTRACK: The task required must satisfy four criteria: 1. To distinguish it from an auditory detection task used in previous research, the task should not involve auditory stimuli. 2. To allow study of vigilance decrements, the task should be monotonous enough to produce deficits associated with underarousal and loss of vigilance. 3. To allow study of rapid (20 sec) fluctuations in vigilance, the task should require continuous user input at near-one second intervals 4. The task program should allow msec-scale synchronization with external psychophysiological or other data collection processes.

References

Makeig, S. & Jolley, K. (1995). COMPTRACK: A Compensatory Tracking Task for Monitoring Alertness.

Duration

12 minutes

Description

This compensatory tracking tasks places a red circle (target) onto a yellow circle (bull's eye) which represents the "top of the hill". After a random time period (500-1000ms), the target begins to move in a random direction away from hill's center and possibly 'downhill' (though this is not made explicit to participants).

If the finger/mouse moves over the moving red circle, its position can be corrected and can be dragged back to the center. However, for a short distance away from the center, the target moves regardless of a participant's action => this forces participants to stay vigilant as the target can 'escape'.

Once back close to the center of the bull's eye, the target is automatically moved to the center and the process begins anew.

If the target is not moved back to the bull's eye, the target eventually proceeds to travel 'downhill' away from the bull's eye.

Procedure

(1) Practice: 1 minute (editable parameter)
Participants get to practice the tracking task for 1 minute

(2) Test: 12 minutes (editable parameters), under the cover divided into 3 phases (4 minutes each)


3 'forces' act on the position and speed of the target:

- wind force
- downhill force
- participant

Disclaimer: the algorithms implemented in this script
do not claim to be approximation of real life forces
acting on a disk going down a hill.
They try to be simple approximations of the
buffeting force (here: the 'wind') and
slippery force (here: downhill force)
used by Makeig und Jolley.

(1) Wind Force: A constant 'wind' force is acting on the target.

•Direction*
The wind force changes in direction controlled by a draw from a Bernoulli distribution
every 16ms with mean = 0.05 (aka a direction change about 5 out of 100 draws).
The new direction of the wind is then randomly selected from 0-359 angles
Examples:
• 180 degrees blowing left (E->W),
• 0/360 degrees blowing right (W->E),
• 270 blowing to the top of the screen (S->N),
• 90 degrees blowing to the bottom of the screen (N->S))


•Speed*
The wind causes a constant base speed that is fine-tuned by its selected strength.
The strength of the wind is controlled by a random drawing from an exponential distribution with
lambda = 0.5 and capped at 5. The selected values are all rounded to the nearest highest integer
which results into five strength categories: 1,2,3,4,5 with lower categories having higher probabilities
to occur than higher ones.
The baseline wind speed is then multiplied by its strength resulting in the final wind speed component:

final wind speed component = wind baseline speed * strength


(2) Downhill Force ('gravitational' force):

•Direction*
The direction of the downhill force is calculated based on the coordinate of the target,
the center of the bull's eye and the resulting arcsine angle and is always corrected to be directed
outward away from the center.

•Speed*
In this script, a simple exponential decay function is used to approximate the speed decay
based on the target's distance to the center: steep close to its apex (the bull's eye),
leveling out as the slope gradually becomes flat.

Phases:
The target can move through 6 phases:


phase0: target in the bull's eye center (static target: begins to move within 500-1000ms)

phase1: dynamic target - moves on bull's eye (no downhill force; only wind force) but cannot yet be
controlled/forced by participant => participants need to stay vigilant as the target can 'escape'.

phase2: dynamic target moves on bull's eye (no downhill force; only wind force) and can be controlled by participant

phase3: dynamic target moves with speed controlled by 'downhill' force AND wind force and can be controlled by participant
- final direction calculations: the direction of the wind and the direction of the downhill force are combined with the following weights

wind strength = wind strength
downhill force strength = 10 - wind strength

final direction = (values.windAngle*windStrength + values.downHillAngle*(10-windStrength))/10
=> the stronger the wind, the more impact it has on the direction of the target
=> highest wind strength results in an equal impact on direction as downhill force

final speed = downHillSpeed + windSpeed; (simple additive effects of the speeds)

DISCLAIMER: this algorithm does not attempt to model forces in the real world


phase4: target is under control of participant => should move it back to the bull's eye
(no wind or downhill force applied as long as participant controlls target)

phase 5: 'penalty': participant tried to move target off screen. Warning presented for 1s. Then target (inactive) reappears in
one of the four corners (largest distance to bull's eye) and starts moving again.

Stimuli

provided by Millisecond

Instructions

provided by Millisecond - see script "compensatorytrackingtask_instructions_inc.iqjs"

Summary Data

File Name: xxxx_summary*.iqdat

Data Fields

NameDescription
inquisit.version Inquisit version number
computer.platform Device platform: win | mac |ios | android
computer.touch 1 = the current screen has touchscreen capabilities; 0 = otherwise
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
Summary Performance Metrics For The First 3 Test Periods
dur1 Duration of testing period1
m1 Mean target-center distance in MM during testing period1
sd1 Standard deviation of the target-center distances in MM during testing period1
(same for testing periods 2-3)

Raw Data

File Name: xxxx_raw*.iqdat

Data Fields

NameDescription
build Inquisit version number
computer.platform Device platform: win | mac |ios | android
computer.touch 1 = the current screen has touchscreen capabilities; 0 = otherwise
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
blockCode Name of the current block
blockNum Number of the current block
trialCode Name of the current trial
trialNum Number of the current trial
Built-In Dv
response The participant's response
correct Accuracy of response: 1 = correct response; 0 = otherwise
latency The response latency (in ms); measured from: onset of trials
Custom Variable
testPhase "practice" vs. "test"
testPeriod 0 = beginning period of the test that still counts as 'practice' (if any)
the remaining test time is divided in test periods (number is determined by parameter setting)
targetPhase 0 = target inactive on bull's eye (no force acting on it)
1 = target active on bull's eye but cannot be controlled by participant yet ('wind' acts on it)
2 = target active on bull's eye but can be controlled by participant ('wind' acts on it)
3 = target actively going downhill ('wind' and downhill force act on it)
4 = target under participant's control
distanceTargetPX The pixel distance from target to center (center of bull's eye)
distanceTargetMM The mm distance from target to center (center of bull's eye) - absolute measurement

Stream Data

File Name: xxxx_stream*.iqdat

Data Fields

NameDescription
inquisit.version Inquisit version number
computer.platform Device platform: win | mac |ios | android
computer.touch 1 = the current screen has touchscreen capabilities; 0 = otherwise
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
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 The current blockcode
trialCode Name of the current trial
script.elapsedTime Elapsed time at recording
testPhase "practice" vs. "test"
testPeriod 0 = beginning period of the test that still counts as 'practice' (if any)
the remaining test time is divided in test periods (number is determined by parameter setting)
targetPhase 0 = target inactive on bull's eye (no force acting on it)
1 = target active on bull's eye but cannot be controlled by participant yet ('wind' acts on it)
2 = target active on bull's eye but can be controlled by participant ('wind' acts on it)
3 = target actively going downhill ('wind' and downhill force act on it)
4 = target under participant's control
5 = 'penalty': target was attempted to be moved off screen. 1s penalty => target reappears randomly
in one of the four corners of the canvas (largest distance to bull's eye)
Angle Examples
* 180 degrees => moving left (E->W),
* 0/360 degrees => moving right (W->E),
* 270 moving to the top of the screen (S->N),
* 90 degrees moving to the bottom of the screen (N->S))
(and everything in between)
downHillAngle The downhill 'direction' (always away from center); depends on location of target
windAngle The wind 'direction'
finalAngle The final 'direction' angle
downHillSpeed The downhill speed (in pct)
windSpeed The wind speed (in pct)
windStrength The wind strength: 5 distinct categories
finalSpeedPct The final speed (in pct)
radiusBullsEyePX The radius of the bull's eye in pixel
radiushillPX The radius of the hill in pixel
targetXPX The horizontal pixel coordinate of the target
targetYPX The vertical pixel coordinate of the target
mouse.x:mouse.y The current mouse/cursor coordinates
distanceTargetPX The pixel distance from target to center (center of bull's eye)
distanceTargetMM The mm distance from target to center (center of bull's eye) - absolute measurement

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
Canvassize To Absolute Measurements
hillSize 80%
bullsEyeInnerHeightPct 6%
bullsEyeHeightPct 10%
targetHeightPct 5%
Timing Parameters
minRestingTimeMS The minimum time (in ms) the target rests on the top of the hill once it's returned500
maxRestingTimeMS The maximum time (in ms) the target rests on the top of the hill once it's returned1000
practiceDurationMS The duration (in ms) of the practice session 60000
testDurationMS The duration (in ms) of the test 720000
Performance Metrics
crucialTestDurationMS The crucial (summary data collecting) phase of the test phase
default: complete test phase
720000
numberOfTestPeriods The crucial Test Duration is divided into 3 test periods: start, middle, end
hard coded summary variables only provided for 3 test periods
3