Introduction

This is almost identical to the other Corsi task, except that this is slightly differently implemented using arrays and a small number other features. Best to compare and choose which one suits you best.

The Corsi test or "Corsi block-tapping test" is a short term memory task conceptually similar to the digit span test. It is named after the creator Philip Michael Corsi, who developed this test as part of his doctoral training (PhD, you can download this original work from 1972, see references at bottom of this page).

Philip Corsi was supervised by the well-known neuropsychologist Brenda Milner.

This task was originally not designed as a computer task.

In this task:

  1. the experimenter (the person who carries out the study) shows nine blocks arranged in front of the participant,

  2. the experimenter taps a sequence of blocks (for example, the experimenter taps a sequence of 3 different blocks, one after another),

  3. the participant needs to tap the blocks that the experimenter showed, in the same order,

  4. steps 1-3 are repeated multiple times with different lengths of blocks.

The block span or Corsi span is defined as the longest sequence a participant can correctly repeat.

Kessels and colleagues (2000) carried out a study with healthy participants and participants with some form of brain damage. In their study, healthy adults had an average block span of 6.2 blocks (SD=1.3). Thus, if you are healthy, you are most likely to have a block span of somewhere between 5 and 7 blocks. That is, 68% of the population scores 1 standard deviation from the mean, so if you belong to this 68%, you would have a Corsi block span between 5 and 7 blocks. You can test this yourself with the demo below.

The normal (average) score is around 6. The highest possible block span in this task is 9. In principle, there might be people who can do better, but that will be quite rare.

About this implementation

  • In this implementation, we start with a sequence of 2 blocks

  • Once the sequence has been shown, you hear the word "go" (if you have your speakers on)

  • You need to click with the mouse the blocks in exactly the same order as shown before

  • When you are done, you click the green block "done"

  • You get feedback (smiley face means you did it correct, or frowny face if you made a mistake)

  • If you do it correctly, you go the the next higher number of blocks

  • If you do it wrong, you get once more chance. If you do it then wrong again, you get your score (the Corsi block span)

Run the demo

In this example, you will carry out the Corsi task. You will see further instructions. You need a mouse and ideally you would have sound speakers (because after the sequence is shown, a voice will say "go"). But even without sound, it is fairly obvious when the sequence ends and when you need to start.

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 highest Corsi a span so far

2

The number of items in the current trial to be remembered (starting with 2)

3

Status of current trial (1=correct, 0=wrong)

4

The table row from the table (this experiment comes with 500 random block arrangements and sequences)

PsyToolkit code

Click to expand the PsyToolkit script code (part of zip file below)
options
  mouse on
  set &Count 2 # starts with showing two blocks
  
bitmaps
  titlescreen
  yellow  # used for the yellow highlighting
  purple  # the normal block color (will always be shown 9 of them)
  done    # for the done button
  ticked  # the blue tick mark when user clicked on block
  correct # the smiley face feedback
  wrong   # the frowney face feedback
  instructions  # the instructions at start of experiment
  ready1  # the countdown, step 1
  ready2  # the countdown, step 2
  ready3  # the countdown, step 3
  
fonts
  arial 30

sounds
  gosignal go.mp3 # the sound played when participant needs to start

part delay
  delay 300
  clear -1
  delay 300

