¿Cómo se determina el grupo de puntos de una molécula?

18

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.Trere6 6h

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?

JM
fuente
3
Para lo que vale, VMD incluye un complemento para este propósito llamado SymmetryTool .
Juan M. Bello-Rivas

Respuestas:

13

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.22

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).C2180

ingrese la descripción de la imagen aquí

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

UN(Xyo-XC)=Xj-XC

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. XyoXjXCUN

Otro pensamiento es usar las matrices de momento angular como generadores de rotación, luego

UN=Exp(yoϕnorte^L)

donde nR 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, Ly, Lz)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.

C318060 60

C3

UN180

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

UN(Xyo-XC)+t=Xj-XC

UNXkt

t=norte1un1+norte2un2+norte3un3

unyonorteyoZt

rcollyer
fuente
1
@JM, agregué una advertencia al usar las ideas en el caso de simetría local a ciegas en el caso global. En el caso global, existe la restricción adicional de que el entorno local también debe ser transformado por la operación de simetría, y no creo que lo haya dejado claro.
rcollyer
@JM, olvidé incluir cualquier discusión sobre las traducciones y su efecto en las operaciones de simetría. He incluido una breve adición.
rcollyer
Veo. Siempre pensé que un algoritmo para hacer esto pondría de alguna manera a una molécula o cristal en una "orientación estándar" (lo que sea que eso signifique) antes de verificar vecinos y demás.
JM
1
@JM, para un cristal, hay dos "orientaciones estándar": la red cristalina y la red primitiva, y pueden no ser las mismas, como en un sistema cúbico centrado en la cara . Para una molécula, probablemente usaría el centro de masa como origen, y luego diagonalizaría el momento del tensor de inercia para "alinearlo correctamente". Sin embargo, eso no eliminaría la necesidad de múltiples centros de rotación, si se requiere una operación de simetría más general, como un eje de tornillo en un cristal.
rcollyer
11

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:

T. Pilati y A. Forni, "SYMMOL: un programa para encontrar el grupo de simetría máxima en un grupo de átomos, dada una tolerancia prefijada" , J. Appl. Cryst 1998. 31, 503-504.

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í .

Aesin
fuente
3

Me complace responder que hay un código fuente abierto de alta calidad para esto:

https://github.com/mcodev31/libmsym

libmsym es una biblioteca en C que se ocupa de la simetría de grupos de puntos en las moléculas. Puede determinar, simimetrizar y generar moléculas de cualquier grupo de puntos. También puede generar combinaciones lineales adaptadas de simetría de orbitales atómicos para un subconjunto de todos los grupos de puntos y momento angular orbital (l), y proyectar orbitales en la representación irreducible con el componente de larges.

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.

Geoff Hutchison
fuente
1

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í.

será
fuente
Definitivamente estaría interesado en este guión. ¿Está dispuesto a hacerlo de código abierto (por ejemplo, a través de GitHub?)
Geoff Hutchison
@GeoffHutchison Voy a jugar con él, ya que está dentro de un programa más grande (actualmente es parte de un programa que ejecuta molpro automáticamente para tratar de minimizar la geometría, y luego extrae las geometrías generadas y las orienta). Será razonablemente simple extraerlo y limpiarlo un poco.
será
Gracias. Estaré encantado de limpiarlo según sea necesario. Definitivamente hay una demanda de este tipo de herramienta.
Geoff Hutchison
1

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

osirpt
fuente
1
Parece que el OP está más interesado en el enfoque que solo el código. Sería útil si pudiera describir su enfoque con más detalle.
Paul
Enlace muerto Tal vez poner un enlace a la compilación específica en github, en lugar del maestro actual
Erik Kjellgren
0

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.

Max Radin
fuente