ПЕРСОНАЛЬНЫЙ УЧЕБНЫЙ САЙТ ШАФИКОВА РАДИКА, ФББ, 4 КУРС
ГЛАВНАЯ СЕМЕСТРЫ ПРОЕКТЫ О СЕБЕ БАЗЫ ДАННЫХ FBB MSU

Работа с PyMol

Со мной можно связаться: iltarn@mail.ru
In [13]:
## Из-за того, что время от времени notebook перестает показывать выдачи, перезагружал регулярно
## Kernel
# Делаю тоннель
# plink -ssh -X  iltarn@kodomo.cmm.msu.ru
# ipython notebook --no-browser
# plink -ssh -L  8864:localhost:8864 iltarn@kodomo.cmm.msu.ru

from xmlrpclib import ServerProxy
from IPython.display import Image
import os, sys
import scipy as sp
from scipy import constants
from scipy.constants import codata
import numpy as np


In [4]:
%%bash
export PATH=${PATH}:/home/preps/golovin/progs/bin
export MOPAC_LICENSE=/home/preps/golovin/progs/bin
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/home/preps/golovin/progs/lib
In [7]:
%%bash 
# Задание 1.
# Генерирую SMILES
cd
cd Term6
cd Practice2
echo 'c1cc2cc3ccc(cc4ccc(cc5ccc(cc1n2)[nH]5)n4)[nH]3' >  porphyrin1.smi
In [9]:
%%bash 
# Преобразую в .mol
obgen porphyrin.smi > porphyrin.mol

A T O M   T Y P E S

IDX	TYPE
1	2
2	2
3	2
4	2
5	63
6	64
7	64
8	63
9	2
10	2
11	2
12	2
13	2
14	2
15	63
16	64
17	64
18	63
19	2
20	2
21	40
22	39
23	23
24	40
25	39
26	23
27	5
28	5
29	5
30	5
31	5
32	5
33	5
34	5
35	5
36	5
37	5
38	5
39	28
40	28

F O R M A L   C H A R G E S

IDX	CHARGE
1	0.000000
2	0.000000
3	0.000000
4	0.000000
5	0.000000
6	0.000000
7	0.000000
8	0.000000
9	0.000000
10	0.000000
11	0.000000
12	0.000000
13	0.000000
14	0.000000
15	0.000000
16	0.000000
17	0.000000
18	0.000000
19	0.000000
20	0.000000
21	0.000000
22	0.000000
23	0.000000
24	0.000000
25	0.000000
26	0.000000
27	0.000000
28	0.000000
29	0.000000
30	0.000000
31	0.000000
32	0.000000
33	0.000000
34	0.000000
35	0.000000
36	0.000000
37	0.000000
38	0.000000
39	0.000000
40	0.000000

P A R T I A L   C H A R G E S

IDX	CHARGE
1	-0.150000
2	-0.150000
3	0.100000
4	-0.105000
5	-0.196600
6	-0.150000
7	-0.150000
8	-0.196600
9	-0.105000
10	0.100000
11	-0.150000
12	-0.150000
13	0.100000
14	-0.105000
15	-0.196600
16	-0.150000
17	-0.150000
18	-0.196600
19	-0.105000
20	0.100000
21	-0.600000
22	0.033200
23	0.270000
24	-0.600000
25	0.033200
26	0.270000
27	0.150000
28	0.150000
29	0.150000
30	0.150000
31	0.150000
32	0.150000
33	0.150000
34	0.150000
35	0.150000
36	0.150000
37	0.150000
38	0.150000
39	0.400000
40	0.400000

S E T T I N G   U P   C A L C U L A T I O N S

SETTING UP BOND CALCULATIONS...
SETTING UP ANGLE & STRETCH-BEND CALCULATIONS...
SETTING UP TORSION CALCULATIONS...
SETTING UP OOP CALCULATIONS...
SETTING UP VAN DER WAALS CALCULATIONS...
SETTING UP ELECTROSTATIC CALCULATIONS...

