Cеми-эмпирические вычисления: Mopac

Для работы установили переменные в своей рабочей дирректории (H:83):

In [15]:
#запущено на kodomo
export PATH=${PATH}:/home/preps/golovin/progs/bin
export MOPAC_LICENSE=/home/preps/golovin/progs/bin

1.

Чтобы построить структуру порфирина с сайта было взято описание SMILES и создан файл porf.smi. Это SMILES описание молекулы было переведено в структуры командой:

In []:
#запущено на kodomo
obgen porf.smi > porf.mol

Полученный .mol-файл был открыт в PyMol, который запустили в режиме сервера.

In [2]:
from xmlrpclib import ServerProxy
from IPython.display import Image
cmd = ServerProxy(uri="http://localhost:9123/RPC2")
In [3]:
import time
cmd.reinitialize()
cmd.load('porf.mol')
cmd.set("opaque_background", 'off')
cmd.set("ray_trace_mode","1")
cmd.set('antialias','2')
cmd.set('stick_radius','0.1')
cmd.bg_color('white')
cmd.set('valence','on')
cmd.show('sticks')
cmd.do('''rotate x, 80''')
cmd.ray(600,400)
cmd.png('porf_1.png')
time.sleep(2)
Image(filename='porf_1.png')
Out[3]:

Так как атомы структуры не располагаются в одной плоскости, то удалим личшие водороды, используя графический интерфейс, и сохраним в .pdb.

In [4]:
cmd.save('porf.pdb')

С помощью openbabel переформатировали координаты в mol формате во входной файл для Mopac и задали тип параметризации "PM6".

In []:
#запуск на kodomo
babel -ipdb porf.pdb -omop 1_porf.mop -xk "PM6"

Запустили MOPAC с полученным .mop файлом. Итоговый .out файл переформатировали в .pdb и открыли в PyMol.

In []:
#запуск на kodomo
MOPAC2009.exe 1_porf.mop
babel -imopout 1_porf.out -opdb 1_porf.pdb
In [23]:
cmd.reinitialize()
cmd.load('1_porf.pdb')
cmd.set("opaque_background", 'off')
cmd.set("ray_trace_mode","1")
cmd.set('antialias','2')
cmd.set('stick_radius','0.1')
cmd.bg_color('white')
cmd.set('valence','on')
cmd.show('sticks')
cmd.do('''rotate x, 20''')
cmd.ray(500,500)
cmd.png('porf_2.png')
time.sleep(2)
Image(filename='porf_2.png')
Out[23]:

Полученная структура получилась "плоская", что нельзя сказать о исходной структуре.

1* Если провести другую параметризацию, а именно "AM1". И открыть полученный .pdb в PyMol.

In []:
#запуск на kodomo
babel -ipdb porf.pdb -omop  2_porf.mop -xk "AM1"
MOPAC2009.exe 2_porf.mop    
babel -imopout 2_porf.out -opdb 2_porf.pdb
In [24]:
cmd.reinitialize()
cmd.load('2_porf.pdb')
cmd.set("opaque_background", 'off')
cmd.set("ray_trace_mode","1")
cmd.set('antialias','2')
cmd.set('stick_radius','0.1')
cmd.bg_color('white')
cmd.set('valence','on')
cmd.show('sticks')
cmd.do('''rotate x, 30''')
cmd.ray(500,500)
cmd.png('porf_3.png')
time.sleep(2)
Image(filename='porf_3.png')
Out[24]:

Как визуально, так и при сравнении файлов, обе структуры не было замечено различий. Полученная с помощью параметризации "AM1" структура тоже является плоской. ####Файлы: - porf.smi; - porf.mol; - porf.pdb; - 1_porf.mop; - 1_porf.out; 1_porf.arc; - 1_porf.pdb; - 2_porf.mop; - 2_porf.out; 2_porf.arc; - 2_porf.pdb;

2

Для рассчета возбужденного состояния порфирина и на основе полученных данных сделали копию .mop файла из предыдущего задания. А именно 1_porf_spectr.mop. Также для указания Mopac о необходимости расчёта возбуждённого состояния добавьте в конец файла:
cis c.i.=4 meci oldgeo
some description

