next up previous contents index
Next: Further work Up: Analyzing Data with WAVE Previous: Using the Scope window

Analysis example: Measuring ST deviations

We now turn to an extended example showing how an application can be written in C to be used with WAVE. The application is an example only; it is not intended for any serious application, clinical or otherwise. Its structure illustrates, however, how a real application can be built.

As noted in the previous section, changes in the ST segment of the ECG are of interest because of their relationship to ischemia (which occurs when the oxygen supplied by the coronary arteries is insufficient to meet the demands of the myocardium). Characteristically, ischemia affects the shape of the ST segment, which corresponds to the first phase of ventricular repolarization following the QRS complex; typically, the ECG signal may not return to its baseline, or isoelectric, level (defined in the interval between the P-wave and the QRS complex) until after the T-wave. The level of the ST segment relative to the isoelectric level is the ST deviation. Conventionally, the ST deviation is measured at a single point 80 milliseconds after the J point (the end of the QRS complex). An ST deviation of 100 tex2html_wrap_inline9285 V is considered to be clinically significant, and consistent with ischemia.

We will design a program for measuring ST deviations using WAVE. We assume that the QRS complexes have been marked, and that, in addition, two special annotations (`(', signifying the beginning of the QRS complex, and `)', signifying its end) have also been marked for the first beat that we wish to measure. (To use our program on an unannotated record, we can use tex2html_wrap9048 , and then insert the special annotations manually around the first beat.)

Let us begin by deciding how the program should be invoked from WAVE. At a minimum, we should be able to specify which signal should be measured, and the region of interest. The program also needs to know   the record and annotator names (the latter so that it can read the annotations it needs to get started). Following the conventions used by many other DB applications, we add the following entry to WAVE's menu file:

Measure ST deviation<TAB>stdev -r $RECORD -a $ANNOTATOR \
                          -f $START -t $END -s $SIGNAL
Here is the C source for the program. If this looks unfamiliar, read about how to write DB applications in the ECG Database Programmer's Guide.

The source for this program is included in the WAVE distribution as stdev.c. Copy this file to the WAVE host if necessary, and compile it in a terminal window using a command such as

    cc -o stdev -O stdev.c -ldb
Depending on how the DB Software Package has been installed on the WAVE host, you may need to use -I/usr/local/include and -L/usr/local/lib options so that the compiler can locate the *.h files and the DB library. On some systems, the C compiler may have a different name, such as gcc. Consult an expert such as your system administrator if in doubt about compiling a C program with the DB library.

Once the source has been compiled successfully, install the executable binary file stdev in a directory in your PATH. If you are using the C-shell, you may need to run the command rehash to make your shell aware that the program has been installed. Test the program in the terminal window by typing

stdev

which should produce a brief summary of its options. If this test fails, figure out why and correct the problem before continuing.

Once the program has been compiled and installed successfully, try running it from within WAVE. Remember that the annotation file must include the `(' and `)' annotations to mark the beginning and end of the first beat to be measured. Using it on signal 0 of record 100s, with a suitably augmented set of reference annotations, I obtained output beginning with:

    0.0171296	-84
    0.0306481	-24
    0.0437963	-9
    0.0569907	-34
    0.0701389	-64
    0.08375	-59
    0.0946296	-49
    0.111204	-29
    0.125278	-4
    0.138796	-59
    0.151944	-9
    0.164815	-34

(Your output will vary, depending on the exact locations of the `(' and `)' annotations that you insert.)

 You can plot this output by piping it to the plot2d command (see plot2d(1), in the ECG Database Applications Guide, for details on plot2d, a command-line preprocessor for gnuplot). To do so, modify the entry in the menu file, so that it becomes:

    Plot ST deviation<TAB>stdev -r $RECORD -a $ANNOTATOR \
                            -f $START -t $END -s $SIGNAL | \
                           plot2d 0 1 \
                            -t "ST deviations, Record $RECORD" \
                            -x "Elapsed time (minutes)" \
                            -y "ST deviation (microvolts)"

If you now reread the menu and use the new tex2html_wrap9289 button, plot2d opens a window with a plot in it, similar to figure 3.5.

   figure1458
Figure 3.5: ST deviations measured by the example program.

(To make this plot, I used the first ten minutes of record 100; the sample record 100s contains only the first minute of data shown in the plot.) This window stays open until you dismiss it by pressing   tex2html_wrap8971 ( tex2html_wrap8973 ) in the Analysis Commands window; if you forget to do so, the next command you run from the Analyze window will serve this function (but the command itself won't run, since plot2d, rather than the command interpreter, will have read the command string).


next up previous contents index
Next: Further work Up: Analyzing Data with WAVE Previous: Using the Scope window

George B. Moody (george@hstbme.mit.edu)
Wed May 7 20:21:25 EDT 1997