Skip to content

Latest commit

 

History

History
19 lines (15 loc) · 2.29 KB

README.md

File metadata and controls

19 lines (15 loc) · 2.29 KB

Повороты графа в пространстве.

Задание:

Пусть дан произвольный файл в формате SDF (или Molfile, что то же самое) из базы данных PubChem, содержащий структуру молекулы. Пример: молекула аспирина.

Программа должна распарсить файл (только атомы с координатами и связи с кратностями, игнорируя заряды и прочую дополнительную информацию), построить в памяти граф молекулы (вершины = атомы, рёбра = связи) и определить рёбра, которые одновременно:

  • одинарные (т. е. соответствуют одинарным, а не двойным и не тройным связям)
  • не принадлежат циклам
  • не являются "висячими", т. е. продолжаются с обоих концов

Далее, программа должна повернуть молекулу в трёхмерном пространстве вокруг каждого из найденных рёбер на случайный угол так, чтобы вращалась не вся молекула, а лишь "половина", лежащая по одну сторону от ребра. Координаты атомов при этом, конечно, изменятся, изменится форма молекулы.

Далее, программа должна забыть случайные углы, проанализировать получившиеся координаты атомов и найти такие углы вращения вокруг найденных связей, чтобы атомы встали на исходные места. Один из способов это сделать: сгенерировать множество случайных наборов углов и из каждого из них градиентным или покоординатным спуском приблизить атомы к исходным положениям.

Dependences

  • numpy
  • pandas
  • matplotlib
  • rdkit
  • Jupyter Notebook