Optimierung der Geometrie eines Moleküls mit Psi4

Jan 04 2023
Meistens, wenn wir ein Molekül für ein Docking oder eine Molekulardynamiksimulation vorbereiten müssen, möchten wir den Liganden in einem entspannten Zustand haben, in dem das Molekül die richtige Geometrie hat. Meistens arbeite ich damit, meine eigenen internen Koordinaten für Moleküle zu schreiben, die als gute erste Schätzung von SMILES dienen, und dann verwende ich Psi4, eine quantenmechanische Software, die die Geometrie des Liganden optimiert.

Meistens, wenn wir ein Molekül für ein Docking oder eine Molekulardynamiksimulation vorbereiten müssen, möchten wir den Liganden in einem entspannten Zustand haben, in dem das Molekül die richtige Geometrie hat. Meistens arbeite ich damit, meine eigenen internen Koordinaten für Moleküle zu schreiben, die als gute erste Schätzung von SMILES dienen, und dann verwende ich Psi4, eine quantenmechanische Software, die die Geometrie des Liganden optimiert.

Lassen Sie uns also darauf eingehen. Zuerst können Sie psi4 conda installieren:

conda install -c psi4 psi4

  • col 1 ist das Atom 1
  • col2 ist das bindungsverbindende Atom
  • col3 ist die Bindungslänge zwischen zwei Atomen
  • col4 ist das Winkelverbindungsatom
  • col5 ist der Winkel zwischen den drei Atomen
  • col6 ist das diederische Verbindungsatom
  • col7 ist der Diederwinkel zwischen den vier Atomen
  • H11
    O11  H11  0.9600
    C11  O11  1.4000  H11  108.0000
    H12  C11  1.1000  O11  112.0000  H11    0.0000
    H13  C11  1.1000  O11  112.0000  H11  120.0000
    H14  C11  1.1000  O11  111.8699  H11 -120.0000
    

    import psi4
    
    psi4.set_memory('1000mb')
    psi4.core.set_num_threads(1)
    
    zmatrix = '''\
    H11
    O11  H11  0.9600
    C11  O11  1.4000  H11  108.0000
    H12  C11  1.1000  O11  112.0000  H11  -60.0000
    H13  C11  1.1000  O11  112.0000  H11   60.0000
    H14  C11  1.1000  O11  111.8699  H11 -180.0000
    '''
    
    universe = psi4.geometry(zmatrix)
    universe.update_geometry()
    universe.print_out()
    
    universe.save_xyz_file('test.xyz', False)
    

Was wir tun können, ist, die Vorlage als gute erste Vermutung zu verwenden und der QM-Software zu erlauben, die Geometrie zu lockern. Lassen Sie uns also zuerst einige Optionen mit psi4 einrichten. Wir möchten festlegen, welche Optionen wir an psi4 übergeben möchten:

  • scf-Typ : Dichteanpassung (dies sind Näherungsverfahren zur Berechnung der potentiellen Energie eines Systems).
  • g_covergence : Dies ist geometrische Konvergenz und es wird eine Kraft auf das Molekül ausgeübt, die seine Bewegung einschränkt. Wenn wir es fest anziehen, hat es einen bestimmten Wert, der das Wackeln des Moleküls begrenzt
  • freeze_core : Freeze core gibt an, ob man bei der Berechnung der Energie die Elektronen der inneren Schale oder nur die äußeren Valenzelektronen und deren jeweiliges Orbital berücksichtigt.
  • import psi4
    
    psi4.core.set_num_threads(1)
    psi4.set_memory('1000mb')
    
    psi4.set_options({
         'scf_type': 'df',
         'g_convergence': 'gau_tight',
         'freeze_core': 'true',
    })
    

    zmatrix = '''\
    H11
    O11  H11  0.9600
    C11  O11  1.4000  H11  108.0000
    H12  C11  1.1000  O11  112.0000  H11  -60.0000
    H13  C11  1.1000  O11  112.0000  H11   60.0000
    H14  C11  1.1000  O11  111.8699  H11 -180.0000
    0 1
    '''
    
    universe = psi4.geometry(zmatrix)
    universe.update_geometry()
    
    psi4.optimize(
        'hf/6-31G*',
        molecule=universe
    )
    
    universe.update_geometry()
    universe.print_in_input_format()
    

H
    O             1    0.946285
    C             2    1.399638      1  109.452715
    H             3    1.087420      2  112.035807      1  -61.226978
    H             3    1.087420      2  112.035807      1   61.226978
    H             3    1.081049      2  107.168437      1 -180.000000

Okay, das war es jetzt.