我想知道Bio.PDB如何将残基识别为异残基。
我知道,residual.id方法返回一个元组,其中第一项是hetery标志,第二项是残基标识符(数字),第三项是插入代码。
但是内部代码如何决定在异物标志字段中放置什么?是否检查残基中的原子是HETATM记录还是ATOM记录?
还是会检查每个残基中的原子名称,并将其与一组杂原子进行比较?
我问的原因是因为在4MDH链B中,坐标部分的第一个残基是ACE(乙酰基)。它只有C和O原子,并且PDB文件将其列为HETATM。但是当该残基的残基.id为('',0,'')时。
这是我的代码:
>>> from Bio.PDB.mmtf import MMTFParser
>>> structure = MMTFParser.get_structure_from_url('4mdh')
/Library/Python/2.7/site-packages/Bio/PDB/StructureBuilder.py:89: PDBConstructionWarning: WARNING: Chain A is discontinuous at line 0.
PDBConstructionWarning)
/Library/Python/2.7/site-packages/Bio/PDB/StructureBuilder.py:89: PDBConstructionWarning: WARNING: Chain B is discontinuous at line 0.
PDBConstructionWarning)
>>> chain = [c for c in structure.get_chains() if c.get_id() == 'B'][0]
>>> residue0 = [r for r in chain.get_residues() if r.id[1] == 0][0]
>>> residue0.id
(' ', 0, ' ')
>>>
最佳答案
TL; DR:不是BioPython,而是进行解释的mmtf库。
从source code:
self.structure_bulder.init_residue(group_name, self.this_type,
group_number, insertion_code)
在此创建残渣。第二个参数(
self.this_type
)是init_residue中的field
/ hetero flag
def init_residue(self, resname, field, resseq, icode):
"""Create a new Residue object.
Arguments:
- resname - string, e.g. "ASN"
- field - hetero flag, "W" for waters, "H" for hetero residues, otherwise blank.
在
mmtfParser
中,为this_type
中的整个链设置了set_chain_info
。如果使用
mmtf
导入相同的序列,则可以看到链0和1被视为聚合物,被BioPython解释为“规则”原子。这是有道理的,因为乙酸酯基团与肽链结合。from mmtf import fetch
decoded_data = fetch("4mdh")
print(decoded_data.entity_list)
[{'chainIndexList': [0, 1],
'description': 'CYTOPLASMIC MALATE DEHYDROGENASE',
'sequence': 'XSE...SSA',
'type': 'polymer'},
{'chainIndexList': [2, 4],
'description': 'SULFATE ION',
'sequence': '',
'type': 'non-polymer'},
{'chainIndexList': [3, 5],
'description': 'NICOTINAMIDE-ADENINE-DINUCLEOTIDE',
'sequence': '',
'type': 'non-polymer'},
{'chainIndexList': [6, 7],
'description': 'water',
'sequence': '',
'type': 'water'}]
请注意,您可以通过索引访问BioPython中的模型,链和残基,例如
structure[0]['B'][0]
将给您与问题中相同的原子。
关于structure - Bio.PDB如何识别异物残基?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50244015/