借助pymol计算NMR中蛋白的RMSD
背景:NMR中有蛋白的多个状态,找出其中差异较大的蛋白。
有两种方法;
方法一:NMRCLUST 聚类
方法二:
首先求一个平均结构,然后计算20个构象与这个平均结构的RMSD
再取最接近平均结构的一个构象a
1wym_right_Number_0009 2.509
同时取与平均结构的rmsd最大的构象b
1wym_right_Number_0013 6.205
最后取与b的rmsd差异最大的c
1wym_right_Number_0005 9.535
我现在通过meanNMR.pl得到了平均结构
现在我借助于pymol中的fit命令来计算RMSD值
NMRrmsd.py
===============================
#!/usr/bin/python
#author: Chen Zhaoqiang
#email: 744891290@qq.com
import sys
import os
import re
print "please change the dir to the dir storing NMR pdbs\n";
from pymol import cmd
parameter=[]
parameter=sys.argv[:]
lenofpara= len(parameter)
if(lenofpara != 5):
print '''usage: NMRrmsd.py -out e:/result.txt'''
path='e:/yyq/receptor/20pdbs';
#sys.exit()
#outfile=sys.argv
cmd.delete('all')
nmrfile=[]
nmrfile=os.listdir(path)
cmd.load('1wym_right_Number_0013.pdb')
for fil in nmrfile:
# print fil
if(re.search('1wym_right_Number_0013',fil)):
pass
else:
cmd.load(fil)
cmdline='fit 1wym_right_Number_0013, '+fil[:-4]
#cmdline2='rms mean, '+fil[:-4]
#cmdline3='rms_cur mean, '+fil[:-4]
#print cmdline
cmd.do(cmdline)
#cmd.do(cmdline2)
#cmd.do(cmdline3)
cmd.delete('all')
#notice :the result of rms and fit is the same,
#rms_cur:in the nmr,maybe the result is same,
#if translation a position of a protein,the rms_cur will change
#Rms_Cur computes the RMS difference between two atom selections without performing any fitting
===================
rmsd进行排序pymolrmsd.pl
====
#!/usr/bin/perl -w
use strict;
open FH,"E:/yyq/selecrmsd.txt";
my %hash;
my ($name,$rmsd);
while(<FH>)
{
if($_=~/PyMOL>fit \S+, (\S+)/)
{
$name=$1;
print "$name"
}
elsif($_=~/ Executive: RMS = (\S+)/)
{
$rmsd=$1;
print "$rmsd\n";
{no strict;
no warnings;
# print "$name, $rmsd\n";
$hash{$name}=$rmsd;
}
}
}
foreach my $key (sort{ $hash{$a} <=> $hash{$b} } keys %hash)
{
printf("%s\t%s\n",$key, $hash{$key});
}
============
thank you for your sharing 谢谢分享
页:
[1]