在论文“Graph Networks as a Universal Machine Learning Framework for Molecules and Crystals”中,作者引入手性作为原子特征输入来分析 QM9 数据集。我试图重新创建这个原子功能,如下所示
Chirality: (categorical) R, S, or not a Chiral center (one-hot encoded).
我使用的代码是:
from chainer_chemistry import datasets
from chainer_chemistry.dataset.preprocessors.ggnn_preprocessor import GGNNPreprocessor
from rdkit import Chem
import numpy as np
dataset, dataset_smiles = datasets.get_qm9(GGNNPreprocessor(), return_smiles=True)
for i in range(len(dataset_smiles)):
mol = Chem.MolFromSmiles(dataset_smiles[i])
Chem.AssignAtomChiralTagsFromStructure(mol)
chiral_cc = Chem.FindMolChiralCenters(mol)
if not len(chiral_cc) == 0:
print(chiral_cc)
输出显示该数据集没有手性中心。当我使用 includeUnassigned=True
时,代码给出了一个元组列表,但我得到的是“?”,而不是“R/S”。我想知道我的实现是否有错误。如果这是预期的,那么对上述论文中如何分配手性有什么想法吗?
最佳答案
您看到“?”的原因而不是 R/S 是因为
FindMolChiralCenters
输出“?”对于未指定的立体中心。
也就是说,如果 SMILES 没有分配 S 配置的 [C@] 或 R 配置的 [C@@] 等配置,则视为未分配。
我运行了你的代码,数据集中的所有 SMILES 都没有任何指定的立体中心。
例如,我在这里列出了一些 SMILES 及其配置:
CC1C(C=O)N2CC12C
[(1, '?'), (2, '?'), (5, '?'), (7, '?')]
CC1N(C=O)C2CC12C
[(1, '?'), (5, '?'), (7, '?')]
CC1N(C=O)C2CC12O
[(1, '?'), (5, '?'), (7, '?')]
CN1C(C=O)C2CC21C
[(2, '?'), (5, '?'), (7, '?')]
O=CC1C(O)C2(O)CC12
[(2, '?'), (3, '?'), (5, '?'), (8, '?')]
CC1C(=O)C=CC1C=O
[(1, '?'), (6, '?')]
O=CC1C=CC(=O)C1O
[(2, '?'), (7, '?')]
C#CC1C=CC(=O)C1C
[(2, '?'), (7, '?')]
正如您在微笑中看到的那样,它们都没有 [C@] 或 [C@@]。这就是为什么你会看到“?”在配置中。
还可以找到有关 FindMolChiralCenters
的有用 rdkit 文档 here
关于chemistry - 使用 RDKit 寻找手性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57898815/