In simple terms

The AX-CPT is a task where people see two letters in a row, first a cue and then a target (or also known as "probe"). The task was originally designed by Rosvold and his colleagues at Yale University.

In this task people must press a target button only when they see A followed by X. All other pairs (e.g., A–Y, B–X, B–Y) require a different or no response. It tests how well people use context (the first letter) to decide how to respond to the second.

Research history

The AX-CPT was designed in the 1950s and the first paper was by Rosvold and colleagues in 1956. In that time, they did have a special apparatus for letter presentation.

They called it simply the Continuous Performance Test (CPT). It was designed to detect brain damage.

Since then, the AX-CPT has been used a lot in different braches of cognitive research, including fMRI research, cognitive psychology, and neuropsychology, and neuroscience.

Polizetti and colleagues (2018) showed the AX-CPT performance across different ages (8 to 22 years old) using a large cross-sectional study. They have many interesting conclusions, such as: "Starting from adolescence, early developing resources appear to become increasingly integrated into optimized performance and it is only in early adulthood that a flexible and continually updated representation of task relevant information mature.".

Versions

This task has been used a lot and there are now many different variations. Apart from trivial things (such as the colors of stimuli), examples of important things that researchers varied:

  1. Whether there is a keyboard response to acknowledge the cue. This can help participants to engage/attend the cue better.

  2. The delay (time) between the cue and the probe, ranging from 0 to 6 seconds.

  3. The allowed response time window (how long do people get to respond before it is considered a timeout error).

  4. Type of stimuli. Instead of letters, researchers can use non-linguistic stimulus, such as shapes, faces, dot-patterns. This can be good for working with different species (e.g., animal research), ages (e.g., small children), cultural contexts (e.g., where the Latin alphabet is not common).

In the current version, we use letters, and we use a cue response as well.

Task design

In this task, there are multiple trials (typically more than 100) in which the event sequence looks like this (although there are variations).

  1. Show white fixation point on black screen

  2. Show a cue letter in cyan

  3. Optional: Wait for a response to cue (max time 1000 ms)

  4. Show a target letter in white

  5. Wait for a response to target (max time 1000 ms)

This type of trial comes in four different conditions. In the current implementation we use a response to the cue, but you can decide not to use that.

Trial type / condition The cue is The target is The response to the Cue The response to the target

A-X

The letter A

The letter X

M

C

B-X

Any letter other than A

The letter X

M

M

A-Y

The letter A

Any letter other than X

M

M

B-Y

Any letter other than A

Any letter other than X

M

M

A response to the cue is not necessary per se. It is always the same across conditions. The benefit is that it makes sure people are attending the task and it might increase people’s engagement.

About our implementation

In this task, we have a practise block of up to 50 trials. Participants need to do at least 10 trials in a row correctly to complete practise or up to 50 trials if they do not reach this. This to ensure people are used to the rules.

Because we use the letters M and C for responses, these are not used as stimulus letters. As described by Servan-Schreiber and colleagues, all other letters except the K (due to its similarity to X) were used.

Run the demo

Data output file

You do not need this information, unless you want to understand the output data file. You can ignore this if you just want to find out your own score. This is only necessary if you want to carry out the experiment with multiple participants.
In PsyToolkit, the data output file is simply a textfile. The save line of the PsyToolkit experiment script determines what is being saved in the data output file. Typically, for each experimental trial, you would have exactly one line in your text file, and each number/word on that line gives you the information you need for your data analysis, such as the condition, response speed, and whether an error was made.

Meaning of the columns in the output datafile. You need this information for your data analysis.

Colum Meaning

1

The name of the block

2

Trial type (AX,AY,BX,BY)

3

The status of the trial (1=correct trial, 0=mistake was made)

4

RT to the the cue

5

status of the response to the cue (1=correct, 2=wrong key, 3=timeout)

6

RT to the target

7

status of the response to the target (1=correct, 2=wrong key, 3=timeout)

8

correct count in a row so far

How to analyze data from experiments

When you embed a AX-CPT in your survey, you need (as always), make sure you set the "analyze" parameters of your experiment. In this case, it is very simple, for the dependent variable you just use value 6. For correct, you choose column 5. For condition you use column 2

This way, you get the response time for each of the four conditions. You can do more sophisticated analyses. For this we recommend the R software.

PsyToolkit code

Click to expand the PsyToolkit script code (part of zip file below)
## AX-CPT
## there are 4 types of trials
## AX : m after cue "a" and "c" after probe "x"
## BX : any letter except A followed by x (press m m)
## AY : A followed by any except X (press m m)
## BY : any pair except A and X (press m m)

bitmaps
  instructions1
  instructions2

fonts
  regularfont arial 20
  letterFont courier 60

## this table sets the frequency. A common setup is to have 70% AX trials, and 10% for other trial types

table conditions
  "AX" 2 # only in AX trials, the second letter is the c, which is the second letter in the keys line below
  "AX" 2
  "AX" 2
  "AX" 2
  "AX" 2
  "AX" 2
  "AX" 2
  "BX" 1 # in other trials, the second letter is letter 1 (the m)
  "BY" 1
  "AY" 1

part countDownToContinue
  font regularfont # makes next show text large
  show rectangle 0 0 800 500 yellow
  show text %feedback1 0 -50 black
  show text %feedback2 0 0 black
  show text %feedback3 0 50 black
  set $delayCounterInterval 500
  set $countDown 20
  while $countDown > 0
    show text $countDown 0 100   black
    delay $delayCounterInterval
    clear -1
    set $countDown decrease
  while-end
  show text "Concentrate. Press a key to continue with the task" 0 200 black
  readkey 3 99999

