8.5.1. 转换基类 MDAnalysis.transformations.base

class MDAnalysis.transformations.base.TransformationBase(**kwargs)[源代码]

用于定义动态转换的基类

该类被设计为用于创建动态转换类的模板。这门课将

1)设置限制每次调用线程数的上下文管理器框架,可以是NumPy的多线程OpenBlas后台。当订阅超线程或过度订阅线程时,该后端可能会在与其他并行引擎(如DASK)一起使用时导致性能下降。(记者 #2950 )

定义 max_threads=1 如果是这样的话。

2)设置布尔属性 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 )

要定义新的转型, TransformationBase 必须被细分为子类。 max_threads 将设置为 None 默认情况下,即不在环境中执行任何操作和任何设置,例如环境变量 OMP_NUM_THREADS (请参阅 OpenMP specification for OMP_NUM_THREADS )被使用。 parallelizable 将设置为 True 默认情况下。您可能需要仔细检查它是否可以用于并行分析;如果不能,请重写该值以 False 。注意:此属性在MDAnalysis中的任何位置都尚未选中。并行分析的开发人员必须在他们自己的代码中检查它。

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

之后,新的转换可以像这样运行。

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

在 2.0.0 版本加入: 为所有转换添加基类以限制线程,并检查它是否可以用于并行分析。

参数:
  • max_threads (int, optional) -- 可以使用最大线程数。默认值为 None ,表示默认设置或外部设置。

  • parallelizable (bool, optional) -- 检查这是否可以用于拆分-应用-合并并行分析方法。默认值为 True