S T E E P E S T   D E S C E N T

STEPS = 500

STEP n       E(n)         E(n-1)    
------------------------------------
    0    264078.579      ----
   10    387.25365    432.58667
   20    209.70161    217.70339
   30    154.22377    158.01412
   40    106.86242    119.63142
   50    84.10609    84.87622
   60    67.57597    69.40770
   70    61.27328    61.78441
   80    56.97943    57.36729
   90    53.61588    53.91493
  100    50.05210    50.69985
  110    47.19119    47.56112
  120    45.33161    45.56281
  130    44.09883    44.24992
  140    43.26196    43.36716
  150    42.70525    42.77019
  160    42.36422    42.38588
  170    42.09851    42.13219
  180    41.90225    41.91312
  190    41.73948    41.74118
  200    41.59001    41.60226
  210    41.41251    41.41886
  220    41.24580    41.25065
  230    41.16337    41.16363
  240    41.08282    41.08723
  250    41.01011    41.01397
  260    40.94642    40.94914
    STEEPEST DESCENT HAS CONVERGED

W E I G H T E D   R O T O R   S E A R C H

  NUMBER OF ROTATABLE BONDS: 0
  NUMBER OF POSSIBLE ROTAMERS: 1
  GENERATED ONLY ONE CONFORMER


S T E E P E S T   D E S C E N T

STEPS = 500

STEP n       E(n)         E(n-1)    
------------------------------------
    0      40.687      ----
   10    40.65904    40.66171
   20    40.62001    40.62742
   30    40.58169    40.58075
   40    40.55182    40.55683
   50    40.51349    40.51425
   60    40.48979    40.48937
   70    40.46681    40.46892
   80    40.43500    40.43461
   90    40.41479    40.41619
  100    40.39602    40.39666
  110    40.37464    40.38024
  120    40.35652    40.36082
  130    40.32946    40.33215
  140    40.29588    40.29930
  150    40.28237    40.28354
  160    40.26648    40.26765
  170    40.25543    40.25652
  180    40.23380    40.24113
  190    40.21221    40.21369
  200    40.19776    40.19875
  210    40.18832    40.18910
  220    40.17351    40.17434
  230    40.15931    40.16348
  240    40.14866    40.15063
  250    40.13485    40.13566
  260    40.12288    40.12600
  270    40.10429    40.10659
  280    40.09629    40.09709
  290    40.08405    40.08754
  300    40.07487    40.07673
  310    40.05887    40.05954
  320    40.04744    40.04813
  330    40.03846    40.04064
  340    40.02265    40.02560
  350    40.00962    40.00904
  360    39.99804    39.99839
  370    39.98773    39.98922
  380    39.97843    39.97995
  390    39.96942    39.97007
  400    39.96021    39.96120
  410    39.95186    39.95216
  420    39.94039    39.94100
  430    39.92925    39.92989
  440    39.92155    39.92227
  450    39.91296    39.91564
  460    39.90556    39.90583
  470    39.89841    39.90008
  480    39.89113    39.89139
  490    39.88425    39.88596
  500    39.87816    39.87871

