RDKIT: Найти координаты атома субструктуры - PullRequest
0 голосов
/ 30 апреля 2019

Я импортировал молекулу в виде файла .mol в rdkit.Молекула содержит субструктуру CN = NC.Я хочу найти координаты субструктуры CN = NC.

Я пытался использовать Chem.MolToBlock(molfile) для отображения трехмерных координат;однако это возвращает трехмерные координаты всей молекулы.

Основой моего кода было:

molecule = rdkit.Chem.MolFromMolFile('molfile')
query = rdkit.Chem.MolFromSmiles('CN=NC')`
subatomids = m.GetSubstructMatch(q)

Однако я не знаю, существует ли простой способ вернутькоординаты конкретных атомов

Идеальный результат:

C = x y z
N = x y z
N = x y z
C = x y z

или что-то подобное.

1 Ответ

2 голосов
/ 30 апреля 2019

Я буду использовать molblock вместо файла .mol, но он работает для обоих. В моем образце молблока ваша подструктура состоит из атомов 2-5.

Чтобы получить координаты, вам нужен конформер молекулы, и с помощью идентификаторов из поиска по подструктуре вы можете назвать элементы.

from rdkit import Chem

molblock = '''
cn=nc substructure
sample for stackoverflow
 16 15  0  0  0  0            999 V2000
   -2.6048   -0.8132    0.1394 C   0  0  0  0  0  0  0  0  0  0  0  0
   -1.8319    0.4361   -0.2883 C   0  0  0  0  0  0  0  0  0  0  0  0
   -0.5126    0.4361    0.3487 N   0  0  0  0  0  0  0  0  0  0  0  0
    0.5126    0.4361   -0.3487 N   0  0  0  0  0  0  0  0  0  0  0  0
    1.8319    0.4361    0.2883 C   0  0  0  0  0  0  0  0  0  0  0  0
    2.6048   -0.8132   -0.1394 C   0  0  0  0  0  0  0  0  0  0  0  0
   -2.0542   -1.7032   -0.1653 H   0  0  0  0  0  0  0  0  0  0  0  0
   -2.7245   -0.8132    1.2228 H   0  0  0  0  0  0  0  0  0  0  0  0
   -3.5863   -0.8132   -0.3346 H   0  0  0  0  0  0  0  0  0  0  0  0
   -1.7122    0.4361   -1.3717 H   0  0  0  0  0  0  0  0  0  0  0  0
   -2.3825    1.3260    0.0164 H   0  0  0  0  0  0  0  0  0  0  0  0
    2.3825    1.3260   -0.0164 H   0  0  0  0  0  0  0  0  0  0  0  0
    1.7122    0.4360    1.3717 H   0  0  0  0  0  0  0  0  0  0  0  0
    2.0542   -1.7032    0.1653 H   0  0  0  0  0  0  0  0  0  0  0  0
    2.7245   -0.8132   -1.2228 H   0  0  0  0  0  0  0  0  0  0  0  0
    3.5863   -0.8132    0.3346 H   0  0  0  0  0  0  0  0  0  0  0  0
  1  2  1  0  0  0  0
  1  7  1  0  0  0  0
  1  8  1  0  0  0  0
  1  9  1  0  0  0  0
  2  3  1  0  0  0  0
  2 10  1  0  0  0  0
  2 11  1  0  0  0  0
  3  4  2  0  0  0  0
  4  5  1  0  0  0  0
  5  6  1  0  0  0  0
  5 12  1  0  0  0  0
  5 13  1  0  0  0  0
  6 14  1  0  0  0  0
  6 15  1  0  0  0  0
  6 16  1  0  0  0  0
M  END'''

m = Chem.MolFromMolBlock(molblock)
#m = Chem.MolFromMolFile('theMolFile')

conf = m.GetConformer()

patt = Chem.MolFromSmiles('CN=NC')

sub = m.GetSubstructMatch(patt)

for s in sub:
    print(m.GetAtoms()[s].GetSymbol(), list(conf.GetAtomPosition(s)))

Выход:

C [-1.8319, 0.4361, -0.2883]
N [-0.5126, 0.4361, 0.3487]
N [0.5126, 0.4361, -0.3487]
C [1.8319, 0.4361, 0.2883]
...