Millisecond Box Task

Technical Manual

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

Created: January 04, 2022

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

Script Copyright © Millisecond Software, LLC

Background

This script implements Millisecond's version of the 'Box Task' by Kessels & Postma (2018). The 'Box Task' is a Visuospatial Memory Task originally written in Microsoft Visual Basic and runs on Windows machines. It allows the computation of different error scores that measure specific working memory processes (i.e., the number of within-search and between-search errors). The original Box Task program by Kessels & Postma provides a stimulus set and a default experimental setup but also allows further customizations of the task.

DISCLAIMER: The Inquisit implementation is based on Kessel & Postma's (2017) description of the 'Box Task'. Millisecond attempts to replicate the general memory task but differences between the implementations will exist.

The Inquisit implementation runs on Windows, Macs, Androids and Ios and can be run online. It thus expands the number of devices/platforms the 'Box' Task can be run on. As the original 'Box Task', the Inquisit implementation provides stimuli and a default setup and allows for some customization of the task via parameter settings.

The script provides the functionality to run the script with absolute stimuli sizing. Default settings default back to proportional sizing. Go to 'defaults' setting for more info.

References

Kessels RPC, Postma A. The Box Task: A tool to design experiments for assessing visuospatial working memory. Behav Res Methods. 2018 Oct;50(5):1981-1987. doi: 10.3758/s13428-017-0966-7. PMID: 28916951.

Duration

7 minutes

Description

N-objects are hidden in N boxes and participants have to find them by opening boxes. Participants are told which specific object to look for next ('target'). If the target box is opened, the program shows the target object for a short period of time before closing the box again. Once found, all objects stay in their boxes, but all boxes will be closed during the search. Thus, if a box is opened that does not contain the target object, it either shows one of the already found objects or it appears empty. Box locations stay the same throughout each run.

The default setup of this Inquisit script runs 2 practice rounds (with 3 boxes each), followed by two rounds of 4, 6 and 8 boxes each. The maximum number of boxes that can be run is 10 in the Inquisit script. The individual objects and boxes as well as box locations are randomly determined for each round in this script.

the script provides 42 different objects to run with the default set-up without repeating any objects.

Procedure

The default setup of the Millisecond Box Task runs

(1) Intro Block: repeatable if necessary

(2) Practice Block: runs 2 practice rounds with 3 objects each

(3) Test Block: runs 6 rounds with
- 2 rounds for 4 objects
- 2 rounds for 6 objects
- 2 rounds for 8 objects ( the highest setsize the Millisecond Box Task can run is 10)


Box Placement Algorithm
This script randomly selects the position of the boxes in the dedicated 'boxPlacementArea'
ensuring that no overlap of boxes happens (at least it should not happen - if it does, values.boxPlacementViolation
will flag the data file).

The fewer boxes are placed onto the area, the greater the general distance btw. boxes to
avoid accidental clumps.


Object Selection
This script provides 42 objects which is enough to run the default setup without
object repetition (3+3+4+4+6+6+8+8 = 42). More objects can be
added under section Editable Stimuli.

The default setup of this script randomly selects the order of the objects.


Target Box Selection
The targetboxes are randomly (without replacement) assigned during each round.

There are three box types which are selected randomly without replacement
with repeats once all three box image types have run.


Timed Test
The default setup does not impose a time limit for the target searches.
Check section Editable Parameters for relevant parameters that allow to
impose a timeout for each search round and to present a timer.


Round Trial Sequence
Each round starts with a "next round" alert and a Start button that needs to be pressed
to initiate the next round.

Target1: the object for target1 as well as the targetbox is randomly determined.
The boxes are presented in the BoxPlacementArea and the targetobject is shown under
the BoxPlacementArea. If no response occurs within 5s, a red reminder appears next
to the target object.

If an empty box is opened, the empty box is revealed for 1000ms (editable parameter).
If the target box is opened, the target object as well as a 'next' button is presented.
Once pressed, the next target is presented until all targets have been found.

If the search is timed out (only happens if parameter settings are changed to run a timed search),
the round ends and a message is flashed onto the screen.

Stimuli

provided by Millisecond - can be edited under section 'Editable Stimuli'

Images:
All object and box stimuli downloaded from: https://pixabay.com/
under the Pixabay license of "Free for commercial use - No attribution required"

The script provides 42 object stimuli to run the default setup without object
repetition.

Sounds:
success.wav: https://freesound.org/people/grunz/sounds/109662/ licensed under the Attribution 3.0 License
and edited in Audacity

failure.wav: created in Audacity

