我想将蛋白质数据库中的PDB文件与Cosmic或Uniprot中显示的蛋白质的典型AA序列相匹配。具体来说,我需要做的是从pdb文件中拉出主干中的碳原子和它们的xyz位置。我还需要在蛋白质序列中提取他们的实际顺序。对于结构3GFT(克拉斯 - Uniprot登录号P01116),这很容易,我可以采用ResSeq编号。但是,对于其他一些蛋白质,我无法弄清楚这是可能的。例如,对于结构(2ZHQ)(蛋白质F2- Uniprot登录号P00734),Seqres具有针对数字“1”和“14”重复的ResSeq数字,并且仅在Icode条目中有所不同。进一步icode条目不是在词法顺序,因此很难说出要提取的顺序。从蛋白质数据库到Cosmic或Uniprot的蛋白质序列比对
如果考虑结构3V5Q(Uniprot登录号Q16288),情况会更糟糕。对于大多数蛋白质,ResSeq编号与来自COSMIC或UNIPROT等来源的实际氨基酸相匹配。在位置711之后,它跳到位置730.当查看REMARK 465(缺失的原子)时,它显示对于链A,缺失了726-729。然而,匹配到蛋白质后,那些AA实际上是712-715。
我附上了一些简单的3GFT示例代码,但如果有人是pdb文件的专家,并且可以帮助我解决其余的问题,我会非常感激。
library(gdata)
#answer<- get.positions("http://www.pdb.org/pdb/files/2ZHQ.pdb","L")
answer<- get.positions("http://www.pdb.org/pdb/files/3GFT.pdb","A")
#This function reads a pdb file and returns the appropriate data structure
get.positions <- function(sourcefile, chain_required = "A"){
N <- 10^5
AACount <- 0
positions = data.frame(Residue=rep(NA, N),AtomCount=rep(0, N),SideChain=rep(NA, N),XCoord=rep(0, N),YCoord=rep(0, N),ZCoord=rep(0, N),stringsAsFactors=FALSE)
visited = list()
filedata <- readLines(sourcefile, n= -1)
for(i in 1: length(filedata)){
input = filedata[i]
id = substr(input,1,4)
if(id == "ATOM"){
type = substr(input,14,15)
if(type == "CA"){
resSerial = strtoi(substr(input, 7,11))
residue = substr(input,18,20)
type_of_chain = substr(input,22,22)
resSeq = strtoi(substr(input, 23,26))
altLoc = substr(input,17,17)
if(resSeq >=1){ #does not include negative residues
if(type_of_chain == chain_required && !(resSerial %in% visited) && (altLoc == " " || altLoc == "A")){
visited <- c(visited, resSerial)
AACount <- AACount + 1
position_string =list()
position_string[[1]]= as.numeric(substr(input,31,38))
position_string[[2]] =as.numeric(substr(input,39,46))
position_string[[3]] =as.numeric(substr(input,47,54))
#print(input)
positions[AACount,]<- c(residue, resSeq, type_of_chain, position_string[[1]], position_string[[2]], position_string[[3]])
}
}
}
}
}
positions<-positions[1:AACount,]
positions[,2]<- as.numeric(positions[,2])
positions[,4]<- as.numeric(positions[,4])
positions[,5]<- as.numeric(positions[,5])
positions[,6]<- as.numeric(positions[,6])
return (positions)
}
嗨,感谢您的建议! – user1357015
我已经在biostars上发布了这个问题,谢谢!我还通过电子邮件发送了PDB。与一位教授谈话虽然专门处理蛋白质结构,但他提到最好的方法是做一个对齐。不过,谢谢你的帮助! – user1357015