Using the NAFX for Eye-Movement
Fixation Data Analysis and Display
L.F. DellÕOsso, Ph.D.
From the Daroff-DellÕOsso Ocular Motility Laboratory, Louis Stokes Cleveland DVA Medical Center and Depts. of Neurology and Biomedical Engineering, Case Western Reserve University, Cleveland OH, USA
OMLAB Report #111005
Written: 9/9/05; Placed on Web Page: 11/10/05; Last Modified: 10/14/09
Downloaded from: OMLAB.ORG
Send questions,
comments, and suggestions to:
lfd@case.edu
This work was supported in
part by the Office of Research and Development, Medical Research Service,
Department of Veterans Affairs.
The instructions in this
tutorial are meant to supplement those in Ònafx.txtÓ and those in the
ÒtutorialsÓ folder, both of which are contained in the OMtools folder. They are
illustrated with examples to help the user in understanding how to use some of
the more important m-files in the OMtools software downloadable from this site.
Investigators are also advised to read, ÒRecording and Calibrating the Eye
Movements of Nystagmus SubjectsÓ (OMLAB 011105). Note: the m-files (or p-files)
listed below as ÔfilenameÕ actually refer to Ôfilename.mÕ (or Ôfilename.pÕ) and
the text files ÒfilenameÓ are in the folder ÒOMtools/documentation/misc docs.Ó
Theory:
The NAFX and its
predecessor, the NAF, originated from the NFF that attempted to relate the
time-intervals of fp's and their position and velocity SD's to a measure of the
'quality' of a CN waveform (i.e., how likely it was to allow good acuity). When calculated by hand, each cycle was
assumed to have 1 fp and the # of cycles in the interval of interest was
included in the calculation.
Later, when the NAFX was automated, only 'true' fp's (i.e., those that
satisfied the foveation-window (FWIN) criteria) were used in the calculation. For waveforms that exhibited
well-developed foveation, this changed nothing. However, for poor foveation due to excessive jitter or high
velocities, many cycles were deemed to have no fp's and the resulting NAFX
reflected only those few fp's detected.
This yielded NAFX values that were not likely to be well correlated with
acuity. To overcome this
shortcoming, a measure of the total number of potential fp's (or cycles) needed
to be reintroduced. That was most
easily accomplished by applying the NAFX as described below. In addition, the
NAFX vs. acuity line has been made age-specific to reflect the variation of
visual acuity with age (a canine line is also included). If the nystagmus is
multiplanar the NAFX can be used on data that has been converted to a radial
vector array (see APPENDIX A).
Because the NAFX
is a measure of the foveation quality that is meant to be predictive of the
best-corrected visual acuity of a person with nystagmus, it must be applied
to data from the fixating eye;
the Òfoveation qualityÓ of an occluded or otherwise non-fixating eye has no
meaning in this context. Therefore, the data used must have been monocularly
calibrated or, in the case of uniocular recordings, been taken with the other
eye occluded. For truly binocular individuals, the monocularly calibrated data
from the two eyes will overlap when both eyes are viewing (especially the
foveation periods and the target) and the data from either eye can be used to
calculate the NAFX (this should never be presumed, even when recording subjects thought to be
ÒnormalÓ). However, many with nystagmus may also have strabismus and alternate
their fixating eye. In these cases, care must be taken to calculate the NAFX
only from the fixating eye data; that may necessitate using data from one eye
while fixating at one target angle and the other eye when at another target
angle. Identifying the fixating eye from the data of both eyes is an easy task
when the data have been monocularly calibrated (see OMLAB Report #011105).
Using our paradigm, we allow 5 seconds at each target angle and repeat each
twice (once while stepping out in 5¡-steps from primary position to 30¡ and
once while stepping back to primary position). For most individuals with
nystagmus, that is sufficient to allow target acquisition (0.5 – 2 sec)
and leaves approximately 3 seconds of steady fixation from which the NAFX may
be calculated. This mimics the time sequence of fixating a new target under
normal conditions.
There are rare
individuals however, for whom: a) 5 seconds is not enough time; b) there is
constant, rapid reversal of the fixating eye; or c) both a and b apply. The
first case merely requires presenting each target for longer than 5 sec. Cases
of rapid reversal of the fixating eye require careful identification of the
small intervals for each fixating eye within the interval of steady fixation
being analyzed and using a concatenation of those intervals to calculate a
Òfixating eyeÓ NAFX (see Appendix B). For the remainder of this report we will
presume the fixating eye is constant for the 5-second interval.
Method and
Criteria:
Much of the
repetitive work in the previous methodology has been automated by 'nafxprep'
used in conjunction with the graphical interface for NAFX
1. Filter data
using, 'r/lh=lpf(r/lh,4,20,samp_freq)'
NOTE:
Since, when using its graphical interface, the nafx function needs rh or lh,
rhf
or lhf can no longer be used for filtered data. Here, we are filtering at 20
Hz;
for
noisy data 15 or 10 Hz can be used.
2. Run 'nafx'
and the GUI for v2.1 in Figure 1 will appear.
Figure
1. The GUI for the NAFX v2.1 program. The first command ÔbuttonÕ is Ònafxprep.Ó
It is used in conjunction with zoomtool to automatically set the Position and
Velocity sub-arrays for the fixation interval you choose. First, use ÒSubject
age:Ó (drop-down menu) to set in the subjectÕs age. The ÒPosition Limit:Ó is
automatically set based on the ÒDelta YÓ difference shown in zoomtool for the
second set of position cursors (you may also set in a different value from the
drop-down menu). The minimum is 0.5¡ (the foveal radius) and the maximum is 6¡
in 12 steps. When you set the ÒVelocity Limit:Ó (drop-down menu), start
at 4¡/sec and increase in 1¡/sec steps until a foveation period is detected for
each nystagmus cycle or you reach 10¡/sec (the maximum value for the velocity
of the foveation window. The ÒSampling Freq:Ó is automatically detected and set
from the loaded data. ÒFoveation Criteria:Ó (drop-down menu) should be set as
shown. ÒTau:Ó will be automatically set based on you foveation-window position
and velocity choices. The ÒCalc Fovs.Ó button will calculate foveation periods
and print out several graphs. We usually set ÒRaw P,V points plot:Ó (drop-down
menu) to ÒTogetherÓ, leave ÒShow StatsÓ unchecked, and ÒUse Tau v2Ó checked.
ÒCalc NAFXÓ is the final command button and ÒDoneÓ closes the program.
3. Choose the age range appropriate for
the subject; this will customize the potential visual acuity predicted by the
NAFX based on population statistics for visual acuity.
4. Plot the
filtered data using an appropriate command (e.g., ÔplthÕ or ÔpltvÕ).
5. Use
'zoomtool' on the filtered data to be analyzed and eliminate all data traces
except the one being analyzed.
6. Home in on
the segment you wish to analyze with the cursors and the X-axis zoom ÒinÓ
button.
7. Place the
cursors at the start and end of the sub-array you wish to use.
NOTE: To ensure that your interval
contains an integral number of cycles
(and that no foveation periods are
truncated), begin all intervals during
a
slow phase (away from a foveation
period) and end all intervals at an
equivalent point in a slow phase.
8. Click on the ÒC1 getÓ and ÒC2 getÓ buttons (in
earlier versions of ÔzoomtoolÕ—as shown in Figure 2—they were ÒC1 (xy)Ó and ÒC2 (xy)Ó).
9. Place the
cursors at the highest and lowest peaks* of the foveation periods. Figure 2
demonstrates what this looks like.

Figure
2. Plot (ÔzoomtoolÕ) showing the fixation interval with cursors set at the
highest and lowest extents of the six foveation periods in the interval.
10. Click on the
ÒC1 getÓ/ÓC1 (xy)Ó and ÒC2 getÓ/ÓC2 (xy)Ó buttons.
11. Run
ÒnafxprepÓ from the GUI (Figure 1).
You
will be prompted to enter the data file name (e.g., lh or rh) if more than one
data file was plotted.
12. All sub-arrays
and bias shifts will be created and entered into the NAFX GUI.
11. The
foveation position window will automatically appear as the ÒPosition Limit:Ó
setting. You may also manually enter a different foveation position window from
the ÒPosition Limit:Ó drop-down menu whose ±value
encompasses the cursors' Y interval (as indicated by the ÒDelta YÓ value in the
ÔzoomtoolÕ plot).
NOTE:
Available position window sizes are: 0.5, 0.75, 1.0, 1.25, 1.5, 2, 2.5, 3,
3.5,
4, 5, and 6 (for canines use 3 for horizontal data and 1.5 for vertical data).
In
this
example, ÒDelta YÓ is 1.6762 requiring a window size of 1
(i.e.,
±1=|2|>1.65762).
13. With the ÒVelocity
Limit:Ó value set at 4 deg/sec, run the ÒCalc Fovs.Ó
('showpv') and verify that all foveation periods were counted (i.e., at least
1foveation period per cycle).
14. If any
cycles were missed, increase the velocity window (as indicated by the ÒVelocity Limit:Ó value) and rerun ÒCalc Fovs.Ó until all
cycles are counted or you reach 10 deg/sec.
NOTE:
Available velocity window sizes are: 4, 5, 6, 7, 8, 9, and 10. Figure 3
shows
the first two graphs produced by ÔshowpvÕ.
15. Run the
ÒCalc NAFXÓ using #fovs as defined below.**
16. Copy all
relevant commands from the command window to a text file to document your work
and to provide an easy way to repeat it (see NOTE below).
17. Run
'xaxshift(nafx_start)' on any Figures you wish to print and then, print them.
* You could use
the horizontal cursor lines to straddle the foveation positions if you stay
within the start and stop points.
** If ÒCalc
Fovs.Ó ('showpv') detects >=1fp/cy, use the number of CYCLES as the #fovs
i.e., "#fovs" = #cy's
(#fps - #extra fps detected)
If ÒCalc Fovs.Ó
('showpv') misses any cycles (i.e., no fp detected) choose the pos limit of
FWIN just large enough to
encompass all fp's in the interval to be used
(1 fp per cycle)
Then choose the LOWEST vel limit
of FWIN (velLim) that allows 'showpv' to
detect 1fp/cy or, increase the
velocity limit to the LOWEST value that
MAXIMIZES the # of fp's detected
and use
"#fovs" = #cy's w fp + #cy w/o fp or joined cycles within a fp
(#cy's
w fp = #fps - #extra fps detected)
NOTE:
The output of
the NAFX to the command window of Matlab includes all the necessary data information
and explicit NAFX command lines to reproduce the analysis easily. They should
be copied and kept in a text file that can be used for this purpose at a latter
date without using zoomtool to define the interval and extent of the foveation
positions. All that need be done is to copy the appropriate command lines
(those starting with "È") from the text file to the command window.
An example from NAFX (version 1.1) is shown below for a 49 y/o subject. Use
'help nafx' for information regarding the NAFX command lines.
Text File
Data:
>>
rh=lpf(rh,4,20,500);
rhv=d2pt(rh,3,500);
>> rh45_46
= sub(rh, 45.524, 1.362);
rh45_46s =
rh45_46 + 3.2905;
rhv45_46 =
d2pt(rh45_46, 3);
>>
nafx(rh45_46s,rhv45_46,500,[1,6],'showpv',1);
Figure 3.
Outputs of ÔshowpvÕ.
(Top) Velocity and
position traces with all points satisfying the foveation window criteria
(dot-dashed lines) shown in red. (Bottom) Position trace with
algorithm-determined foveation periods shown in red.
Enter the
subject's age:
1) under 6 years
old
2) from 6 to 12
years old
3) from 12+ to
40 years old
4) from 40+ to
60 years old
5) greater than
60 years old
6) A dog of any
age
--> 4
% Display
foveation statistics (y/n)? n
Total time that
meets position criterion = 994 msec. (497 samples)
Total time that
meets velocity criterion = 278 msec. (139 samples)
Total time that
meets both criteria = 264 msec. (132 samples) [raw]
Total time that
meets both criteria = 190 msec. (95 samples)
There were
(probably) 9 foveation periods in this interval.
Cycles by manual
count: 8 [manually entered by you]
>>
nafx(rh45_46s,rhv45_46,500,8,'nafx',[0,1,6]);
Enter the
subject's age:
1) under 6 years
old
2) from 6 to 12
years old
3) from 12+ to
40 years old
4) from 40+ to
60 years old
5) greater than
60 years old
6) A dog of any
age
--> 4
results: (using
NAFX vers. 1.0, DetectFovs vers. 1.0)
NAFX = 0.279 (<= 20/59) -- 40+ to 60 years old
Fov. time per
fov. period = 23.8 msec
Fov. time per second
= 0.14 sec
STD(pos, vel) = (0.464 deg, 3.38 deg/sec)
Fov. window (pos, vel): (1
deg, 6 deg/sec)
tau: 50.4 msec
Figure
4. Outputs of ÔshowpvÕ. (See legend of Figure 3 for details.) Note that
algorithm detected 9 foveation periods in the 8 cycles; to calculate the NAFX,
8 will be used.
For individuals whose
nystagmus is biplanar, two approaches are possible. First, for those whose
horizontal component far exceeds their vertical component (as is the case in
INS), simply calculate the NAFX using only the horizontal data. One can verify
this choice by calculating two NAFXÕs, one using the horizontal data and the
second using the vertical data. The ÒhorizontalÓ NAFX will be seen to be the
acuity-limiting (i.e., lower) value. Of course, if the vertical component is
far greater than the horizontal component (rare in INS), use the vertical data
to calculate the NAFX. What of individuals whose nystagmus contains two
significant components? For those cases, we have developed the two-dimensional
NAFX. (1) By the use of the OMtools function, Ôhv2rÕ we
calculate a vector combination of the horizontal and vertical components that
retains direction information and use it to calculate the ÒradialÓ NAFX. Figure
5 is a plot of a ÒradialÓ vector array. Note the discontinuities that should
not be mistaken for saccades.

