Source code for cmrsim.datasets._bloch
""" This module contains the base implementation of a Dataset containing a digital phantom defined
as a dictionary of numpy arrays, fitting into RAM at once"""
__all__ = ["BlochDataset"]
from collections import OrderedDict
from cmrsim.datasets._base import BaseDataset
[docs]
class BlochDataset(BaseDataset):
def __init__(self, array_dictionary: OrderedDict, filter_inputs: bool = True):
""" Initializes a callable module, that yields an iterable tf.Dataset on call. The target
shape of the yielded batches is (#batch, ...)
:raises: InvalidArgument - if shape of M0, magnetization entries of the dictionary do
not match (#MaterialPoints, ), (#MaterialPoints, 3)
:param array_dictionary: (OrderedDict) containing the required quantities as numpy arrays
:param filter_inputs: If set to true, trivial material points are filtered (M0=0),
on instantiation
"""
if len(array_dictionary["M0"].shape) != 1:
raise ValueError("Shape of input array M0 invalid")
if len(array_dictionary["magnetization"].shape) != 2:
raise ValueError("Shape of input array magnetization invalid")
if len(array_dictionary["T1"].shape) != 1:
raise ValueError("Shape of input array T1 invalid")
if len(array_dictionary["T2"].shape) != 1:
raise ValueError("Shape of input array T2 invalid")
self.set_size = array_dictionary["magnetization"].shape[0]
self.map_names = tuple(array_dictionary.keys())
super().__init__(filter_inputs=filter_inputs, array_dictionary=array_dictionary)