Finalmente has logrado descubrir cómo están dispuestos espacialmente los átomos en tu entidad molecular recién descubierta. A través de, por ejemplo, medios espectroscópicos, ahora está en posesión de un montón de coordenadas de átomos, tipos de átomos, longitudes de enlaces, tipos de enlaces y otras cosas para su molécula. Ahora está interesado en determinar el grupo de puntos (grupo de simetría) de su molécula.
Para moléculas simples como metano ( ) o benceno ( D 6 h ), es una simple cuestión de inspección visual determinar el grupo de puntos al que pertenece una molécula. Sin embargo, esto no es tan factible cuando la molécula es un poco grande.
Dada una molécula almacenada en algún formato de datos conveniente (* .pdb, * .mol, etc.), ¿cómo determina algorítmicamente el grupo de simetría de la molécula?
Respuestas:
Mi experiencia principal es con estructuras cristalinas, y solo hay un número finito de simetrías de puntos que aparecen en un cristal. Entonces, el algoritmo que usaría es ligeramente diferente al que usarías en una molécula. Pero, es poco probable con una molécula grande que se muestren las simetrías continuas, como la simetría axial en H 2 o CO 2 , por lo que los métodos deberían superponerse bastante bien. Al determinar la simetría en un sistema, hay dos simetrías diferentes, pero relacionadas, a tener en cuenta: local y global.2 2
Simetría local
La simetría local es la simetría del entorno local alrededor de un punto específico. En particular, la simetría en cada ubicación atómica determina la división atómica local y, en cierta medida, el entorno químico, y es un subgrupo de la simetría global. Por ejemplo, en benceno la simetría local dispone de dos planos de reflexión y un eje ( 180 ∘ rotación simetría). (Obviamente, solo dos de las operaciones son necesarias para generar el grupo de puntos local completo).C2 180∘
Desde una perspectiva algorítmica, lo que hemos hecho es encontrar primero los vecinos más cercanos del átomo objetivo, y luego enumerar todas las formas en que podemos rotar ese entorno sobre el átomo central y hacer que permanezca igual. Más matemáticamente, está resolviendo para todas las matrices ortogonales, , de modo queUN
donde y → x j son las posiciones de los átomos de la misma especie y → x c es la posición del átomo central u objetivo. Pero, primero vería formas más simples, como si existe o no un plano de reflexión, antes de tratar de resolver A en general.X⃗ yo X⃗ j X⃗ C UN
Otro pensamiento es usar las matrices de momento angular como generadores de rotación, luego
donde n ∈ R 3 es un vector unitario sobre el que una rotación de ángulo con φ se realiza, y → L = ( L x , L y , L z ) es el vector de tres matrices de momento angular dimensionales. A tendría entonces solo 3 incógnitas.norte^∈ R3 ϕ L⃗ = ( LX, L y, L z) UN
Simetría global
Donde la simetría local determina el entorno alrededor de un solo átomo, la simetría global dicta cómo los átomos se intercambian entre sí. El primer paso para determinar la simetría global es determinar los átomos equivalentes. Primero, determine los tipos y las direcciones relativas al átomo vecino más cercano (y el segundo más cercano, o superior, si lo desea). Dos átomos son equivalentes, si sus vecinos tienen los mismos arreglos espaciales. Esto es sencillo de calcular.
Editar - Traducciones : Hay otra complicación que la discusión anterior sobre simetría local ignora: las traducciones. Formalmente, la operación de simetría correcta es
fuente
Hay un código antiguo para el propósito que se usa en algunos paquetes, llamado SYMMOL. El algoritmo que utiliza se describe en el siguiente documento:
Básicamente, determina el centro de inercia, luego aplica posibles operaciones de simetría e intenta determinar si existe un vector de transformación para mapear la geometría operada en el original dentro de una tolerancia dada. El código en sí ya no está disponible en el sitio de los autores, pero está disponible (con un conjunto de archivos de entrada de ejemplo) aquí .
fuente
Me complace responder que hay un código fuente abierto de alta calidad para esto:
https://github.com/mcodev31/libmsym
He adaptado libmysm a Avogadro y una versión debería salir más adelante en agosto de 2015.
Creo que el autor está trabajando actualmente en terminar un manuscrito sobre los detalles. Revisaré esta respuesta cuando se publique.
fuente
Si aún está interesado en esto, tengo un script de Python que le dará los átomos del grupo de puntos (abelianos) (y simétricamente no redundantes) de cualquier molécula dentro de una tolerancia especificada.
La diferencia entre mi rutina y muchas otras que he visto disponibles es que la orientación inicial no es importante, por lo que es útil ejecutar los resultados de las optimizaciones de geometría donde no ha especificado un grupo de puntos inicial (tan a menudo, haciendo una suposición como esta puede limitar la geometría, forzándola a ser simétrica y dar un estado fundamental de no equilibrio).
Si todavía estás interesado, házmelo saber, lo compartiré aquí.
fuente
Una vez escribí un pequeño script de Python para detectar la simetría del grupo de puntos para una molécula. Si está interesado, consulte https://github.com/sunqm/pyscf/blob/master/symm/geom.py
fuente
Existen algunos paquetes de software, como Materials Studio, que pueden identificar automáticamente el grupo de puntos de una molécula por usted. Sin embargo, si desea resolverlo usted mismo, hay un buen diagrama de flujo que lo guiará a través del proceso. También puede consultar el sitio web de simetría Otterbein para ver algunos tutoriales y demostraciones interactivas.
fuente