Figure
5. A plot of a ÒradialÓ data array for two-dimensional NAFX analysis.
APPENDIX B
For the rare individuals
who constantly alternate their fixating eye, there may not be intervals with either eye fixating that
are long enough (³1 second) to calculate a meaningful NAFX. For the NAFX to
maintain its relationship to visual acuity, it must be calculated using data
taken from the fixating eye. How can this be achieved? Using ÔzoomtoolÕ one can
easily determine the beginnings and endings of each interval of fixation for
both the right (rh) and left (lh) eyes. These intervals (whose endpoints are
chosen to lie in the slow phases away from intrinsic saccades or foveation
periods) can be used to define sub-arrays from the data for each eye (rh or lh)
and those sub-arrays can then be concatenated using ÔcatÕ to form a new data
array that we shall call ÒfeÓ (for fixating eye). A new OMtools function,
ÔfecatÕ can be used to graphically choose each interval and automatically
concatenate them (see APPENDIX C). The discontinuities at each of the
concatenation points will not affect the NAFX calculation, as they will fall
outside of the foveation window. Finally, the NAFX can be calculated using the
data in fe. This construct mimics the actual real-world conditions of fixation
for that individual, including the times lost during each alternation of the
fixating eye, and the resulting NAFX will retain its relationship to visual
acuity.
APPENDIX C
Although one could
manually use ÔzoomtoolÕ and create sub-arrays that are then concatenated (using
ÔcatÕ), we have written a graphical program, ÔfecatÕ that automatically does
this, producing a data file and graph ready for use by ÔnafxÕ. After loading
the data to be analyzed (rh and lh), one has only to type, ÔfecatÕ. A GUI is
opened as well as a ÔzoomtoolÕ window of the data (move the latter so both are
visible—see Figure 6).
1) In the
ÔfecatÕ GUI, choose the first fixating eye
2) In
the ÔzoomtoolÕ window, use ÒXaxis zoomÓ to expand the data interval
of interest (e.g., fixation at 20¡)
3) Set
the first
cursor on the fixating eye trace at the beginning of its first interval (pick a point during a slow phase away
from either an intrinsic saccade or foveation period) and click on ÒC1 getÓ
4) In
the ÔfecatÕ GUI, click on ÒUse C1 getÓ and click on ÒBeginÓ
5) In
the ÔzoomtoolÕ window, set the second cursor on the fixating eye trace at the
end of this first interval
(i.e., when the fixating eye alternates to the other eye—use the same
slow-phase criteria for choosing this point as for all NAFX intervals) and click
on ÒC2 getÓ
6) In
the ÔfecatÕ GUI, click
on ÒUse C2 getÓ and click on ÒSetÓ (a plot of this interval will appear in the
ÔfecatÕ GUI)
7) In the
ÔzoomtoolÕ window move the second
cursor on the new fixating eye trace to the end of the second interval and
click on ÒC2 getÓ
8) In the
ÔfecatÕ GUI, click on ÒUse C2 getÓ and click on ÒSetÓ (a plot of this now
expanded interval will appear in the ÔfecatÕ GUI)
9) Repeat
7&8 as often as necessary to build a fixating-eye data array
for analysis
10) Click on
ÔFinishÕ (a plot of the fixating-eye data array will be placed in a Figure,
ready for NAFX analysis)
NOTES: 1. The first cursor is only used to mark the
beginning of the first interval; all other intervals are determined using the second cursor. 2. There will be small
discontinuities at each transition point from one fixating eye interval to
another (see Figure 6, bottom right). They will not interfere with the NAFX
calculation and should not be mistaken for saccades. 3. The text box is
editable and can be used to change or enter specific start and stop points for
either eye (first number indicates eye—1=re, -1=le). Click outside the
text box (within the GUI) to read in your changes.




Figure
6. The ÔfecatÕ GUI—top left) initial appearance; top right) after using
ÒC1 getÓ; bottom left) after using ÒC2 getÓ; and bottom right) after using ÒC2
getÓ again.
REFERENCES
1. Jacobs
JB, Dell'Osso LF. Extending the expanded nystagmus acuity function for vertical
and multiplanar data. Vision
Res 2009 (In press); 00:000-000.
Although the
information contained in this paper and its downloading are free, please
acknowledge its source by citing the paper as follows:
DellÕOsso, L.F.: Using the NAFX for Eye-Movement Fixation Data Analysis and Display. OMLAB Report #111005, 1-12, 2005. http://www.omlab.org/OMLAB_page/Teaching/teaching.html
Note: This report was originally numbered as #090905
(date written) and was corrected to #111005 (date posted) on February 7, 2008.