Task5

Version 1 (Andrey Golovin, 16.10.2017 21:36)

1 1 Andrey Golovin
h1.  Вычисление параметров для молекулярной механики 
2 1 Andrey Golovin
3 1 Andrey Golovin
4 1 Andrey Golovin
Необходимые сведения о работе с ORCA http://kodomo.fbb.msu.ru/~golovin/pdf/OrcaManual_2_9.pdf  или https://sites.google.com/site/orcainputlibrary/home 
5 1 Andrey Golovin
6 1 Andrey Golovin
Суть задания состоит в определении констант ковалентных взаимодействий для молекулярной механики на основе квантово-химических расчётов. Пример подобной работы представлен в  http://ambermd.org/antechamber/gaff.pdf это статье о разработке поля gaff.
7 1 Andrey Golovin
8 1 Andrey Golovin
9 1 Andrey Golovin
* Вам предоставлена оптимизированная структура этана в виде z-matrix :
10 1 Andrey Golovin
11 1 Andrey Golovin
<pre>
12 1 Andrey Golovin
inp = '''!HF RHF 6-31G
13 1 Andrey Golovin
* int 0 1
14 1 Andrey Golovin
C 0 0 0 0 0 0 
15 1 Andrey Golovin
C 1 0 0 1.52986 0 0 
16 1 Andrey Golovin
H 1 2 0 1.08439 111.200 0
17 1 Andrey Golovin
H 1 2 3 1.08439 111.200 120
18 1 Andrey Golovin
H 1 2 3 1.08439 111.200 -120
19 1 Andrey Golovin
H 2 1 3 1.08439 111.200 180
20 1 Andrey Golovin
H 2 1 5 1.08439 111.200 120
21 1 Andrey Golovin
H 2 1 5 1.08439 111.200 -120
22 1 Andrey Golovin
*
23 1 Andrey Golovin
'''
24 1 Andrey Golovin
</pre>
25 1 Andrey Golovin
26 1 Andrey Golovin
Как вы видите, вместо значений длин и углов связей можно вставить значение. Наша цель состоит в том, что бы рассчитать 20 разных длинн связи с шагом 0.02 ангстрема для расчёта энергии в ORCA с разными значениями по длине '''одной''' из связей (C-C).
27 1 Andrey Golovin
28 1 Andrey Golovin
29 1 Andrey Golovin
* Конечно можно сделать эти файлы вручную, но ожидается, что вы сделаете это средствами  '''python''' . 
30 1 Andrey Golovin
* Предлагаю следующую функцию по запуску ORCA 
31 1 Andrey Golovin
32 1 Andrey Golovin
<pre>
33 1 Andrey Golovin
def run_orca(inp):
34 1 Andrey Golovin
    with open('orca.inp', 'w') as outfile:
35 1 Andrey Golovin
        outfile.write(inp)
36 1 Andrey Golovin
    p = subprocess.Popen("/home/shad/progs/bin/orca orca.inp", 
37 1 Andrey Golovin
                          shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
38 1 Andrey Golovin
    out=p.communicate()[0]
39 1 Andrey Golovin
    out.splitlines()
40 1 Andrey Golovin
41 1 Andrey Golovin
    # extract energy: FINAL SINGLE POINT ENERGY'
42 1 Andrey Golovin
    # and return it as float
43 1 Andrey Golovin
    
44 1 Andrey Golovin
    return ....
45 1 Andrey Golovin
</pre>
46 1 Andrey Golovin
47 1 Andrey Golovin
48 1 Andrey Golovin
49 1 Andrey Golovin
* У вас есть зависимость энергии молекулы от длины одной связи. Эту зависимость можно построить в Excel (...). Вам предлагается сделать это в  matplotlib в Jupyter Notebook. 
50 1 Andrey Golovin
51 1 Andrey Golovin
Для matplotlib:
52 1 Andrey Golovin
53 1 Andrey Golovin
<pre>
54 1 Andrey Golovin
%matplotlib inline
55 1 Andrey Golovin
import numpy as np
56 1 Andrey Golovin
import matplotlib.pyplot as plt
57 1 Andrey Golovin
from scipy import optimize 
58 1 Andrey Golovin
</pre>
59 1 Andrey Golovin
60 1 Andrey Golovin
<pre>
61 1 Andrey Golovin
# fake x array , replace with real one
62 1 Andrey Golovin
x_o=np.arange(1,2,0.1)
63 1 Andrey Golovin
# fake y array, replace with energies
64 1 Andrey Golovin
y_o=-70+2*(x_o -1.58)**2 
65 1 Andrey Golovin
66 1 Andrey Golovin
#function is  f(x)=k(b-x)^2 + a
67 1 Andrey Golovin
fitfunc = lambda p, x: p[0]*pow(p[1]-x,2) + p[2] # Target function
68 1 Andrey Golovin
errfunc = lambda p, x, y: fitfunc(p, x) - y # Error function
69 1 Andrey Golovin
70 1 Andrey Golovin
p0 = [1,1, -79] # Initial guess for the parameters
71 1 Andrey Golovin
p1, success = optimize.leastsq(errfunc, p0[:], args=(x_o, y_o))
72 1 Andrey Golovin
print "Optimized params:", p1
73 1 Andrey Golovin
74 1 Andrey Golovin
#Plot it
75 1 Andrey Golovin
plt.plot(x_o, y_o, "ro", x_o,fitfunc(p1,x_o),"r-",c='blue',alpha=0.5)
76 1 Andrey Golovin
plt.xlim(1,2)
77 1 Andrey Golovin
plt.show()
78 1 Andrey Golovin
</pre>
79 1 Andrey Golovin
80 1 Andrey Golovin
81 1 Andrey Golovin
82 1 Andrey Golovin
* Проделайте аналогичные операции для валентного угла HCС, его значения должны изменяться от 109.2 до 113.2. Сохраните полученные коэффициенты в отчёт. Примечание: не перезаписывайте файл со значениями энергий они Вам нужны для отчёта. Сравните полученные константы с данными из статьи о GAFF. Укажите возможные причины расхождений ваших результатов и публикацией.
83 1 Andrey Golovin
84 1 Andrey Golovin
* Проделайте аналогичные операции для торсионного угла CC, его значения должны изменяться от -180 до 180 c шагом 12. Сохраните изображение и укажите в отчёте количество минимумов функции.
85 1 Andrey Golovin
86 1 Andrey Golovin
* Увеличьте шаг до 0.1 ангстрема при расчёте связи. Постройте зависимость. Укажите какой функцией можно было бы аппроксимировать наблюдаемую зависимость.