看板 MATLAB 關於我們 聯絡資訊
自己回一下 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
imafsb: 感謝,給我一個方向 02/22 10:06