Here is a 3D rendering of the block test that Derek from University of Iowa put on the internet:
The fact that the stimuli are 3D blocks in the original is sort of irrelevant. It is convenient because the experimenter can see the codes written on the back sides of the blocks, but the blocks are never moved around, stacked, or anything, and the 3rd dimension remains pretty much unused.
Probably one of the best recent descriptions of the test was in a paper by Kessels et al. (2000). They made an attempt to come up with a standardized version of the test, including instructions, apparatus configuration, specific trials, scoring measures, and some initial norms. Kessels intent was to describe a standard version of the test so that others could implement it in the future, improving consistency and replicability. And thanks to them, implementing the test in PEBL was a breeze.
First, I needed to create the stimulus screen. Kessels described the coordinates in mm, based on 30 mm blocks. I created a function that returned these coordinates, but scaled and shifted according to a preset amount. This way, if you need to adjust to fit a particular screen, or you want to match 30 mm block sizes with a touch screen monitor, it can all be done by adjusting a single value. By default, the scaling factor is 3, meaning 3 pixels per mm, or that the blocks will have 90 pixel sides. It is controlled by the gScale parameter near the top of the script:
gScale <- 3 ##scale between mm and pixels.
Now, we need to display stimuli at the locations. I used the Square() function to create squares of the proper size in Navy Blue, and place them in the proper locations: Here is the standard configuration:
I'd like to allow for 'random' target locations. Luckily, I can reuse a layout routine from the PEBL Trailmaking Test to find locations for 9 blocks that don't overlap. This way, if you want to, you can choose to use the 'standard' Corsi configuration or create new block locations on each trial. If you want to use the test repeatedly, you might want to use different arrangements.
Kessels also described a set of stimulus sequences to use. The argument for using these is that they tend to avoid things like smooth spatial tracks that could make a trial much easier. But having non-randomized trials could create confounds: what if the longer trials are unintentionally easier or harder than shorter ones? Or what if you want to use the task repeatedly on the same subjects? It is easy to create random trials, which I will give the option for in case one wants to use the test repeatedly and prevent subjects from learning the sequences. An easy way to sample n numbers between 1 and 9 in a random order is:
sequence <- SampleN(Sequence(1,9,1),n)
To present the stimuli, I created a tenth square in a light color and move that to the locations in the stimulus sequence, 1 second per stimulus.
When the list is done, we need to collect the responses. Recall is performed by by clicking or tapping (with a touch-screen) the blocks in the order of presentation. This is simple using the WaitForClickOnTarget() function--we just feed it the target objects and a sequence of IDs, along with an additional label with the word 'done' on it. Then loop until the done button is clicked.
Overall, the test attempts to be a faithful implementation of Kessel's description, but with some parameters that allow greater flexibility. These parameters are all at the top of the corsi.pbl file, which are repeated here:
gUseCorsiPoints <- 1 ## Use standard locations or regenerate
## on each trial?
##By default, this uses Kessel's recommendations.
##Basically, start at length 2, use 2 trials per length, and
##continue to the next length whenever at least one was recalled
gUseKessel <- 1 ## Use Kessel trials? (Should be used
## with corsi points)
##alternately, you can generate the trials at random.
gStartLength <- 2 ## If gUseKessel <- 0, it creates a
## random stimulus sequence
## with these parameters
gEndLength <- 9
gTimesPerLength <- 2 ##
gISI <- 1000 ## Inter-stimulus interval in ms
gITI <- 1000 ## inter-trial interval.
gWait <- 500 ## How long to 'go to each room'
gStimColor <- MakeColor("navy")
gHighlightColor <- MakeColor("khaki")
gScale <- 3 ##scale between mm and pixels.
Kessels, R. P. C., van Zandvoort, M. J. E., Postma, A., Kappelle, L. J., & de Haan, E. H. F. (2000). The Corsi Block-Tapping Task: Standardization and Normative Data. Applied Neuropsychology, 7(4), 252-258.
Corsi, P. M. (1972). Human memory and the medial temporal region of the brain. Dissertation Abstracts International, 34, 819B.