在北极星集群使用alphafold和pymol

四、在af中使用pymol(三)添加标签,测量结构大小

2023-05-05 18:58:12 admin 35

这里我们调用了cgo类去绘图label,参考 https://pymolwiki.org/index.php/Category:CGO 

先定义一个函数,然后调用它,具体看注释

def add_label(w,obj,s):

           #调用cgo类

           cgo = []

           #获取最大最小坐标

           minxyz,maxxyz = cmd.get_extent(obj, state=0)

           #获取中心坐标

           center_x, center_y, center_z= [ (minxyz[0]+maxxyz[0])/2  , (minxyz[1]+maxxyz[1])/2 ,      (minxyz[2]+maxxyz[2])/2     ]

           #获取大小坐标

           size_x, size_y, size_z = [maxxyz[0]-minxyz[0], -minxyz[1]+maxxyz[1],-minxyz[2]+maxxyz[2]]

           #获取中心坐标最大值

           maxl=max(center_x,center_y,center_z)

           #获取label的位置坐标,放在z轴上,x轴负移动1-8倍中心坐标值,避开结构,自己调整

           label_z_pos = [minxyz[0]-2*maxl,     minxyz[1]    ,   center_z]
           #w="x:"+str(round(center_x,2))+" y:"+str(round(center_y,2))+" z:"+str(round(center_z,2))+" W:"+w

           #根据坐标轴中心位置的大小,确定字体坐标轴的大小,从而确定字体大小,这里s取值为0.1-1.5,自己定

           axesp=round(maxl*s,1)

           axes = [[axesp,0.0,0.0],[0.0,axesp,0.0],[0.0,0.0,axesp]]  

           #创建字体标签

           wire_text(cgo,plain,label_z_pos,w,axes)  

           #设定字体标签的粗细  

           cmd.set("cgo_line_radius",0.5)

           cmd.load_cgo(cgo,'times')

           #设定颜色

           cmd.color_deep("orange", 'times', 0)
           cmd.zoom("all",1.0)

add_label ("happy",i,0.5)  ##不支持中文哦



完整的代码,复制粘贴就可以执行:

import pymol,os,codecs,re
from pymol import cmd
from pymol.wizard import Wizard
from chempy import cpv
from pymol.cgo import *
from pymol.vfont import plain
from fnmatch import fnmatch
i="1G9A"
cmd.fetch(i)
cmd.remove("hydro")

cmd.remove("(solvent and 1G9A)")

def add_label(w,obj,s):
           cgo = []
           minxyz,maxxyz = cmd.get_extent(obj, state=0)
           center_x, center_y, center_z= [ (minxyz[0]+maxxyz[0])/2  , (minxyz[1]+maxxyz[1])/2 ,      (minxyz[2]+maxxyz[2])/2     ]
           size_x, size_y, size_z = [maxxyz[0]-minxyz[0], -minxyz[1]+maxxyz[1],-minxyz[2]+maxxyz[2]]
           maxl=max(center_x,center_y,center_z)
           label_z_pos = [minxyz[0]-2*maxl,     minxyz[1]    ,   center_z]
           #w="x:"+str(round(center_x,2))+" y:"+str(round(center_y,2))+" z:"+str(round(center_z,2))+" W:"+w
           axesp=round(maxl*s,1)
           axes = [[axesp,0.0,0.0],[0.0,axesp,0.0],[0.0,0.0,axesp]]  
           wire_text(cgo,plain,label_z_pos,w,axes)    
           cmd.set("cgo_line_radius",0.2)
           cmd.load_cgo(cgo,'times')
           cmd.color_deep("orange", 'times', 0)
           cmd.zoom("all",1.0)

add_label ("happy",i,0.5)


cmd.save("%s.pse"%i,all,-1,"pse")
cmd.set("bg_rgb", 'white')
cmd.set("ray_opaque_background", '1')          
cmd.png("%s.png"%i,width=2000, height=1500, dpi=300, ray=1)


渲染后的效果图:

图片关键词

首页
资源&收费
集群
成果
问答