Instructions

provided by Millisecond - can be edited under section 'Editable Instructions'
The instructions use some of the suggested instructions by Kessels & Postma (2018)

Summary Data

File Name: ms_boxtask_summary*.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
elapsedTime Session duration in ms
completed 0 = Test was not completed
1 = Test was completed
meanNumberCorrectSearchesPractice Mean number of correct target searches per practice round (default setup run setsize = 3)
correct = the search for a target was conducted without between or within errors
N=1
meanNumberCorrectSearchesSetSize1 Mean number of correct target searches per round testing setsize1
correct = the search for a target was successful
and no between, within or timeout errors were made
countTOSetSize1 The number of timed out (TO) rounds for setsize1 (if task was run without timeout this should be 0)
meanErrorCountWithinSetSize1 Mean number of Within errors per non-timed out setsize1 rounds
meanErrorCountBetweenSetSize1 Mean number of Between errors per non-timed out setsize1 rounds
N=2
meanNumberCorrectSearchesSetSize2 Mean number of correct target searches per round testing setsize2
correct = the search for a target was successful
and no between, within or timeout errors were made
countTOSetSize2 The number of timed out (TO) rounds for setsize2 (if task was run without timeout this should be 0)
meanErrorCountWithinSetSize2 Mean number of Within errors per non-timed out setsize2 rounds
meanErrorCountBetweenSetSize2 Mean number of Between errors per non-timed out setsize2 rounds
N=3
meanNumberCorrectSearchesSetSize3 Mean number of correct target searches per round testing setsize3
correct = the search for a target was successful
and no between, within or timeout errors were made
countTOSetSize3 The number of timed out (TO) rounds for setsize3 (if task was run without timeout this should be 0)
meanErrorCountWithinSetSize3 Mean number of Within errors per non-timed out setsize3 rounds
meanErrorCountBetweenSetSize3 Mean number of Between errors per non-timed out setsize3 rounds
N=4
meanNumberCorrectSearchesSetSize4 Mean number of correct target searches per round testing setsize4
correct = the search for a target was successful
and no between, within or timeout errors were made
countTOSetSize4 The number of timed out (TO) rounds for setsize4 (if task was run without timeout this should be 0)
meanErrorCountWithinSetSize4 Mean number of Within errors per non-timed out setsize4 rounds
meanErrorCountBetweenSetSize4 Mean number of Between errors per non-timed out setsize4 rounds
N=5
meanNumberCorrectSearchesSetSize5 Mean number of correct target searches per round testing setsize5
correct = the search for a target was successful
and no between, within or timeout errors were made
countTOSetSize5 The number of timed out (TO) rounds for setsize5 (if task was run without timeout this should be 0)
meanErrorCountWithinSetSize5 Mean number of Within errors per non-timed out setsize5 rounds
meanErrorCountBetweenSetSize5 Mean number of Between errors per non-timed out setsize5 rounds
N=6
meanNumberCorrectSearchesSetSize6 Mean number of correct target searches per round testing setsize6
correct = the search for a target was successful
and no between, within or timeout errors were made
countTOSetSize6 The number of timed out (TO) rounds for setsize6 (if task was run without timeout this should be 0)
meanErrorCountWithinSetSize6 Mean number of Within errors per non-timed out setsize6 rounds
meanErrorCountBetweenSetSize6 Mean number of Between errors per non-timed out setsize6 rounds
N=7
meanNumberCorrectSearchesSetSize7 Mean number of correct target searches per round testing setsize7
correct = the search for a target was successful
and no between, within or timeout errors were made
countTOSetSize7 The number of timed out (TO) rounds for setsize7 (if task was run without timeout this should be 0)
meanErrorCountWithinSetSize7 Mean number of Within errors per non-timed out setsize7 rounds
meanErrorCountBetweenSetSize7 Mean number of Between errors per non-timed out setsize7 rounds
N=8
meanNumberCorrectSearchesSetSize8 Mean number of correct target searches per round testing setsize8
correct = the search for a target was successful
and no between, within or timeout errors were made
countTOSetSize8 The number of timed out (TO) rounds for setsize8 (if task was run without timeout this should be 0)
meanErrorCountWithinSetSize8 Mean number of Within errors per non-timed out setsize8 rounds
meanErrorCountBetweenSetSize8 Mean number of Between errors per non-timed out setsize8 rounds
N=9
meanNumberCorrectSearchesSetSize9 Mean number of correct target searches per round testing setsize9
correct = the search for a target was successful
and no between, within or timeout errors were made
countTOSetSize9 The number of timed out (TO) rounds for setsize9 (if task was run without timeout this should be 0)
meanErrorCountWithinSetSize9 Mean number of Within errors per non-timed out setsize9 rounds
meanErrorCountBetweenSetSize9 Mean number of Between errors per non-timed out setsize9 rounds
N=10
meanNumberCorrectSearchesSetSize10 Mean number of correct target searches per round testing setsize10
correct = the search for a target was successful
and no between, within or timeout errors were made
countTOSetSize10 The number of timed out (TO) rounds for setsize10 (if task was run without timeout this should be 0)
meanErrorCountWithinSetSize10 Mean number of Within errors per non-timed out setsize10 rounds
meanErrorCountBetweenSetSize10 Mean number of Between errors per non-timed out setsize10 rounds