task corsi
  # define a grid of 24 possible positions (6x4) where the 9 purple blocks will be positioned
  # here we define simply the x-positions and y-positions
  set &&xpos -330 -200 -70 70 200 330   -330 -200 -70 70 200 330   -330 -200 -70 70 200 330   -330 -200 -70 70 200 330
  set &&ypos -250 -250 -250 -250 -250 -250  -120 -120 -120 -120 -120 -120  -10 -10 -10 -10 -10 -10  120 120 120 120 120 120
  ## select 9 blocks out of the grid of 24 x/y positions. Call those 9 positions &&used_pos
  set &&used_pos range 1 24 ## first just fill the array with 1 to 24
  set &&used_pos sample 9 from &&used_pos ## take 9 random numbers out of those 24
  ## Now we select of those 9 blocks a few for highlighting
  # select n blocks out of the 9 blocks for highlighting
  set &&tmpsequence range 1 9
  set &&corsi sample &Count from &&tmpsequence
  # mouse off so that people cannot mouse during sequence presentation
  mouse off 
  # show the nine purple blocks first (each trial, these will be different)
  show bitmap purple &&xpos[&&used_pos[1]] &&ypos[&&used_pos[1]]
  show bitmap purple &&xpos[&&used_pos[2]] &&ypos[&&used_pos[2]]
  show bitmap purple &&xpos[&&used_pos[3]] &&ypos[&&used_pos[3]]
  show bitmap purple &&xpos[&&used_pos[4]] &&ypos[&&used_pos[4]]
  show bitmap purple &&xpos[&&used_pos[5]] &&ypos[&&used_pos[5]]
  show bitmap purple &&xpos[&&used_pos[6]] &&ypos[&&used_pos[6]]
  show bitmap purple &&xpos[&&used_pos[7]] &&ypos[&&used_pos[7]]
  show bitmap purple &&xpos[&&used_pos[8]] &&ypos[&&used_pos[8]]
  show bitmap purple &&xpos[&&used_pos[9]] &&ypos[&&used_pos[9]]
  show bitmap done 350 250
  # now we are going to highlight some of the blocks (in yellow)
  # there will always at least be two yellow blocks
  # more yellow blocks depends on where we are in the expetiment (&Count)
  show bitmap yellow &&xpos[&&used_pos[&&corsi[1]]] &&ypos[&&used_pos[&&corsi[1]]]
  part delay
  show bitmap yellow &&xpos[&&used_pos[&&corsi[2]]] &&ypos[&&used_pos[&&corsi[2]]]
  part delay
  if &Count > 2
    show bitmap yellow &&xpos[&&used_pos[&&corsi[3]]] &&ypos[&&used_pos[&&corsi[3]]]
    part delay
  fi
  if &Count > 3
    show bitmap yellow &&xpos[&&used_pos[&&corsi[4]]] &&ypos[&&used_pos[&&corsi[4]]]
    part delay
  fi
  if &Count > 4
    show bitmap yellow &&xpos[&&used_pos[&&corsi[5]]] &&ypos[&&used_pos[&&corsi[5]]]
    part delay
  fi
  if &Count > 5
    show bitmap yellow &&xpos[&&used_pos[&&corsi[6]]] &&ypos[&&used_pos[&&corsi[6]]]
    part delay
  fi
  if &Count > 6
    show bitmap yellow &&xpos[&&used_pos[&&corsi[7]]] &&ypos[&&used_pos[&&corsi[7]]]
    part delay
  fi
  if &Count > 7
    show bitmap yellow &&xpos[&&used_pos[&&corsi[8]]] &&ypos[&&used_pos[&&corsi[8]]]
    part delay
  fi
  if &Count > 8
    show bitmap yellow &&xpos[&&used_pos[&&corsi[9]]] &&ypos[&&used_pos[&&corsi[9]]]
    part delay
  fi
  # go!
  sound gosignal
  mouse show  # now show cursor again
  delay 100   # not really necessary, but gives a bit of time between sound and people's response
  # read in sequence
  set &&clicked_positions 0 times &Count # array with 9 zeros, to be filled later
  set $x 0
  while $x != 10
    readmouse l 1 999999 range 1 10
    set $x UNDER_MOUSE
    if $x != 10
      set $counter increase
      set &&clicked_positions[$counter] $x
      set $my_x getx UNDER_MOUSE
      set $my_y gety UNDER_MOUSE
      show bitmap ticked $my_x $my_y ## show the tickmark exactly on the stimulus
    fi
  while-end
  # now check if sequence is correct
  set $the_same 0 # this means wrong, this is the default assumption
  if $counter == &Count ## at the very least, people need to have clicked same number as shown yellow images
    set $the_same arrays_equal &&corsi &&clicked_positions
  fi 
  ## feedback (a smiley or frowney face in bottom right corner)
  if $the_same == 1
    show bitmap correct 350 250
  fi
  if $the_same == 0
    show bitmap wrong 350 250
  fi
  delay 1000
  clear -1
  delay 1000
  ## now goto next seq if correct twice
  set $currentcount &Count
  if $the_same == 1
    set &corsispan &Count ## the best score so far
    set &Count increase
    set &ErrorCount 0    
  fi
  ## count errors in a row
  if $the_same == 0
    set &ErrorCount increase
  fi
  ## save data
  save &corsispan $currentcount $the_same
  ## if two errors in a row or if all are correctly clicked, end of task
  if &ErrorCount == 2 or &Count == 10
    end tasklist
  fi

block test
  message titlescreen
  message instructions
  bitmap ready3
  delay 1000
  bitmap ready2
  delay 1000  
  bitmap ready1
  delay 1000  
  tasklist
    corsi 100
  end
  feedback
    text 0 100 &corsispan ; prefix "Your Corsi span is " ; postfix " items."
    text 0 200 "Press space bar to continue"
  end

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

  • Corsi, P.M. (1972). Human memory and the medial temporal region of the brain. Doctoral Thesis at McGill University (Canada). Download from here. (in the search box, type "Corsi")

  • Kessels, R.P.C., van Zandvoort, M.J.E., Postman, A., Kapelle, L.J., & de Hand, E.H.F. (2000). The Corsi Block-Tapping Task: Standardization and Normative Data. Applied Neuropsychology, 7(4), 252-258.