Как я могу определить количество групп парафини c CH3, CH2 и CH для любой молекулы с rdkit в Python? - PullRequest
1 голос
/ 23 апреля 2020

Я пытаюсь определить количество групп парафини c в любой молекуле, используя пакет rdkit в Python. Сначала я начинаю определять группы парафини c CH3, которые я должен распространить на группы парафини c CH2 и группы парафини c CH.

В MWE я являюсь пытаясь определить это с помощью соответствующей подструктуры, которая не работает, как предполагалось. Я также пытался найти функцию Fragments для этой функции, но она недоступна.

Как определить количество групп парафини c CH3, CH2 и CH для любой молекулы с rdkit в Python?

MWE

from rdkit import Chem
from rdkit.Chem import Descriptors, Draw, Fragments

smiles_n_decane = 'CCCCCCCCCC'
smiles_branched = 'CCC(C)(C)C(C)CC(C)(C)C'
smiles_carboxylic_acid = 'C1=CC=C2C(=C1)C(C3=CC=CC=C3O2)C(=O)O' # Xanthene-9-carboxylic acid

m =  Chem.MolFromSmiles(smiles_branched)

print m.HasSubstructMatch(Chem.MolFromSmiles('[CH3]'))
print Fragments.fr_Al_COO(m)

Пример задачи

Для молекулы (2,2,4,5,5-пентаметилгептана), приведенной ниже:

enter image description here

код должен дать мне следующие выходные данные:

  • нет. групп СН3: 7
  • нет. CH2 групп: 2
  • нет. групп СН: 1

1 Ответ

2 голосов
/ 23 апреля 2020

Вы должны использовать SMARTS для запросов подструктуры. Кроме того, GetSubstructMatches() будет возвращать все совпадения подструктуры, а не просто возвращать логическое значение, если запрос совпадает с HasSubstructMatch():

ch3 = Chem.MolFromSmarts('[CH3]')
ch2 = Chem.MolFromSmarts('[CH2]')
ch1 = Chem.MolFromSmarts('[CH]')

print("no. of CH3 groups:", len(m.GetSubstructMatches(ch3)))
print("no. of CH2 groups:", len(m.GetSubstructMatches(ch2)))
print("no. of CH groups:", len(m.GetSubstructMatches(ch1)))

[Out]:
no. of CH3 groups: 7
no. of CH2 groups: 2
no. of CH groups: 1
...