Re: [討論] 處理 pdb 檔案持續出現 error

看板MATLAB作者 (牟)時間7年前 (2017/01/16 16:26), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
自己回一下 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
文章代碼(AID): #1OV8Edzf (MATLAB)
文章代碼(AID): #1OV8Edzf (MATLAB)