Script Author: Jeffrey Q. Ouyang (qijia.ouyang@gmail.com)
Created: January 08, 2011
Last Modified: January 08, 2025 by K. Borchert (katjab@millisecond.com), Millisecond
Script Copyright © Millisecond Software, LLC
This script implements the Mackworth Clock Vigilance Test; a go/nogo test to measure a persons's ability to sustain attention in the face of monotonous stimulation with rare target events. The implemented procedure is heavily inspired by Lichstein et al (2000).
Lichstein, K. L., Riedel, B. W., & Richman, S. L. (2000). The Mackworth Clock Test: A Computerized Version. The Journal of Psychology, 134(2), 153–161. https://doi.org/10.1080/00223980009600858
Mackworth, N. H. (1948). The breakdown of vigilance during prolonged visual search. Quarterly Journal of Experimental Psychology, I , 6-21.
60 minutes
Participants watch a red dot jump from one circle position to next position (100) in a clockwise fashion at constant speed. Occasionally, the red dot makes a larger jump. Participants are asked to press the Spacebar whenever they notice such a skip event (go event).
Practice: the script provides an optional practice session (see editable parameters to turn it off).
The practice session runs for 1 minute and presents 3 skip events at fixed times.
Test Procedure: by default the script runs 2 rounds (duration of rounds can be set via editable parameters)
There is no break btw rounds (round2 picks up where round1 left off).
The default length of one round is 30 minutes in this script (see Mackworth, 1948 and Lichstein et al, 2000).
1. A circle, with 100 equally spaced lightgray 'slots' is presented on the computer screen.
2. A red dot starts from the 12'o clock position and flashes in turn in each "slot".
2a.The dot stays in each slot for 1s.
3. The signal event is when the dot skips 4 positions (default, can be edited via editable parameters).
3a.The subject identifies this event by hitting the space bar (or other user-definable key).
3b.Total number of signal events is user-definable (default: 12 skip events during one round, see Mackworth, 1948 and Lichstein et al, 2000)
check under section Editable Instructions
File Name: mackworthclock_summary*.iqdat
| Name | Description |
|---|---|
| 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 |
| elapsedTime | Session duration in ms |
| completed | 0 = Test was not completed 1 = Test was completed |
Round 1 Data - Performance Metricsfile Stores The Same Variables For Round 2 |
|
| flag1 | 0 = no issues with generating the skip times in this round 1 = the skip times in this round could not be generated; the default values from list.skipEventTimes were used IMPORTANT: works only for default settings of script |
| meanSkipInterval1 | The mean skip interval (in ms) - based on actual flash timestamps- in round1 (skip interval = difference in timestamps of consecutive skip flashes) |
| hitRT1 | Mean hit response time (ms) to skip events in round1 ( -999 => no skipRTs were recorded in this round) |
| skipEvents1 | Number of skip events in round1 |
| hits1 | Number of hits in round1 |
| hitRate1 | Hitrate in round1 |
| missRate1 | Missrate in round1 (missrate = 1- hitRate) |
| noSkipEvents1 | Number of no skip events in round1 |
| fa1 | Number of false alarms in round1 |
| faRate1 | False alarm rate in round1 |
| crRate1 | Correct rejection rate in round1 (crRate = 1-faRate) |
Signal Detection Measures |
|
| zHitRate1 | Z-score of hit rate in round1 |
| zFARate1 | Z-score of fa rate in round1 |
| dprime1 | Computes d' (parametric measure of discriminability btw. signals and noise) dprime = z(hitRate)-z(faRate) => Range (in this script) -5.1516586840152740479 <= dprime <= 5.1516586840152740479 (=perfect performance) => The higher the value, the better signals (here: skips) were overall distinguished from noise (no skips) (d' = 0: chance performance; negative d-primes: participant treated nontargets as targets and targets as nontargets) |
| c1 | Criterion measure c-criterion in signal detection:The absolute value of c provides an indication of the strength of the subject bias negative when participant more likely to report that signal (here: a skip) is present ('liberal') positive for favoring caution |
File Name: mackworthclock_raw*.iqdat
| Name | Description |
|---|---|
| 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 |
| 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. |
| roundCounter | Tracks the number of rounds run (default: 2 rounds) |
| roundFlag | 0 = the theoretical skip timepoints for the current round were generated without issue 1 = the theoretical skip timepoints for the current round could not be generated the default values in list.skipEventTime are used ( these values only work correctly for the default script settings!) |
| nextSkipTime | Stores the calculated next skipTime (in ms) => if the script.elapsedTime at the end of a trial exceeds this time, a skip trial is initiated |
| flashTimeStamp | The timestamp of the current flash (timestamp = measured in ms based on script starttime) |
| responseWindow | 1 = the response Window is active AT THE BEGINNING of the trial 0 = the response Window is inactive AT THE BEGINNING of the trial the script checks at the end of the trial whether the responseWindow was still active at time of a response |
| script.elapsedTime | The script elapsed time (in ms) at the end of the current trial |
| response | The scancode of the response (57 = spacebar press; 0 = no response) |
| latency | The response latency (in ms) of the current trial (relative to trial start) - if no response, actual trial duration |
| skipRT | Sums up trial latencies for all trials with an active responseWindow after a skip |
| hit | 1 = hit (spacebar pressed after skipped event within allowed timeframe) 0 = no hit |
| falseAlarm | 1 = False Alarm (spacebar pressed outside of response window after a skip event) 0 = no FA |
| hitsPerRound | Counts all hits during current round |
| falseAlarmsPerRound | Counts all false alarms during current round |
| skipCount | Counts the number of skipped events during current round |
| meanSkipIntervalMS | The mean skip interval (in ms) based on actual skip timestamps for the current round |
Skipevents Timings: Debugging Variables |
|
| avgEventInterval | The calculated average skip interval (in ms) used to sample the skipEvents |
| list.skipEventTime.itemCount | The number of skip events stored in list.skipEventTime (note: this should always be 1 more than the actual number of skip events) |
| attempts | The number of times the script attempted to generated the list of skip events to fulfill all three criteria |
| roundStartTime | The timestamp of the current round start |
| e1-12 | Calculated timestamp of the skip event 1-12 (a skip should be run if the script.elapsedTime of the current trial exceeds this duration) |
| e13 | Pseudo skip event (scheduled to appear after the end of the round) |
| roundEndTime | Scheduled timestamp of the end of the current round |
The procedure can be adjusted by setting the following parameters.
| Name | Description | Default |
|---|---|---|
User-Definable Macworth Clock Test Parameters |
||
| runPractice | True = the task begins with a short practice session. the practice session lasts 1 minute and runs 2 skip events false = no practice session is run | true |
| numberOfRounds | Number of rounds run ( the rounds are *NOT* announced to participants) summary variables provided for max. 2 rounds only | 2 |
| skipStep | Number of steps covered for a skip ( Lichstein et al. reporting using a quadruple jump instead of a single jump) | 4 |
| totalRoundRunTime | Amount of time in ms for one round (30 minutest per round) - Lichstein et al (2000) | 1800000 |
| flashInterval | Interval (in ms) between regular dot "flashes" - Lichstein et al (2000) | 1000 |
| totalRoundSkipEvents | Total number of signal (skip) events per round - Lichstein et al (2000) | 12 |
| responseWindowMS | The max time in ms that a participant can respond after a signal (skip) event - Lichstein et al (2000) | 8000 |
| signalPeriod | The signals appear only during the first 2/3 of the round this value is based on Lichstein et al (2000, p.155) who restricted signals to the first 20 minutes of a 30 minute round the max signal period cannot be larger than 1 and should probably not be restricted more than the default setting | 20/30 |
| firstSignalOnset | The first signal should appear around 1/30 into the round this value is based on Lichstein et al (2000, p.155) who started the first signal around 1 minute into a (30min) round recommended not to change; the script ensures that the first flash cannot be a signal flash. | 1/30 |
Ui Parameters |
||
| circleProportion | The proportion of the circle ( 47.5% is the max for a dotHeightPct of 2.5%) | 0.475 |
| dotHeightPct | The size of the circle dots (the moving red dot is about 95% of a circle dot) | 2.5% |