User Manual: Inquisit One Card Learning Test


___________________________________________________________________________________________________________________	

								Millisecond Software One Card Learning Test (MS-OCL)
___________________________________________________________________________________________________________________	


Script Author: Katja Borchert, Ph.D. (katjab@millisecond.com) for Millisecond Software, LLC
Date: 04-18-2022
last updated:  05-03-2022 by K. Borchert (katjab@millisecond.com) for Millisecond Software, LLC

Script Copyright © 05-03-2022 Millisecond Software

___________________________________________________________________________________________________________________
BACKGROUND INFO 	
___________________________________________________________________________________________________________________
This script implements Millisecond Software's version of the One Card Learning Test (OCL),
a test of visual memory using a pattern separation paradigm.

Millisecond Software's implementation is based on the description of the test published by
White et al (2021).

The Millisecond Software implementation can be set to run the OCL-80 or the shortened OCL-48
design (White et al, 2021).
 
The MS-OCL is designed to be run on touchscreens but adapts to mouse use on non-touch screens.
Researchers can select to run the task with an absolute screen size to ensure that distances
stay the same across devices. The default settings are optimized for ipad touchscreens.
See section Editable Parameters for more info.

///Reference:///											
White, J.P., Schembri, A., Edgar,C.J., Lim, Y.Y., Masters, C.L., & Maruff, P. (2021).
A Paradox in Digital Memory Assessment: Increased Sensitivity With Reduced Difficulty.
Frontiers in Digital Health, 3, 1-12.
https://www.frontiersin.org/article/10.3389/fdgth.2021.780303 

___________________________________________________________________________________________________________________
TASK DESCRIPTION	
___________________________________________________________________________________________________________________

Participants get presented with a deck of cards (consisting of the regular 4 suits - 13 cards per suit) 
and the cards will be turned over one by one. Some of the cards will appear only once but some 
may appear more often.

Participants are asked to decide for each card whether they have seen the card before or not.
If they think they have seen the card before, they should press the 'Yes' response button.
If they think the card is new, they should press the 'No' response button. If the incorrect response button
is pressed it is highlighted in red and the card stays on screen until the correct response button is pressed.

Participants are instructed to respond as quickly and accurately as they can.

Once the correct response button is pressed, the button is highlighted in green and an animation is started that
'returns' the card back to the stack. The next trial is initiated once participants press a 'Home Button'. 
The 'Home Button' is implemented to ensure that response fingers are roughly equally distanced from both 
the no and yes button.

Researchers can select whether to run the task with an absolute screen size to ensure that home button-response
button distances stay the same across devices. The default settings are optimized for an ipad touchscreen.
___________________________________________________________________________________________________________________	
DURATION 
___________________________________________________________________________________________________________________	
the default set-up of the script takes approx.

OCL-80: ~10 minutes
OCL-48: ~7 minutes

___________________________________________________________________________________________________________________	
DATA FILE INFORMATION 
___________________________________________________________________________________________________________________
The default data stored in the data files are:

(1) Raw data file: 'ms_onecardlearningtest_raw*.iqdat' (a separate file for each participant)

build:						The specific Inquisit version used (the 'build') that was run
computer.platform:			the platform the script was run on (win/mac/ios/android)
date, time: 				date and time script was run 
subject:					with the current subject id
group: 						with the current group id
session:					with the current session id								
//Play Setup:
(parameter) runAbsoluteSizes:	true (1) = should run absolutely sized canvas (see parameters- canvasHeight_inmm)
								false (0) = should use proportionally sized canvas (uses width = 43*screenHeight)
								
canvasAdjustments:				NA: not applicable => parameters- runAbsoluteSize was set to 'false'
								0: parameters- runAbsoluteSize was set to 'true' and screen size was large enough
								1: parameters- runAbsoluteSize was set to 'true' BUT screen size was too small and 
								adjustments had to be made

playareaHeight_inmm:			the width of the play area in mm 
playareaWidth_inmm:				the height of the play area in mm 
display.canvasHeight:			the height of the active canvas ('playarea') in pixels
display.canvasWidth:			the width of the active canvas ('playarea') in pixels

px_per_mm:						the conversion factor to convert pixel data into mm-results for the current monitor
								(Note: the higher resolution of the current monitor 
								the more pixels cover the same absolute screen distance)
								This factor is needed if you want to convert pixel data into absolute mm data or the other way around
								
distance_homeButton_responsebutton_inmm:	the calculated distance (in mm) between center of homeButton and center of one of the response buttons 																														
								
(parameter) OCL_Version: 	the OCL version (OCL-80 or OCL-48) run by the script

//across test block//
numberTargetTrials:			the number of trials to present targets  
numberLureTrials: 			the number of trials to present lures			
numberFoilTrials: 			the number of trials to present foils
numberDistractors:			the number of distractor trials (lures + foils)

//per round: (each round presents the four targets - order random)
numberTargets_perRound: 	the number of target trials per round
numberDistractors_perRound: the number of distractor trials per round
numberRounds:				the number of rounds per test block

blockcode, blocknum:		the name and number of the current block (built-in Inquisit variable)
trialcode, trialnum: 		the name and number of the currently recorded trial (built-in Inquisit variable)
								Note: trialnum is a built-in Inquisit variable; it counts all trials run; even those
								that do not store data to the data file. 

target1:					stores the filename of target1	(club target)			 
target2:					stores the filename of target2	(diamond target)
target3:					stores the filename of target3  (hearts target)
target4:					stores the filename of target4	(spade target)	

iti:						the randomly selected intertrial interval (in ms) of the current trial
							Note: iti is added after participant presses the home button to start next trial
							
roundCounter:				the round counter

trialCounter: 				the trial counter across the entire test (does not reset per round)

countTargets: 				counts the number of targets run so far
countLures: 				counts the number of lures run so far
countFoils:					counts the number of foils run so far

trialType: 					1 = target trial
							2 = lure trial
							3 = foil trial
							(trial type is selected randomly with constraint that active lure stimuli can be selected)
							
cardType:					"new target" (for round1), "target", "lure", "foil" 

cardItemnumber: 			the itemnumber of the currently presented card
card: 						the filename of the currently presented card

corrRsp:					the correct response for the current card ("yes" or "no")
							Note: targets in round1 ('new target') have the correct response of 'no'.
							Starting with round2 the correct response for targets is 'yes'.
							For any other card, the correct response is always 'no'
							
							
firstResponse:				the first response button pressed in a trial (determines accuracy)							

//Built-in DVs
response:					the response of participant (button pressed)
							By design, this script will store the FINAL (corrected) response
							
correct:					correctness of response (1 = correct, 0 = error)
							By design, 'correct' refers to the FIRST response made (see values.firstResponse)

latency:					response latency (in ms); measured from: onset of card (NOT from last response)
							until FINAL (corrected) response


(2) Summary data file: 'ms_onecardlearningtest_summary*.iqdat' (a separate file for each participant)

inquisit.version:			Inquisit version run
computer.platform:			the platform the script was run on (win/mac/ios/android)
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 = script was not completed (prematurely aborted); 
							1 = script was completed (all conditions run)	
							
//Play Setup:
(parameter) runAbsoluteSizes:	true (1) = should run absolutely sized canvas (see parameters- canvasHeight_inmm)
								false (0) = should use proportionally sized canvas (uses width = 43*screenHeight)
								
canvasAdjustments:				NA: not applicable => parameters- runAbsoluteSize was set to 'false'
								0: parameters- runAbsoluteSize was set to 'true' and screen size was large enough
								1: parameters- runAbsoluteSize was set to 'true' BUT screen size was too small and 
								adjustments had to be made

playareaHeight_inmm:			the width of the play area in mm 
playareaWidth_inmm:				the height of the play area in mm 
display.canvasHeight:			the height of the active canvas ('playarea') in pixels
display.canvasWidth:			the width of the active canvas ('playarea') in pixels

px_per_mm:						the conversion factor to convert pixel data into mm-results for the current monitor
								(Note: the higher resolution of the current monitor 
								the more pixels cover the same absolute screen distance)
								This factor is needed if you want to convert pixel data into absolute mm data or the other way around
								
distance_homeButton_responsebutton_inmm:	the calculated distance (in mm) between center of homeButton and center of one of the response buttons 																														
							

(parameter) OCL_Version: 	the OCL version (OCL-80 or OCL-48) run by the script

//across test block//
numberTargetTrials:			the number of trials to present targets  
numberLureTrials: 			the number of trials to present lures			
numberFoilTrials: 			the number of trials to present foils
numberDistractors:			the number of distractor trials (lures + foils)

