大家好,我需要一些帮助来格式化分子中原子的坐标,我正在使用 Python 进行编码。我需要的是:
(atom) x y z coordinates
对于分子中的每个原子。到目前为止我的代码是:
for molecule in mol_list:
molecule = Chem.AddHs(molecule)
print(molecule.GetNumAtoms())
AllChem.EmbedMolecule(molecule)
AllChem.UFFOptimizeMolecule(molecule)
molecule.GetConformer()
print()
for atom in molecule.GetAtoms():
# positions = molecule.GetConformer().GetAtomPosition(0)
positions = molecule.GetConformer().GetPositions()
print(atom.GetSymbol(), positions)
print()
但这给了我输出:
(Atom) x y z coordinates for every atom
如此重复,分子中的每个原子都具有整个分子的 x、y 和 z 坐标。
mol_list
循环中的for
是我转换为对象的字符串列表:rdkit.Chem.rdchem.Mol
。我尝试过 geometry.xyz
中的 Chemml
函数,但遇到了 Molecule 对象的问题。另外,我尝试使用 RdKit
函数 getAtomPos()
但没有成功。任何对此的帮助都会很棒!
您必须传递原子编号才能获取其坐标。以下代码片段应该可以满足您的要求
from rdkit import Chem
from rdkit.Chem import AllChem
for molecule in mol_list:
molecule = Chem.AddHs(molecule)
print(molecule.GetNumAtoms())
AllChem.EmbedMolecule(molecule)
AllChem.UFFOptimizeMolecule(molecule)
molecule.GetConformer()
print()
for i, atom in enumerate(molecule.GetAtoms()):
positions = molecule.GetConformer().GetAtomPosition(i)
print(atom.GetSymbol(), positions.x, positions.y, positions.z)