WFDB SWIG 1.0.0
(2,428 bytes)
#!/usr/bin/python
#
# File: example9.py I. Henry March 30 2005
#
# Python translation of example9.c from the WFDB Programmer's Guide
#
# Copyright (C) 2005 Isaac C. Henry (ihenry@physionet.org)
import wfdb, sys
def main(argv):
nbeats = stoptime = 0
a = wfdb.WFDB_Anninfo()
annot = wfdb.WFDB_Annotation()
if len(argv) < 3:
print "usage:", argv[0], "annotator record [beat-type from to]",
sys.exit(1)
a.name = argv[1]
a.stat = wfdb.WFDB_READ
nsig = wfdb.isigopen(argv[2], None, 0)
if nsig < 1: sys.exit(2)
s = wfdb.WFDB_SiginfoArray(nsig)
v = wfdb.WFDB_SampleArray(nsig)
vb = wfdb.WFDB_SampleArray(nsig)
sum = [None] * nsig
if wfdb.wfdbinit(argv[2], a, 1, s.cast(), nsig) != nsig: sys.exit(3)
hwindow = wfdb.strtim(".05")
window = 2*hwindow + 1
for i in range(nsig):
sum[i] = [0] * window
if len(argv) > 3:
btype = wfdb.strann(argv[3])
else:
btype = wfdb.NORMAL
if len(argv) > 4: wfdb.iannsettime(wfdb.strtim(argv[4]))
if len(argv) > 5:
stoptime = wdfb.strtim(argv[5])
if stoptime < 0:
stoptime = -stoptime
if s[0].nsamp > 0 and stoptime > s[0].nsamp:
stoptime = s[0].nsamp
else:
stoptime = s[0].nsamp
if stoptime > 0: stoptime -= hwindow
while 1:
if not (wfdb.getann(0, annot) == 0 and annot.time < hwindow): break
while 1:
if annot.anntyp == btype:
wfdb.isigsettime(annot.time - hwindow - 1)
wfdb.getvec(vb.cast())
j=0
while j < window and wfdb.getvec(v.cast()) > 0:
for i in range(nsig):
sum[i][j] += v[i] - vb[i]
j += 1
nbeats += 1
if not (wfdb.getann(0, annot) == 0 and \
(stoptime == 0L or annot.time < stoptime)): break
if nbeats < 1:
print argv[0] + ": no `" + wfdb.annstr(btype) + "' beats found"
sys.exit(4)
print "Average of", nbeats, "`" + wfdb.annstr(btype) + "' beats:"
for j in range(window):
for i in range(nsig):
print "%(av)g" % {'av': float(sum[i][j])/nbeats},
sys.stdout.write("") # surpress next space
if i < nsig-1:
print "\t",
else:
print
wfdb.wfdbquit()
if __name__ == "__main__":
main(sys.argv)