task axcpt
  keys m c space
  # note, we excluded C and M because they are used for the keys, and we excluded K as in original study
  set %%otherLetters "B" "D" "E" "F" "G" "H" "I" "J" "L" "N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "Y" "Z"
  set %feedback1 " "
  set %feedback2 " "
  set %feedback3 " "
  # -- first select letters
  if @1 = "AX"
    set %letter1 "A"
    set %letter2 "X"
    set %feedback2 "If you see a blue A followed by a white X"
    set %feedback3 "then press C"
  fi
  if @1 = "AY"
    set %letter1 "A"
    set %letter2 %%otherLetters use random
    set %feedback2 "If you see a blue A followed by a letter other than X"
    set %feedback3 "then press M"
  fi
  if @1 = "BX"
    set %letter1 %%otherLetters use random
    set %letter2 "X"
    set %feedback2 "If you see a blue letter that is not an A"
    set %feedback3 "followed by an X, then press M"
  fi
  if @1 = "BY"
    set %letter1 %%otherLetters use random
    set %%tmpLetters %%otherLetters # make copy of otherLetters
    set %%tmpLetters remove value %letter1 # this prevents repeat of same letter in BY trials
    set %letter2 %%tmpLetters use random
    set %feedback2 "If you see a blue letter that is not an A"
    set %feedback3 "followed by a letter other than X, then press M"
  fi
  ## -- now show fixpoint made from two rectangles
  show rectangle 0 0 5  30 white
  show rectangle 0 0 30 5 white
  delay 200
  clear -1 -2
  font letterFont # makes next show text large
  show text %letter1  0 0    0 255 255 # 0,255,255 is cyan
  readkey 1 500 # response window 1: 500ms with cue; always need to press m to first cue letter
  if STATUS = TIMEOUT # it can be timeout, because this is first part of response window (with letter present)
    clear -1
    show rectangle 0 0 5 30 white
    show rectangle 0 0 30 5 white
    readkey 1 500 # response window 2 for the cue, but now the cue not shown
    clear -1 -2 # remove fixpoint that was shown during second part of response window
    set $rt1 expression 500 + RT
  else
    clear -1
    set $rt1 RT
  fi
  set $status1 STATUS
  if STATUS = WRONG # if people pressed C instead of M to the cue
    set %feedback1 "If you see a blue letter, you always need"
    set %feedback2 "to press the letter M on the keyboard"
    set %feedback3 " "
    part countDownToContinue # note that call also changes STATUS
  fi
  if STATUS = TIMEOUT
    set %feedback1 "You failed to respond to the blue letter WITHIN 1 second."
    set %feedback2 "If you see any blue letter,"
    set %feedback3 "always press the letter M on the keyboard."
    part countDownToContinue # note that call also changes STATUS
  fi
  #
  #-- first part done
  #
  if $status1 = CORRECT # we only continue if response to cue was correct
    # -------------------------------------------------------------------------
    # In this case, trial continues with further wait and second letter
    # -------------------------------------------------------------------------
    show rectangle 0 0 5  30 white # fixpoint
    show rectangle 0 0 30 5 white  # fixpoint
    delay 3900
    clear -1 -2
    ## -- now show for the second letter and wait 1000 ms for response
    show text %letter2
    readkey @2 1000
    clear -1
    if STATUS = TIMEOUT
      set %feedback1 "You responded to the blue letter, but not to the white letter."
      part countDownToContinue
    fi
    if STATUS = WRONG
      set %feedback1 "You responded correctly to the blue letter, but not to the white one."
      part countDownToContinue
    fi
    set $rt2 RT
    set $status2 STATUS
  fi
  clear screen
  delay 1000 ## added some break
  #--so far, we had responses for part of the trials
  #  good to have complete status
  #  here 1 means correct, 0 means wrong
  if $status1 = 1 and $status2 = 1
    set $trialstatus 1
    set &correctInRowCounter increase # count up to 10 for practiseblock
  else
    set &correctInRowCounter 0
  fi
  save BLOCKNAME $trialstatus %letter1 %letter2 $rt1 $status1 $rt2 $status2 &correctInRowCounter
  if &practiseMode = 1 and &correctInRowCounter >= 10
    end tasklist # this ends practise block after 10 trials correct in a row
  fi

block training
  set &practiseMode 1
  message instructions1
  task axcpt 50 # runs up to 50

block realdata
  set &practiseMode 0
  message instructions2
  task axcpt 150

Download

If you have a PsyToolkit account, you can upload the zipfile directly to your PsyToolkit account. Watch a video on how to do that. If you want to upload the zipfile into your PsyToolkit account, make sure the file is not automatically uncompressed (some browsers, especially Mac Safari, by default uncompress zip files). Read here how to easily deal with this.

Further reading

  • Rosvold, H. E., Mirsky, A. F., Sarason, I., Bransome Jr, E. D., & Beck, L. H. (1956). A continuous performance test of brain damage. Journal of consulting psychology, 20(5), 343. Link to journal (behind paywall)

  • Polizzotto, N. R., Hill-Jarrett, T., Walker, C., & Cho, R. Y. (2018). Normal development of context processing using the AXCPT paradigm. Plos one, 13(5), e0197812. Open access link