In [30]:
# Запускаю PyMol без графического окна
import __main__
__main__.pymol_argv = [ 'pymol', '-cp' ]
import pymol
pymol.finish_launching()
from pymol import cmd
In [31]:
from IPython.display import Image
In [14]:
# Устанавливаю настройки визуализации, подгружаю и визуализирую молекулу порфирина.
cmd.do('''
reinitialize
set ray_trace_mode, 0; red
set ray_opaque_background, off
set antialias, .5
set light_count, 8
set ambient, 0.5
set ray_trace_color, red
set cartoon_side_chain_helper, on
cd /home/students/y12/iltarn/Term6/Practice2
load porphyrin.mol
orient porphyrin
as sticks, porphyrin
zoom porphyrin, 4
label all, " %s" % ID
set label_color, black
ray 
png pic1.png
''')
In [15]:
Image(filename='pic1.png')
Out[15]:
In [16]:
cmd.do('''
rotate x, 90
ray
png pic1_90.png
''')
In [17]:
Image(filename='pic1_90.png')
Out[17]:
In [18]:
# Исправляю молекулу и сохраняю в .pdb
cmd.do('''
remove id 39+40
save porphyrin.pdb
ray 
png pic1_90_rem.png
''')
In [19]:
Image(filename='pic1_90_rem.png')
Out[19]:
In [345]:
%%bash 
#С помощью openbabel форматирую координаты в mol формате во входной файл для Mopac.
# Используем метод параметризации PM6
babel -ipdb porphyrin.pdb -omop porphyrin_opt.mop -xk "PM6"
In [347]:
%%bash 
# Скользкий шаг. Делал через Putty непосредственно - там все работает 
#(правда, предупреждает о наличии новой версии и ждет нажатия Enter). 
# На этом этапе происходит расчет молекулярных орбиталей
# для всех валентных электронов порфирина.
MOPAC2009.exe porphyrin_opt.mop
In [348]:
%%bash 
# Переформатирование из .out в .pdb
babel -imopout porphyrin_opt.out -opdb porphyrin_opt.pdb
In [349]:
# Визуализация изменений.
cmd.do('''
delete all
load porphyrin_opt.pdb, porphyrin
orient porphyrin
as sticks, porphyrin
zoom porphyrin, 4
ray 
png pic2.png
''')
In [350]:
# Наш порфирин стал плоским!
Image(filename='pic2.png')
Out[350]:
In [365]:
#Вид сбоку
cmd.do('''
rotate x, 90
ray
png pic2_90.png
''')
In [366]:
Image(filename='pic2_90.png')
Out[366]:
In [355]:
%%bash
# Сравним PM6 с AM1
babel -ipdb porphyrin.pdb -omop  porphyrin_opt_am1.mop -xk "AM1"
MOPAC2009.exe porphyrin_opt_am1.mop
babel -imopout porphyrin_opt_am1.out -opdb porphyrin_opt_am1.pdb
In [369]:
cmd.do('''
delete all
load porphyrin_opt_am1.pdb, porphyrin_am1
load porphyrin_opt.pdb, porphyrin_pm6
color red, porphyrin_am1
color blue, porphyrin_pm6
orient porphyrin
as sticks, porphyrin_pm6
as sticks, porphyrin_am1
zoom porphyrin, 4
rotate x, 30
ray 
png pic3.png
''')
In [370]:
Image(filename='pic3.png')
# Видим, что на структурах сильнее расходятся водороды.
Out[370]:
In [379]:
%%bash
# Задание 2. Рассчет возбужденных состояний порфирина
# Копирую файл .mop
*porphyrin_opt.mop* porphyrin_opt_spectr.mop
echo "" >> porphyrin_opt_spectr.mop
echo "cis c.i.=4 meci oldgeo" >> porphyrin_opt_spectr.mop
echo "some description" >> porphyrin_opt_spectr.mop
MOPAC2009.exe porphyrin_opt_spectr.mop
In [22]:
#посмотрим на файл
%load /home/students/y12/iltarn/Term6/Practice2/porphyrin_opt_spectr.out
In [11]:
# После просмотра файла выведем отдельно энергии электронных переходов ( в самом конце).
f=open('/home/students/y12/iltarn/Term6/Practice2/porphyrin_opt_spectr.out','r')
lines=f.readlines()
f.close()
for l in lines[-19:-6]:
    print l.split()
