PSP - 关于 AlphaFold2 的 openmm.patch 补丁

欢迎关注我的CSDN:https://spike.blog.csdn.net/
本文地址:https://blog.csdn.net/caroline_wendy/article/details/130541313

在配置 AlphaFold2 中,需要安装 openmm.patch 补丁,在 v2.3.1 版本之前才有,在 v2.3.2 以上版本,文件已经消失,用于解决 AlphaFold2 中的一个问题,即在蛋白质中可能出现多个二硫键分配给同一个原子的情况。

安装过程:

git checkout v2.3.1. # 最新版本删除 openmm.patch
cd ~/miniconda3/envs/alphafold/lib/python3.8/site-packages/
patch -p0 < $alphafold_path/docker/openmm.patch

更新日志:

patching file simtk/openmm/app/topology.py
Hunk #1 succeeded at 353 (offset -3 lines).

即修改 simtk/openmm/app/topology.py 文件,具体差异如下:

修改函数createDisulfideBonds(),即创建二硫键。

PSP - 关于 AlphaFold2 的 openmm.patch 补丁_第1张图片
源码如下:

    def createDisulfideBonds(self, positions):
        """Identify disulfide bonds based on proximity and add them to the
        Topology.

        Parameters
        ----------
        positions : list
            The list of atomic positions based on which to identify bonded atoms
        """
        def isCyx(res):
            names = [atom.name for atom in res._atoms]
            return 'SG' in names and 'HG' not in names
        # This function is used to prevent multiple di-sulfide bonds from being
        # assigned to a given atom. This is a DeepMind modification.
        def isDisulfideBonded(atom):
            for b in self._bonds:
                if (atom in b and b[0].name == 'SG' and
                    b[1].name == 'SG'):
                    return True

            return False

        cyx = [res for res in self.residues() if res.name == 'CYS' and isCyx(res)]
        atomNames = [[atom.name for atom in res._atoms] for res in cyx]
        for i in range(len(cyx)):
            sg1 = cyx[i]._atoms[atomNames[i].index('SG')]
            pos1 = positions[sg1.index]
            candidate_distance, candidate_atom = 0.3*nanometers, None
            for j in range(i):
                sg2 = cyx[j]._atoms[atomNames[j].index('SG')]
                pos2 = positions[sg2.index]
                delta = [x-y for (x,y) in zip(pos1, pos2)]
                distance = sqrt(delta[0]*delta[0] + delta[1]*delta[1] + delta[2]*delta[2])
                if distance < candidate_distance and not isDisulfideBonded(sg2):
                    candidate_distance = distance
                    candidate_atom = sg2
            # Assign bond to closest pair.
            if candidate_atom:
                self.addBond(sg1, candidate_atom)

二硫键 (Disulfide Bonds) 的介绍:

二硫键 (Disulfide Bonds) 是一种在生物化学中常见的化学键,是由两个硫醇基团氧化而成的单共价键,其结构为R-S-S-R’。二硫键在蛋白质的折叠和稳定性中起着重要作用,尤其是在细胞外的蛋白质中。二硫键可以在同一条肽链内或不同肽链间的半胱氨酸残基之间形成,从而影响蛋白质的二级结构和三级结构。二硫键的形成和断裂可以通过氧化还原反应进行,这些反应可以由一些特殊的酶或小分子催化。二硫键在许多生物过程中发挥着重要的功能,例如调节蛋白质的活性、保护细菌免受氧化应激、增强毛发和角质素的强度等。

你可能感兴趣的:(AI,for,Biotech,人工智能,深度学习)