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
import __main__
__main__.pymol_argv = [ 'pymol', '-cp' ]
import pymol
pymol.finish_launching()
from pymol import cmd
from IPython.display import Image
os.environ['PATH']=os.environ['PATH']+'/home/preps/golovin/progs/bin'
os.environ['MOPAC_LICENSE'] ='/home/preps/golovin/progs/bin'
%%bash
echo 'c1cc2cc3ccc(cc4ccc(cc5ccc(cc1n2)[nH]5)n4)[nH]3' > porphyrin.smi
%%bash
obgen porphyrin.smi > porphyrin.mol
cmd.delete('all')
cmd.load('porphyrin.mol')
cmd.refresh()
cmd.do('''
bg_color white
as sticks, all
orient, all
set label_outline_color, black
set label_size, -0.5
label all, " %s" % ID
remove id 39+40
rotate x, 90
ray
png pic1.png
''')
Image(filename='pic1.png')
cmd.save('porphyrin.pdb')
%%bash
babel -ipdb porphyrin.pdb -omop porphyrin_opt.mop -xk "PM6"
%%bash
/home/preps/golovin/progs/bin/MOPAC2009.exe porphyrin_opt.mop
%%bash
babel -imopout porphyrin_opt.out -opdb porphyrin_opt.pdb
cmd.delete('all')
cmd.load('porphyrin_opt.pdb')
cmd.refresh()
cmd.do('''
bg_color white
as sticks, all
orient, all
set label_outline_color, black
set label_size, -0.5
label all, " %s" % ID
ray
png pic2.png
''')
Image(filename='pic2.png')
После удаления лишних водородов молекула порфирина стала плоской.
%%bash
cp porphyrin_opt.mop porphyrin_opt_spectr.mop
echo "
cis c.i.=4 meci oldgeo
For porphyrin spectrum" >> porphyrin_opt_spectr.mop
%%bash
/home/preps/golovin/progs/bin/MOPAC2009.exe porphyrin_opt_spectr.mop
fl=open('porphyrin_opt_spectr.out','r')
lines=fl.readlines()
for l in lines[-30:-1]:
print l.split()
8 0 1 1 0
2.4974 1 1 0 0
9 0 1 0 1
3.4825 1 1 0 0
DIAGONAL OF C.I. MATRIX 0.000000 3.241984 2.658889 2.497420 3.482493 3.241984 2.658889 2.497420 3.482493
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.
TOTAL CPU TIME: 14.20 SECONDS
Мы получили энергии электронных переходов. Посчитаем длины волн, при которых они происходят. \[ \lambda=(h*c)/E \]
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()
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
Получается, что порфирин должен поглощать в ближнем ультрафиолете и в видимом спектре. (К сожалению, он перестал выводить print сюда. А еще MOPAC пишет, что у него закончилась лицензия)
%%bash
echo 'O=C1C=CC(=O)C=C1' > mol.smi
%%bash
obgen mol.smi > mol.mol
cmd.delete('all')
cmd.load('mol.mol')
cmd.refresh()
cmd.do('''
bg_color white
orient, all
set label_outline_color, black
set label_size, -0.5
label all, " %s" % ID
show sticks
set valence, on
set stick_ball, on
set stick_ball_ratio, 3
set stick_radius, 0.12
set valence_mode, 2
ray
png pic3.png
rotate x, 90
ray
png pic4.png
''')
Image(filename='pic3.png')
Image(filename='pic4.png')
cmd.save('mol.pdb')
С помощью obgen определили, что молекула плоская. Похоже, что это хинон. Теперь попробуем с помощью MOPAC.
%%bash
babel -ipdb mol.pdb -omop mol.mop -xk "PM6"
%%bash
/home/preps/golovin/progs/bin/MOPAC2009.exe mol.mop
babel -imopout mol.out -opdb mol_new.pdb
cmd.delete('all')
cmd.load('mol_new.pdb')
cmd.refresh()
cmd.do('''
bg_color white
orient, all
set label_outline_color, black
set label_size, -0.4
label all, " %s" % ID
show sticks
set valence, on
set stick_ball, on
set stick_ball_ratio, 3
set stick_radius, 0.12
set valence_mode, 2
dist id 1, id 7
dist id 4, id 8
ray
png pic5.png
rotate x, 90
ray
png pic6.png
''')
Image(filename='pic5.png')
Image(filename='pic6.png')
MOPAC тоже сделал плоскую молекулу, только ещё показывает делокализованный заряд, в отличие от первого случая, хотя в насройках pymol стоит set valence_mode, 2, и он вроде бы тоже должен его показывать.
with open("mol.mop") as f,open("mol_charge.mop",'w') as o:
data=f.read()
data=data.replace("PM6\nmol.pdb","PM6 CHARGE=-2\nmol.pdb")
o.write(data)
with open("mol_charge.mop") as f,open("mol_charge2.mop",'w') as o:
data=f.read()
data=data.replace("O","O(-)")
o.write(data)
%%bash
/home/preps/golovin/progs/bin/MOPAC2009.exe mol_charge2.mop
babel -imopout mol_charge2.out -opdb mol_charge2.pdb
cmd.delete('all')
cmd.load('mol_charge2.pdb')
cmd.refresh()
cmd.do('''
bg_color white
orient, all
set label_outline_color, black
set label_size, -0.4
label all, " %s" % ID
show sticks
set valence, on
set stick_ball, on
set stick_ball_ratio, 3
set stick_radius, 0.12
set valence_mode, 2
dist id 1, id 7
dist id 4, id 8
ray
png pic7.png
rotate x, 90
ray
png pic8.png
''')
Image(filename='pic7.png')
Image(filename='pic8.png')
Длина связи увеличилась на 0.1 Å в молекуле с указанным зарядом.
cmd.delete('all')
cmd.load('td.pdb')
cmd.refresh()
cmd.do('''
bg_color white
orient, all
show sticks
set valence, on
set stick_ball, on
set stick_ball_ratio, 3
set stick_radius, 0.12
set valence_mode, 2
set ray_trace_mode, 3
ray
png pic9.png
''')
Image(filename='pic9.png')
Проведите оптимизацию геометрии этого димера, при заряде системы 0.
%%bash
babel -ipdb td.pdb -omop td.mop -xk "PM6"
/home/preps/golovin/progs/bin/MOPAC2009.exe td.mop
%%bash
babel -imopout td.out -opdb td_opt.pdb
cmd.delete('all')
cmd.load('td_opt.pdb')
cmd.refresh()
cmd.do('''
bg_color white
orient, all
show sticks
set valence, on
set stick_ball, on
set stick_ball_ratio, 3
set stick_radius, 0.12
set valence_mode, 2
set ray_trace_mode, 3
ray
png pic10.png
''')
Image(filename='pic10.png')
При сравнении с прошлой картинкой, можно заметить, что геометрия димера немного изменилась
Проведите оптимизацию результата при заряде системы +2.
%%bash
babel -ipdb td_opt.pdb -omop td_opt.mop -xk "PM6"
with open("td_opt.mop") as f,open("td2.mop",'w') as o:
data=f.read()
data=data.replace("PM6\ntd_opt.pdb","PM6 CHARGE=+2\ntd_opt.pdb")
o.write(data)
%%bash
/home/preps/golovin/progs/bin/MOPAC2009.exe td2.mop
Не работает MOPAC =( Хотя сначала его удалось запустить
Пишет: "Your MOPAC executable has expired. Please go to web-site: http://openmopac.net/Download_MOPAC_Executable_Step2.html to get a new version of MOPAC."
%%bash
babel -imopout td2.out -opdb td2_opt.pdb