['STATE', 'ENERGY', '(EV)', 'Q.N.', 'SPIN', 'SYMMETRY', 'POLARIZATION']
['ABSOLUTE', 'RELATIVE', 'X', 'Y', 'Z']
[]
['1+', '0.000000', '0.000000', '1+', 'SINGLET', '????']
['2', '1.913804', '1.913804', '1', 'TRIPLET', '????']
['3', '2.266288', '2.266288', '2', 'SINGLET', '????']
['4', '2.463311', '2.463311', '2', 'TRIPLET', '????']
['5', '2.824593', '2.824593', '3', 'TRIPLET', '????']
['6', '3.362738', '3.362738', '4', 'TRIPLET', '????']
['7', '3.390622', '3.390622', '3', 'SINGLET', '????', '0.2634', '0.1676', '0.0065']
['8', '3.669215', '3.669215', '4', 'SINGLET', '????', '0.0155', '0.0639', '4.3621']
['9', '3.871001', '3.871001', '5', 'SINGLET', '????', '2.0305', '1.2716', '0.0493']
['The', '"+"', 'symbol', 'indicates', 'the', 'root', 'used.']

In [23]:
# Рассчитаем спектр поглощения
for i in lines[-15:-7]:
     l=i.split()
     k=float(l[2])
     print l[0], l[4], (constants.c*constants.h*(10**9)/codata.value('electron volt-joule relationship'))/k, 'nm'
f.close()
2 TRIPLET 647.841643763 nm
3 SINGLET 547.080481033 nm
4 TRIPLET 503.323343744 nm
5 TRIPLET 438.945338036 nm
6 TRIPLET 368.700127456 nm
7 SINGLET 365.667989295 nm
8 SINGLET 337.903864778 nm
9 SINGLET 320.289746554 nm

In []:
# Видим, что порфирин поглащает в фиолетовой области спектра , а также в видимой.
In []:
# Задание 3. Определение геометрии молекулы O=C1C=CC(=O)C=C1.
In [28]:
%%bash
cd 
cd Term6/Practice2
# Сгенерируем файл .smi, затем построим по нему 3D.
echo 'O=C1C=CC(=O)C=C1    benzoquinone' > benzoquinone.smi
obgen benzoquinone.smi > benzoquinone.mol

A T O M   T Y P E S

IDX	TYPE
1	7
2	3
3	2
4	2
5	3
6	7
7	2
8	2
9	5
10	5
11	5
12	5

F O R M A L   C H A R G E S

IDX	CHARGE
1	0.000000
2	0.000000
3	0.000000
4	0.000000
5	0.000000
6	0.000000
7	0.000000
8	0.000000
9	0.000000
10	0.000000
11	0.000000
12	0.000000

P A R T I A L   C H A R G E S

IDX	CHARGE
1	-0.570000
2	0.541200
3	-0.135600
4	-0.135600
5	0.541200
6	-0.570000
7	-0.135600
8	-0.135600
9	0.150000
10	0.150000
11	0.150000
12	0.150000

S E T T I N G   U P   C A L C U L A T I O N S

SETTING UP BOND CALCULATIONS...
SETTING UP ANGLE & STRETCH-BEND CALCULATIONS...
SETTING UP TORSION CALCULATIONS...
SETTING UP OOP CALCULATIONS...
SETTING UP VAN DER WAALS CALCULATIONS...
SETTING UP ELECTROSTATIC CALCULATIONS...

S T E E P E S T   D E S C E N T

STEPS = 500

STEP n       E(n)         E(n-1)    
------------------------------------
    0      16.578      ----
   10     2.13094     2.31535
   20     0.68590     0.80368
   30    -0.08085     0.00722
   40    -0.28925    -0.28127
   50    -0.76995    -0.76399
   60    -0.94816    -0.94219
   70    -0.98337    -0.97925
   80    -1.00316    -0.99928
   90    -1.02857    -1.02531
  100    -1.04055    -1.03863
  110    -1.05610    -1.05563
    STEEPEST DESCENT HAS CONVERGED

W E I G H T E D   R O T O R   S E A R C H

  NUMBER OF ROTATABLE BONDS: 0
  NUMBER OF POSSIBLE ROTAMERS: 1
  GENERATED ONLY ONE CONFORMER


S T E E P E S T   D E S C E N T

STEPS = 500

