8.5.1. Transformations Base Class — MDAnalysis.transformations.base

class MDAnalysis.transformations.base.TransformationBase(**kwargs)[source]

Base class for defining on-the-fly transformations

The class is designed as a template for creating on-the-fly Transformation classes. This class will

1) set up a context manager framework on limiting the threads per call, which may be the multi-thread OpenBlas backend of NumPy. This backend may kill the performance when subscribing hyperthread or oversubscribing the threads when used together with other parallel engines e.g. Dask. (PR #2950)

Define max_threads=1 when that is the case.

2) set up a boolean attribute parallelizable for checking if the transformation can be applied in a split-apply-combine parallelism. For example, the PositionAverager is history-dependent and can not be used in parallel analysis natively. (Issue #2996)

To define a new Transformation, TransformationBase has to be subclassed. max_threads will be set to None by default, i.e. does not do anything and any settings in the environment such as the environment variable OMP_NUM_THREADS (see the OpenMP specification for OMP_NUM_THREADS) are used. parallelizable will be set to True by default. You may need to double check if it can be used in parallel analysis; if not, override the value to False. Note this attribute is not checked anywhere in MDAnalysis yet. Developers of the parallel analysis have to check it in their own code.

class NewTransformation(TransformationBase):
    def __init__(self, ag, parameter,
                 max_threads=1, parallelizable=True):
        super().__init__(max_threads=max_threads,
                          parallelizable=parallelizable)
        self.ag = ag
        self._param = parameter

    def _transform(self, ts):
        #  REQUIRED
        ts.positions = some_function(ts, self.ag, self._param)
        return ts

Afterwards the new transformation can be run like this.

new_transformation = NewTransformation(ag, param)
u.trajectory.add_transformations(new_transformation)

New in version 2.0.0: Add the base class for all transformations to limit threads and check if it can be used in parallel analysis.

Parameters:
  • max_threads (int, optional) – The maximum thread number can be used. Default is None, which means the default or the external setting.

  • parallelizable (bool, optional) – A check for if this can be used in split-apply-combine parallel analysis approach. Default is True.