User Manual: Inquisit Nasa Pointing Task


___________________________________________________________________________________________________________________	

								*Pointing Task*
								(optimized for the ipad)
___________________________________________________________________________________________________________________	

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

Script Copyright © 04-10-2024 Millisecond Software

___________________________________________________________________________________________________________________
BACKGROUND INFO 	
___________________________________________________________________________________________________________________
This script implements Millisecond Software's version of the NASA developed 'Pointing Task',
a measure of manual dexterity.

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.

References:
										
Bettina L. Beard (2020).
The Cognition and Fine Motor Skills Test Batteries: Normative Data and Interdependencies
Technical Memorandum (TM) 20205008023.
https://ntrs.nasa.gov/citations/20205008023	
Public Access

ipad App ('Fine Motor Skills'); free App from Apple App Store 
Note: the ipad App data/implementation may differ from the one collected by the Inquisit script

___________________________________________________________________________________________________________________
TASK DESCRIPTION	
___________________________________________________________________________________________________________________

description from Beard (2020):

"The Point test also measures manual dexterity. A ring of 16 squares is presented. The task is
to tap the highlighted square. The top square is always highlighted first. An arrow indicates if
the highlighted square will travel clockwise or counterclockwise around the ring. As soon as
the participant taps the highlighted square, it is de-emphasized and the square on the opposite
side of the ring is highlighted.Each block contained 18 trials."

___________________________________________________________________________________________________________________	
DURATION 
___________________________________________________________________________________________________________________	
the default set-up of this script takes appr. 7-8 minutes to complete

___________________________________________________________________________________________________________________	
DATA OUTPUT DICTIONARY
___________________________________________________________________________________________________________________
The fields in the data files are:

(1) Raw data file: 'pointingtask_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, group: 					with the current subject/groupnumber
session:							with the current session id

/*Parameter Settings*/																				
pointingMechanism:					"finger" vs. "stylus" 
pointingHand:						"dominant" vs. "nondominant" vs. "left" vs. "right"
runDiameter1:						true (1) or false (0)
runDiameter2:						true (1) or false (0)
runClockwise: 						true (1) of false (0)
runCounterClockwise: 				true (1) of false (0)					 
repetitionsPerCondition:			number of repetitions per condition 

//Play Setup: parameter
runAbsoluteSizes:					true (1) = should run absolutely sized canvas (see canvasHeightMM)
									false (0) = should use proportionally sized canvas (uses width = 4/3*screenHeight)
								
canvasAdjustments:					N/A: not applicable => runAbsoluteSize was set to 'false'
									0: runAbsoluteSize was set to 'true' and screen size was large enough
									1: runAbsoluteSize was set to 'true' BUT screen size was too small and 
									adjustments had to be made
									
//UI data:									

display.canvasHeight:				the height of the active canvas ('playarea') on the current monitor in pixels
display.canvasWidth:				the width of the active canvas ('playarea') on the current monitor in pixels

pxPerMM:							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									

playAreaHeightMM:				the width of the play area in mm 
playAreaWidthMM:					the height of the play area in mm 										
																				
circleDiameter1PX:				the circle1 diameter in canvas pixels 
circleDiameter1MM:				the circle1 diameter in mm size
circleDiameter2PX:				the circle2 diameter in canvas pixels 
circleDiameter2MM:				the circle2 diameter in mm size


//raw data: trial by trial
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.
									
conditionCounter:					counts the number of conditions run 
blockCounter:						counts the number of blocks run per condition									
																				
currentCondition:					1 = diameter1, clockwise; 2 = diameter1, counterclockwise;
									3 = diameter2, clockwise; 4 = diameter2, counterclockwise
									
conditionRepetition:				number of times the current condition has been presented									
																														
direction:							1 = clockwise; 2 = counterclockwise 
circleCondition:					1 = circle1 diameter; 2 = circle2 diameter 
circleDiameterPct:					the percentage height of the current circle diameter (relative to canvas height)

trialCount:							custom trialcounter (per block)
									Note: a trial ends with the lift-up movement of the current target box
									and a new trial is initiated right away.
									A trial in this implimentation can span several responses
									that will be noted in the data file.
									
box:								the number of the current target box (1-16)
									note: the top box is number 12 and numbering continues clockwise
									
respStatus:							down = first touch down on target box
									down-corrected = touch down on target box after a previous error down response
									down-outside = an error touch down somewhere outside the boxes
									down-wrg-box,X = an error touch down on an incorrect box (X = box number)
									up-inside = an up response from inside the target box (this response ends a trial)
									up-outside = an up response from an error location

