Learn R Programming

OPI (version 2.9)

opiInitialize: Initialize OPI.

Description

Generic function for initialization of the chosen OPI implementation that is set with chooseOpi().

Usage

opiInitialize(...)
opiInitialise(...)

Arguments

Implementation specific parameters. See details.

Value

Returns NULL if initialization succeeded, otherwise an implementation dependant error.

Octopus900

Returns NULL if successful, 1 if Octopus900 is already initialised by a previous call to opiInitialize, and 2 if some error occured that prevented ininitialisation.

The default background and stimulus setup is to white-on-white perimetry. Use opiSetBackground to change the background and stimulus colors.

Octopus600

Returns NULL if successful, or an Octopus 600 error code

The default background and stimulus setup is to white-on-white perimetry.

Kowa AP-7000

Always returns NULL.

imo

Always returns NULL. Will stop if there is an error.

Compass

Returns a list with elements:

  • err NULL if successful, not otherwise.

  • prl a pair giving the (x,y) in degrees of the Preferred Retinal Locus detected in the initial alignment.

  • onh a pair giving the (x,y) in degrees of the ONH as selected by the user.

  • image raw bytes being the JPEG compressed infra-red image acquired during alignment.

Details

SimHenson

opiInitialize(type="C", A=NA, B=NA, cap=6, display=NULL, maxStim=10000/pi)

If the chosen OPI implementation is SimHenson, then type can be one of: "N", for normal patients; "G", for POAG patients; and "C", for a combination. See Table 1 in Henson et al (2000). If type is "X" then A and B should be specified and are used in place of one of the three A/B combinations as in Henson et al (2000). cap is the maximum standard deviation value that the simulator will use for the slope/spread of the psychometric function.

If display is a vector of four numbers c(xlow, xhi, ylow, yhi), then a plot area is created of dimension xlim=range(xlow, xhi) and ylim=range(ylow, yhi) and each call to opiPresent will display a point on the area. The color of the plot area can be set with opiSetBackground, and the color of the displayed point is determined by the stimulus passed to opiPresent.

maxStim is the maximum stimuls value in cd/\(\mbox{m}^2\). This is used in converting cd/\(\mbox{m}^2\) to dB values, and vice versa.

SimHensonRT

opiInitialize(type="C", A=NA, B=NA, cap=6, display=NULL, maxStim=10000/pi, rtData, rtFP=1:1600)

If the chosen OPI implementation is SimHensonRT, then the first six parameters are as in SimHenson, and rtData is a data frame with at least 2 columns: "Rt", reponse time; and "Dist", signifying that distance between assumed threshold and stimulus value in your units.

This package contains RtSigmaUnits or RtDbUnits that can be loaded with the commands data(RtSigmaUnits) or data(RtDbUnits), and are suitable to pass as values for rtData.

rtFp gives the vector of values in milliseconds from which a response time for a false positive response is randomly sampled.

SimGaussian

opiInitialize(sd, display=NULL, maxStim=10000/pi)

If the chosen OPI implementation is SimGaussian, then sd is the standard deviation value that the simulator will use for the slope/spread of the psychometric function.

display and maxStim is as for SimHenson.

Octopus900

opiInitialize(serverPort=50001,eyeSuiteSettingsLocation, eye, gazeFeed=NA, bigWheel=FALSE,pres_buzzer=0, resp_buzzer=0, zero_dB_is_10000_asb=TRUE)

If the chosen OPI implementation is Octopus900, then you must specify a directory and the eye to be tested.

serverPort is the TCP/IP port on which the server is listening (on localhost).

eyeSuiteSettingsLocation is the folder name containing the EyeSuite setting files, and should include the trailing slash.

eye must be either "left" or "right".

gazeFeed is the name of an existing folder into which the video frames of eye tracker are recorded. Set to NA for no recording.

bigWheel is FALSE for a standard Octopus 900 machine. Some research machines are fitted with an alternate aperture wheel that has 24 sizes, which are accessed with bigWheel is TRUE. The mapping from size to 'hole on wheel' is hard coded; see code for details.

If pres_buzzer is greater than zero, a buzzer will sound with each stimuli presented. If resp_buzzer is greater than zero, a buzzer will sound with each button press (resposne). The volume can be one of 0 (no buzzer), 1, 2, or 3 (max volume). If both buzzers are more than zero, the maximum of the two will be used as the volume.

If zero_dB_is_10000_asb is TRUE then 0 dB is taken as 10000 apostilbs, otherwise 0 dB is taken as 4000 apostilbs.

Octopus600

opiInitialize(ipAddress, eye, pupilTracking=FALSE, pulsar=FALSE, eyeControl=0)

