Return to the Useful Field of View Test (UFOV) page
___________________________________________________________________________________________________________________	

										USEFUL FIELD OF VIEW TEST (UFOV)
___________________________________________________________________________________________________________________	

Script Author: Katja Borchert, Ph.D. (katjab@millisecond.com) for Millisecond Software, LLC
Date: 11-28-2019
last updated: 07-01-2020 by K.Borchert (katjab@millisecond.com) for Millisecond Software LLC

Script Copyright © 07-01-2020 Millisecond Software

___________________________________________________________________________________________________________________
BACKGROUND INFO 	
___________________________________________________________________________________________________________________	
This script implements a computerized version of the Useful Field of View Test (UFOV), a measure of 
processing speed and attention that is said to predict driving performance in older adults.

References:

Ball, K., Beard, B., Roenker, D., Miller, R., & Griggs, D. (1988). Age and visual search: 
Expanding the useful field of view.  
Journal of the Optical Society of America. A, Optics and Image Science, 5(12), 2210-9.

Edwards, J. D., Vance, D. E., Wadley, V. G., Cissell, G. M., Roenker, D. L., & Ball, K. K. (2005). 
Reliability and validity of useful field of view test scores as administered by personal computer. 
Journal of Clinical and Experimental Neuropsychology, 27, 529–543.

UFOV Manual Version 6.1.4 (revised 6/09)

UFOV Assessment Manual: https://www.visualawareness.com/wp-content/uploads/2019/04/UFOV-Assessment-Manual.pdf
(version 6.20.2018)

___________________________________________________________________________________________________________________
TASK DESCRIPTION	
___________________________________________________________________________________________________________________	

This tests runs a Useful Field of View Procedure.
The test consists of 3 subtests:

Subtest1: Processing Speed 
This 2 forced-choice task estimates the processing threshold for the presentation of stimuli 
in the center of the screen.
Participants are asked: "what object was located in the center?"

Subtest2: Divided Attention
This choice task estimates the processing threshold for the presentation of stimuli in the center of the screen
while also having to pay attention to the location of a peripheral stimulus.
Task1: which object was presented in the center?
Task2: where was the peripheral object located?

Subtest3: Selective Attention
This choice task is similar to subtest2 but 'hides' the peripheral object within 47 distractor triangles.
This choice task estimates the processing threshold for the presentation of stimuli in the center of the screen
while also having to pay attention to the location of a peripheral stimulus that is hidden amongst distractor items.
Task1: which object was presented in the center?
Task2: where was the peripheral object located?

Note: the implemented procedure assumes a monitor refreshrate of 60 Hz

___________________________________________________________________________________________________________________	
DURATION 
___________________________________________________________________________________________________________________	
the default set-up of the script takes appr. 10 minutes to complete

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

(1) Raw data file: 'usefulfieldofview_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

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. 
																				
display.refreshrate:				the refreshrate of the current monitor (Note: default timings are based on a 60Hz refreshrate) 
display.refreshinterval:			the ms a frame is presented before it is refreshed (Note: for a 60Hz monitor, the refreshinterval is 16.67ms)
				
expressions.displayheight_inmm:		the height of the current monitor in mm
parameters.circleRadius_percent:	the radius of the circle (in canvas height percent) around the center used on the current monitor (= distance from peripheral stimulus to center)
parameters.stimImageSize_percent:	the image size of the car/truck stimuli (in canvas height percent) used on the current monitor
parameters.fixationBoxSize_percent:	the image size of fixation box (in canvas height percent) used on the current monitor


trialCount:							block trial counter
										
centerStim:							1 = car
									2 = truck
										