//custom accuracy measure									
acc:								1 = the current up response is from within target box; 
									0 = any other response 

//custom Latency Measures:
respRTMS:							the time (in ms) that passed from last response to current one
									Note: the first down response in a block will be at 0 because 
									there is no other previous response

sumRespRTMS:						the continuous sum of all RespRTMS

trialRTMS:							the duration (in ms) of the trial; measured from start of trial until 
									the correct up-response from the target box
									Note: the first trial in a block starts with the first down response,
									thus trialRTMS of the first trial (trialCount = 1) is likely shorter and is
									NOT considered for summary statistics.

//Coordinate Measures
mouse.x:							the x coordinate of the finger at the time of the currently measured response
mouse.y:							the y coordinate of the finger at the time of the currently measured response 

targetBoxXPX:					the x-coordinate of the current target box center  
targetBoxYPX:					the y-coordinate of the current target box center

errorXPX:						the difference btw. (targetboxXPX - mouse.x) 
									positive = finger touched down to the left of target box center; 
									negative = finger touched down to the right of target box center;

errorYPX:						the difference btw. (targetboxYPX - mouse.y) 
									positive = finger touched down above the target box center; 
									negative = finger touched down below target box center;
																		
errorPX:							the pixels by which the ERROR DOWN-response missed the target box
									=> IF (leftborder of targetbox <= errorXPX <= rightborder of targetbox) => errorYPX represent the missed pixels (basically going straight up or down would have hit the box)
									=> IF (topborder of targetbox <= errorYPX <= bottomborder of targetbox) => errorXPX represent the missed pixels (basically going straight left or right would have hit the box)
									=> in any other case, the hypothenuse of sqrt = [pow(errorXPX,2) + pow(errorYPX,2)] represents the missed pixels
																		
errorDistanceFingerTargetPX: 	measured for each ERROR DOWN-response
									the pixel distance from the touch response to the CENTER of the target box

targetDistancePX:				the ideal pixel distance from center of previous box to target box
actualDistancePX:				the actual pixel distance from center of previous box at FIRST touchdown

downResponseCount:					counts the number of down responses made during the current trial 
upResponseCount:					counts the number of up responses made during the current trial	
									Note: only the up-response from within the target box ends a trial
									(see 'respStatus'), up until then participant can make many down and
									up responses
										
//Inquisit built-in variables
response:							the response of participant (scancode of response button)
									'lButtonDown' => touchdown
									'lButtonUp' => lift-up response

correct:							correctness of response
									1 = participant lifts finger off the target box
									0 = any other response

latency:							continuous trial latency (in ms); measured from: onset of blue box 
									until lift-off response from target box (= trial end)
									Note: the last up-response in a trial shows the complete trial duration in ms
									

(2) Summary data file: 'pointingtask_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)

/*Parameter Settings*/										
pointingMechanism:					"finger" vs. "stylus" 
pointingHand:						"dominant" vs. "nondominant" vs. "left" vs. "right"
runDiameter1:						true (1) or false (0)
runDiameter2:						true (1) or false (0)
runClockwise: 						true (1) of false (0)
runCounterClockwise: 				true (1) of false (0)					 
repetitionsPerCondition:			number of repetitions per condition 

//Play Setup:
/runAbsoluteSizes:					true (1) = should run absolutely sized canvas (see canvasHeightMM)
									false (0) = should use proportionally sized canvas (uses width = 4/3*screenHeight)
								
/canvasAdjustments:					N/A: not applicable => runAbsoluteSize was set to 'false'
									0: runAbsoluteSize was set to 'true' and screen size was large enough
									1: runAbsoluteSize was set to 'true' BUT screen size was too small and 
									adjustments had to be made

display.canvasHeight:				the height of the active canvas ('playarea') on the current monitor in pixels
display.canvasWidth:				the width of the active canvas ('playarea') on the current monitor in pixels

pxPerMM:							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									

/playAreaHeightMM:				the width of the play area in mm 
/playAreaWidthMM:				the height of the play area in mm 										
																				
circleDiameter1PX:				the circle1 diameter in canvas pixels 
circleDiameter1MM:				the circle1 diameter in mm size
circleDiameter2PX:				the circle2 diameter in canvas pixels 
circleDiameter2MM:				the circle2 diameter in mm size

