Vous avez enfin réussi à découvrir comment les atomes sont disposés spatialement sur votre entité moléculaire nouvellement découverte. Par exemple, grâce à des moyens spectroscopiques, vous êtes maintenant en possession d'un tas de coordonnées atomiques, de types d'atomes, de longueurs de liaisons, de types de liaisons et ainsi de suite pour votre molécule. Vous êtes maintenant intéressé à déterminer le groupe ponctuel (groupe de symétrie) de votre molécule.
Pour des molécules simples comme le méthane ( ) ou le benzène ( D 6 h ), il suffit de procéder à une inspection visuelle pour déterminer le groupe ponctuel auquel appartient une molécule. Cependant, ce n'est pas si faisable lorsque la molécule est un peu large.
Étant donné une molécule stockée dans un format de données pratique (* .pdb, * .mol, etc.), comment déterminez-vous algorithmiquement le groupe de symétrie de la molécule?
Réponses:
Mon expérience principale est avec les structures cristallines, et il n'y a qu'un nombre fini de symétries ponctuelles qui apparaissent dans un cristal. Donc, l'algorithme que j'utiliserais est légèrement différent de ce que vous utiliseriez dans une molécule. Mais, il est peu probable avec une grosse molécule que les symétries continues apparaissent, comme la symétrie axiale dans H 2 ou CO 2 , donc les méthodes devraient se chevaucher assez bien. Lors de la détermination de la symétrie dans un système, il y a deux symétries différentes, mais liées, à considérer: locale et globale.2 2
Symétrie locale
La symétrie locale est la symétrie de l'environnement local autour d'un point spécifique. En particulier, la symétrie à chaque emplacement atomique détermine la division atomique locale et dans une certaine mesure l'environnement chimique, et est un sous-groupe de la symétrie globale. Par exemple, dans le benzène de la symétrie locale se compose de deux plans de réflexion et un (axe 180 ∘ de symétrie de rotation). (Évidemment, seulement deux des opérations sont nécessaires pour générer le groupe de points local entier.)C2 180∘
D'un point de vue algorithmique, ce que nous avons fait est de trouver d'abord les voisins les plus proches de l'atome cible, puis d'énumérer toutes les façons dont nous pouvons faire pivoter cet environnement autour de l'atome central et le faire rester le même. Plus mathématiquement, il résout pour toutes les matrices orthogonales, , telles queUNE
où et → x j sont les positions des atomes de la même espèce et → x c est la position de l'atome central ou cible. Mais, je regarderais d'abord des formes plus simples, comme s'il existe ou non un plan de réflexion, avant d'essayer de résoudre pour A en général.X⃗ je X⃗ j X⃗ c UNE
Une autre pensée consiste à utiliser les matrices de moment angulaire comme générateurs de rotation, puis
où n ∈ R 3 est un vecteur d'unité autour de laquelle une rotation avec un angle φ est effectuée, et → L = ( L x , L y , L z ) est le vecteur des trois matrices de moment angulaire dimensions. A n'aurait alors que 3 inconnues.n^∈ R3 ϕ L⃗ = ( LX, L y, L z) UNE
Symétrie globale
Lorsque la symétrie locale détermine l'environnement autour d'un seul atome, la symétrie globale dicte comment les atomes interagissent entre eux. La première étape pour déterminer la symétrie globale consiste à déterminer les atomes équivalents. Tout d'abord, déterminez les types et les directions relatives du plus proche voisin (et du deuxième plus proche, ou plus haut, si vous le souhaitez). Deux atomes sont alors équivalents, si leurs voisins ont les mêmes dispositions spatiales. C'est simple à calculer.
La deuxième étape est à peu près la même que celle trouvée dans le cas de la symétrie locale, sauf que le centre de masse de la molécule est probablement le centre de symétrie. À ce stade, si les symétries locales ont été déterminées, seules quelques opérations uniques peuvent être nécessaires pour générer le groupe entier. Par exemple, dans la structure cristalline de B20 , chaque atome a une section locale symétrieC3 , et le groupe de points complet est généré en incluant un (2 fois rotation) axe de la vis qui transforme un atome dans un autre. Dans le benzène, deux opérations sont nécessaires: une rotation de 6 fois ( 60 ∘ ) à travers l'axe central et un plan de réflexion bissectant une liaison.180∘ 60∘
Edit : pour la structure B20, vous pouvez utiliser deux des axes place pour générer le groupe complet. Cela devrait vous permettre d'éviter d'avoir à trouver un moyen de déterminer automatiquement l'axe de la vis.C3
Attention : Une mise en garde sur l'utilisation des idées dans la section locale de symétrie dans la section globale, pour être une opération de symétrie, l'environnement doit également être transformé. Donc, si vous trouvez , d'en haut, cela ne donnera qu'une symétrie candidate car la transformation peut ne pas changer l'environnement de manière appropriée et des vérifications supplémentaires sont nécessaires. Par exemple, si le cycle benzénique avait des atomes d'hydrogène sortant du plan du cycle le long d'un côté, alors le plan de réflexion bissectant la liaison carbone-carbone serait bien, mais une rotation de 180 ∘ bissectant de manière similaire la liaison ne le serait pas parce qu'il ne reproduit pas l'environnement local.UNE 180∘
Édition - Traductions : Il y a une autre complication que la discussion ci-dessus sur la symétrie locale ignore: les traductions. Formellement, l'opération de symétrie correcte est
où et → x k , comme ci-dessus, et → t est une traduction arbitraire. Dans un cristal symmorphique,UNE X⃗ k t⃗
la source
Il y a de l'ancien code à cet effet qui est utilisé dans quelques packages, appelé SYMMOL. L'algorithme qu'il utilise est décrit dans l'article suivant:
Fondamentalement, il détermine le centre d'inertie, puis applique des opérations de symétrie possibles et tente de déterminer s'il existe un vecteur de transformation pour mapper la géométrie opérée sur l'original dans une tolérance donnée. Le code lui-même n'est plus disponible sur le site des auteurs, mais il est disponible (avec un ensemble d'exemples de fichiers d'entrée) ici .
la source
Je suis heureux de répondre qu'il existe un code open source de haute qualité pour cela:
https://github.com/mcodev31/libmsym
J'ai adapté libmysm dans Avogadro et une version devrait sortir plus tard en août 2015.
Je crois que l'auteur travaille actuellement sur la finition d'un manuscrit sur les détails. Je réviserai cette réponse lorsqu'elle sera publiée.
la source
Si cela vous intéresse toujours, j'ai un script python qui vous donnera le groupe de points (abélien) (et symétriquement non redondant) des atomes de n'importe quelle molécule dans une tolérance spécifiée.
La différence entre ma routine et beaucoup d'autres que j'ai vues disponibles est que l'orientation initiale n'est pas importante, ce qui rend utile l'exécution dans les résultats des optimisations de géométrie où vous n'avez pas spécifié un groupe de points initial (comme souvent, faire une telle hypothèse peut limiter la géométrie, la forçant à être symétrique et donnant un état fondamental non équilibré.)
Si vous êtes toujours intéressé, faites-le moi savoir, je le partagerai ici.
la source
J'ai écrit une fois un petit script Python pour détecter la symétrie du groupe de points d'une molécule. Si vous êtes intéressé, veuillez consulter https://github.com/sunqm/pyscf/blob/master/symm/geom.py
la source
Il existe certains progiciels, tels que Materials Studio, qui peuvent automatiquement identifier le groupe ponctuel d'une molécule pour vous. Cependant, si vous voulez le découvrir vous-même, il existe un bel organigramme qui vous guidera tout au long du processus. Vous pouvez également consulter le site Web de symétrie Otterbein pour des didacticiels et des démonstrations interactives.
la source