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
%%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
cd /home/students/y12/rita501/term8/pr2
%%bash
echo "c1cc2cc3ccc(cc4ccc(cc5ccc(cc1n2)[nH]5)n4)[nH]3 porphyrin" > porphyrin.smi
obgen porphyrin.smi > porphyrin.mol
import __main__
__main__.pymol_argv = [ 'pymol', '-cp' ]
import pymol
pymol.finish_launching()
from pymol import cmd
from IPython.display import Image
cmd.do('''
reinit
bg white
load porphyrin.mol
show spheres, all
set sphere_scale, 0.2
set valence, on
ray
png pic1.png
''')
Image(filename='pic1.png')
cmd.do('''
bg white
remove id 39+40
ray
png pic2.png
''')
Image(filename='pic2.png')
cmd.save('porphyrin.pdb', 'porphyrin')
%%bash
#С помощью openbabel форматирую координаты в mol формате во входной файл для Mopac.
# С помощью аргумента -xk "PM6" зададим соответствующий тип параметризации.
babel -ipdb porphyrin.pdb -omop porphyrin_1opt.mop -xk "PM6"
%%bash
# На этом этапе происходит расчет молекулярных орбиталей для всех валентных электронов порфирина.
# Переформатирование из .out в .pdb
MOPAC2009.exe porphyrin_1opt.mop
%%bash
babel -imopout porphyrin_1opt.out -opdb porphyrin_1opt.pdb
cmd.do('''
reinit
bg white
load porphyrin_1opt.pdb
set valence, on
show spheres, all
set sphere_scale, 0.2
ray
png pic3.png
''')
Image(filename='pic3.png')
cmd.do('''
bg white
rotate x, 86
rotate z, -90
ray
png pic4.png
''')
Image(filename='pic4.png')
%%bash
# Рассчет возбужденных состояний порфирина
# Копирую файл .mop
cp porphyrin_1opt.mop 1_opt_spectr.mop
echo "
cis c.i.=4 meci oldgeo
For porphyrin spectrum" >> 1_opt_spectr.mop
MOPAC2009.exe 1_opt_spectr.mop
# Выведем отдельно энергии электронных переходов
fl=open('/home/students/y12/rita501/term8/pr2/1_opt_spectr.out','r')
lines=fl.readlines()
for l in lines[-19:-6]:
print l.split()
# Рассчитаем спектр поглощения
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'
fl.close()
%%bash
# Задание 3. Определение геометрии молекулы O=C1C=CC(=O)C=C1.
echo 'O=C1C=CC(=O)C=C1' > benzoquinone.smi
obgen benzoquinone.smi > benzoquinone.mol
cmd.do('''
reinit
bg white
load benzoquinone.mol
set valence, on
show spheres, all
set sphere_scale, 0.2
ray
png pic5.png
''')
Image(filename='pic5.png')
cmd.save('benzoquinone.pdb', 'benzoquinone')
#Вид сбоку
cmd.do('''
rotate x, -70
ray
png pic5_70.png
''')
Image(filename='pic5_70.png')
%%bash
# Запустим MOPAC
babel -ipdb benzoquinone.pdb -omop benzoquinone.mop -xk "PM6"
MOPAC2009.exe benzoquinone.mop
babel -imopout benzoquinone.out -opdb benzoquinone_mopac.pdb
# Сравним молекулы:
cmd.do('''
reinit
bg white
load benzoquinone_mopac.pdb
set valence, on
show spheres, all
set sphere_scale, 0.2
ray
png pic6.png
''')
Image(filename='pic6.png')
# Для начала в первую строчку файла .mop добавим CHARGE=-2. Затем укажем те атомы, на которых должен находиться отрицательный заряд, – атомы кислорода.
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)
%%bash
MOPAC2009.exe benzoquinone_charge2.mop
babel -imopout benzoquinone_charge2.out -opdb benzoquinone_charge2.pdb
cmd.do('''
reinit
bg white
load benzoquinone_charge2.pdb
set valence, on
show spheres, all
set sphere_scale, 0.2
ray
png pic7.png
''')
Image(filename='pic7.png')