в частности, вычислявших RMSD между двумя конформерами. В пакете нашел две функции: AlignMol и GetBestRMS. Вторая учитывает симметрию молекулы. И, конечно же, обе функции возвращают немного разные значения RMSD на одной и той же паре конформеров. И вопрос в следующем: какой метод использовать, зачем и где вообще учитывается симметрия молекулы в подобных задачах?
В рассылке это спрашивали, правда в ответе предложили использовать третий вариант https://www.mail-archive.com/rdkit-discuss@lists.sourceforge.net/msg09230.html
Спасибо большое! Там, далее в сообщениях, было очень хорошее объяснение в чем разница учета симметрии, но значит ли это, что я могу всегда использовать функцию, которая учитывает симметрию? Ощущения подсказывают, что для больших систем, она начинает гораздо дольше считаться, так ли это?
I В RDKit есть три функции для этого: 1) GetBestRMS (минимальное рмсд по топологическому мэтчу между молекулами + выравниванию по координатам) 2) AlignMol / AlignMolConformers (минимальное рмсд по выравниванию по координатам) 3) CalcBestRMS (минимальное рмсд по топологическому мэтчу между молекулами) Выравнивание по координатам в 1) и 2) нужно, например, когда делается простой template-based докинг силами одного лишь рдкита, и нужно из многих конформеров лиганда выбрать наиболее совпадающий с известной молекулой в пакете. Симметрия в 1) и 3) нужна, чтобы считать настоящий минимальный рмсд (как на картинке 1), и кмк почти всегда есть смысл ей пользоваться. Для подсчета симметрии запускается SubstructMatch(...) и в нем вот эта функция https://github.com/rdkit/rdkit/blob/7053e97a1511f3a716d4cf8320ea9ef6518dc745/Code/GraphMol/Substruct/SubstructMatch.cpp#L512 отсюда https://github.com/rdkit/rdkit/blob/master/Code/GraphMol/Substruct/vf2.hpp#L613, то есть это VF2 алгоритм для сравнения графов. Еще в целом мэтч по топологии в 1) и 3) [или же указывание мэтча руками через atomMap в 1), 2), 3)] полезен тем, что можно сравнивать одинаковые молекулы из разных источников с разными индексами атомов. Отсутствие выравнивания по координатам в 3) нужно, чтобы считать rmsd между текущим положением двух молекул, но с учетом симметрии и если у них разные индексы атомов. Например, у вас есть сколько-то поз молекулы в разных конформациях - результатов обычного докинга. Их не нужно выравнивать друг относительно друга, потому что это готовые результаты докинга. Но мб нужно разбить их на кластеры, посчитав рмсд между каждым. Или же если это какой-то тест и реальное положение молекулы известно, можно посчитать рмсд от каждого до известной молекулы. II > Там, далее в сообщениях, было очень хорошее объяснение в чем разница учета симметрии, но значит ли это, что я могу всегда использовать функцию, которая учитывает симметрию? Ощущения подсказывают, что для больших систем, она начинает гораздо дольше считаться, так ли это? Мне кажется, что если засунуть туда две большие молекулы с большой системой симметричных сопряженных колец, то оно будет дольше считаться, но я никогда не проверяла. Я всегда использую CalcRMS/GetBestRMS и обычно все нормально. А вот в FindMCS вроде другой алгоритм используется (или мб там тупо число сравнений больше, тк там не subgraph matching, а max common substructure, и оно может быть ОЧЕНЬ ДОЛГИМ, так что там даже есть параметр таймаута и настраиваемый класс для таймаута). III Еще пара замечаний: - обычно есть смысл удалять водороды перед использованием этих функций - начиная с какой-то версии рдкита, они добавили волшебное symmetrizeConjugatedTerminalGroups=True, которое мэтчит некоторые группы с распределенной электронной плотностью, как на картинке 2.
Обсуждают сегодня