Script Author: David Nitz (dave@millisecond.com), Millisecond
Last Modified: January 20, 2025 by K. Borchert (katjab@millisecond.com), Millisecond
Script Copyright © Millisecond Software, LLC
This script implements the 'Tower of London' task (originally Shallice, 1982), an assessment of executive functioning with a focus on planning abilities.
Shallice, T. (1982). Specifc impairments of planning. Philosophical Transactions of the Royal Society of London, Biology, 298, 199-209.
Krikorian, R., Bartok, J., & Gay, N. (1994). Tower of London procedure: A standard method and developmental data. Journal of Clinical and Experimental Neuropsychology, 16, 840-850.
Anderson, P., Anderson, V., & Lajoie, G. (1996). The Tower of London test: Validation and standardization for pediatric populations. The Clinical Neuropsychologist, 10, 54-65.
Berg, W. K. & Byrd, D. L. (2002). The Tower of London spatial problem-solving task: Enhancing clinical and research implementation. Journal of Clinical and Experimental Neuropsychology, 24(5), 586-604.
10 minutes
Participants are asked to arrange three colorful discs on 3 provided pegs in a specific solution pattern in as few moves as possible. They work through one practice problem before moving on to 12 test problems.
1 Practice trial (problem with 2 moves)
12 Test trials (2 problems with 2 moves, 2 problems with 3 moves, 4 problems with 4 moves, 4 problems with 5 moves:
tested sequentially in fixed order)
Per Problem:
• no time limit
• reset button provided
• 3 attempts per problem to solve it given the max. number of moves. After failure to solve a problem in 3 attempts,
participants are moved to the next problem in the sequence (participants can also move ahead to the next problem
by clicking a 'next' button)
see section Editable Stimuli
(to re-create new target states, try EmptyPegs.pptx - provided by Millisecond)
The task instructions were adapted from Anderson et al (1996).
See script 'toweroflondong_instructions_inc.iqjs'
File Name: toweroflondon_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 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 |
| totalScore | Score achieved across the whole set of test problems. Computed as the sum of individual problem scores. Maximum is 36 in the standard version. |
| meanSolutionTime | The mean solution time (in ms) of all solutions with solutionTime > 0 (independent of accuracy of solution) |
| sdSolutionTime | The standard deviation (in ms) of solution times of solutions with solutionTime > 0 (independent of accuracy of solution) |
| meanExecutionTime | The mean execution time (in ms) of all solutions with solutionTime > 0 (independent of accuracy of solution) |
| sdExecutionTime | The standard deviation (in ms) of all execution times of all completed solutions with solutionTime > 0 (independent of accuracy of solution) |
| meanPlanningTime | The mean time (in ms) spent on planning; calculated as (meanSolutionTime-meanExecutionTime) with solutionTime > 0 (independent of accuracy of solution) |
| meanSolutionTimeCorrectSolutions | The mean solution time (in ms) of all solutions with problemScore > 0 |
| sdSolutionTimeCorrectSolutions | The standard deviation (in ms) of solution times of solutions problemScore > 0 |
| meanExecutionTimeCorrectSolutions | The mean execution time (in ms) of all solutions with problemScore > 0 |
| sdExecutionTimeCorrectSolutions | The standard deviation (in ms) of all execution times of all completed solutions with problemScore > 0 |
| meanPlanningTimeCorrectSolution | The mean time (in ms) spent on planning of all completed solutions with problemScore > 0 |
| countRule1Violations | Sums up the number of times that Rule1 has been violated across all problems (Rule1="move only the top balls") |
| countRule2Violations | Sums up the number of times that Rule2 has been violated across all problems (Rule2="don't move ball onto the position of another ball") |
| countRuleViolations | Number of all rule violations across all problems |
| countFailedAttempts | Sums up the number of failed attempts across all problems failedAttempt: voluntary resets + pressing continue without solving the problem + too many moves |
File Name: toweroflondon_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. |
| response | Response made (contains the last peg a disc was moved to or 0 for noResponse) |
| latency | The latency of the response in ms (or if no response: trialduration) |
| trial.choice.lastDropLatency | Time (in ms) between intialization of the last move and its completion; move execution time |
| trial.choice.lastDropSource | The last moved disc (R, B, G) |
| trial.choice.lastDropTarget | The last peg that a disc was moved to (apeg, bpeg, cpeg) |
| problemNumber | Current problem number. By default the task consists of 1 practice problem and 12 test problems presented sequentially. 0 indicates a practice problem. |
| subjectAttempts | Number of current attempts to solve the given problem. |
| targetMoves | Number of prescribed moves for the current problem. |
| subjectMoves | Number of subject-performed moves for the current problem. |
| excessMoves | Returns the difference between number of moves performed by the subject and the number of target moves for a given problem. |
| moveString | Text string containing a record of performed moves. E.g. "B2R3" indicates that the blue ball (B) was moved to peg 2 (center) and the red ball (R) was moved to peg 3 (right). |
| targetAchieved | Returns true as soon as the subject has successfully reached a given problem's target / goal state. Otherwise false. |
| problemScore | Score awarded for solving the current problem. See Krikorian et al. (1994) for details. |
| totalScore | Score achieved across the whole set of test problems. Computed as the sum of individual problem scores. Maximum is 36 in the standard version. |
| firstMoveTime | Returns the time (in ms) elapsed between initial presentation of the target configuration and the initialization of the subject's first move. Sometimes also referred to as "planning time" or simply "latency". Measure is computed separately for each attempt. |
| executionTime | Computed as solutionTime - firstMoveTime. Measure is computed separately for each attempt. |
| solutionTime | Returns the time (in ms) elapsed between initial presentation of the target configuration and a subject's successful solution. Measure is computed separately for each attempt. |
| planningTime | Planning time calculated as 'solutionTime - executionTime' |
| tChoiceStart | Absolute start time for trial.choice in ms. May be used to derive additional measures during data analysis (e.g. mean move time). |
| tChoiceEnd | Absolute end time for trial.choice in ms. May be used to derive additional measures during data analysis (e.g. mean move time). |
| tFirstMove | Absolute script timestamp in ms for valid first move |
| ruleViolation | 1 = illegal move: at least one of the two moving rules was violated during this trial 0 = legal move |
| countRule1Violations | Sums up the number of times that Rule1 has been violated (Rule1="move only the top balls") |
| countRule2Violations | Sums up the number of times that Rule2 has been violated (Rule2="don't move ball onto the position of another ball") |
| countRuleViolations | Number of all rule violations |
| countFailedAttempts | Sums up the number of failed attempts across all problems failedAttempts: voluntary resets + pressing continue without solving the problem + too many moves |
The procedure can be adjusted by setting the following parameters.
| Name | Description | Default |
|---|---|---|
Design |
||
| maxAttempts | Allowed number of attempts to solve any given problem with minimum amount of moves. Default is 3. | 3 |
| nPracticeProblems | Number of practice problems. By default, the task contains 1 practice problem and 12 test problems. Default is 1. | 1 |
Peg Setup |
||
| nASlots | Capacity of peg 1 (left). Default is 3. | 3 |
| nBSlots | Capacity of peg 2 (center). Default is 2. | 2 |
| nCSlots | Capacity of peg 3 (right). Default is 1. | 1 |
| h1 | Horizontal coordinates of peg 1 (left) in screen percentages (0% = left edge of canvas - right edge of canvas = 100%) | 20% |
| h2 | Horizontal coordinates of peg 2 (center) in screen percentages | 50% |
| h3 | Horizontal coordinates of peg 3 (right) in screen percentages | 80% |
| v1 | Vertical coordinate of bottom ball position in screen percentages (0% = top of canvas - bottom of canvas = 100%) | 80% |
| v2 | Vertical coordinate of center ball position in screen percentages | 65% |
| v3 | Vertical coordinate of top ball position in screen percentages | 50% |
| rStartX | Determines the red ball's horizontal start position (horizontal, vertical). | parameters.h1 |
| rStartY | Determines the red ball's vertical start position | parameters.v2 |
| gStartX | Determines the green ball's horizontal start position | parameters.h1 |
| gStartY | Determines the green ball's vertical start position | parameters.v1 |
| bStartX | Determines the blue ball's horizontal start position | parameters.h2 |
| bStartY | Determines the blue ball's vertical start position | parameters.v1 |
Ui Parameter |
||
| showNextButton | True = show the 'next' button; false = 'next' button is not presented | true |
| showresetButton | True = a reset button is provided; false = no reset button is provided | true |
Timing Parameters |
||
| interTrialInterval | The intertrial interval (time between problems) in ms. Default is 1000. | 1000 |
| feedbackDuration | Duration of performance feedback in ms. Default is 2000. | 2000 |