Re: [討論] 處理 pdb 檔案持續出現 error
自己回一下
pdbread(), pdbwrite() 都有 bug
-----
pdbread() 的 bug 是在讀 CONECT 的部份
正常來說,
CONECT2816326398264212670126707
應該要讀成 [28163] 和 [26398 26421 26701 26707]
但是 pdbread() 會讀成 [28163] 和 [26398264212670126707]
到至後面的數字超過32位元的整數上限,變成 2147483647
-----
解法:
在 pdbread.m,Line 1108 的地方,將
OutList = sscanf(str,'%d')';
改成
OutList = sscanf(InString,'%5d')';
-----
pdbwrite() 的 bug 是在寫入 SEQRES 的地方
MATLAB 預設,一條氨基酸序列不會超過100行(共1287個氨基酸)
所以只預留兩位數給行數的編號,e.g.
SEQRES 71 A 1733 SER LEU LEU GLU SER GLY SER GLU ILE LEU GLY ASP LEU
SEQRES 72 A 1733 LYS LEU GLN VAL LEU LEU ASP GLU GLU TYR LYS GLN LEU
SEQRES 73 A 1733 VAL LYS ASP ARG LYS PHE LEU ARG GLU VAL PHE VAL ASP
但是其實大型蛋白質分子常常會有幾條超過100行,
導致 MATLAB 在 parsing 的時候變得亂七八糟
呼叫 reshape() 就 GG
-----
解法:
在 pdbwrite.m 的 Line 346 將
sprintf('SEQRES %2d ',1:no_of_lines)
改成
sprintf('SEQRES %3d ',1:no_of_lines) %請注意要少一個空格
還有在 Line 354 將
'SEQRES %2d %c %4d '
也一樣改成
'SEQRES %3d %c %4d '
-----
其實 molviewer.m 跟 pdbwrite.m 有一樣的 bug
但是你只要先將 pdbstruct 用剛剛改好的 pdbwrite() 存成檔案
然後 molviewer() 直接讀檔案而不是讀 pdbstruct 就沒有問題了,不需要改
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.109.74.235
※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1484555175.A.F69.html
推
02/22 10:06, , 1F
02/22 10:06, 1F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
MATLAB 近期熱門文章
PTT數位生活區 即時熱門文章