Raw Data

File Name: ms_boxtask_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
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)
trial.searchEnd currently stores the summary of a target search.
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.
trial.searchEnd currently stores the summary of a target search.
response The response of participant during current trial
correct Correctness of response (1 = correct, 0 = error)
latency Response latency (in ms)
phase "practice" vs. "test"
roundCounter A counter that tracks how many rounds have been run in the current phase
setSize The currently tested setsize
selectBoxImage The itemnumber of the current box image
targetBoxes A variable that stores all the target boxes used per round
(in the order the target box was selected)
newTarget 1 = a new target was chosen for the last search
0 = participant continued a target search
countTargets Counter that updates the number of targets searched for per round
countAttemptsPerTarget Counter that updates how many boxes were opened to find current target
targetObject Stores the image file for the current target object
targetBox Stores the number of the box that currently hides the target object
selectedBox Stores the number of the last box that was selected to open
success 1 = target object was found in the last selected box; 0 = otherwise
selectionOrder Stores the order in which the boxes were opened
searchAcc 1 = the current target object was found without making any within or between errors
0 = otherwise
countErrorsBetween Counts the number of times participant selected a box that contained
an 'old' target (one previously found) and thus could not contain the
current target object
(reset for each new target object)
countErrorsWithin Counts the number of times participants opened a non-target box
already checked (and rejected) for the current target (reset for each new target object)
repeatedly opening the same non-target box that contains an old target
is counted as both a 'between' error AND a 'within' error.
totalErrorsBetweenPerRound: sums up all between-errors made during the current round
totalErrorsWithinPerRound Sums up all within-errors made during the current round
searchTimeIns Stores the search time spent on this round (in s)
selectionTimestamps A storage variable that stores the search timestamps of all selected boxes
relative to start of current round
Example: '1@1.70 2@3.70'
=> box1 was opened at 1.7s after roundstart
=> box2 was opened at 3.7s after roundstart
timedOut Timed out rounds record 1 during trial.timedoutFeedback (otherwise the column should be empty)
roundTimeout The current round timeout (in ms)
boxPlacementViolation 1 (true) = at least one box violated the placement constraint (overlap possible)
0 (false) = no placement violations detected
countBoxPlacementViolations Number of violations

Parameters

The procedure can be adjusted by setting the following parameters.

NameDescriptionDefault
Screencolor Parameters
screenColor The color of the inactive part of the screenlightBlue
defaultTextColor The default text colorblack
activeCanvasColor The color of the part of the screen actively used for this scriptlightBlue
boxPlacementAreaColor The part of the screen used for box placements will appear whitewhite
Sizing Parameters
boxHeightPct Proportional sizing (relative to canvas height) of the boxes15%
objectHeightPct Proportional sizing (relative to canvas height) of the object images12%
Timing Parameters
targetReminderOnsetMS If a new target is presented and no response occurs within a certain time
frame, the script sends a reminder
5000
revealDurationMS The duration (in ms) that empty boxes are open1000
rUntimedRounds True = the search during a round is timed
false = the search during a round is untimed
false
Only Relevant For Timedsearches
responseTimeoutMS This script calculates the maximum number of boxes that may have to be opened
without making within or between errors to find all objects in a given round
and multiplies that number by 'responseTimeoutMS' and adds the time
dedicated to show open boxes to calculate the round timeout.
For example
6 boxes => max. 21 boxes to open to find all target objects without error=>
21*responseTimeoutMS + 21*revealDurationMS = 21*1000 + 21*1000 =
42000ms to finish the round
1000
showTimer True: during timed rounds, a timer clock is presented
false: no timer clock is presented
true
Sound Effects
skipSoundEffects True: no sounds (success/failure) are played
false: sound effects are played
true