我想知道 Bio.PDB 如何将残基识别为异质残基。 我知道残基.id 方法返回一个元组,其中第一项是异质标志,第二项是残基标识符(数字),第三项是插入代码。
但是内部代码如何决定在异质标志字段中放入什么内容呢?它是否检查残基中的原子是 HETATM 记录还是 ATOM 记录?
或者它是否检查每个残基中的原子名称并将其与某些杂原子集进行比较?
我问的原因是因为在4MDH B链中,坐标部分的第一个残基是ACE(乙酰基)。它只有 C 和 O 原子,PDB 文件将其列为 HETATM。但是当这个残基的residual.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 库。
来自源代码:
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]
会给你与问题中相同的原子。
不确定 MMTF 文件是否被广泛使用 (https://mmtf.rcsb.org/faq.html)
如果您使用
Bio.PDB.PDBParser
代替,该标志将在此处设置
https://github.com/biopython/biopython/blob/master/Bio/PDB/PDBParser.py#L193`
if record_type == "HETATM": # hetero atom flag
if resname == "HOH" or resname == "WAT":
hetero_flag = "W"
else:
hetero_flag = "H"
else:
hetero_flag = " "
residue_id = (hetero_flag, resseq, icode)
上面给出了
record_type = line[0:6]