作者xniux (牟)
看板MATLAB
标题Re: [讨论] 处理 pdb 档案持续出现 error
时间Mon Jan 16 16:26:12 2017
自己回一下
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://webptt.com/cn.aspx?n=bbs/MATLAB/M.1484555175.A.F69.html
1F:推 imafsb: 感谢,给我一个方向 02/22 10:06