Source code for src.original.DK_OGC_AmsterdamUMC.utils.data_processing.processors.SortSignalOnXval
import numpy as np
import torch
import torchio
from torchio.transforms import Transform
[docs]
class SortSignalOnXval(Transform):
def __init__(self, **kwargs):
super().__init__(**kwargs)
[docs]
def apply_transform(self, subject):
"""
Sorts signals and xvals on ascending xvals
Args:
subject: Subject
Returns:
subject: Subject
"""
images_dict = subject.get_images_dict()
signals = images_dict['signals'].numpy()
xvals = np.squeeze(images_dict['xvals'].numpy())
signals, xvals = self.sort_signals_on_xval_array(signals, xvals)
subject.add_image(torchio.Image(tensor=torch.Tensor(signals)), 'signals')
subject.add_image(torchio.Image(tensor=torch.Tensor(np.reshape(xvals, (xvals.shape[0], 1, 1, 1)))), 'xvals')
return subject
[docs]
@staticmethod
def sort_signals_on_xval_array(signals, xvals):
"""
Sorts signals and xvals on ascending xvals
Args:
signals: signals to sort
bval: bvalues to use for sorting
Returns:
sorted_signals: sorted signals
sorted_bvals: sorted bvals
"""
sorted_xval_idcs = np.argsort(xvals)
sorted_xvals = xvals[sorted_xval_idcs]
sorted_signals = signals[sorted_xval_idcs, ...]
return sorted_signals, sorted_xvals