B 因子(也称为温度因子或Debye-Waller 因子)是用于描述原子在蛋白质或其他分子晶体结构中热运动或位置不确定性的量度。它在 PDB 或 mmCIF 文件中以 B_iso_or_equiv
字段表示,是晶体学解析过程中为原子位置分配的附加信息之一。
B 因子的物理意义
在分子结构中,原子并非静止的,它们会受到各种热扰动、振动或其他因素的影响,从而偏离平均位置。B 因子越高,表示该原子在晶体结构中的运动性或不确定性越大,换句话说,这个原子的位置更不稳定或者解析的分辨率较差。
B 因子的数值范围
- 低 B 因子(通常小于 10-20 Ų):表示原子的热运动很小,原子的位置非常稳定。
- 高 B 因子(通常大于 50 Ų):表示原子的运动性大,或者晶体结构的局部解析较差,原子的精确位置不太确定。
公式和解析
B 因子通常通过 X 射线晶体衍射技术计算,公式如下: B 因子=8π2〈u2〉B 因子=8π2〈u2〉 其中 〈u2〉〈u2〉 是原子位置相对于其平均位置的均方偏移。B 因子随着晶体解析的分辨率和数据的精确度变化。
在结构中的作用
B 因子可以帮助研究者评估结构中哪些部分更为灵活或动态,哪些部分相对更稳定。通常:
- 主链中的α-螺旋和β-折叠等稳定二级结构的原子,B 因子比较低。
- 侧链或无序区域(例如回旋区或活性位点附近)的原子,B 因子比较高。
B 因子在 PDB/mmCIF 文件中的表示
在 PDB 文件中,B 因子信息通常位于每个原子行的末尾,而在 mmCIF 文件中则存储在 atom_site
对象的 B_iso_or_equiv
字段中。
py-mmcif 包示提取 B 因子例代码:
from mmcif.io.PdbxReader import PdbxReader
import gzip
# mmCIF 文件路径
cif_file_path = '/path/to/your/file.cif.gz'
data = []
# 打开并读取 gzipped mmCIF 文件
with gzip.open(cif_file_path, 'rt') as cif:
reader = PdbxReader(cif)
reader.read(data)
# 提取第一个数据块
data = data[0]
# 获取 atom_site 对象
atom_site = data.getObj('atom_site')
# 统计 B 因子
b_factors = []
for row in atom_site.getRowList():
b_factor = float(row[atom_site.getIndex('B_iso_or_equiv')])
b_factors.append(b_factor)
# 打印平均 B 因子
print(f'平均 B 因子: {sum(b_factors) / len(b_factors)}')
# 获取最大和最小 B 因子的原子信息
max_b_factor = max(b_factors)
min_b_factor = min(b_factors)
print(f'最大 B 因子: {max_b_factor}')
print(f'最小 B 因子: {min_b_factor}')
解释
- B_iso_or_equiv 字段存储每个原子的 B 因子,表示原子在晶体结构中的热扰动或位置不确定性。
- 使用 Python 可以很方便地提取并分析这些 B 因子,了解整个结构的热运动特性。
B 因子在结构生物学中常用于分析哪些部分是动态的,哪些部分更稳定,特别是对活性位点、蛋白质-配体相互作用等的研究具有重要意义。