peripheralPosition:					1-8 (position of '1' is at 12 0'clock; positioning clockwise)

targetFrames:						the current frame number with which the staircase stimuli are presented 
staircase_currentDirection:			"down" or "up" 

response:							stores the response of the current trial
										center Stim trials: "car" vs. "truck" (the center stim selected by participant)
										peripheral position trials: "number1" - "number8" (the peripheral position selected by participant) 

correct:							1 = current response was evaluated to be correct
									0 = current response was evaluated to be incorrect
										
finalCorrect:						subtest1: 1 = correct center stim was selected; 0 = otherwise
									subtest2/3: 1 = correct center stim AND correct peripheral position was selected; 0 = otherwise
										
latency:							the response latency in ms (measured from onset of response buttons)
 
reversal:							1 = the current response indicates a reversal of the direction of the staircase
									0 = the current response does not indicate a reversal of the direction of the staircase
										
stopProcedure:						1 = staircase will stop running; 0 = staircase has not reached stop criterium yet  

threshold:							the estimated stimulus duration (in ms) threshold 
										(in most cases: mean of all collected thresholds by staircase) 

list.reversalPoints.itemcount:		stores the number of reversal points collected by staircase procedure

targetOnset_inms:					stores the timing of the centerStim onset in ms 
maskOnset_inms:						stores the timing of the mask onset in ms 
maskOffset_inms:					stores the timing of the mask offset in ms	(= onset of response buttons)									


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

computer.platform:						the platform the script was run on (win/mac/ios/android)
script.startdate:						date script was run
script.starttime:						time script was started
script.subjectid:						assigned subject id number
script.groupid:							assigned group id number
script.sessionid:						assigned session id number
script.elapsedtime:						time it took to run script (in ms); measured from onset to offset of script
script.completed:						0 = script was not completed (prematurely aborted); 
										1 = script was completed (all conditions run)
								
display.refreshrate:					the monitor refreshrate (Note: script assumes a monitor refreshrate of 60Hz) 
display.refreshinterval:				the refreshinterval in ms (Note: on 60Hz monitors, the refreshinterval will b 16.67ms)

expressions.displayheight_inmm:			the height of the current monitor in mm
parameters.circleRadius_percent:		the radius of the circle (in canvas height percent) around the center used on the current monitor (= distance from peripheral stimulus to center)
parameters.stimImageSize_percent:		the image size of the car/truck stimuli (in canvas height percent) used on the current monitor
parameters.fixationBoxSize_percent:		the image size of fixation box (in canvas height percent) used on the current monitor

Practice Performance:

practicePropCorrect_subtest1:			proportion correct of the last 4 practice trials for subtest1
practiceTrialCount_subtest1:			number of practice trials run for subtest1 (4-16)
practicePropCorrect_subtest2:			proportion correct of the last 4 practice trials for subtest2
practiceTrialCount_subtest2:			number of practice trials run for subtest2 (4-16)
practicePropCorrect_subtest3:			proportion correct of the last 4 practice trials for subtest3
practiceTrialCount_subtest3:			number of practice trials run for subtest3 (4-16)

Test Performance:

subtest1_threshold: 					the estimated intensity thresholds (in mm) of subtest1
subtest2_threshold: 					the estimated intensity thresholds (in mm) of subtest2 
subtest3_threshold: 					the estimated intensity thresholds (in mm) of subtest3								
								

* separate data files: to change to one data file for all participants (on Inquisit Lab only), go to section
'DATA' and follow further instructions
___________________________________________________________________________________________________________________	
EXPERIMENTAL SET-UP 
___________________________________________________________________________________________________________________

(I) SubsetSelection Screen: optional (see setting of parameters.showSubtestSelectionScreen); 
by default it does not run

The subsetSelection screen provides test administrators access to select individual subtests to run.

(II) Subtest 1:
Main Task: Central stimulus: car or truck? 

(A) Practice: max 16 trials
- the duration of the center stimulus is: 20 frames (on a 60Hz monitor: ~333ms)
- after 20 frames the center stimulus is erased by a mask for 500ms
- two response buttons provided: a truck (on the left) vs. a car (on the right)
- no accuracy feedback provided
- every 4 trials, accuracy is checked: if performance is 3/4 correct or higher,
the test will begin. Otherwise another round of 4 practice trials is started until all
16 trials have run. The test will start after 16 trials regardless of final practice
performance.

(B) Test: variable trial number
- duration of stimulus presentation is 17ms - 500ms
- the (75%) threshold is estimated using an adaptive staircase procedure (see below for more details)
- no accuracy feedback


(III) Subtest 2: (Note: subtest 2 is only run if subtest 1 yielded a threshold lower than the maximum duration of 500ms)

Main Task: central stimulus check + peripheral stimulus on 8 possible radials 
(Note: the distance btw. peripheral stimulus and center is fixed)
- what was the center stimulus?
- on which radial was the peripheral stimulus (always a car) located?

(A) Practice: max 16 trials
- the duration of the center stimulus is: 20 frames (on a 60Hz monitor: ~333ms)
- after 20 frames the center stimulus is erased by a mask for 500ms
- two response buttons provided: a truck (on the left) vs. a car (on the right)
- no accuracy feedback provided
- every 4 trials, accuracy is checked: if performance is 3/4 = 0.75correct or higher,
the test will begin. Otherwise another round of 4 practice trials is started until all
16 trials have run. The test will start after 16 trials regardless of final practice
performance.
Note: correct performance = getting the center stimulus correct AND getting the radial correct on which
the peripheral stimulus was located

(B) Test: variable trial number
- duration of stimulus presentation is 17ms - 500ms
- the (75%) threshold is estimated using an adaptive staircase procedure (see below for more details)
- no accuracy feedback


(IV) Subtest 3: (Note: subtest 3 is only run if subtest 1/2 yielded a threshold lower than the maximum duration of 500ms)

Main Task: central stimulus check + peripheral stimulus on 8 possible radials. Peripheral
stimulus is 'hidden' amongst 47 distractor triangles. 
(Note: the distance btw, peripheral stimulus and center is fixed)
- what was the center stimulus?
- on which radial was the peripheral stimulus (always a car) located?

(A) Practice: max 16 trials
- the duration of the center stimulus is: 20 frames (on a 60Hz monitor: ~333ms)
- after 20 frames the center stimulus is erased by a mask for 500ms
- two response buttons provided: a truck (on the left) vs. a car (on the right)
- no accuracy feedback provided
- every 4 trials, accuracy is checked: if performance is 3/4 = 0.75correct or higher,
the test will begin. Otherwise another round of 4 practice trials is started until all
16 trials have run. The test will start after 16 trials regardless of final practice
performance.
Note: correct performance = getting the center stimulus correct AND getting the radial correct on which
the peripheral stimulus was located

(B) Test: variable trial number
- duration of stimulus presentation is 17ms - 500ms
- the (75%) threshold is estimated using an adaptive staircase procedure (see below for more details)
- no accuracy feedback


Implemented Staircase procedure in this script: best guess effort by Millisecond Software

This script uses an adaptive staircase procedure (see UFOV Assessment Manual - June 20, 2018, p.10) 
to estimate the threshold for each of the three subtests.
The stepsize adjustment procedure implemented in this script follows the description of the UFOV Manual (June 20, 2018)
and fills in missing information as best as possible.
Edwards et al (2005) describes the purpose of the UFOV staircase procedure to find 
the intensity threshold at which participants are 75% correct.

Adaptive Staircase Procedure:

Per UFOV Manual (June 20, 2018, p.10):
- the starting stepsize is 3 frames (50ms on a 60Hz monitor)
- after the first incorrect response (excluding the first response), the stepsize is reduced to 1 frame (16.67 ms on a 60 Hz monitor)
- 3 correct responses at the fastest presentation rate or 3 incorrect responses at 
the slowest presentation rate (for the slowest: if more than 10 trials were run) will stop the procedure


Starting Frames for Staircase: (Note: best guess effort by Millisecond Software)

Subtest1: 
staircase ('down') starts at 20 frames (on a 60Hz monitor: ~333ms) unless practice performance < 75% after 16 trials. 
In that case, staircase starts at 25 frames (on a 60Hz monitor: ~417ms)

Note:
From UFOV Manual Version 6.1.4 (p.8):
"Failure to adequately perform the Subtest after 16 practice trials indicates that the examinee's threshold is 
above the practice level and will be measured by UFOV."

Subtest2:
staircase ('down') increases the subtest1 threshold by 5 frames (on a 60Hz monitor: ~84ms)
Note: 
* if max/min frames are hit => use max/min frames
* if no subtest1 threshold were determined, use parameters.downward_startingFrames

Subtest3:
staircase ('down') increases the subtest3 threshold by 5 frames (on a 60Hz monitor: ~84ms)
Note: 
* if max/min frames are hit => use max/min frames
* if no subtest2 threshold were determined, use parameters.downward_startingFrames


Threshold Estimation IN THIS SCRIPT (best guess effort by Millisecond Software):
The staircase collects 9 (default) reversal points (reversal point = change of staircase direction).
The mean of these 9 reversals points is calculated in ms and used as the final threshold.

Note: a quality/validity check of the three thresholds at the end of the script checks that 
the thresholds increase from subtest to subtest (as they increase in difficulty).
If the threshold of a more difficult subtest is lower than the one from an easier one,
the lower threshold is assigned to the easier level as well.
(see UFOV Assessment Manual - June 20, 2018, p.6) 

___________________________________________________________________________________________________________________
STIMULI
___________________________________________________________________________________________________________________
truck/car/triangle/mask example stimuli are provided by Millisecond Software.
Replace with your own under section Editable Stimuli

Stimuli Sizing:
The distance btw. peripheral stimulus and center of monitor as well as the size of the fixation box
and car/truck stimuli are proportionally sized (proportional to canvasheight) in this script.
By setting an absolute canvassize under section Defaults, the stimuli can be absolutely sized across monitors.
Go to section Defaults for an example.


Edwards et al (2005):
* distance btw. center and peripheral stimulus ~ 11cm
* fixation box ~ 3cm x 3cm
*car/truck ~ 1.5cm * 2cm (Note: in this script parameters.stimImageSize_percent = 2cm is used to size the image 
size of the car/truck)

Participants are instructed to sit ~60cm from the screen (Edwards et al, 2005)
PC use a 15 inch viewing area (Edwards et al, 2005)

___________________________________________________________________________________________________________________	
INSTRUCTIONS 
___________________________________________________________________________________________________________________	

The instructions are provided by Millisecond Software and based on the ones provided 
in the UFOV Manual Version 6.1.4.
They can be edited under section 'Editable Instructions'
___________________________________________________________________________________________________________________	
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:

UI: the default stimuli in this script are defined in canvas height percentages

Edwards et al (2005): stimulus sizes are described for 15 in. diagonal viewing area

UFOV Assessment Manual (June 20, 2018): "The optimal viewing distance depends on the height of the display area of the monitor used"
Minimum viewing distance: 1.8 * measured screen height
Optimal viewing distance: 2.1 * measured screen height
Maximum viewing distance: 2.4* measured screen height
Example: For a monitor with a display height of 10 inches, the user should view the
display at distance between 18 and 24 inches, with the optimal distance at 21 inches.
(Note: the size of the actual stimuli is not noted in the manual)

in this script:

/circleRadius_percent:					defines the distance btw. the center of the screen and the peripheral stimulus.
										The peripheral stimulus is located on a circle around the center.
										The radius of this circle can be set by parameters.circleRadius_percent.
										By default, the radius is 40% of the canvas height
										(by default in this script: the canvas height is the largest 4:3 rectangle that
										can be found on the current screen.)
										
										Edwards et al (2005): ~11cm
										
										Note: to run absolute sizes, you can set the canvassize in absolute sizing.
										The sizing of stimuli is then conform across all monitors.
										Go to section Defaults for an example.

/fixationBoxSize_percent:				the size of the fixation box in percent canvas height (default: 12%)
										Edwards et al (2005): ~3cm (p.531) on 

/stimImageSize_percent:					the size of the truck/car image file in percent canvas height (default: 8%)
										Edwards et al (2005): targets are ~2cm * ~1.5cm silhouettes of a truck/car on a black background (p.531)
										
										
General Test Procedure:										
																												
/showSubtestSelectionScreen:			true (1) = the script provides a selection screen from which the test administrator can 
										select specific subtests to run
										false (0) = the script does not provide a selection screen and runs all three
										subtests in order (default)


Staircase Procedure Parameters:										
										
/startingStepSize = 3:					the starting stepsize for each staircase procedure in vertical refreshrates (default: 3)
											Note: on a 60Hz monitor, one vertical refreshrate lasts about 16.67ms
										
/minFrame:								minimum number of vertical frames a stimulus is presented (default: 1 ~ 16.67ms on a 60hz monitor)
/maxFrame:								maximum number of vertical frames a stimulus is presented (default: 30 ~ 500.1 ms on a 60hz monitor)	

/ fixationFrames:						number of frames that the fixation box is presented at the start of each trial (default: 30 ~ 500.1 ms on a 60hz monitor)
/ maskDuration:							the duration (in ms) that the mask is presented (default: 500ms)

/ practiceStimFrames:					number of frames that the practice stimuli are presented (default: 20 ~ 333 ms on a 60hz monitor)			

/ downwardStaircase_startFrames:		number of frames that the downwardStaircase trials present the stimuli during subtest1 (default: 20 ~ 333 ms on a 60hz monitor)
										Notes:
										a) this frame number is adjusted upwards if practice results in less than 75% correct performance after practice
										b) this frame number is also used for subtest2/subtest3 if they run as individual subtests


/ maxReversals:							number of reversals before staircase procedure stops (default: 9)

/ maxTrials:							just in case: if participants does not get 9 reversals within 100 trials,
										the staircase stops automatically after 100 trials
									
Other Timing Parameters:									

/ iti:									the duration of the inter trial interval (default: 500ms)

Debug Parameter (only relevant for debugging purposes)

/ debugmode:							true (1): script runs in debugmode and presents additional debug information on the screen 
										false (0): script runs in testmode (default)