//Latency Data//
//Note: the first trial in a block is excluded from summary variables
//as the trial duration starts with first down response (all other trials start after the last up response)

//across clockwise and counterclockwise direction, by radius1 and radius2
medianRTR1: 			median RT (in ms) for radius1 condition trials

zRTR1: 				z-score of medianRTR1 u(sing norming data from Beard (2020, p.22) for fingers only
						Notes: see Beard (2020, Appendix F, p.67/68) for a complete overview of their results
						For the pointing task:
						1. it didn't seem to matter whether to run 1 or 2 repetitions
						2. it didn't seem to matter whether to use fingers or stylus
						3. it didn't seem to matter whether to use the long version or the short version
						4. the radius of the circle mattered => this z-score computation assumes that the boxes 
						were approx. 2 cm (Millisecond's assumption. Beard (2020) refers to 'in' - however
						a circle with boxes 2 inches apart from each other wouldn't fit on an ipad) away from each other
						Norming sample described in Beard (2020, p.8)
						Keep in mind: The norming sample may not be the appropriate comparison group for your participants 
						and/or study design

pRTR1:				percentile of zRTR1
						!The norming sample may not be the appropriate comparison group for your participants 
						and/or study design!

medianRTR2: 			median RT (in ms) for radius2 condition trials

zRTR2: 				z-score of medianRTR2 u(sing norming data from Beard (2020, p.22) for fingers only
						Notes: see Beard (2020, Appendix F, p.67/68) for a complete overview of their results
						For the pointing task:
						1. it didn't seem to matter whether to run 1 or 2 repetitions
						2. it didn't seem to matter whether to use fingers or stylus
						3. it didn't seem to matter whether to use the long version or the short version
						4. the radius of the circle mattered => this z-score computation assumes that the boxes were 
						approx. 1.5 cm (Millisecond's assumption. Beard (2020) refers to 'in' - however
						a circle with boxes 1.5 inches apart from each other wouldn't fit on an ipad) away from each other
						Norming sample described in Beard (2020, p.8)
						Keep in mind: The norming sample may not be the appropriate comparison group for your participants 
						and/or study design
						
pRTR2:				percentile of zRTR2
						!The norming sample may not be the appropriate comparison group for your participants and/or study design!


//by direction:
medianRT1C:			median RT (in ms) in clockwise, circle1 condition across all blocks for radius 1 condition
medianRT1CC:			median RT (in ms) in counterclockwise, circle1 condition across all blocks for radius 1 condition
medianRT2C:			median RT (in ms) in clockwise, circle2 condition across all blocks for radius 2 condition
medianRT2CC:			median RT (in ms) in counterclockwise, circle2 condition across all blocks for radius 2 condition
*median RT = median time (in ms) it took for participant to successfully complete a trial 
(=successful up response from target box)

//Error Data//
//across clockwise and counterclockwise direction:
medianPixelErrorR1:		median pixel errors in circle1 condition
medianPixelErrorR2:		median pixel errors in circle2 condition
(see 'errorPX' - under raw data- for explanation of how each pixel error was computed in this script.
Because this computation might be different from Beard (2022), the norming data on p.23 was not
used in this script)
 
//Pixel Error Data
medianPixelError1C:		median pixel errors in clockwise, circle1 condition across all blocks
medianPixelError1CC:		median pixel errors in counterclockwise, circle1 condition across all blocks
medianPixelError2C:		median pixel errors in clockwise, circle2 condition across all blocks
medianPixelError2CC:		median pixel errors in counterclockwise, circle2 condition across all blocks
									
___________________________________________________________________________________________________________________	
EXPERIMENTAL SET-UP 
___________________________________________________________________________________________________________________	

By default, this script runs 4 different conditions with 1 repetition per condition:
2 circle radii x 2 directions (clockwise vs. counterclockwise) x 1 reps
The order of the resulting 4 conditions is selected at random.
Each condition runs 5 blocks of 18 trials each (20 blocks total), followed by a self-paced break.
By default, participants receive optional performance feedback at script conclusion.

Check section 'Editable Parameters' for parameters that control
- circle diameter conditions to run
- rotation (clockwise, counterclockwise) conditions to run
- block/trial/repetition numbers
- performance feedback settings
- automated task demo

You can easily customize the experimental design by changing them.
___________________________________________________________________________________________________________________	
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 instructions are based on Beard (2020, p.58 - Appendix D)
___________________________________________________________________________________________________________________	
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: