The following figure illustrates the mumott workflow. Here, classes are shown in blue, input parameters and data in orange, and output data in green.
A typical workflow involves the following steps:
First the measured data along with its metadata is loaded into a
DataContainerobject. The latter allows one to access, inspect, and modify the data in various ways as shown in the tutorial on loading and inspecting data tutorial. Note that it is possible to skip the full data when instantiating a
DataContainerobject. In that case only geometry and diode data are read, which is much faster and sufficient for alignment.
The geometry information is then used to set up a projector object, e.g.,
SAXSProjectorBilinear. Projector objects allow one to transform tensor fields from three-dimensional space to projection space.
One can then combine the projector object, the basis set, and the data from the
DataContainerobject to set up a residual calculator object. Residual calculator objects hold the coefficients that need to be optimized and allow one to compute the residuals of the current representation.
To find the optimal coefficients a loss function object is set up, using, e.g., the
HuberLossclasses. The loss function can include one or several regularization terms, which are defined by regularizer objects such as
The optimized coefficients can then be processed via the basis set object to generate tensor field properties such as the anisotropy or the orientation distribution, returned as a
dict_to_h5can be used to convert this dictionary of properties into an
h5file, to be further processed or visualized.
Reconstruction workflows can be greatly abstracted via reconstruction pipelines. A pipeline contains a typical series of objects linked together, and it is possible to replace some of the components in the pipeline with others preferred by the user.
The user interaction with the pipeline can be understood as follows:
DataContainerinstance is created from input, as in a standard workflow.
For example, one might want to set the regularization weight for the
Laplacianregularizer (using the
regularization_weightkeyword argument), or one might want to replace the default
SAXSProjectorBilinearwith the GPU-based
SIGTT pipelineexecutes, and returns a
dictwhich contains the entry
'result'with the optimization coefficients. In addition, it contains the entries
projector, all containing the instances of the respective objects used in the pipeline.
get_outputmethod of the basis set can then be used to generate tensor field properties, as in the standard workflow.