Source code for cmrsim.analytic.encoding._from_sequence

""" This module contains the generic implementation of encoding modules using sequence
 definitions from cmrseq """

__all__ = ["GenericEncoding"]

from typing import Union, Iterable

import tensorflow as tf
import cmrseq

from cmrsim.analytic.encoding.base import BaseSampling


# pylint: disable=abstract-method
[docs] class GenericEncoding(BaseSampling): """" Interface to use cmr-seq definitions of k-space samples as encoder""" def __init__(self, name: str, sequence: Union[cmrseq.Sequence, Iterable[cmrseq.Sequence]], absolute_noise_std: Union[float, Iterable[float]], k_space_segments: int = None, device: str = None): """ :param name: Name of the module :param sequence: List or single instance of cmrseq.Sequence that implements the calculate_kspace() function :param absolute_noise_std: Noise standard deviation :param k_space_segments: If not specified, the number of sequences is used. :param device: Name of device that the operation is placed on """ if isinstance(sequence, cmrseq.Sequence): sequence = [sequence, ] if k_space_segments is None: k_space_segments = len(sequence) self.sequence_list = sequence super().__init__(absolute_noise_std, name, device=device, k_space_segments=tf.constant(k_space_segments, dtype=tf.int32)) def _calculate_trajectory(self) -> (tf.Tensor, tf.Tensor): """ Calls the calculate_kspace() for all entries in self._sequence_list, stacks the k-space vectors and flattens the array() :return: kspace-vectors, timing """ k_space, timings = [], [] for seq in self.sequence_list: _, k_adc, t_adc = seq.calculate_kspace() k_space.append(k_adc.T) timings.append(t_adc) # pylint: disable=no-value-for-parameter, unexpected-keyword-arg k_space = tf.cast(tf.concat(k_space, axis=0), tf.float32) # pylint: disable=no-value-for-parameter, unexpected-keyword-arg timings = tf.cast(tf.concat(timings, axis=0), tf.float32) return k_space, timings