最近遇到了两次需要初略估计蛋白长宽高的情况,其实这个非常简单,在pdb中查看卡迪尔坐标然后排序即可。这里和大家分享三种方法:

1.shell进行读取

这个我之前其实有分享过,代码简单如下:

1
2
3
4
5
6
7
8
#!/bin/sh
#作者:GROMACS中文组群: 广药-阿福
#x轴
grep ^ATOM $1 | awk ‘{print $7}’| sort -n |sed -n ‘1p;$p
#y轴
grep ^ATOM $1 | awk ‘{print $8}’| sort -n |sed -n ‘1p;$p
#z轴
grep ^ATOM $1 | awk ‘{print $9}’| sort -n |sed -n ‘1p;$p

2.利用python脚本进行读取计算

这个是我今天写的,写的很初略,因为我发现第三种方法最直接简练:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#-*-coding:utf-8-*-
x=[]
y=[]
z=[]
for i in open('file.pdb','r'):
if i.startswith('ATOM'):
new=i.split()
x.append(float(new[6]))
y.append(float(new[7]))
z.append(float(new[8]))
else:
pass
print('长:'+str(max(x)-min(x)))
print('宽:'+str(max(y)-min(y)))
print('高:'+str(max(z)-min(z)))

3.Pymol进行读取计算

其实简单的方便的方法可以使用Pymol的get_extent来获得XYZ的最大最小值,如下排列:

1
[ [ min-X , min-Y , min-Z ],[ max-X, max-Y , max-Z ]]

可以使用命令行如下:

1
get_extent sele

PYMOL API如下:

1
cmd.get_extent(string selection="(all)", state=0 )