If the chosen OPI implementation is Octopus600, then you must specify the IP address of the Octopus 600 and the eye to test.

ipAddress is the IP address of the Octopus 600 as a string.

eye must be either "left" or "right".

pupilTracking is TRUE to turn on IR illumination and set pupil black level (which happens at the first stimulus presentation).

pulsar is TRUE for pulsar stimulus, FALSE for size III white-on-white.

eyeControl

  • 0 is off

  • 1 is eye blink

  • 2 is eye blink, forehead rest, fixation control

  • 3 is eye blink, forehead rest, fixation control, fast eye movements

KowaAP7000

opiInitialize(ip, port)

If the chosen OPI implementation is KowaAP7000, then you must specify the IP address and port of the AP-7000 server.

  • ipAddress is the IP address of the AP-7000 server as a string.

  • port is the TCP/IP port of the AP-7000 server as a number.

imo

opiInitialize(ip, port)

If the chosen OPI implementation is imo, then you must specify the IP address and port of the imo server.

  • ip is the IP address of the imo server as a string.

  • port is the TCP/IP port of the imo server as a number.

Compass

opiInitialize(ip, port)

If the chosen OPI implementation is Compass, then you must specify the IP address and port of the Compass server.

  • ip is the IP address of the Compass server as a string.

  • port is the TCP/IP port of the Compass server as a number.

Warning: this returns a list, not a single error code.

DayDream

opiInitialize(ip="127.0.0.1", port=50008, lut= rep(1000, 256), degrees_to_pixels= function(x,y) return(50*c(x,y)))

If the chosen OPI implementation is Daydream, then you must specify the IP address of the Android phone that is in the Daydream, and the port on which the server running on the phone is listening.

  • lut is a vector of 256 luminance values, with lut[i] being the cd/\(\mbox{m}^2\) value for grey level i.

  • degrees_to_pixels is a function that takes in x and y in degrees and returns a vector of the (x,y) coordinates in pixels for one eye. This assumes the viewing distance (z-coordinate) is 30cm.

References

Please cite: A. Turpin, P.H. Artes and A.M. McKendrick "The Open Perimetry Interface: An enabling tool for clinical visual psychophysics", Journal of Vision 12(11) 2012.

http://people.eng.unimelb.edu.au/aturpin/opi/index.html

David B. Henson, Shaila Chaudry, Paul H. Artes, E. Brian Faragher, and Alec Ansons. Response Variability in the Visual Field: Comparison of Optic Neuritis, Glaucoma, Ocular Hypertension, and Normal Eyes. Investigative Ophthalmology & Visual Science, February 2000, Vol. 41(2).

See Also

chooseOpi, opiSetBackground, opiClose, opiPresent

Examples

Run this code
# NOT RUN {
    # Set up a simple simulation for white-on-white perimetry
chooseOpi("SimHenson")
if (!is.null(opiInitialize(type="C", cap=6)))
    stop("opiInitialize failed")

    # Set up a simple simulation for white-on-white perimetry
    # and display the stimuli in a plot region
chooseOpi("SimHenson")
if (!is.null(opiInitialize(type="C", cap=6, display=c(-30,30,-30,30))))
    stop("opiInitialize failed")

    # Set up a simple simulation for white-on-white perimetry
    # and display the stimuli in a plot region and simulate response times
chooseOpi("SimHensonRT")
data(RtSigmaUnits)
oi <- opiInitialize(type="C", cap=6, 
        display=c(-30,30,-30,30), rtData=RtSigmaUnits, rtFP=1:100)
if (!is.null(oi))
    stop("opiInitialize failed")

    # Set up a simulation using a psychometric function that is
    # a cumulative gaussian of standard deviation 2
chooseOpi("SimGaussian")
if (!is.null(opiInitialize(sd=2)))
    stop("opiInitialize failed")

# }
# NOT RUN {
    # Set up the Octopus 900
chooseOpi("Octopus900")
if (!is.null(opiInitialize(
        eyeSuiteSettingsLocation="C:/ProgramData/Haag-Streit/EyeSuite/",
        eye="left")))
    stop("opiInitialize failed")
# }
# NOT RUN {
# }
# NOT RUN {
    # Set up the Kowa AP-7000
chooseOpi("KowaAP7000")
opiInitialize(ip="192.168.1.7", port=44965)
# }
# NOT RUN {
# }
# NOT RUN {
    # Set up the imo
chooseOpi("imo")
opiInitialize(ip="192.168.1.7", port=44965)
# }
# NOT RUN {
# }
# NOT RUN {
    # Set up the imo
chooseOpi("Compass")
result <- opiInitialize(ip="192.168.1.7", port=44965)
if (is.null(result$err)) {
    print(result$prl)
}
# }

Run the code above in your browser using DataLab