1

Cosmic または Uniprot で表示されるタンパク質の正規の AA 配列に、Protein Databank の PDB ファイルを一致させたいと考えています。具体的には、pdb ファイルから、バックボーンの炭素アルファ原子とその xyz 位置を取得する必要があります。また、タンパク質シーケンスで実際の順序を引き出す必要があります。構造 3GFT (Kras - Uniprot Accession Number P01116) の場合、これは簡単です。ResSeq 番号を取得するだけです。ただし、他のいくつかのタンパク質については、これがどのように可能かわかりません.

たとえば、構造 (2ZHQ) (タンパク質 F2 - Uniprot アクセッション番号 P00734) の場合、Seqres は番号「1」と「14」で繰り返される ResSeq 番号を持ち、Icode エントリのみが異なります。さらに、icode エントリは辞書順ではないため、抽出する順序を判断するのは困難です。

構造 3V5Q (Uniprot Accession Number 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)
}
4

2 に答える 2

1

この質問を www.biostars.org に移動し、help@uniprot.org に書き込んでください (これらの配列がデータベース レベルで既にリンクされていることはご存知ですか?) いずれにせよ、help@uniprot.org に書き込んで質問してください。 Jules Jacobsen は、PDB 構造を uniprot.org の正規配列にリンクすることに関する UniProt 常駐の専門家であるためです。

于 2012-05-29T16:34:23.043 に答える