И запустили Mopac.

In []:
#запуск на kodomo
MOPAC2009.exe 1_porf_spectr.mop
В конце файла находится информация о значениях энергии электронных переходов:
 STATE       ENERGY (EV)        Q.N.  SPIN   SYMMETRY     POLARIZATION
         ABSOLUTE     RELATIVE                            X       Y       Z

    1+    0.000000    0.000000     1+  SINGLET     ????
    2     1.913701    1.913701     1   TRIPLET     ????
    3     2.266042    2.266042     2   SINGLET     ????
    4     2.462993    2.462993     2   TRIPLET     ????
    5     2.823880    2.823880     3   TRIPLET     ????
    6     3.362134    3.362134     4   TRIPLET     ????
    7     3.389962    3.389962     3   SINGLET     ????  0.2368  0.0018  0.1994
    8     3.669203    3.669203     4   SINGLET     ????  2.0305  0.0250  2.3867
    9     3.871010    3.871010     5   SINGLET     ????  1.8232  0.0128  1.5179
 The "+" symbol indicates the root used.
 

На основании полученных данных можно рассчитать длины волн, соответствующих этим значениям энергии по формуле: \(\lambda=\frac{hc}{E}\). Так как значения энергий даны в эВ, то постоянная Планка \(h \approx 4,13567 \cdot 10^{-15} эВ \cdot с\), а скорость света \(c=299'792'458 м/с\). Тогда длина волны в нм \(\lambda=\frac{1239,843}{E}\):
Энергия, эВ•c Длина волны, нм
1,93701 647,877
2,266042 547,140
2,462993 503,388
2,8238 439,0565
3,362 368,766
3,3899 365,7394
3,669203 337,90526
3,871010 320,289

Файлы:

3

Для молекулы O=C1C=CC(=O)C=C1, а именно хинона, определяли геометрию с помощью obgen:

In [0]:
#запуск на kodomo
echo 'O=C1C=CC(=O)C=C1 quinone' > q.smi
obgen q.smi > q.mol

Полученный из SMILES-файла .mol открыли в PyMol.

In [14]:
import time
cmd.reinitialize()
cmd.load('q.mol')
cmd.set("opaque_background", 'off')
cmd.set("ray_trace_mode","1")
cmd.set('antialias','2')
cmd.set('stick_radius','0.1')
cmd.set('sphere_scale','0.2')
cmd.bg_color('white')
cmd.show('spheres')
cmd.show('sticks')
cmd.set('valence','on')
cmd.save('q.pdb')
cmd.ray(700,500)
cmd.png('q_1.png')
time.sleep(2)
Image(filename='q_1.png')
Out[14]:

Сохраненный .pdb переформатировали c параметризацией 'PM6' в .mop и оптимизировали с помощью Mopac.

In [15]:
#запуск на kodomo
babel -ipdb q.pdb -omop  q.mop -xk "PM6"
MOPAC2009.exe q.mop    
babel -imopout q.out -opdb q_1.pdb
  File "<ipython-input-15-db017157b93e>", line 2
    babel -ipdb q.pdb -omop  q.mop -xk "PM6"
                ^
SyntaxError: invalid syntax

Получившийся и переформатированный .pdb открыли в PyMol.

In [16]:
cmd.reinitialize()
cmd.load('q_1.pdb')
cmd.set("opaque_background", 'off')
cmd.set("ray_trace_mode","1")
cmd.set('antialias','2')
cmd.set('stick_radius','0.1')
cmd.set('sphere_scale','0.2')
cmd.bg_color('white')
cmd.show('spheres')
cmd.show('sticks')
cmd.set('valence','on')
cmd.ray(700,500)
cmd.png('q_2.png')
time.sleep(2)
Image(filename='q_2.png')
Out[16]:

Нетрудно заметить, что при оптимизации MOPAC произошло удлинение связи СС(=О)С.

