___________________________________________________________________________________________________________________ *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: