Python库的多样性使得它们可以在不同的应用场景中发挥作用,不同场景下同一个库可能拥有不同的功能,本系列未来会有不同的分类,可能会出现相同的库。数量很多,慢慢整理。文中的示例都是最基础的用法,有些就顺手写了,有些就丢给Ai,看个乐就行。
1. Rosetta – 分子结构预测
功能: Rosetta 是一个集成了多种计算生物学工具的软件套件,主要用于蛋白质结构预测和设计。
使用场景:
- 蛋白质结构预测和折叠。
- 蛋白质-蛋白质相互作用的模拟。
- 蛋白质工程和设计。
示例:
# Rosetta 主要通过命令行工具使用,以下是一个简化的示例 # 假设已经安装了 Rosetta 和 PyRosetta from pyrosetta import * # 初始化 Rosetta init() # 加载一个蛋白质结构 pose = pose_from_pdb("input.pdb") # 执行最小化能量 scorefxn = get_fa_scorefxn() min_mover = MinMover() min_mover.score_function(scorefxn) min_mover.apply(pose) # 保存结果 pose.dump_pdb("output.pdb")
2. FoldX – 蛋白质结构计算
功能: FoldX 是一个用于蛋白质结构稳定性和突变效应预测的工具。
使用场景:
- 预测蛋白质突变对稳定性的影响。
- 蛋白质设计和优化。
- 研究蛋白质-配体相互作用。
示例:
# FoldX 主要通过命令行工具使用,这里提供一个简化的 Python 调用示例 import subprocess # 运行 FoldX 命令 command = ["foldx", "--command", "Stability", "--pdb", "input.pdb", "--mutant-file", "mutant.txt"] subprocess.run(command) # 读取结果 with open("Stability.txt", "r") as file: results = file.readlines() print(results)
3. PyRosetta – Rosetta 的 Python 接口
功能: PyRosetta 提供 Rosetta 的 Python 接口,使得 Rosetta 的功能可以通过 Python 脚本访问。
使用场景:
- 自动化蛋白质结构预测和设计任务。
- 结合其他 Python 科学计算库进行更复杂的分析。
- 数据科学和机器学习结合蛋白质结构分析。
示例:
from pyrosetta import * # 初始化 PyRosetta init() # 加载蛋白质结构 pose = pose_from_pdb("input.pdb") # 定义一个突变 mutant = "A123L" # 应用突变 mutate_residue(pose, mutant) # 计算能量 scorefxn = get_fa_scorefxn() energy = scorefxn(pose) print(f"Energy after mutation {mutant}: {energy}")
4. MDA (MDAnalysis) – 分子动力学分析
功能: MDAnalysis 是一个用于分析分子动力学模拟数据的库,支持多种轨迹格式。
使用场景:
- 分析分子动力学模拟结果。
- 计算结构、动力学性质。
- 分子对接和药物发现中的轨迹分析。
示例:
import MDAnalysis as mda # 加载轨迹 u = mda.Universe("topology.pdb", "trajectory.xtc") # 选择原子 protein = u.select_atoms("protein") # 计算 RMSD rmsd = mda.analysis.rms.RMSD(u, select="backbone").run() # 打印结果 print(rmsd.results.rmsd)
5. Open Babel – 化学数据格式转换
功能: Open Babel 是一个化学工具箱,支持多种化学文件格式的转换和操作。
使用场景:
- 化学数据的格式转换。
- 分子结构的操作和编辑。
- 化学信息的提取和计算。
示例:
from openbabel import pybel # 读取一个分子文件 mol = next(pybel.readfile("sdf", "molecule.sdf")) # 转换格式 mol.write("mol2", "molecule.mol2", overwrite=True) # 计算分子描述符 descriptors = mol.calcdesc() print(descriptors)
6. ProDy – 蛋白质动力学分析
功能: ProDy 是一个用于蛋白质动力学分析的 Python 包,专注于蛋白质结构的动态特性研究。
使用场景:
- 蛋白质结构的动力学分析。
- 模拟蛋白质的柔性和变形。
- 研究蛋白质的功能相关运动。
示例:
from prody import * # 加载蛋白质结构 protein = parsePDB('protein.pdb') # 计算 ANM(Anisotropic Network Model) anm = ANM('Protein ANM') anm.buildHessian(protein) anm.calcModes() # 打印模态分析结果 print(anm.getEigvals())
7. AutoDock Vina – 分子对接
功能: AutoDock Vina 是一个用于分子对接的工具,旨在预测小分子与受体蛋白质的结合模式。
使用场景:
- 药物设计和优化。
- 研究蛋白质-配体相互作用。
- 虚拟筛选化合物库。
示例:
# AutoDock Vina 主要通过命令行工具使用,这里提供一个简化的 Python 调用示例 import subprocess # 准备输入文件 # 假设已经有 ligand.pdbqt 和 receptor.pdbqt 文件 # 运行 Vina command = ["vina", "--receptor", "receptor.pdbqt", "--ligand", "ligand.pdbqt", "--out", "output.pdbqt", "--log", "log.txt", "--exhaustiveness", "8"] subprocess.run(command) # 读取结果 with open("log.txt", "r") as file: results = file.readlines() print(results)
8. PyModeller – 分子建模
功能: PyModeller 是一个基于 MODELLER 的 Python 接口,用于蛋白质结构建模。
使用场景:
- 同源建模。
- 蛋白质结构预测。
- 蛋白质结构的优化和修饰。
示例:
from modeller import * # 创建一个环境 env = environ() # 读取模板结构 mdl = model(env, file='template.pdb') # 定义目标序列 aln = alignment(env) aln.append(file='target.ali', align_codes='target') # 执行建模 mdl.clear_topology() mdl.generate_topology(aln['target']) mdl.make() # 优化模型 mdl.restraints.make(aln, restraint_type='stereo', spline_on_site=False) mdl.optimize() # 写入结果 mdl.write(file='model.pdb')
9. ChemPer – 化学感知规则库
功能: ChemPer 是一个用于化学感知规则的库,提供化学反应和转化规则的定义和应用。
使用场景:
- 化学反应预测。
- 化学合成路径规划。
- 自动化化学数据处理。
示例:
from chemper import smarts, mol_graphs from rdkit import Chem # 定义一个化学反应规则 rule = smarts.SmartsRule("C(=O)O>>C(=O)[OH-]") # 应用规则到一个分子 mol = Chem.MolFromSmiles("CC(=O)O") reacted_mol = rule.apply(mol) # 打印结果 print(Chem.MolToSmiles(reacted_mol))
10. RDKit Chem – 化学信息库
功能: RDKit 是用于化学信息处理的开源工具包,支持分子操作、化学反应、QSAR 等功能。
使用场景:
- 分子结构的生成、编辑和分析。
- 化学反应的模拟和预测。
- 药物设计和虚拟筛选。
示例:
from rdkit import Chem # 创建一个分子 mol = Chem.MolFromSmiles("CC(=O)O") # 添加氢原子 mol = Chem.AddHs(mol) # 优化分子结构 from rdkit.Chem import AllChem AllChem.EmbedMolecule(mol) # 计算分子描述符 from rdkit.Chem import Descriptors mol_weight = Descriptors.MolWt(mol) print(f"Molecular Weight: {mol_weight}")