STEP n       E(n)         E(n-1)    
------------------------------------
    0      -1.104      ----
   10    -1.10599    -1.10533
   20    -1.10647    -1.10682
   30    -1.10754    -1.10718
   40    -1.10821    -1.10802
   50    -1.10875    -1.10865
   60    -1.10868    -1.10915
   70    -1.10936    -1.10872
   80    -1.10984    -1.10950
   90    -1.11020    -1.11002
  100    -1.11049    -1.11039
  110    -1.11009    -1.11067
  120    -1.11059    -1.10990
  130    -1.11092    -1.11055
  140    -1.11115    -1.11095
  150    -1.11132    -1.11121
  160    -1.11067    -1.11139
  170    -1.11113    -1.11152
  180    -1.11141    -1.11095
  190    -1.11159    -1.11133
  200    -1.11171    -1.11156
  210    -1.11077    -1.11171
  220    -1.11128    -1.11181
  230    -1.11158    -1.11099
  240    -1.11176    -1.11142
  250    -1.11188    -1.11168
  260    -1.11195    -1.11183
  270    -1.11119    -1.11193
  280    -1.11156    -1.11200
  290    -1.11178    -1.11131
  300    -1.11192    -1.11164
  310    -1.11200    -1.11184
  320    -1.11205    -1.11196
  330    -1.11140    -1.11203
  340    -1.11171    -1.11103
  350    -1.11189    -1.11148
  360    -1.11199    -1.11176
  370    -1.11206    -1.11192
  380    -1.11111    -1.11202
  390    -1.11153    -1.11208
  400    -1.11179    -1.11121
  410    -1.11194    -1.11159
  420    -1.11204    -1.11183
  430    -1.11209    -1.11197
  440    -1.11125    -1.11205
  450    -1.11162    -1.11210
  460    -1.11185    -1.11133
  470    -1.11198    -1.11167
  480    -1.11206    -1.11188
  490    -1.11211    -1.11200
  500    -1.11137    -1.11207

In [47]:
# Устанавливаю настройки визуализации, подгружаю и визуализирую молекулу бензохинона.
cmd.do('''
reinitialize
set ray_trace_mode, 0; red
set ray_opaque_background, off
set antialias, .5
set light_count, 8
set ambient, 0.5
set ray_trace_color, red
set cartoon_side_chain_helper, on
cd /home/students/y12/iltarn/Term6/Practice2
load benzoquinone.mol, benzoquinone
orient benzoquinone
as sticks, benzoquinone
zoom benzoquinone, 1
ray 
png pic4.png
''')
In [48]:
Image(filename='pic4.png')
Out[48]:
In [60]:
#Вид сбоку
cmd.do('''
rotate x, -70
ray
png pic4_70.png
save benzoquinone.pdb
''')
In [58]:
Image(filename='pic4_70.png')
Out[58]:
In [51]:
# Видно, что молекула плоская.
In [62]:
%%bash
# Запустим MOPAC
babel -ipdb benzoquinone.pdb -omop  benzoquinone.mop -xk "PM6"
MOPAC2009.exe benzoquinone.mop
babel -imopout benzoquinone.out -opdb benzoquinone_mopac.pdb
In [78]:
# Сравним молекулы:
cmd.do('''
delete all
load benzoquinone_mopac.pdb, benzoquinone_mopac
load benzoquinone.pdb, benzoquinone
color red, benzoquinone
color blue, benzoquinone_mopac
set valence, on
rotate x, -60
ray 
png pic5.png
''')
In [79]:
Image(filename='pic5.png')
Out[79]:
In []:
# После MOPAC молекула осталась плоской, однако некоторые небольшие различия все же присутствуют.
# Посмотрим, что будет в случае дианиона...
In [80]:
with open("benzoquinone.mop") as f,open("benzoquinone_charge.mop",'w') as o:
    data=f.read()
    data=data.replace("PM6\benzoquinone.pdb","PM6 CHARGE=-2\benzoquinone.pdb")
    o.write(data)
