根据共晶结构找配体中心以及配体盒子(pymol)

1.先从pdb下载相应的共晶结构,然后用pymol打开
2.将配体结构选中:选中右侧的A中的下图
显示配体结构2.选中配体:
红色代表选中3.在命令行中执行:

set_name sele,ligand  #将选中sele命名为ligand
centerofmass ligand

便会返回配体的中心坐标点
4.找配体盒子:参考地址 https://zhuanlan.zhihu.com/p/427433083
稍作修改之后的版本记录:

from pymol.cgo import *
from random import randint

def gridbox(center_x=1, center_y=1, center_z=1, size_x=20, size_y=20, size_z=20, name="gridbox", r1=0,
            g1=0, b1=1, trasp=0.2):
    center_x = float(center_x)
    center_y = float(center_y)
    center_z = float(center_z)
    size_x = float(size_x)
    size_y = float(size_y)
    size_z = float(size_z)
    r1 = float(r1)
    g1 = float(g1)
    b1 = float(b1)
    trasp = float(trasp)

    p1 = [center_x - size_x / 2, center_y - size_y / 2, center_z + size_z / 2]
    p2 = [center_x - size_x / 2, center_y + size_y / 2, center_z + size_z / 2]
    p3 = [center_x + size_x / 2, center_y + size_y / 2, center_z + size_z / 2]
    p4 = [center_x + size_x / 2, center_y - size_y / 2, center_z + size_z / 2]
    p5 = [center_x - size_x / 2, center_y - size_y / 2, center_z - size_z / 2]
    p6 = [center_x - size_x / 2, center_y + size_y / 2, center_z - size_z / 2]
    p7 = [center_x + size_x / 2, center_y + size_y / 2, center_z - size_z / 2]
    p8 = [center_x + size_x / 2, center_y - size_y / 2, center_z - size_z / 2]
    obj = [
        ALPHA, trasp,
        COLOR, r1, g1, b1,
        BEGIN, TRIANGLE_STRIP,
        VERTEX, p1[0], p1[1], p1[2],
        VERTEX, p2[0], p2[1], p2[2],
        VERTEX, p4[0], p4[1], p4[2],
        VERTEX, p3[0], p3[1], p3[2],
        END,

        BEGIN, TRIANGLE_STRIP,
        #			 COLOR,1,0,0,
        VERTEX, p1[0], p1[1], p1[2],
        VERTEX, p5[0], p5[1], p5[2],
        VERTEX, p4[0], p4[1], p4[2],
        VERTEX, p8[0], p8[1], p8[2],
        END,

        BEGIN, TRIANGLE_STRIP,
        VERTEX, p4[0], p4[1], p4[2],
        VERTEX, p8[0], p8[1], p8[2],
        VERTEX, p3[0], p3[1], p3[2],
        VERTEX, p7[0], p7[1], p7[2],
        END,

        BEGIN, TRIANGLE_STRIP,
        VERTEX, p7[0], p7[1], p7[2],
        VERTEX, p3[0], p3[1], p3[2],
        VERTEX, p6[0], p6[1], p6[2],
        VERTEX, p2[0], p2[1], p2[2],
        END,

        BEGIN, TRIANGLE_STRIP,
        #			 COLOR,0,1,0,
        VERTEX, p2[0], p2[1], p2[2],
        VERTEX, p6[0], p6[1], p6[2],
        VERTEX, p1[0], p1[1], p1[2],
        VERTEX, p5[0], p5[1], p5[2],
        END,

        BEGIN, TRIANGLE_STRIP,
        VERTEX, p1[0], p1[1], p1[2],
        VERTEX, p5[0], p5[1], p5[2],
        VERTEX, p4[0], p4[1], p4[2],
        VERTEX, p8[0], p8[1], p8[2],
        END,

        BEGIN, TRIANGLE_STRIP,
        VERTEX, p5[0], p5[1], p5[2],
        VERTEX, p8[0], p8[1], p8[2],
        VERTEX, p6[0], p6[1], p6[2],
        VERTEX, p7[0], p7[1], p7[2],
        END,
    ]
    cmd.load_cgo(obj, name)

    minX = center_x - size_x / 2
    maxX = center_x + size_x / 2
    minY = center_y - size_y / 2
    maxY = center_y + size_y / 2
    minZ = center_z - size_z / 2
    maxZ = center_z + size_z / 2
    boundingBox = [
        LINEWIDTH, float(2),

        BEGIN, LINES,
        COLOR, float(1), float(0), float(0),

        VERTEX, minX, minY, minZ,
        VERTEX, minX, minY, maxZ,
        VERTEX, minX, maxY, minZ,
        VERTEX, minX, maxY, maxZ,
        VERTEX, maxX, minY, minZ,
        VERTEX, maxX, minY, maxZ,
        VERTEX, maxX, maxY, minZ,
        VERTEX, maxX, maxY, maxZ,
        VERTEX, minX, minY, minZ,
        VERTEX, maxX, minY, minZ,
        VERTEX, minX, maxY, minZ,
        VERTEX, maxX, maxY, minZ,
        VERTEX, minX, maxY, maxZ,
        VERTEX, maxX, maxY, maxZ,
        VERTEX, minX, minY, maxZ,
        VERTEX, maxX, minY, maxZ,
        VERTEX, minX, minY, minZ,
        VERTEX, minX, maxY, minZ,
        VERTEX, maxX, minY, minZ,
        VERTEX, maxX, maxY, minZ,
        VERTEX, minX, minY, maxZ,
        VERTEX, minX, maxY, maxZ,
        VERTEX, maxX, minY, maxZ,
        VERTEX, maxX, maxY, maxZ,

        END
    ]

    p4 = '_4' + str(randint(0, 100))
    p5 = '_5' + str(randint(0, 100))
    p6 = '_6' + str(randint(0, 100))
    p7 = '_7' + str(randint(0, 100))
    cmd.pseudoatom(pos=[minX, minY, minZ], object=p4)
    cmd.pseudoatom(pos=[minX, minY, maxZ], object=p5)
    cmd.pseudoatom(pos=[minX, maxY, minZ], object=p6)
    cmd.pseudoatom(pos=[maxX, minY, minZ], object=p7)
    cmd.distance(None, p4, p7)
    cmd.distance(None, p4, p6)
    cmd.distance(None, p4, p5)
    cmd.hide("nonbonded")

    boxName = "box_IABB_" + str(randint(0, 100))
    cmd.load_cgo(boundingBox, boxName)
    
cmd.extend('gridbox', gridbox)

在pymol中输入:

run E:\box.py
gridbox 2, 2, 2, 10, 10, 10, 0.7, 0.7, 0.7 ,0.2    
# 参数解释:盒子中心为[2, 2, 2],盒子尺寸为[10, 10, 10],盒子RGB颜色为[0.7, 0.7, 0.7],透明度为0.2
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值