Для определения геометрии дианиона хинона добавили в первую строчку .mop строку "CHARGE=-2". Потом явным способом указали, на каких атомах должен находится отрицательный заряд, в результате получился .mop. Далее провели опримизацию с помощью Mopac и переформатировали из .out в .pdb, который открыли в PyMol.

In [17]:
#запуск на kodomo
MOPAC2009.exe q_ani.mop    
babel -imopout q_ani.out -opdb q_ani.pdb
  File "<ipython-input-17-0e27869debcb>", line 2
    MOPAC2009.exe q_ani.mop
                      ^
SyntaxError: invalid syntax
In [18]:
cmd.reinitialize()
cmd.load('q_ani.pdb')
cmd.set("opaque_background", 'off')
cmd.set("ray_trace_mode","1")
cmd.set('antialias','2')
cmd.set('stick_radius','0.1')
cmd.set('sphere_scale','0.2')
cmd.bg_color('white')
cmd.show('spheres')
cmd.show('sticks')
cmd.set('valence','on')
cmd.ray(700,500)
cmd.png('q_ani.png')
time.sleep(2)
Image(filename='q_ani.png')
Out[18]:

Как и в случае незаряженной молекулы структура тоже плоская, однако наблюдается удлинение связей C=O.

Файлы:

4

При облучении ультрафиолетом тимины превращаются в тиминовые димеры, так же известно, что ДНК фотолиаза при облучении ультрафиолетом востановливает основания тиминов до нормального. Для вычисления возбуждения тиминовых димеров Mopac использовать затруднительно, тогда сымитируем возбуждение, добавляя положительный заряд обоим "кольцам" (то есть заряд системы станет +2). А затем полученое возбуждённое состояние снова оптимизируем при заряде 0.

In []:
#запуск на kodomo
babel -ipdb td.pdb -omop td_1.mop -xk "PM6"
MOPAC2009.exe td_1.mop
babel -imopout td_1.out -opdb td_1.pdb
In []:
#запуск на kodomo
babel -ipdb td_1.pdb -omop td_2.mop -xk "PM6"
#дописываем заряд системе ' PM6 CHARGE=+2'
MOPAC2009.exe td_2.mop
babel -imopout td_2.out -opdb td_2.pdb
In []:
#запуск на kodomo
babel -ipdb td_2.pdb -omop td_3.mop -xk "PM6"
#снимаем заряд
MOPAC2009.exe td_3.mop
babel -imopout td_3.out -opdb td_3.pdb

Получившийся и переформатированные .pbd открыли в PyMol.

In [15]:
import time
cmd.reinitialize()
cmd.load('td_1.pdb')
cmd.set("opaque_background", 'off')
cmd.set("ray_trace_mode","1")
cmd.set('antialias','2')
cmd.set('stick_radius','0.1')
cmd.bg_color('white')
cmd.set('valence','on')
cmd.show('sticks')
cmd.center('td_1')
cmd.do('''rotate y, -60''')
cmd.ray(600,600)
cmd.png('td_1.png')
time.sleep(2)
Image(filename='td_1.png')
Out[15]:
In [12]:
cmd.hide('everything','td_1')
cmd.load('td_2.pdb')
cmd.do('''rotate y, 60''')
cmd.ray(600,600)
cmd.png('td_2.png')
time.sleep(2)
Image(filename='td_2.png')
Out[12]:
In [13]:
cmd.hide('everything','td_2')
cmd.load('td_3.pdb')
cmd.do('''rotate y, 60''')
cmd.ray(600,600)
cmd.png('td_3.png')
time.sleep(2)
Image(filename='td_3.png')
Out[13]:

Как видно при добавлении заряда системе мы наблюдаем перевод от тиминого димера до двух несвязанных между собой тиминов. Энергии каждой стадии равны -3273.58217 эВ, -3253.90834 эВ, -3273.69661 эВ. Так как энергия состояния свободных тиминов меньше, чем состояния димера, то обратного самопроизвольного перехода тиминов в димер не происходит.

Файлы:

Исходный файл ipython notebook: