PyTorch第三方库 2. GNN使用PyG的实现( 六 )


【Code】
#将分子中的原子都标记上原子编号def mol_with_atom_index(mol):for atom in mol.GetAtoms():#返回原子atom对象组成的列表atom.SetAtomMapNum(atom.GetIdx())#返回原子编号return mol#Chem.MolFromSmiles()输入的字符串是SMILES(用于表示分子的一种方法),得到的是mol对象mol = Chem.MolFromSmiles("C1CC2=C3C(=CC=C2)C(=CN3C1)[C@H]4[C@@H](C(=O)NC4=O)C5=CNC6=CC=CC=C65")# With atom indexmol_with_atom_index(mol)
添加原子索引的更简单方法是调整属性 。这会产生与上面示例类似的图像,不同之处在于原子索引现在靠近原子,而不是原子位置 。
【Code】
from rdkit import Chemfrom rdkit.Chem.Draw import IPythonConsolefrom rdkit.Chem import DrawIPythonConsole.drawOptions.addAtomIndices = TrueIPythonConsole.molSize = 300,300mol = Chem.MolFromSmiles("C1CC2=C3C(=CC=C2)C(=CN3C1)[C@H]4[C@@H](C(=O)NC4=O)C5=CNC6=CC=CC=C65")mol
from rdkit import Chemmol = Chem.MolFromSmiles("C1CC2=C3C(=CC=C2)C(=CN3C1)[C@H]4[C@@H](C(=O)NC4=O)C5=CNC6=CC=CC=C65")atom0 = mol.GetAtomWithIdx(0)atom0 #返回结果:
- 注:分子分为原子和键
mol对象中获取原子的方法(),返回为一个对象中获取所有键的方法(),返回为一个对象中根据原子编号获取键()mol对象中根据键的编号获取键( )如果导入的分子是有带有坐标信息的,可通过** mol.().(n)** 获取坐标信息分子操作
1. 原子信息
得到了atom对象,其常用的内置方法为:
‘’: map id 原子形式冒号后面的数字,如[N:4], map id 就是4 。‘’: 获取原子对应的元素编号,如碳原子的就是6‘’: 该原子参与形成的键的列表 。‘’: 该原子的电荷‘’:原子的手性信息‘’: 原子的度,这里的度指的是这个原子参与形成键的数目‘’: 判断原子是否是芳香性原子‘’: 获取原子的编号‘’: 获取相连的原子列表‘’: 获取原子的形式‘’:获取原子的元素符号(): 判断原子是否在环上(n): 判断原字是否在n-元环上
2. 键信息
得到键对象bond, 内置了大量的方法:
():获取键的类型‘()’: 组成键的第一个原子(): 键的第一个组成原子编号():键的第二个组成原子编号‘()’: 组成键的第二个原子‘()’: 判断是否在环上‘(n)’:判断是否在n-元环上
计算原子电荷值
from rdkit import Chemfrom rdkit.Chem import AllChemfrom rdkit.Chem.Draw import IPythonConsoleIPythonConsole.molSize = 250,250m = Chem.MolFromSmiles('c1ncncc1C(=O)[O-]')# Gasteiger Charges:原子电荷# 计算一个分子的Gasteiger电荷 。使用称为_GasteigerCharge的属性为每个Atom对象存储计算出的值 。可以通过将此值传递给相似度图来绘制电荷图 。AllChem.ComputeGasteigerCharges(m)#计算各原子的Gasteiger Chargesm
.ges(m)
已经将m中每个原子的 已经计算出来了并保存在每一个原子中;然后对原子逐个使用atom.(添加原子的性质),同步可以实现直接显示 。
【Code】
#设置原子电荷的属性for atom in m.GetAtoms():value = http://www.kingceram.com/post/'%.2f'%(atom.GetDoubleProp('_GasteigerCharge'))atom.SetProp('atomNote',value) #设置原子的属性,设置完以后,会在mol中直接显示#这里要注意,不能直接使用atom.SetAtomMapNum(value),因为matom.SetAtomMapNum()用于添加原子编号,只能添加整数#遍历每个原子并调用其属性值for atom in m.GetAtoms():print(atom.GetProp('atomNote'))
2. 子结构搜索&分子指纹
可以看成分子的1D形式,分子的平面结构可以看成分子的2D形式 。