___________________________________________________________________________________________________________________ *Tracing Task* (optimized for the ipad) ___________________________________________________________________________________________________________________ Script Author: Katja Borchert, Ph.D. (katjab@millisecond.com) for Millisecond Software, LLC Date: 04-06-2022 last updated: 04-08-2022 by K. Borchert (katjab@millisecond.com) for Millisecond Software, LLC Script Copyright © 04-08-2022 Millisecond Software ___________________________________________________________________________________________________________________ BACKGROUND INFO ___________________________________________________________________________________________________________________ This script implements Millisecond Software's version of the NASA developed 'Tracing 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 Trace test also measures manual dexterity. The participant follows the outline of a geometric figure starting at the location of a small circle labelled “Start.” They trace along the outline in the direction indicated by an arrow. Feedback was provided on the path traced. Each block contained 5 trials. Each participant ran in twelve blocks of trials (2 directions x 2 repetitions x finger/stylus) for the long version and (2 repetitions x finger/stylus) for the short version of the test." ___________________________________________________________________________________________________________________ DURATION ___________________________________________________________________________________________________________________ the default set-up of this script takes appr. 7-8 minutes to complete ___________________________________________________________________________________________________________________ DATA FILE INFORMATION ___________________________________________________________________________________________________________________ The default data stored in the data files are: (1) Raw data file: 'tracingtask_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*/ TracingMechanism: "finger" vs. "stylus" TracingHand: "dominant" vs. "nondominant" vs. "left" vs. "right" runTracingCircle, true (1) or false (0) runTracingSquare: true (1) or false (0) runClockwise: true (1) of false (0) runCounterClockwise: true (1) of false (0) repetitions_percondition: number of repetitions per condition //Play Setup: parameter runAbsoluteSizes: true (1) = should run absolutely sized canvas (see canvasHeight_inmm) 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 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 playareaHeight_inmm: the width of the play area in mm playareaWidth_inmm: the height of the play area in mm TracingCircleDiameter_inmm: the diameter of the tracing circle in mm TracingSquareHeight_inmm: the diameter of the tracing square in mm trackWidth_inmm: the width of the tracks around the stimulus in mm (the area that is considered 'on track') //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 tracingStimCondition: 1 = circle; 2 = square trialCounter: trial counter per block respStatus: "down": the finger/stylus touched the target/start circle "move": finger/stylus is moving on screen "up-miss": finger/stylus was lifted off screen but has not reached the target circle "up-good": finger/stylus was correctly lifted of the target circle ontrack: 1 = the current mouse coordinates are on the track around the circle/square error_inpx: for coordinates 'ontrack' -> 0 if not on track: the number of pixels that finger/stylus is currently away from track negative values: the finger/stylus went inside the tracing stimulus ('inside error') positive values: the finger/stylus went outside the tracing stimulus ('outside error') CIRCLE condition: 'inside error': the (negative) pixel difference btw. inner track radius (in px) and distance from mouse coordinates to circle center 'outside error': the (positive) pixel difference btw. outer track radius (in px) and distance from mouse coordinates to circle center => see expressions.TracingCircle_error_inpx Square condition: 'inside error': script returns the minimum of 4 possible distances to the inner track (Note: 'benefit of a doubt' coding) 1. vertical distance to top inner track 2. vertical distance to bottom inner track 3. horizontal distance to left inner track 4. horizontal distance to right inner track 'outside error': script determines in which of 8 possible locations (relative to the tracing square) the coordinates fall into 1. directly above: returns the difference in y coordinates of the outer track and the mouse coordinates 2. directly below: returns the difference in y coordinates of the outer track and the mouse coordinates 3. directly left: returns the difference in x coordinates of the outer track and the mouse coordinates 4. directly left: returns the difference in x coordinates of the outer track and the mouse coordinates the remaining locations return the distance of the mouse coordinates to the nearest corner of the outer track => see expressions.TracingSquare_error_inpx error_x_inpx: the horizontal x mouse/finger coordinate at time of error error_y_inpx: the vertical y mouse/finger coordinate at time of error meanTrialError_inpx: the mean of all 'error_inpx' values across the trial (measure only is based on absolute values => of interest is the absolute distance) in the current trial calculated at the end of each trial onTargetZone: 1 = mouse/finger coordinates are currently on the Target Zone; 0 = otherwise leftTargetZone: 1 = mouse/finger coordinates have moved on from initial touchdown on Target Zone; 0 = otherwise reachedTargetZone: 1 = mouse/finger coordinates have reached Target Zone again after once leaving it; 0 = otherwise success: 1 = the mouse/finger coordinates have left Target Zone and have reached Target Zone during the trial at time of finger lift-off 0 = otherwise //Latency: tracingRT: the time (in ms) it took from down response to up response (successful or not) //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 TargetZone_center_x_inpx: the horizontal x-pixel position of the target/start circle TargetZone_center_y_inpx: the vertical y-pixel position of the target/start circle TargetZoneDiameter_inpx: the pixel diameter of the target/start circle //Inquisit built-in variables response: the response of participant Example: 'mousemove' => mouse coordinate change was noted 'lbuttonup' => lift-up response or the name of the stimulus that was touched correct: correctness of response Example: trial.tracingCircle_tracing_end 1 = participant lifts finger off the screen when values.success = 1 0 = any other response latency: continuous trial latency (in ms); measured from: onset trial until lift-off response (2) Summary data file: 'tracingtask_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*/ TracingMechanism: "finger" vs. "stylus" TracingHand: "dominant" vs. "nondominant" vs. "left" vs. "right" runTracingCircle, true (1) or false (0) runTracingSquare: true (1) or false (0) runClockwise: true (1) of false (0) runCounterClockwise: true (1) of false (0) repetitions_percondition: number of repetitions per condition //Play Setup: /runAbsoluteSizes: true (1) = should run absolutely sized canvas (see canvasHeight_inmm) 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 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 to compare error distances across screens /playareaHeight_inmm: the width of the play area in mm /playareaWidth_inmm: the height of the play area in mm TracingCircleDiameter_inmm: the diameter of the tracing circle in mm TracingSquareHeight_inmm: the diameter of the tracing square in mm trackWidth_inmm: the width of the tracks around the stimulus in mm (the area that is considered 'on track') //Latency Data// //across clockwise and counterclockwise direction, by circle and square medianRT_circle: median tracing RT (in ms) for circle condition trials z_RT_circle: z-score of medianRT_circle using norming data from Beard (2020, p.22) for finger/stylus (depends on parameters.tracingMechanism) Notes: see Beard (2020, Appendix F, p.67/68) for a complete overview of their results 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 p_RT_circle: percentile of z_RT_circle !The norming sample may not be the appropriate comparison group for your participants and/or study design! medianRT_square: median RT (in ms) for square condition trials z_RT_square: z-score of medianRT_square using norming data from Beard (2020, p.22) for finger/stylus (depends on parameters.tracingMechanism) Notes: see Beard (2020, Appendix F, p.67/68) for a complete overview of their results 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 p_RT_square: percentile of z_RT_square !The norming sample may not be the appropriate comparison group for your participants and/or study design! //by direction: medianRT_circle_c: median RT (in ms) in clockwise, circle condition medianRT_circle_cc: median RT (in ms) in counterclockwise, circle condition medianRT_square_c: median RT (in ms) in clockwise, square condition medianRT_square_cc: median RT (in ms) in counterclockwise, square condition *median tracing RT = median time (in ms) it took for participant to successfully complete a trial //Error Data// //across clockwise and counterclockwise direction: median_pixelError_circle: median pixel errors in circle condition median_pixelError_square: median pixel errors in square condition (see 'error_inpx' - under raw data- for explanation of how pixel errors were computed in this script. Because this computation might be different from Beard (2022), the error norming data on p.23 was not used in this script) //Pixel Error Data median_pixelError_circle_c: median pixel errors in clockwise, circle condition median_pixelError_circle_cc: median pixel errors in counterclockwise, circle condition median_pixelError_square_c: median pixel errors in clockwise, square condition median_pixelError_square_cc: median pixel errors in counterclockwise, square condition ___________________________________________________________________________________________________________________ EXPERIMENTAL SET-UP ___________________________________________________________________________________________________________________ By default, this script runs 4 different conditions with 1 repetition per condition: 2 tracing stimuli (circle, square) x 2 directions (clockwise vs. counterclockwise) x 1 reps The order of the resulting 4 conditions is selected at random. Each condition runs 3 blocks of 5 trials each (12 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 - tracing stimuli (circle/square) conditions to run - rotation (clockwise, counterclockwise) conditions to run - block/trial/repetition numbers - performance feedback settings - automated task demo ___________________________________________________________________________________________________________________ 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: