Симметрия молекул
Симметрия молекул
Знает ли кто-нибудь алгоритм для автоматического поиска точечной группы симметрии произвольной системы ядер заданной в виде наборов декартовых координат и масс?
Вроде есть статья на эту тему в MONATSCHEFTE FUER CHEMIE, но уж в слижком древнем номере она, не достать уже.
Вроде есть статья на эту тему в MONATSCHEFTE FUER CHEMIE, но уж в слижком древнем номере она, не достать уже.
В принципе...
Наверное это несложно написать самому.
Поскольку точечные группы - подгруппы группы вращений всего пространства, то положение центра координат - в центре масс, далее поиск оси симметрии наивысшего порядка -и т. д. и т. п.
Поскольку точечные группы - подгруппы группы вращений всего пространства, то положение центра координат - в центре масс, далее поиск оси симметрии наивысшего порядка -и т. д. и т. п.
Не важно, что о вас говорят современники, важно что о вас скажут потомки
Приведение к главным осям дело хорошее, но в общем случае ничего не гарантирует. Есть у меня исходник одной программы, которая делает именно то что мне нужно, но там программировал какой-то линуксоид, а у них стиль такой что без пол литра не разберешься. В этой проге идет просто перебор всех возможных элементов симметрии без приведения молекулы в систему главных осей инерции. Но вот на каких принципах там организован перебор элементов симметрии пока не понятно. Как найти центр инверсии понятно, дальше идет поиск всех плоскостей. Как располагать пробные плоскости? Это вопрс.
Короче я думал может у кого статья завалялась по этой теме. Заново велосипед изобретать я не хочу.
Короче я думал может у кого статья завалялась по этой теме. Заново велосипед изобретать я не хочу.
Статьи не завалялось, но такой велосипед я бы поизобретал - это же прикольно.
Приведение к главным осям дело, может, и не очень хорошее, но гарантирует именно что всё, кроме как в случае симметрии высшей категории (фуллерен попался
), или же абсолютно невероятного совпадения.
Впрочем, при нынешних вычислительных мощностях, наверное, можно уже со спокойной душой перебирать все направления по сфере (двойным циклом по полярным координатам, с шагом поменьше) и проверять их на оси и инверсионные оси всех возможных порядков.
А как ещё-то?
Приведение к главным осям дело, может, и не очень хорошее, но гарантирует именно что всё, кроме как в случае симметрии высшей категории (фуллерен попался
Впрочем, при нынешних вычислительных мощностях, наверное, можно уже со спокойной душой перебирать все направления по сфере (двойным циклом по полярным координатам, с шагом поменьше) и проверять их на оси и инверсионные оси всех возможных порядков.
А как ещё-то?
Ну если мне просто тупо искать например оси второго порядка с интервалом в 1 градус, то нужно сделать 360*360*360/2 (или около того) попыток. Это число большое. И так оси каждого порядка. А еще есть заркально-поворотные оси. Короче не оптимально это.
По-видимому можно делать так: сначала перепробовать все оси, которые проходят через каждый атом и центр молекулы. Таких попыток будет ровно столько сколько атомов. Затем попробовать строить оси, которые проходят через центр молекулы и центры межатомных расстояний. Таких осей будет N(N-1)/2 (N-число атомов). По такой же идее через тройки, т.е. строить ось проходящую через центр молекулы и через центр треугольника из атомов если он правильный. Понятно что правильных треугольников из атомов в молекуле мало. Потом через четверки, пятерки, шестерки, семерки если соответствующие группы атомов находятся в одной плоскости и эти фигуры правильные. Таких групп (в одной плоскости правильная фигура) естественно будет мало, поэтому реально тут будет мало пробных осей.
Вот такие мысли.
По-видимому можно делать так: сначала перепробовать все оси, которые проходят через каждый атом и центр молекулы. Таких попыток будет ровно столько сколько атомов. Затем попробовать строить оси, которые проходят через центр молекулы и центры межатомных расстояний. Таких осей будет N(N-1)/2 (N-число атомов). По такой же идее через тройки, т.е. строить ось проходящую через центр молекулы и через центр треугольника из атомов если он правильный. Понятно что правильных треугольников из атомов в молекуле мало. Потом через четверки, пятерки, шестерки, семерки если соответствующие группы атомов находятся в одной плоскости и эти фигуры правильные. Таких групп (в одной плоскости правильная фигура) естественно будет мало, поэтому реально тут будет мало пробных осей.
Вот такие мысли.
Вот конструктивный разговор.
Нет. Откуда 360 в кубе? Множество всех прямых, проходящих через центр масс - это двумерное многообразие. Два угла у нас в полярных координатах-то. Так что всего 360*180/2. Не так уж страшно много, э?
А чтобы понять, что данная группа атомов является/не является правильным плоским квадратом, пятиугольником и т.д. - увы, надо её потрогать, то есть выполнить все эти (порядка) N^4, N^5 и т.д. проверок.
Нет. Откуда 360 в кубе? Множество всех прямых, проходящих через центр масс - это двумерное многообразие. Два угла у нас в полярных координатах-то. Так что всего 360*180/2. Не так уж страшно много, э?
А чтобы понять, что данная группа атомов является/не является правильным плоским квадратом, пятиугольником и т.д. - увы, надо её потрогать, то есть выполнить все эти (порядка) N^4, N^5 и т.д. проверок.
Точно я перебрал немножко, но все равно 360*180/2 это очень много.
А проверить что четверка (пятерка...) атомов не лежит в плоскости элементарно. Брать тройку атомов и комбинировать с ней все остальные атомы на предмет нахождения в одной плоскости. Если четвертый атом лежит в одной плоскости с этой тройкой, то делать тест на правильность четырехугольника. Опять же эта операция в тысячи раз быстрее чем предлагаемый Вами поворот одной единственной оси на малый угол и тест на ось N-го порядка так как прийдется выполнять много операций с плавающей точкой по преобразованию координат каждого атома чтоб сделать поворот. При увеличении числа атомов затраты на такой алгоритм будут возрастать видимо очень быстро.
Теперь далее: если мы нашли на этом этапе четверку в плоскости но она оказалась не правильным квадратом, то к этой четверке пробуем присобачить пятый атом. Опять перебираем оставшиеся атомы, тест на плоскостность и правильность. И так далее вплоть до поиска правильных семиугольников (вроде).
Итого: в реальных молекулах очень мало четверок атомов в одной плоскости. (Ведь еще важно чтоб эти атомы были одного сорта!) Еще меньше таких, которые образуют правильные квадраты. О соответствующих пятиугольниках я уж и не говорю. Почти все они будут отбрасываться на самых ранних стадиях теста когда очень малые численные затраты.
А проверить что четверка (пятерка...) атомов не лежит в плоскости элементарно. Брать тройку атомов и комбинировать с ней все остальные атомы на предмет нахождения в одной плоскости. Если четвертый атом лежит в одной плоскости с этой тройкой, то делать тест на правильность четырехугольника. Опять же эта операция в тысячи раз быстрее чем предлагаемый Вами поворот одной единственной оси на малый угол и тест на ось N-го порядка так как прийдется выполнять много операций с плавающей точкой по преобразованию координат каждого атома чтоб сделать поворот. При увеличении числа атомов затраты на такой алгоритм будут возрастать видимо очень быстро.
Теперь далее: если мы нашли на этом этапе четверку в плоскости но она оказалась не правильным квадратом, то к этой четверке пробуем присобачить пятый атом. Опять перебираем оставшиеся атомы, тест на плоскостность и правильность. И так далее вплоть до поиска правильных семиугольников (вроде).
Итого: в реальных молекулах очень мало четверок атомов в одной плоскости. (Ведь еще важно чтоб эти атомы были одного сорта!) Еще меньше таких, которые образуют правильные квадраты. О соответствующих пятиугольниках я уж и не говорю. Почти все они будут отбрасываться на самых ранних стадиях теста когда очень малые численные затраты.
Так...
Во-первых
\phi=2*Pi==360
\theta=Pi==180,
так что 360*180
про 1/2 не понял.
Во-вторых, внешний цикл должен идти по сортам атомов. Понятно, что точечная группа не меняет местами разные атомы.
В-третьих, дополнительная классификация - по расстоянию атом-центр масс. Очевидно, что только атомы, находящиеся на одинаковом расстоянии от центра могут переводиться друг в друга.
Число классов атомов среди одинаковых, находящихся на одном расстоянии от центра - конечно, кроме того, типы должны чередоваться. т.е. мы берем параллель, проходящую через выбраннй наперед атом, считаем число атомов на ней и перебираем все делители - возможные порядки поворотных осей.
Самая сложная задача, как мне видится - определить число осей высшей симметрии. Хотя этих групп - раз, два и обчелся.
\phi=2*Pi==360
\theta=Pi==180,
так что 360*180
про 1/2 не понял.
Во-вторых, внешний цикл должен идти по сортам атомов. Понятно, что точечная группа не меняет местами разные атомы.
В-третьих, дополнительная классификация - по расстоянию атом-центр масс. Очевидно, что только атомы, находящиеся на одинаковом расстоянии от центра могут переводиться друг в друга.
Число классов атомов среди одинаковых, находящихся на одном расстоянии от центра - конечно, кроме того, типы должны чередоваться. т.е. мы берем параллель, проходящую через выбраннй наперед атом, считаем число атомов на ней и перебираем все делители - возможные порядки поворотных осей.
Самая сложная задача, как мне видится - определить число осей высшей симметрии. Хотя этих групп - раз, два и обчелся.
Не важно, что о вас говорят современники, важно что о вас скажут потомки
360*180/2.
Пополам - потому, что на другой стороне сферы торчит та же самая прямая (проверяемая на осность).
Взял очередные \phi и \theta.
Сделал прямую (легко). Атомы пока никуда не переводим.
Проверил первый атом, переводится ли он во что-то разными поворотами (несколько умножений с плав.точкой).
Нет - бросил, пошёл дальше.
Альтернатива:
Взял четвёрку атомов (легко)
Проверил четвёрку на копланарность (несколько умножений с плав.точкой).
Отбросил, пошёл дальше.
Короче, что перевесит - 360*180/2 или N^4, где N - максимальное число атомов одного сорта на одном расстоянии от центра.
Так ли очевиден ответ?
А групп высшей категории у нас конечное число, это лечится перебором.
Пополам - потому, что на другой стороне сферы торчит та же самая прямая (проверяемая на осность).
Взял очередные \phi и \theta.
Сделал прямую (легко). Атомы пока никуда не переводим.
Проверил первый атом, переводится ли он во что-то разными поворотами (несколько умножений с плав.точкой).
Нет - бросил, пошёл дальше.
Альтернатива:
Взял четвёрку атомов (легко)
Проверил четвёрку на копланарность (несколько умножений с плав.точкой).
Отбросил, пошёл дальше.
Короче, что перевесит - 360*180/2 или N^4, где N - максимальное число атомов одного сорта на одном расстоянии от центра.
Так ли очевиден ответ?
А групп высшей категории у нас конечное число, это лечится перебором.
цу
Про 1/2 понял. По-умному поворот на 2Pi-\phi >0 и -\phi<0 одно и тоже. Согласен. Или совсем по другому - оси соответствуют два векторя +-R
Но вот дальше совсем не понял. Покажите, как в вашей схеме определить симметрию фигуры "два правильных квадрата с общим центром, повернутые друг относительно друга на 43 градуса?"
Но вот дальше совсем не понял. Покажите, как в вашей схеме определить симметрию фигуры "два правильных квадрата с общим центром, повернутые друг относительно друга на 43 градуса?"
Не важно, что о вас говорят современники, важно что о вас скажут потомки
Ну, во-первых, это не моя схема, а барахло, выбранное мной для полемики со схемой Rarruga
, сам же я по-прежнему считаю, что надо идти от главных осей тензора инерции. А также, что на нынешних компах все три варианта будут проскакивать мгновенно, если только им не попадётся фуллерен
Но найти скорейший путь всё равно хочется, чисто для красоты.
Во-вторых, а что такого?
Взял очередную ось.
Взял первый атом и повернул его на pi.
Никуда не попал - тогда повернул его же на 2*pi/3.
Попал? О! Взял и повернул на столько же второй атом.
И т.д.
Но найти скорейший путь всё равно хочется, чисто для красоты.
Во-вторых, а что такого?
Взял очередную ось.
Взял первый атом и повернул его на pi.
Никуда не попал - тогда повернул его же на 2*pi/3.
Попал? О! Взял и повернул на столько же второй атом.
И т.д.
Нет, про тензор инерции с Вами никто и не спорил... Но, скажите, в молекуле адамантана как он Вам поможет?
Кроме того, перибирать-то придется все порядки осей... В том же этане это 6,3,2. В общем, надо аккуратно оптимизировать, а не надеятся на компьютеры...
Кроме того, перибирать-то придется все порядки осей... В том же этане это 6,3,2. В общем, надо аккуратно оптимизировать, а не надеятся на компьютеры...
Не важно, что о вас говорят современники, важно что о вас скажут потомки
Оптимизировать безусловно надо! Двумя руками за!
В адамантане - да, с этим никак-с... Я же сразу и сказал, что при симметрии высшей категории у нас будут проблемы. Придётся оставлять на этот случай подпорку в виде комбинаторики или случайного поиска.
Перебирать надо не все порядки, а только простые. Если прямая - не ось 2, то она также не ось 4 и не ось 6. И, ухватившись за одну ось, надо немедленно проверять её на кратные порядки, бросать полный перебор и переходить к сокращённому, потому что даже одна ось очень ограничивает варианты для остальных, if any. Они проходят не под любым углом к ней.
Всё, сегодня меня больше нет, но завтра продолжу с интересом.
В адамантане - да, с этим никак-с... Я же сразу и сказал, что при симметрии высшей категории у нас будут проблемы. Придётся оставлять на этот случай подпорку в виде комбинаторики или случайного поиска.
Перебирать надо не все порядки, а только простые. Если прямая - не ось 2, то она также не ось 4 и не ось 6. И, ухватившись за одну ось, надо немедленно проверять её на кратные порядки, бросать полный перебор и переходить к сокращённому, потому что даже одна ось очень ограничивает варианты для остальных, if any. Они проходят не под любым углом к ней.
Всё, сегодня меня больше нет, но завтра продолжу с интересом.
Кто такой Джон Галт?
Да что вы все про фуллерен...
) На обыкновенном циклобутане приведение к главным осям мало чего ценного даст. Но с другой стороны, привести в главные оси - дело не хитрое и всего один раз делается. И при этом можно сразу ось получить. Или!! Даже сразу сказать что симметрия С1! Без всяких там переборов. Короче главные оси - респект. А дальше "умный" перебор.
Мне вот нравятся универсальные алгоритмы. Так чтобы не было много "частных" случаев.
Ладно, про обычные оси вроде понятно.
Теперь как искать плоскости? Как построить найменьшее число пробных плоскостей?
Мне вот нравятся универсальные алгоритмы. Так чтобы не было много "частных" случаев.
Ладно, про обычные оси вроде понятно.
Теперь как искать плоскости? Как построить найменьшее число пробных плоскостей?
А их не больше, чем атомов 
Возможны две ситуации - атом лежит в плоскости симметрии, или он отражается от нее и дает второй атом
Первая проверка в лоб - все ли атомы лежат в одной плоскости - если да - то ты все плоскости нашел.
Если ответ отрицательный, то:
Гоним цикл проверки по всем атомам, встречающимися более 1го раза с одинаковым расстоянием до центра масс. Проверяется следующее - задается плоскость, проходящая через центр масс и с нормалью от центра масс к этому атому и проверяется - является ли она плоскостью симметрии для других атомов.
P.S. Это общая идея на вскидку
P.S.S. А вообще - в чем необходимость этой программы. Какого размера системы исследовать собираетесь?
Возможны две ситуации - атом лежит в плоскости симметрии, или он отражается от нее и дает второй атом
Первая проверка в лоб - все ли атомы лежат в одной плоскости - если да - то ты все плоскости нашел.
Если ответ отрицательный, то:
Гоним цикл проверки по всем атомам, встречающимися более 1го раза с одинаковым расстоянием до центра масс. Проверяется следующее - задается плоскость, проходящая через центр масс и с нормалью от центра масс к этому атому и проверяется - является ли она плоскостью симметрии для других атомов.
P.S. Это общая идея на вскидку
P.S.S. А вообще - в чем необходимость этой программы. Какого размера системы исследовать собираетесь?
Мне нравятся алгоритмы, которые работают, а если они к тому же красивые и универсальные - нравятся вдвойне... только что ж поделать, это такая задача, что особых случаев будет до хрена и выше.
Про фуллерен - потому что работал я с ним много. И потому что уникально дикий особый случай, конечно.
Плоскости я вообще не выделял в отдельную подзадачу. Мне как-то не нравится подход Шёнфлиса, а нравится, наоборот, система Германа-Могена. Проверил прямую на оси? - теперь проверь на инверсионные оси. Кроме осей и инверсионных осей, ничего нет.
Про фуллерен - потому что работал я с ним много. И потому что уникально дикий особый случай, конечно.
Плоскости я вообще не выделял в отдельную подзадачу. Мне как-то не нравится подход Шёнфлиса, а нравится, наоборот, система Германа-Могена. Проверил прямую на оси? - теперь проверь на инверсионные оси. Кроме осей и инверсионных осей, ничего нет.
2 Rt19
Ээээ, что-то не совсем понял. Нормаль должна быть в пробной плоскости?
А вообще идея такая: нужен максимально быстрый алгоритм поиска точечной группы молекулы.
А еще более общая проблема у меня: нужно автоматически из декартовых координат строить z-матрицу в которой держалась бы начальная симметрия молекулы. Автоматически делать z-матрицы из координат очень просто, но такие чтоб при варьировании их параметров держалась симметрия - сделать пока не знаю как. Писать руками просто, а вот автоматически... Конечно нужно использовать мнимые атомы, но общий алгоритм пока не ясен.
Ээээ, что-то не совсем понял. Нормаль должна быть в пробной плоскости?
А вообще идея такая: нужен максимально быстрый алгоритм поиска точечной группы молекулы.
А еще более общая проблема у меня: нужно автоматически из декартовых координат строить z-матрицу в которой держалась бы начальная симметрия молекулы. Автоматически делать z-матрицы из координат очень просто, но такие чтоб при варьировании их параметров держалась симметрия - сделать пока не знаю как. Писать руками просто, а вот автоматически... Конечно нужно использовать мнимые атомы, но общий алгоритм пока не ясен.
О как! Это уже хорошая мега-задача, над которой можно возиться и возиться. Надо у каждого атома (ну, у группы эквивалентных атомов) искать симметрию позиции. Потом решать, на ком он будет расти - на центре или на другом атоме. Если на центре, то как. Если на другом атоме, то какая у того симметрия позиции, такая же или нет. Блин...
Целое дело.
Целое дело.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 31 гость