with open("benzoquinone_charge.mop") as f,open("benzoquinone_charge2.mop",'w') as o:
    data=f.read()
    data=data.replace("O","O(-)")
    o.write(data)  
In [81]:
%%bash
MOPAC2009.exe benzoquinone_charge2.mop
babel -imopout benzoquinone_charge2.out -opdb benzoquinone_charge2.pdb
In [82]:
cmd.do('''
delete all
load benzoquinone_charge2.pdb, anion
load benzoquinone.pdb, benzoquinone
color red, benzoquinone
color blue, anion
set valence, on
rotate x, -60
ray 
png pic6.png
''')
In [83]:
Image(filename='pic6.png')
Out[83]:
In []:
# В анионе видно, что атомы кислорода сместились в стороны друг от друга (синий). 
#В целом, судя по синему контуру снаружи кольца, кольцо подрастянулось.
In [92]:
# Задание 4. Тиминовые димеры.
cmd.do('''
delete all
load http://kodomo.fbb.msu.ru/FBB/year_08/term6/td.pdb
as sticks, td
set valence, on
ray
png pic7.png
''')
Image(filename='pic7.png')
Out[92]:
In [95]:
%%bash
# Сначала оптимизируем структуру с PM6 с зарядом 0.
wget "http://kodomo.fbb.msu.ru/FBB/year_08/term6/td.pdb" -O td.pdb
babel -ipdb td.pdb -omop td.mop -xk "PM6"
MOPAC2009.exe td.mop
babel -imopout td.out -opdb td_opt.pdb
In [110]:
%%bash 
# Теперь с зарядом +2
babel -ipdb td_opt_2.pdb -omop td_opt_2.mop -xk "PM6"
sed -i 's/PM6/PM6 CHARGE=+2/' td_opt_2.mop
In [113]:
%%bash
MOPAC2009.exe td_opt_2.mop
babel -imopout td_opt_2.out -opdb td_opt_2.pdb
In [120]:
cmd.do('''
delete all
load td_opt_2.pdb
as sticks, td_opt_2
set valence, on
ray
png pic8.png
''')
Image(filename='pic8.png')
Out[120]:
In [123]:
%%bash
# Возвращаем 0 заряд:
babel -ipdb td_opt_2.pdb -omop td_opt_0.mop -xk "PM6"
sed -i 's/PM6 CHARGE=+2/PM6/' td_opt_0.mop
MOPAC2009.exe td_opt_0.mop
babel -imopout td_opt_0.out -opdb td_opt_0.pdb
In [127]:
cmd.do('''
delete all
load td_opt_0.pdb
as sticks, td_opt_0
set valence, on
ray
png pic9.png
''')
In [128]:
Image(filename='pic9.png')
Out[128]:
In []:
# Тиминовый димер не приобрел той же структуры, что и при исходно 0 заряде.
In [24]:
# Сравним энергии... Строки подбирались после просмотра файлов.
f=open('/home/students/y12/iltarn/Term6/Practice2/td.out','r')
lines=f.readlines()
f.close()
print lines[205]
f=open('/home/students/y12/iltarn/Term6/Practice2/td_opt_0.out','r')
lines=f.readlines()
f.close()
print lines[364]
f=open('/home/students/y12/iltarn/Term6/Practice2/td_opt_2.out','r')
lines=f.readlines()
f.close()
print lines[277]
          TOTAL ENERGY            =      -3273.58217 EV

          TOTAL ENERGY            =      -3273.69661 EV

          TOTAL ENERGY            =      -3253.90834 EV


In [25]:
# Как видно, состояния тиминового димера (-3273.58217 EV) и двух несвязанных тиминовых нуклеотидов 
# (-3273.69661 EV) примерно одинаковы по энергии, однако второе состояние более предпочтительно 
# ввиду большей (по модулю) энегрии. Поэтому возбужденное состояние и свалилось в отдельные тимины.
©Shafikov Radik, 2016