//targets:
target1:					stores the filename of target1	(club target)			 
target2:					stores the filename of target2	(diamond target)
target3:					stores the filename of target3  (hearts target)
target4:					stores the filename of target4	(spade target)

//Measures:
propCorrect:				proportion correct responses across all test trials
meanRT:						mean correct response time (in ms) across all test trials 

propCorrect_allTargets:		proportion correct responses across all trials that present the target cards
							Note: for the first four target presentations, the response is 'no'.
							For the remaining presentations, the correct response is 'yes'
							
propCorrect_activeTargets: proportion correct responses across all trials that present active targets
						   (active = previously seen at least once; starting from round2)

propCorrect_lures:			proportion correct responses across all lure trials

propCorrect_foils:			proportion correct responses across all foil trials	



			
___________________________________________________________________________________________________________________	
EXPERIMENTAL SET-UP 
___________________________________________________________________________________________________________________	

The Millisecond Implemention of the OCL goes as follows:

/////////////////////////////////////////////////////////////////////////////////////
1. Target/Lure/Foil Assignment: (see White et al, 2021, p.4)
/////////////////////////////////////////////////////////////////////////////////////

//Targets//
The script randomly picks one card from each of the four suits (clubs, diamonds, hearts, spades) 
with the following constraint:
- each of the four targets must have a different value

//Lures//
For each of the four targets, the script stores the same numerical value card of the remaining
three suits as lures.
Example: Target = ace of clubs =>  Lures: ace of diamonds, ace of hearts, ace of spades

//Foils//
The remaining cards from the deck are assigned to be Foils.


/////////////////////////////////////////////////////////////////////////////////////
2. Intro: 
/////////////////////////////////////////////////////////////////////////////////////
a self-paced short introduction block that can be repeated as often as needed
The demo card used for the instructions is not used for the actual game

/////////////////////////////////////////////////////////////////////////////////////
3. Test Block:
/////////////////////////////////////////////////////////////////////////////////////
OCL-80: 80 trials (32 Target trials, 12 Lure trials, 36 Foil trials; ratio target:distractor = 2:3)
OCL-48: 48 trials (24 Target trials, 6 Lure trials, 18 Foil trials; ratio target:distractor = 1:1)

The test block is divided internally into different rounds (each round presents the four targets once)
OCL-80: 8 Rounds => 10 trials per round: 4 Targets*, 6 distractors (either Foils or Lure** trials); order of trials within round randomly decided
OCL-48: 6 Rounds => 8 trials per round: 4 Targets*, 4 distractors (either Foils or Lure** trials); order of trials within round randomly decided

Notes:
- *Targets: targets get introduced during the first round at which point they are indistinguishable from foils 
(correct response is NO) => target repeats start with round2 (correct response for targets switches to YES)
-**Lures: the script only presents Lures if the corresponding Target has already been presented at least once,
thus valid Lures CAN be presented during round1.
For OCL-48, the selection of the 6 lures is randomly determined from the pool of 12.

Trial Sequence:
- iti-trial: participant is required to press the home button. Pressing the home button
starts the random intertrial interval (500-1500ms)
If the home button is not pressed within 2s, a reminder to press the home button is presented on screen
- card-trial: a new card is revealed; script waits until correct response is made
if incorrect response is made the card keeps sitting in the middle until correct response is made
Also: The correctly pressed button is 'rewarded' with a green frame; the incorrectly pressed button is marked by 
a red frame.
- card-feedback: 1000ms -> card is 'turned over and returned to deck'
(if the home button is pressed during the animation feedback, the random intertrial interval is started
immediately after the animation)

___________________________________________________________________________________________________________________	
STIMULI
___________________________________________________________________________________________________________________

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

provided by Millisecond Software - can be edited under section 'Editable Instructions'
The entire instructions are run by block.intro
You can can replace the instructions by creating your own block.intro or edit
the existing one.
___________________________________________________________________________________________________________________	
EDITABLE CODE 
___________________________________________________________________________________________________________________	
check below for (relatively) easily editable parameters, stimuli, instructions etc. 
Keep in mind that you can use this script as a template and therefore always "mess" with the entire code 
to further customize your experiment.

The parameters you can change are: