Skip to content

Commit 6b5a3a8

Browse files
committed
dev
1 parent f739ae9 commit 6b5a3a8

File tree

2 files changed

+35
-16
lines changed

2 files changed

+35
-16
lines changed

wfdb/_signals.py

Lines changed: 34 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -356,10 +356,18 @@ def rdsegment(filename, dirname, pbdir, nsig, fmt, siglen, byteoffset,
356356
# Return each sample in signals with multiple samples/frame, without smoothing.
357357
# Return a list of numpy arrays for each signal.
358358
else:
359-
signals=[]
359+
signals=[None]*len(channels)
360360

361361
for fn in w_filename:
362-
signals.append(rddat())
362+
# Get the list of all signals contained in the dat file
363+
datsignals = rddat(fn, dirname, pbdir, w_fmt[fn], len(datchannel[fn]),
364+
siglen, w_byteoffset[fn], w_sampsperframe[fn], w_skew[fn], sampfrom, sampto, smoothframes)
365+
366+
# Copy over the wanted signals
367+
for cn in range(len(out_datchannel[fn])):
368+
369+
signals[out_datchannel[fn][cn]] = datsignals[r_w_channel[fn][cn]]
370+
363371

364372

365373
return signals
@@ -420,11 +428,12 @@ def rddat(filename, dirname, pbdir, fmt, nsig,
420428
if fmt in ['212', '310', '311']:
421429
# Extra number of bytes to append onto the bytes read from the dat file.
422430
extrabytenum = totalprocessbytes - totalreadbytes
423-
sigbytes = np.concatenate(getdatbytes(filename, dirname, pbdir, fmt, startbyte, nreadsamples),
424-
np.zeros(extrabytenum, dtype = 'uint8'))
431+
432+
sigbytes = np.concatenate((getdatbytes(filename, dirname, pbdir, fmt, startbyte, nreadsamples),
433+
np.zeros(extrabytenum, dtype = 'uint8')))
425434
else:
426-
sigbytes = np.concatenate(getdatbytes(filename, dirname, pbdir, fmt, startbyte, nreadsamples),
427-
np.zeros(extraflatsamples, dtype=np.dtype(dataloadtypes[fmt])))
435+
sigbytes = np.concatenate((getdatbytes(filename, dirname, pbdir, fmt, startbyte, nreadsamples),
436+
np.zeros(extraflatsamples, dtype='int64')))
428437
else:
429438
sigbytes = getdatbytes(filename, dirname, pbdir, fmt, startbyte, nreadsamples)
430439

@@ -448,7 +457,7 @@ def rddat(filename, dirname, pbdir, fmt, nsig,
448457
sig = sig.reshape(-1, nsig)
449458

450459
# Skew the signal
451-
sig = skewsig(sig, skew, nsig, readlen)
460+
sig = skewsig(sig, skew, nsig, readlen, fmt, nanreplace)
452461

453462
# Extra frames present to be smoothed. Obtain averaged uniform numpy array
454463
elif smoothframes:
@@ -461,7 +470,7 @@ def rddat(filename, dirname, pbdir, fmt, nsig,
461470
sigflat = sigflat[blockfloorsamples:]
462471

463472
# Smoothed signal
464-
sig = np.zeros(int(len(sigflat)/tsampsperframe) , nsig)
473+
sig = np.zeros((int(len(sigflat)/tsampsperframe) , nsig))
465474

466475
# Transfer and average samples
467476
for ch in range(nsig):
@@ -473,7 +482,7 @@ def rddat(filename, dirname, pbdir, fmt, nsig,
473482
sig = (sig / sampsperframe)
474483

475484
# Skew the signal
476-
sig = skewsig(sig, skew, nsig, readlen)
485+
sig = skewsig(sig, skew, nsig, readlen, fmt, nanreplace)
477486

478487
# Extra frames present without wanting smoothing. Return all expanded samples.
479488
else:
@@ -490,11 +499,11 @@ def rddat(filename, dirname, pbdir, fmt, nsig,
490499
# Transfer over samples
491500
for ch in range(nsig):
492501
# Indices of the flat signal that belong to the channel
493-
ch_indices = np.concatenate([np.array(range(sampsperframe[ch])) + tsampsperframe*framenum for framenum in range(int(len(sigflat)/tsampsperframe))])
502+
ch_indices = np.concatenate(([np.array(range(sampsperframe[ch])) + tsampsperframe*framenum for framenum in range(int(len(sigflat)/tsampsperframe))]))
494503
sig.append(sigflat[ch_indices])
495504

496505
# Skew the signal
497-
sig = skewsig(sig, skew, nsig, readlen, sampsperframe)
506+
sig = skewsig(sig, skew, nsig, readlen, fmt, nanreplace, sampsperframe)
498507

499508
elif fmt == '310':
500509
pass
@@ -518,12 +527,15 @@ def rddat(filename, dirname, pbdir, fmt, nsig,
518527
sig = sigbytes.reshape(-1, nsig)
519528

520529
# Skew the signal
521-
sig = skewsig(sig, skew, nsig, readlen)
530+
sig = skewsig(sig, skew, nsig, readlen, fmt, nanreplace)
522531

523532

524533
# Extra frames present to be smoothed. Obtain averaged uniform numpy array
525534
elif smoothframes:
526535

536+
print('sigbytes:')
537+
print(sigbytes)
538+
527539
# Allocate memory for signal
528540
sig = np.empty([readlen, nsig], dtype='int')
529541

@@ -537,6 +549,9 @@ def rddat(filename, dirname, pbdir, fmt, nsig,
537549
sig[:, ch] += sigbytes[skew[ch]*tsampsperframe+sum(([0] + sampsperframe)[:ch + 1]) + frame::tsampsperframe]
538550
sig = (sig / sampsperframe)
539551

552+
print('sig after smoothing:')
553+
print(sig)
554+
540555
# Extra frames present without wanting smoothing. Return all expanded samples.
541556
else:
542557
# List of 1d numpy arrays
@@ -549,11 +564,11 @@ def rddat(filename, dirname, pbdir, fmt, nsig,
549564
# chansig[frame::sampsperframe[ch]] = sigbytes[skew[ch]*tsampsperframe+sum(([0] + sampsperframe)[:ch + 1]) + frame::tsampsperframe]
550565
# sig.append(chansig)
551566

552-
ch_indices = np.concatenate([np.array(range(sampsperframe[ch])) + tsampsperframe*framenum for framenum in range(int(len(sigflat)/tsampsperframe))])
567+
ch_indices = np.concatenate([np.array(range(sampsperframe[ch])) + tsampsperframe*framenum for framenum in range(int(len(sigbytes)/tsampsperframe))])
553568
sig.append(sigbytes[ch_indices])
554569

555570
# Skew the signal
556-
sig = skewsig(sig, skew, nsig, readlen, sampsperframe)
571+
sig = skewsig(sig, skew, nsig, readlen, fmt, nanreplace, sampsperframe)
557572

558573
# Integrity check of signal shape after reading
559574
checksigdims(sig, readlen, nsig, sampsperframe)
@@ -753,8 +768,11 @@ def bytes2samples(sigbytes, nsamp, fmt):
753768

754769

755770
# Skew the signal and shave off extra samples
756-
def skewsig(sig, skew, nsig, readlen, sampsperframe=None):
757-
771+
def skewsig(sig, skew, nsig, readlen, fmt, nanreplace, sampsperframe=None):
772+
"""
773+
fmt is just for the correct nan value.
774+
sampsperframe is only used for skewing expanded signals.
775+
"""
758776
if max(skew)>0:
759777

760778
# Expanded frame samples. List of arrays.

wfdb/records.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -404,6 +404,7 @@ def wrsamp(self):
404404
self.wrdats()
405405

406406
# Arrange/edit object fields to reflect user channel and/or signal range input
407+
# Account for case when signals are expanded
407408
def arrangefields(self, channels, expanded):
408409

409410
# Rearrange signal specification fields

0 commit comments

Comments
 (0)