From d52504052f1f1f3e7883a11854ecbcbf47dc6588 Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Thu, 28 Jul 2016 18:40:01 +0200 Subject: [PATCH 01/64] Add changelog and display it with the about/configure widget --- MANIFEST.in | 2 + moldesign/HISTORY.rst | 32 ++++++++++++++++ moldesign/_notebooks/img/Header.png | Bin 318716 -> 1158211 bytes moldesign/widgets/computeconfig.py | 55 +++++++++++++++++++++++++++- setup.py | 3 -- 5 files changed, 87 insertions(+), 5 deletions(-) create mode 100644 moldesign/HISTORY.rst diff --git a/MANIFEST.in b/MANIFEST.in index 64ce3ca..6b4ae90 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -5,6 +5,8 @@ include LICENSE include README.md include CONTRIBUTING.md include DEVELOPMENT.md +include NOTICES +include moldesign/HISTORY.rst recursive-include moldesign/_static_data *.* recursive-include moldesign/_notebooks *.* global-exclude *.py[cod] __pycache__ *~ *.bak diff --git a/moldesign/HISTORY.rst b/moldesign/HISTORY.rst new file mode 100644 index 0000000..9e4aac9 --- /dev/null +++ b/moldesign/HISTORY.rst @@ -0,0 +1,32 @@ +0.7.3 (WIP) +=========== + - Add changelog and version check to the ``mdt.about()`` (aka mdt.configure) widget + - Add GAFF parameterizer for small molecules -- ``params = mdt.parameterize(mol)`` + + +0.7.2 - July 26, 2016 +===================== +FEATURES + - Completed tutorials + - Add trajectory geometry analysis functions (``traj.dihedral``, ``traj.angle``, etc.) + - Can now calculate angles, dists, and dihedrals by name within a residue + (``residue.distance('CA','CG')``) + - Can request a dihedral angle using only two atoms defining the central bond (MDT will try to + infer the other two atoms uniquely and sanely) + +BUGS + - #28: Fixed a rounding error and logging problems with OpenMM trajectory snapshots + - #21: Better bond orders to structures in Amber files, which don't store them + - #20: Store OpenMM force vector correctly + +0.7.1 - July 20, 2016 +===================== +Bugfix release + +BUGS + - #4: Use public demo CCC server by default + - #3: Fix ``python -m moldesign intro`` + +0.7.0 - July 15, 2016 +===================== + - Initial public release diff --git a/moldesign/_notebooks/img/Header.png b/moldesign/_notebooks/img/Header.png index 9551ef90d2cf1275fa327819ca8fdd2e05d1a317..8a8168c9a9a81fa1f32d22d6ead6c2ea02859519 100644 GIT binary patch literal 1158211 zcmeFZXH-*dw>FB1j|2-%6a^{Llr9KLZz{bAp_kBmkMxe=K~SVgAd~<~OXwgS0s_(! z2!iz95^13X2%W>bzj3~?-+lJ??bqMu{gE|B)>vz-d(C=XbIyCk=x8b5qIy6@Mn-l^ zRpq5F85xx`8QIkc%D*npoUFKE$;htUcT!T)QB_i6)A9DOcXG8OBYT`^V`-_Y!vDC( ziq6uqr=RZ$mA9Yn`}ZGpEyLQ{2H1YEVc7a};Av)N^Ncj}9b^>34;X@*y4one2(3qA z+CO*SsMpo~kQ}kc$~K@S_?Xwq(h@^fm4a5MlHXuqGv$23gs~vAzIWvzrLD)6%3<~m zdP^~ygNGIA32Y8*Csz~tQz`64BQ_S*qbsh-yB4*uvHea<%KnTb+im$fH$Oj$J0_Hk zQcagnP5v7=RKf0zec2X@4{uTcAzAB^IzHN*f7FA-e;uTxuRyH z<~AsoF?uO0fTxNvn2hWm-9LU;9I}TlMJZ3F`ceVte`RB4-FHc4vcO?OMa_6*?&H`v zx^Ov6_Ak~8%;9>OMhuhd?~{OcI!NU6GJ=!7gYQhwXBF}Y`FTa1R`~wwi?9pO1-1pO zCx7MI9i2Zp92VZVd9lZ`sq?2d>f}(|be5$3v#06EM^MuV7ab{7_!ftgQ$5c4g9GEQ zx3~Z3hJRel%4w-Xd}q07@TadQT(rvkM}qvv#j+}GIk@ZJCrkhE)gD{w3`_ipEdE0d z!3p6C{nU{)rhlk%owl3;@SoVof5_pG?aI4!RtlH8KhxUfN)E^RrKreucqPnGbOSk~1)6-e840OPMyHlrr}KUKn|!(IQk z!~G|7|F^^acai4b4)@Pe`M1OUcR}>u8ScMG<=+|ZzsqF*&T#)lD*uL*{|&zSH>CV8 zSnmH1ka8;IBnSS-)CzSkVm0XgZ_={?$g{1f(bAbLD?EOElv?Te9?qsU_E77;F|Yq3 z-2e19A`EoNOD;ZO#d9$-{xH(mdV{Iqqx9zN0;T6P7&B@SEz|? zwPKz-o{0WtxH5e*M>;|NAvKwcz9d~2Kk#px%o_zpM8~4C%bI2_n&7dp4$m#zQP&A7 zC`5vOI+N1Tq6uH9?eoJ)BO`aEZL*tbTo&0{ce(Z?l}kZ=&DvfL zzuP3G0dQn#EY$8M1O$H(h(Mo=??*S7mZ|$SRq#vZOX$fZf616pk+0rDR0TW)_#e!~ zi6hDaGRLvl1<%uJuHmp1feDR2vXx7MZgfe|%dcq-CUFg5Q&S1zLNn;~RDyQ~KnrfX zcshA&7}4ZW=bjsj3(n`ob?N>_*92x8O*XH~`3&c7-QHM@j!M9{tZz|>)FtNdYzf); zNmuS2`F~M>%JA&;o)aW#Fw6j(GKL=MELnZZ&$&8Y)%f&g)i1-Ef4EST#HCfY?k4iD z>$3M}qfQZ~MR@_aRVzLPuel@8Q~RScLZbSjhU97Y*6gcPB-qh?+Pb&Evw!hg4p8tH z5<)ridaH25o3rMHQCwL1an6qtx+z4cTDk*Ng;nC>wU7*+x$!Fc3-#ym%p$l1{du#X ziy!;$(dnLH=?N7iJ=DY3iIs}vPZYIZG?=GId_+0H87EZeA zG{6d%`+42r!8pHZ*pojZ^V{WjF3s3*kG_7IQlsqD%mYvGZF+lg)GbFho%e-HJ<9_) zZiaB3s62fUR}?8hGsO8=bp*{RMV&26yKL6vrlkVjD4>7ZFU77t3B0CB1rjt>Or>}R z0CRtqn5HLeG)47gPO0T2mqmwijKfy2byN|8H^x>DRe1NbK{zT~t+QMyA1p+IdPds3 zNvUhz`*+w%Z=>lS*-gZp)}?)eDp9mu8b8ocyiic+v7R3XTR?+FBaCdtja#STjYP6I z$$%p{VdZsNlIKcvi&F#1Q>JL{nZwvu_PMm%Mj)hzBcX)-+2BHLO{1C7Yx(jN115-1g`cYY@IN%pVgfp|_e$ z_Iq&np1wpkaPI9N7Jeh<%-SgCgnFJwrs3Cz%<(~fC^z8f>GaHF5X`Qde#lI>FG|JKLx{$P{Ach zFo-z9z88+nfgzy)GlLVU6d?&8j@({CGncio@>!QRs)qrZFt${Y+R(>(#9l8|14nP7zA}zFg=Aa49IS%}3hrUrL!(=T zJEx`Srce6f^1Pj(eyw`6dnhlP=?<$r-N)#9> z?GV5l)XLN0GyzyYM2wWPqDCjWMe+q$*HSvFL%4qjI0O(|zN2m)zpk%5xD{R2y7g51 zxX`WrlX2GBuB6|uk&V#9tLU0)mXn3_rw3f<>UR$)*DhY4^yjF0`7iDYK}&kKEYv`|Sm3mzyW0}_N-8=Ju8UGD~k zv8PFtOy6`fAaGn6$a^Eysaf5UX>rtlR&L|>HC|ipbnt9@?>ZsAFJ1Xj)o>+KLmkBS zmdjmO>%RgB{&$H5btPghLT#xc(bZ&wVMF)=rF<6-pvo`jXP`17l=^PnqJBbnqnVAb{sBb3=#J zuEB$_Oe8NGrz31OsBwLBNMH;*V`tGcc8@$=8=~*fUi2|wd7AHaN0wyH;n)o8xYzfO z;p-_OG9e%wHdASks8O*$=+`ZGrc7ELj-O!-^)G0|6(U_5K~si*hMLax$y-lyaB(Yj z98xjRocI1fwg#x5KbZ#IqNHHm3rEtyK z+j{^juCw{{I^DNsIbXtew6nZ?^#Ia^&bP#3O{K+j?CzvSF$r%-0=%}DljC#AE@WGI zYZ`XHju+rQdSMcVUE+b9;^2P&3>P&5P6 zf-@JVTNk~I_k<}OhTd8jou6{0C<0t{ue|Mj@=**rby&|+ma=|py7ToMhZZ_D$gd+< z@?oP5>DNpu_?p9W_`?1$4DY>hzP%Kdp9*T-To^jrAIo-9|3hI_UGlFeJ1jkcBTa%R z%kY@kAi#v$Rbvwc^!S-VX;=|zF#W#hr`Pq^lQ(|~UP0RxJmN&>IyhwSqlxKrr+rNn z_xUV)QLX`Vk8&vP0JymM$DtSYa%07D$j=+0u8@ZlyqMkr{#>}-nDSpWx`-tI$I1=k zT{7nGGm_IytKIY|kA-Fy+II0 zO*_^1^q}?%bRQj&37x@1)6~grJ|Eo80pDO`sjj;DBGWM<_7Q8C317@jgM6jCJ z0EI5d0`(S)?IwgVoyV62rJK})h2BlR-m9JqViUC*b`@RPpz~gV6(CpJz)bYwcIyF9 zgjr)p7pKKl92^5_#)-j(udH={0HqE1lppC96BIvDvP{>yv(hP%cJUD+$AX z1ugENd-l}yhPmu)qOgX7rq+r)-TNce!KxNq@E52VM{eI;g2r%&Iw;e8Op|KIB@Pp7 zV<1<0Yvid^SxWM{HQ)suFJ~UiWd^K$q`Z$w;Z1*zG?0BdO~Iecr+E$2`n*%agvb?4Lb|!;0IxwBBY=(A<8u@QeQ)YEUR&k&p4@_`&B31xunFrT)MSaahk! zGW1dAF+Sy`hcq#YH{b8$<0uo^)#fg2Mpc(+ZAiS|HG5I+PkEA07<8A?bP6-bX~#QS zo&V2){r{T)n%cIci(phKO8OBP#c4b+n6sn-W2pG|R)=362{~)0?lcRK)QYwl6?X9B zDA55yMIAs{z2ycYNn@q^DRaGhTrXjym^-yAn2C<)1^FHkrvc_ErtNfj>!|Az5?0@B zAFKxgXk-<0ItC-(1Jdnd_90?T@NLfQ=Y;jc)tB|VLs?qbJ@`P_Of5gy9GoxWKwgl# z-d>M*uX-U9!t*#F|D%0ZC&MZ%+y?1Pmt;oyeqf!?&8cGuA7eDzU7ArpCdTlzk~Num z=G~{&dD_w7pnlofMv#RKwD1!Bi-}4Zn3kVQ@qQ^#`F$qqbFV#pct_j_k?3Sff^`iUwI@soz9b)P=848y%b@xjVBnMPOCO}7K z76p{AuP@mBHc|8q?5UNKEG-qL=`H~YK2mvGagg}kb_p`-wz)(>C0F&%bD>kL{ti=a zyE9sBH&I|r&GMPTPm1oL-ngKL4Xu!#QJ=Njt-HNK5MjOh$-@X)RUZwcPFd+NA%Sl@ zbhC`Hs`+S0F|W5oU>(-RSAI{?EpzTx-gAHkAw@d5dxNj-*k}5_(=}aif?CEt%;mFN z$Yj`vraoKErYZ*d{xKUv6|>+>s@(p}(Mrw9PWQ!-jEuSEVnf2RhT~fs*j|p^{X^+@ z0yaFq)H+jG6@4jGiXS{C$`lFvx12ZCUJXi7yXM?sWy}+*xO>oiVI0Tsa1l@ila)L74I;vW!90Kf5OP4z#V%QKG6ydQy&fEUva|J+ zz4^w!9L>)aB0%@YPOb-C{H=}Fof+fz(~9aggyJm@gSB%KdRV;_XX(c|K8{ffwAIb2 zExyxJG@_7$^{#RfvI1N`+9M0u*pc`fP4)K5OLPxXk*3k0UQ zRF0G@OD7VMtdnzkQAuj?8*Ex>E5k>ab53!vTBCZA=NGjVjV7}ojd0?E$UIte-jC>^QSdodVN}TN5TMrxJ828y?+CS zF@;KKGxVMCjp0H8-+ml#3-%b*!FJ?ow@DvmBt1+Ui?B|0TipjcaE$FW8{)63{B{Sr zO2aPy#m~ge8Y$)z0&zXn-P-B!lmDtuh?70!*%XH(Ho|Cj30CnjSWua0CY9SS`~A(a zmZOkIgJKi6+FTt*O-Y z8`)E*5)W^mYQ7NGcI@yI3{%3bPYN`L1O`5;2v~y`VI+6_9?e}GlMbbJ%okrc{>uuy zbJ#=?TBpztAq0;8)~Z0Z7A`LKom5WYD0WTAM7-KU)aCgidWW5m$e7H5(e}>(oE8YedNUiSEj15UCuJ}ze!lM7#IDKuefj#8cz{N{J;U%LJHo`#OV0y-|c5^BWS zv~IU4__^2YF4C?*o}0aobBxZmdA3NlS9hMN+>clLHt^R*MP@EyaII&&>RXVzu&S~+ zl@7`+B{3v8cI^cFE!c&$uX%7r{q);4@$oU zQLg@YtOCO{sv#X}-x!cIqNvPk*9xaSrOZ%(qJilp;d!5yx6vX}G}r8&?Aa6-9r`q* zPDZcsem+XmTc0Ga2P2(C3Oz^-rm7Z#5O3l&6uv35LECHeR1%cNNI%D5|Fe-3(myTr z#>%Jcn^58Ok>vDRQ$qd__3(}<-ZS_Q;-NO(q4{58#dIuIohF3LkpVrY9WgX0xy*#p zoU7h%PPh8$2P+;}_iIL>?>#|uMnFdlRG7Uugx-iV{MAdoE0~wGbJuUs6ELllDra0| zFkuImR44_-Q6@Ui+MYaWVhss^w4fgqg!S#pe6f|#sqB8n!#^sUUyI9f`Nma$A1oj= z5CeIw99bmhNSB15IlT8=FfAOX$W~3BT4EC_(K>XI-&A$;Q1SR_E~arH#f4U0JrN6> z!n7n=aO|o47Q0aKzMW#E9==ZtS^mPcCzuEGI$asWHD#2GgSyQW2KK(!H04d_Ny*+TS{zmXuGUpNoU-lTkaQEi*mUg5?k1fB4+g5-%@iQ zf?uV=ACysu(HqHXXwXEaUcJ&Eyj6Sp#uA>Fy*b=9mx^jK18j*r(Z=+0Fo+YM7e&># zQnM-}{>Li+|3(`Z^=(@sMKB!$azDWSEg7zzs<%hGQS(6Z_xB=0^{8A8$UNg;jq)7u zbgGngQZdzfvK~St`JVJlQGsaJTq;q^HI!aI8wCQUS%6jH6Q;THlLq3#CzAutKsQQ5 zZniX8UNg0o0Sal;t@yK2w8%_S2q_%`4czxZNcqxZSPy`E&7`p~~&a#!exeMpE9^LE<0d zOYDBUUT5*92P}$J>=~J=_tlab3Io}u!TQ>E%tvN0&4Ho|KC2N51H|J#W56cYvJ~w+ zlS}XZXi96VOoa3laV14~C2lM=u(obpgJBZYw4>wk99g|<7Ss*{*v@T@5e7Q@N_xHV zb-;zJDL?BazGOsVUxWS=l4pVbIh@9m#p7ER@AT2zz%@8r8`8>Cz*_wjWb_9W@x!`1 z|L{0^jM{z&#aa)Dw*3L+BRY)QV7!|pYza81KF{k$w=re(;3Q^g_z3{@l8Y~Ej68fp zTZ%5WX4wm=W?&eZ9g{I`M^<>swe@3GEbYCOtngqMm zcbR6`*(&!#I{*P#H(l({Ed&cfqLPd9+!pOZcrB`2NsYC3(_r8B;#H0@^&gn^xRp#S zKm99eWZcD+6+0nF0Gz~`C@*K~bR@%{7HUikqK6Fpp)!N}f?OUh)>=Q=H$ zhdQzQz`si%t~bY#=za(ovkRs#sCg;fO<>%|B>Twvb?jk64`|QDiW)LPgUah*5?R|j z`)X`N#aA;-Vbt!BB&>A6`RitT*-Ho|k<7T)ZpK~K|7^igQzz7}jPB7uYLFV21&-e5 z`8pBJ>M^qyoO3pwwL9i3sS`ySr`@-;5H2jh$bFeJ0G%ChM|0@@r~cvpwM;jk&AHul z)A=^Ag9$Kxi=x6_(TB-yo6eoNE{5jrcO^w5K7HcfymS5~@)mZ2e3r(v{Zv5i20!iH zUAN+81FoC&0~-E`pwn-{T%`b&-HaItH`lj?Vbc}fCsL|oF{s?phgqrZ9FiO@?6HMYH0zc|7(hFb(QZ*|3|Le4%k{aUv?@) z)M2tahRsygAx!yj`^D1(ir0v5y#t)a4Z2C6%;IHrw|6bjS#?isfni?7ZCoUy?;4Y% z_)!suZ`C9}0Jyex>jc^4(6D0@#{VH^CEw{)jUqIoAbq7xTQO~7ERZuHJ(K^04plvZh!7LRIS(%VUk1G+2R89_&4gY$R zr>!-)ZA)ARsus)eHz#ESr)yfpBYiPF2ho&AdfY+^{lH<3x4cnz^{mPrV0#dL)8Fw~ z@!PiK!6_3Qtu=2-MF4FrNsBBk$fdn(-V}sjZ_4i+H>czrt{YW`p%!N9 z{t8?egIL~QLe;E&Jt@RB2&tNHf`5BW*w4s*3^?3N@hUuCw5TM$4j85%QN8!2l|x~w zrTmNvb-qqf2E;a-852&E#-g0lL20M=v6JRlSUtdG_aSW8Tyr0IzEd9r_lo>}mYA(! zhSJ(E4S|UDnv6=%6(J>T%fJI}EkiS-5AAWwJ$_N*0Jj6+*N3m$e>}%M0YhcPw9kEb zEsX!K-uO>mE2}u~cmEeN~$6k7J?ZZsvxBENxZamkAH`X!G`K8Mxh8Rf9&*xF}&{q}pm2>HF5F9Dn zd6D$%vRJtVu_R9OTA7^TmL=QQWy3#0Ll`&fQhpZdo5^=R|2vi7YZbA6KKjs||HtjV zg|vjN(7QbKXX+HYE$UI@N51*iuElqQ0vddt<0MrzP#-#L0JaB5V14qy=#G~oD!f*sP~nF$NRaKC0WT+=dWkRy3E~cW z#aXOq0x;y-hULt?*6*`Ds7j32NTzb;k~Yqj6*PGzJRB~=FjPW{FF+W;ymo|s$X4q! zXbsGLjkdXV6AX#XA(kGOUICw_WSjZsS%a=otS)H{^0R+G5%=w00J0BM&X6&@LLAkb zHKh_$-LtkBj5H}lt@^zm8MfIk|>bvPl(==kplHZn|L^ZU0j*lMK&NvgGB_U;691DxyAqpf8 zzDNm0=8i&}N@Y&nZ6-F0>vr+R-Qog8nXqVau5Yp0Wht`vaP6Lr^pwqsQyIqI=P&hj z`_dXO^*E~G3?JVQM5r~cuT1xs3++ENDGG*J`t~Or3*wK;DWLS3uHg6OSdQu@?5}P& z=>xs!WakVD7(InHA-VMi;8i*19VW&s8}^;#@f)|=M{@hEHCEX)gj0Dn=NcWun}Nv! zTKW9zjm3y9&_7&K;|?D>xt!t#b+q=(Sqd_7xq_~u_>e)h^dxJZRiT4IL~la`ZA|~& zSzG!_S7I9jg9Kl*DjYfK`7EFn!cRZA=ojM8Dx%>jY*l7LmClMyAv1Wl4LB765J}p>#_<;>9{k8X4bm z?tJ-MdDMI3J z8Y0cz^>eGTlFufTp9`?5J+2T`7AB%-tZk<`NYXl$<>ru;G(c%T@K-b4TC)XVCROx` z=73AeBgFRDC0-@BpWbSdH`V`Xmg9z)RlU`V3~abA2wv7|t8RDx7|@D+e^z=p5n9qB ztFvZ*AUwVFCH@{Ewub{-n%x)^TcpGbF_5nnQ(>tA4ztg2ai*3M3I*FgHQvNFkbkCb z94&!^YRa+S0&YGjybF#jeyf9hhZm=Nkk7!;9wTiJ2MH#i@cZ)noiOKg>_|pysA)z0^%C)mW7L7 zaX*lY$8MR*6ij~=f|_AdA-&ZHpQrNF1gw8qSjU|n^e9R(K){&nU! zSJ}4p?6SI&Y)htdG6tIw= z5~^j|bd9S?1`N&`zdpQ+@#NY|5yn5;lAb!TYZ&%j@h{%!xxX2fWom`yyvnCA z%Ikz1?lR(4GjKEYL2qE8@{U@np3ge^LNxRut$@T5s*LM`uvnO>KnQAJ?16{2{`Uv> z5MAr}*Tku#fpM6YZ#0V*AyqTi%ncq_z8du|{pi=a^$oEjI+VDUELPiC9C+f;8rc5H z$DW=UNPX-_#ql$uH8-kdtD zYK?5heAr+&Fw}Gj`!s^uz|Yxuy7g{I2OSq+?;M-?XFI@cu3GgIg9%+rojdtb4{y1m zaznQ>q~oRN4__M*xfq_6j}d|cHU;tg%Gxv%U^alNy(yM%+2;Jkaw0MLD76&1UR$?0 zeh$A|3Uv+L(idYb2j*?Muci`?9@&c5Zrz+S9o5l>Hq5yL_cxk&x`c^mDy;V=<>bmS zFwDAdsL!I%A5`1~uZ5;6^z*A{YVWw&!%x({+%m zeBYke%7dVk+A0YKKvRu}KRC-x)`8>G9pM3~7d0;f_EY6SNZd}b&kyw*N`x_WBX7CZ z#%0KIud|01I$$5BFrsQ~FLg4}+XmKZPnq~MjhBx?DTO`aR~^ye{kt~e_Ot_e7G&IC zlQQLkp}ASlu3DR>MzWV~9ddVdt7^Hu;r11=u57?JPwfVhS=mkh{*(8=WV?nH5gWF1 zQbQa5uJ^sxrOJacnsJSGZPAcd^!_eqJZ9>e{XpSAa<@{%dYsT(D$FEwG*oDSY?l3jj|ea35RCN^NMeIC969Ly`m3AkWrSSB`{x3-qj$+|Z}TD+ffIqi=PS zAW@;Joq!orQK8A~G|8kk2YXfCpDc$`dZHX4HpN9!z^XgPoC0!gHjQWM+k@W%V*mP> z*>=bc;F_yl7S47;H*x#IL!D+jsC*Z?mIUBuLAd+dA1wu27#&MpV=Y|DUH1UE%kXZ} z<~vs^hb9-Qk$E)Hc1m(H_FVV12d#)X1!!;6YAhP~*H##agiUyd=0snHUH#o9wg{Em zGzA)WE5rsG1ol!xE}_Qc=!K-X4m;Rpb(i95vefjH!_k3RVO-1ygBQue4GNdjbc1_I zE&_Q{V|k)rDmf-~e-A(2I6AYLA{6W?NOv*bMW?yyixVh2jNExzPH6RcYc!SbZS&Z_ zxlem8CdCO7rPZ4!lZ6LTR<(Oxh2$$I0{CUrJ!>Qo4R6c)mOi0B*^0nIHmxnWasY3ju$wOt^+1dp^Ow2OKdm z<=RH3Zeo{Y=?})bo#NLrVB`X6y>k(2JE*OLdsl36BMDn<`oUp~`#pX;)R+~Gr75>E zs(KINX2^4t;Xg5r|J#^D#Fm<6eX~XJjGz6sAMaTW*WyP&Dl4UF1x3d(M0yVb<~sM zJ_ixV%b)dQ6!&6uMt3f2$r7tS;?{Bj@`4n;4L(ShvYAXrYbdKWS<<|bcVe%OJLIM) zjvt{#NQh0mA<&>Mea!zHUdi>XhkA=e4p3C%h4-&DJ32GC(l2+THvbyw+CkPiUDGsH z-9w-+-O~xKWN}{=vo3ZrZoK4g7Ly#%Db_WaJg}Rb!%u?!v=0^=%0#2cLqBFIxi-9R zFGcjEK`#L%e`$5`l~mi=U*U{OCY`+0Jm9~tLmkYpBGlN;j%)TvM+-sBFj0N1ALJhi z$*6;oxwoeVzyq|TpTMzdDpGPa`u?J#kK~LOr7vdP!o)%Jzw@fxs7CG8S7wy=XKI($ zw;&B$!PoJ}vRpKnR(NcBFyiiU%d|Viiz8p!PTxO4v!<4k*;tAl!px@U*LD!OeJ4Hr z-V#c8r1Sff=o(e{5^5~fnTAIi8bAq0t)7*rCm2CT)8>=1s4k41~Dvq(dzN9gC z4*n6sS>KsgYy62#zHPgHjPpw23>bPHTZruIKH)E(yBFo}!HPmO*uhKok$3pyf!S`>Xr#?1G-SBA7pHk(VBy{lR-zZ{0YcX>lRJL2XE+%Mxt}_^8aL_zD&bV&s zFOs#KXZCJz`CZjOzxgjQa2i!U;tNc?=BMx$OZFrxIJA!AuP3=ZVaNTV-J+oMx^Tyn zPqvd7Z(5Rr9{;E-3rl_;wk~y2_vwuL-N}zvBJdQoWPK}ftI1%eS+^6? zqliV2yM&)jBwZHgp33_qJhM~XM zMv9~9fJ6EuFKw~znV2Mja+wGx+{2xm{E_7khhiD%Z}q?6)8JIIV$Y80b4ZIWgrs{Gaj{Yw%;r+ z>KU$pB>Qz3SOC-20Fd6jIqCASVD|~BCVSdfKir*7Cw1*}02IK;gE91yY1F0=fyWmU z1+x$1lw%@wyM>?p8cn#n`oY4ozLg1#w65jN4bmPlZPG%r96+QeMwkN(PW*|}M|Iv; z1AGG*6IJxPQBwKIb8pd^&1RtWbifl<$_6b8;AO+NX4~DOfvfA>G&GgZ=;$ybc^wCa zZ)#`DrMf`lwHc-pD-R${g^W=zRsVlwX?UKlB-)UJ$37;#UOC# zIr_+5L=TK+x699+Tjv;U>6|tHCs3}8q9AI1DC^}=u-o^-2(hx>LfR*5O+u+yih9a6 z+VsYL!^k*_-~QR#I^<5*$@KuvEY#Zk?B```ObYp=2!w||r$R+y#atoB_g7uPO%?!g z_nDo;my8?jy1mPlNk%pt90m%_MqFRTK(7fI!V_TViB{1DZO5aPlx-X6V-Ny&eZ=O& z;}A}bzdZGKgPEr?q`f~tewrBZD|EU7G6evoE74)b1}#v7!XeADAT<@yr6t2Sacp$B ziK5@ShR?4UBevYih_wi&T#dW>xT9^eJLg4KQvH|H*gEqv>w<~#jMXL1jqTl>{#%PB*aZW1Hz#lKn0FQ@sURJ^^QVV#15H3+HM zG>VG8%kafU)_aS=p3iY$q2?DO*kr7-JH$YFlUE^MpqqGHuY0+fz>thmPxdF9xuHt( z7_;_^XXRGCHM>A(`H9|>;69g-5+>XdOW?+i!+pXAHx=4U%F8hog9k>|2$B24}4oJsQgb6_^9Qqt) z5$R3dVMi!K_KD#R_|fN^zB17C>P>T*j^KrLMmOU5Pu{Hq0dUA1o#X(CT@F<2gmc`l zeQu+b-#-`^>_PPV`*HADfBpPrEr_}h;*m`z+e#OvrrAJrJWR2&Tzgi!9x*Wr9SoiS{)tNZ8rc`^yT@@SPQ{>3y7GxPIR2ed{Zsr zYYO6}EK^O_pG>$XS-e)rJVhykifZbDP!C^U;(F1T)X9XHB?U_OrS4Cg2b^Dr8~-&J z84Kw6smvl{^FkWmKr%M~X)W|fT|t@V<3$#0xe}lPxfqCGE<%94ru0({RdPeCE6inL zvalRq`Y~wv6e2{=c#|i}Vj}%jdz^%5il9rtS{-}Ey>5sh{WhkHXJGMY&@jk74JUov z<9y(=bCWDRGg0XTrmvbrtg`j3DgNsjZ+A0cYjM*0<32x0-mzw$^6G%7s*!NK#0O83 zXsAqtC9fjxP}vn=IeKc#GPAWQm1()JSko0%VQtYQ3obOzDny^~3&}1HoGr_Gm$atL z495sRkq5|rg7IB+3J{+u3<3Ky%Y|l+d^=*+eYGLXh{)cTW)pSh=ZF5j4Lopu`Xwi6 zU!}7r>5c2&o8pS_t8-I3o<&p{GVDaV&{BElV=ZUzAc{o1#GI+SZ3wV4WLmF(p*1ip z?7W#b=P2z0Cb(7Cbs`@cHot@Fx8o%VPE&uM5F3%bPmFVTn^&IFDuZB44@iowbpL~) zgAghWgl$?0NY{($N^^?kFBvP%FS;*_C~3KbUvkOv{-kBkuC*&c{9Id+;@b=qh=|acbc_<4>FBMB~s+7d3_b*1F{~!O0yfOez>j5C<-o8^r#_u zeNFK!dB{+&@v1!pEmpmW?isu8%e6NOjn>XS&7(dZFthb?OwZrtej|AaOWH&iK>cNJ zdxUq>|2-RcGLTcU~&PW6F8W}cQX2}0Te_DJ9c+knnj#E z;=T)ck11&-MXd_>zF%CJmB&4F6Y&f!fgW<_4+&e#_SfQIj^3i5|c4e2b3nDlM}xg`$kk$ ztWz)#XGUOQr$$43)KgH?zB=;68{`#szB4m{`q#gn60xNk{;CoH;A(rR@?M%ISJ2w) zDms_mTa66KW8_;%HKXYHKIOd=No}4_J&G0JTlq}n*7G4fW04c@2AW;9{60M4XcYma z!6y9{7(Ljm{Fd`1<*10!zwpa^%5E@eW%Sl{_t1w;SJ@FYuDU+YQUt-&fZKEhi{|>n z94h{WRLk=6K37W=EhW;H7zRIRN16gm=={~~G|ZMp$y0&{!rH@oqZ4PA7;mvmouyTn z%ML1QX)Fb5<_M15s(yaO^nq8szNp zOqn1C8|Qo>UZZk<>ypx2HZ?!ot~D3|K~=j0a~?SBdMfei?Ut4Gh8S?YNy=p4?0RMj z3FN)og@6NEcM&-MhlQFLRyVqvnrxmL491Zm0ihm#m2(=B1@R%pEDfRNn>(kIKOY#s zmX{MS>KiWd;yg7~M{Z@E3ZVutGt$wpw_fD2#sjkYx(@IyuQdduj|iu~&TK>_?FNV~ zXy^U}m?^^?#n9l|GEpL<@HQ{Sbj0=xtMtA~rhJy?+zQaw7s|Cjtj4w!c=vKMY}4gt zl8e(-?PV{3E*#VZb4Xq%X$(rO7>V*EF6sJxs-*svp0QCn1Ecg zoi^hghw|UK4rrl8KB}mh5rUxHfhKw6Ea>N~lv|o5F*2V({uh{CJQmpE6443yp!;+y z8ZQT|5M3DX@F}*NF+LBFl<`p-RcI}Hcum~J=Qop8UBvuU5)#7DrbPLUf)3O=-LQp_ zI!k!LzEA}`Re#2>|4Pp%nasE<(#J$MVkbCt>A?_puEM7g!n5yz<LeAxJtCVF=bO0S}Dw_}b3 z!!vH<-oplhqIF4^rVzpsc0Z}OuI;}17YB{|pohIajC#D*I04f~87Cat?>~#q)!ubS zYq*e7uEtQ+2|ytfBw^;bzmWbSCC-(k>_NU%2bU{7htKBIz&Q^!-rf8gEZRCXjS*E< z5i67a^#Dw0aIZhs(3S?1M_uh+H^zyDtYl8I+#;erg`AlYAziQ=s|Xow3#TCyT1HMb zsW_+4q4zsZb__0B&&T$C7hD>3Z;7Rd0yOk^MP>B`QdZCokx;xL(rsuZD`&a6(2Bmk zlXC<}zaFv}AprSyg87;fE`%ix4qpuUI)I_Besv@)Ko<5km^Dx&w&qu07e>(j<$C6pQhUSxZ^{&W4|F&C zW0<9cA4Ox_mWOr*KUXN%VP&h{Wnv+bEy9{6@b+_pCwCCit?R^Fo$FWT%AYh8 zipjhlw>zf9s@F)6D^Ng=gLo&r)Q_yxb&|b3O7f+B(ECw2dXaVz3FE&S){S_x)F4yG zYB}q#efn4_4QONgss{X^n<0zD**E(KZs%%RWxP==0649@jNXjUl`j5!Axr0fDf)y& z^?0hS{D9Q{{p%4Yjq-0-^(f^?M~?3`t}(*g6d8W{jZdjElLoDkNBP#5^OQYI>D#Tf z6eu!}1$4L4{2H@*Lh<6?nW^&kvhlG#ULts!waJbQ2?6#&{{75BLxWOn8c%}pd2mnF z2xNjWj6AAN{l@l8Q5&rL7ti29(I=Rz)3F3ikGka^bkHbj*nie`=I^UKzg~lyaqg=P zn~Q$r#Q>#ROM73utoNyT2GuPC;L}_6Tg*!Y-ubTSV90{Ar-assa;&U@AxZg*SeZx4 z6VW`N`ZAY3)0DDo{+n85Hj(bB(OLbVPh9S#eMYP#p7u*|{-%WN_Quo!f#n5{&3$rc zHBoo0xX}27cS9}1IT0k*bvFr~=5f(8iqzAkO_sOjjTEF15p8v+5HB|2i|7<(ADBv! z=oX{bw*3KypG~)jIAp_%7&C6*D=TJo)g zpGzD6Y?sx5mpk2#rfPo3h|jhts#28~L)-Hl`(-rTvnZx=qBCbO`x?p4-kqp3A2Giu z^Q66mZvYw_0#M=3OKsC{Ph^-tg5LCZ@m=V(RJL2YQEv{_)~FJtlOcbR?0(XB)jmZw-hjk_y%*1esVRS zC_gs_kslA~^G4e#Y{$9G8r=o5?J$(nkKPR$EkfHS@|&#DCs8Vm{AsDMU3p8J=2Rk~!*zyA>}4xlK! zI0Q{(bN#ruEXVrD9BZhEEMWMsE(Ncnw|G zmz$hubDnR$Yq*FC)|6YRD~dfI#o7UWrFq!|{+RROgF-6X^VEyoXoA+@??8_2&ur%8 z%7~B3j%y)o>mJlwby9(xwvv?)qQ>z?I#*X6uo9g_fc(B34F6ik&7ZysGE@w{Wy4X3uRY(4d$SmpnRw6|)DtBayFt8fb%EO_wXRB$H=Zo%E% z-3kvH+$lW4-5m;d5AIUI-5omTboW(vKTn_UT&+Ja_u6x=G2SuL4Jjc@?#lW^wn1T9 z_CokPJmT)Y;*C*4vgQ_TAVOTevGyTf3$r6{zxEb=Tq&FQdS?G@7V3%Hdrg9+Hh=p; z&f*R;fwv>40nIs-mZGti6hjyn3ujZh!{gG^c#^!^lykW~UQ`}l_V@CHEV&%i;hoHA z1!d`)HA4Eo1C}Z}xE@xi8mBBer!_sjGK~}At-6AF@aS|=Se5BPJkkJ;yWSjx-J#@jCukL46$R^BpmRbMo6iPBZiOB$ zc=dWp2&7TmC-YBu5Qh16WYrkjUkH_45%-F-yB2Ei9X-h8UJP8d&t?{aPV-*uiuWkS zON&Pw$*Yn}$5-zkt1q|KQo_=TloE4q2SG0UM$_JX4^PQw>>>@?-r8zIcNean{)QDd zuc~!<-k(t6N+AZQ#dIZ*z13ayo1Yv4j&j9Zh+JjB(dw#uHdU^Q(l)N&?kCKnuWm_h zxvvAe>xWO7dR`I_`pRCPWoH$g?0HWR{F(lr0Nnq_13{MueH?zg4K+z$iler;a&Y3k zWM8D=2V`YKjutlU@?_RAu(-|A0v;~4-{hiQ|FBJ;JqGes3oJqc$k7Nt_oA{??)9NiW5 zJ9r{?C3n3MVA=k@`+OEVWqMAd&c6Uyioacj$ujn9q)j8v9f5PC<)f`mOd?^~6hlOl zb@;qf`pfFvA{o|R#lZp9_RF56{_&RYfxMd;p2n#4;}I~@|Q(ryLdgDEjl33KPV*H zlzYVo(6;R-#&HN-ok=icymt?=RGD+$zRvJd*ch8WtZF=*-5$Lj$dU@nUq5Vk+Lqf%ZVswQTV6yzZL<2`^e`LVIS?chAwb zYF}FReC`NTxA`vY#@;EDgA@e~VuN|E?rx4UclrL%j9W)|Y46HH+746_oBc~WAwK^L zDH(xhs+;luT!$t9{GvWKkfPvJ?YL5Ly<-|1iSuywnU@yun*OKu6x|I`l+r(t%=FD| z_fA!}&LZmMdlZ&zg`DC_=>SJ4E;j6in&G|zLK~c%Ly;XJMOKS&FC&FR_G_#SNc!P{01Pb^1Zk?&ss6L~9TW{Ja zy^7h?4>BIij$&Dm=E+rM`Mw#5!y>xN}N--Qy}beXhL|hToe4UY|y&bb4Ie&kW>vdDPZ?A zd2?zfTd~%h?!%vg(p|^{q+kNCQcsyBA#Rh(CDET}U>ZbtrB+rjRRg*7wIA;HF2tW3 zZ@!mC;h>gF;Rqa!mr0dG5~Tknzx#;05y6+~2a|h3;K<2QM8J#9OqHnvjh5`4!QJ)! zwb?S=C6_IyZ~h0Trc`#S{B$!UzC<8w3YNV>F05Y$#o9HRe!M%`lf+$FZ5ni05&2_f z^VHDqciL5Zru8UzMY#bPD-AZg!k|w`rZyT6PPReySf0I$+*8{c6V&L*YVlX7+?ofC z^XWSM{>WyazHTICwk4QIqQ;f#Lw~hKrMog>-O#;(;i&-FtOF%Pv;*7Qh=s; z?Q(@$AN{Y0N9zcmXj3TlQw$Z{28Ad!wrFv6kY8z&>v8*JuvtqgPQ;7D9n~8{a*4ut zC6pp<-$z>FNu^uAC5X;YpSzkqY>wVE1X-a5dHTMyERdYgrkuSbzgq@$UbMa;Hf`Ky(?GVrVQu54sP zqYG$OXl!_8@U|H!yu)8Ymj+fSW?5N?Grw(O@fePOT)S-$#w_91)Z(ce_q2YT$}RQ( zBTUtl?#?Grhg>C+^BkjiQJ1(q9?2L|D zI>`;$xuW`EcpneL97WUsbJ?58rf8Y0f}9UM&w8VsKFC0H#MDnm0wctC z>0?nTXD(ZgZ)4T`MY~vrC8ydX=BRc9%{eX9k9rFceDRb#C!XZ!{sJl&pL1;foTtax zif5zNEi}a=a|#K~c|5wBdOh4K9pb+J|K?{z1J4uZWD^133&TgEBZbh>lX!%=!omh)*f zMbH8<-SV!&u4RK++V>-KLpA0#hZ;%UdmhHxq8o_ehrqJvomJF`o$NDsqd7@Y2U;nw z4rYXj##1Q<78dUyqY|~HqFM9P)Kpd6asm32xkIN~l5&DSa`t5{H1zKD98EZXWSyjI z4ThhbSZ{|trcJCFSc7l)f8LHqQFjmiJ&!roK5XF(MGM2p-GP{{dhE9isebnVIj{>6cH;J&uu-j3GEQ`W*Q_$UN`F8h1yyv_8@M@jj~A`pze1mb8Dj zy_)p#&p8%n9)a?}z(1PUjVWMsPdB7!&XzpY2YpYNRWI3DOo|<}Kwd)BnvZK< zdJ31q4z5kpDtz@bEP2ET29L}Pb7LEKUfHfZAxJ&gbbFj-cQM>SN=y75cIFPp4E{g5 z(f=1K?YTS(_ACvvYD*!3w9GyuadB{!HfBlxZ0(t&;JWCSN~w|7CLb+S0$rb z)fE`jJ4jcJB&HITXI-O8W;P$gr7eU8=p2izN=^(j{l8D>&(Pjz z19(fnaWsSq?@$I1{WO^{{Lmgx`PU?*R=Fd#HN(v&Y*pkXK>n#@%sKa?g=nf<2W~no zrS_I^kSBgV^>cDTp^Npl@y>|zY=bIS6)H=mY)>s|Ssb&N(1*PdEqyQJVwU6KBNcJW zhv$js?@rEtffl4KKbRvX-px!7)ZQFhJm2Wv%}AxsExO>F zWit>2ZMI!#>}u8GD#;aA5(RAL-r>n8U

0CP+_yE-6Z4L(|FDYP|is9~q0vk+=oh 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%0Dl`Q(^P~{*1KE)9^X>M+PK?e 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

?O$` zRJ2!HCkU4*LXEBtweKT6!#SvU4^oWW_0SUcrBD{e1A^QhEzA@HEgZ{KTB2|BS&Qfp zkrg^?BXsaw{I3K4Dlei8u?MtF*dIw9wS1;7`nXOVc5DHRS&EzpUsEHu9>%yp2dE8a zA%6XT*m|p|xT0=bw+ffw?v_AscXtTx?(XhZSa1k|;O_43!M$*IcXt9@{=Ls_ZJ&Gh z<9evIo@%r{$L#&<^dR1iYiSFa)X~;sPdF-XhqZ)ngW96*OY^Tcouef{ixolDzmE`I zW}wxqUpiMCIS*6QaA_)HGlbcIhkZ*n2?`n`Ta>u3hrvyjwNY*)0*qYe9dkvsogHsA zarnbYc8jd|6FTWG6Hj6SpWTo&^F&dE!YZ`;xmUK>Gp3c8KPqOkT>9?W2Sc04>zKXl z0~z)f!?HooMH|ATf^RfXp-Y}72(y-TZWlm=BRtIFUB^C#Ih_X0rgwX-)f^Dl7!RccvWMX)j(Yx{kI*`2y+&!dD^;rOQ znFKEbX~*n_&!e_V->&pZG(BB}6fu^ZafMvYSJ=fibVc{%$iwkR8a*dlLtnP=vpD%Y zU}9)aEdE?U4`RX69ZFgypWnY%#sw6*^#9R|lP@Ojo)J10K0f}m=7~N!NaOh0>V?&* zrTO)n%qS62uoStje@iZ!=DxMNzcc20TmAO2u9e9jCrd?iWZL#o^a)2eW)5?Gc(f6G zyjPol{&?!v@Q5Dv=+7tV@@*sb6nPArFO;a|xcZ{K%L{g?fd z`l*GKwbrx8xtZ!&lz;_pi^elMb%^GK|5`DaKaI-E)X&OmpNe1d z@bbUsOn!L$R;KW~&kXqUNjjopSDZipUv#WY17J<)XW+pC&QDYxw81M7eYk4JL@5G@ zoKJa<5wSvJ0c!zD`g;^e#9U#w|M!x!=2nDvEi|pgdQhq<{Ea39;j}1JKQSQcOCa1| z_;6~WoFN~(WRi<}I>;OlJ}LDLz646NdL%Nnfm?_rRC`0HVe~W!MOhx&dNd%+Fs+dI zzLXYj23D1gH1RK*jxJ<5)IU+8k3^z?$%BE1gYL;B32CjgQ!K4p2J`ZXcdLNhoi$>= zBJYgkM8(&Kt!jk#VpS{oQssI-<8XwdZ(9_;hD}b^@Ep)8m>$7ThPwGv&{tvuHPnpv z0;HNkxOP@-tdg{@i<9DGa-^BmKOMG>46o#2~(Dpl)g5Z zYdT?UaouG}GskGVZRW{c4Ufd_d-RhLWy>fTcxcL{%S||sUV#}c>9-tG34tZwse$RZ zw(VvHgs*E{bv@K^|pok^6Ah>V}6N1^F_ouVx9<~5F^C(Ah zP!fNQK`PfM1cdQd#=5BA+Mot5F83I1Go$JD@T%0-CgW(RnG!t5v;~CoyotJX)P5O; zR4h&NTVf2FJ5+yT$9#tkl6L@r3g7Ioew?nf1#p8-js$I734f#&D)nR1!^=XTDDbc- zbjbMEuRoy@cCW^Y{ENu>MoHq+%Tx0@MpK}H`~s4NI&F|j#;2#UHV1ilz>P79riQ6tM7HxmY(zBr5h%ivvGX-fG3 zf`L=eCHS{^m3Q2yw?*rXf5My_EMPuE)3ra9sI)}&Hf!ZLiQLCsN&kXDM^ML_CNUf% z1m_lriV>^zfhD8dFW!QO_AU&jn**M3=U^Hv?S1!KezN{_6a9m#TIX$?38iKplsy(- zmK>pS9BKYgIjZF(pFCk#xt`u*P-ZRr<*e;0kpRZzE?0c@2c|%I=DNHdKvT0``c0ej zojO{Rqu0k(Dcd>9F^}VWPwpC&S?9H;xv-A*Ik!2ZE2dl zek5&VQQne=&6Hv9`ra9)-G)eb!#n1CDqmbQole+6D5JyYfLM`jo#jK zF4`K8tF}g_jHptgEu46!QN%=W=p>GacMeR^|=WG+#lVfmg@8YGKj*}?^Ume(_XG|Tv(A21eQx-I29or}gvy)q`K zhh=%n;$M6}eYl&CvcJ&O#`>>Ysv2l05q~F(p%+pyTzx7g_ql{S9A+nxUmQe5A?qz`?y=`^1=a4~Yk zM_cL4TmOF%%m{}6Yj{p-o@zOKytVY86nZDgDo=`~O)4 zU^NR}k$wA4EwM#rLuQZ06h?|nZTJg9@`my%cKGpwcC^jOV2w5l-9vH$U4(jbn<(rQ+vK5LBF_hyp@847d>OxpLp0wFQQ5Y}zQ;M7Ti*a#+#L#CM^xc zLbsWzpG?#W<`!Ia>%6Us3#UxII6gJWD7bgEu`+3Y`L~I1vH2za>GJfKG-v@lvbWK? z=S%V^JRLT{KA%w(CI(w*Q!xqR`7drGnTcl+s9G3O6~dmVr*{Cnd6QQY;hZzt9~{tE zp=hG4xn%pi90@8t3SxdHW9yjl$7hOGocN^T*`?WTw<`-BqixR&uBMZyOy^lPFX0)j zlG>1b7)p?$$$UI`Iiuznc_XcBxT2}mbEF5bkK9;<@CnZYnaeQSoIxsui4`8Ix8H12 z9F*Dz_n?&6B!OL&GhFc~Lu*;MCDsxt$VX*S{5gpAjEdo zs{*{75Z3j2-|6h)$GmXhqQt+R<{QAdn6J|!WQ?M9g*Y< zH$B>bm5UW85LfOQC{FPrSeu-R)$LWH$YAsF(O7b1C?4XA_W-A!U>kjA?HA$ghmA@U zJm~2ck%(4x|M{Q$x!775r(A<`%}l>_3VeRAPI}#?I}116w26zYUZef9?ue(nsvjxs z*l#p(m{~jzMx!FCKEeUyF}VtXhMPl|3j!>C{ACNzMG)(`jH9d$^wt!FOLMP^JuvBK zVWx3_Yaz|7zIHmxG@2gn^i>{^Q%V|^8?C5HZqwjF2-L6D?Sl__;7u*Yj{cOqWqoYr=nr)kC+kCb1Ma2niaDt2u2^ytEo5)asHy0x;O#0e6jID* z66;_4h^IoVLP5L};0h_flz9ct05v?WG2SOnFUyN^aR9vr^9YN}j$>#xk(9>I`JMYm z6G07`-KmR&GJ8;s$=rme1e-M?w$v#5O8NT|X_-ZW<%qr826>rzLggA273DGnQMjs9 zLYBm$wPM=I=pP%&?b)@g?x}bRCk9M4*D-qAReT)(8|!}o z+j9ZK@W*?8*bMELt&qoF3W9mTDfh>9aeAKyvU_uqcOM@QRr|f4mqiX9bnEZXjjnPp z=8~45M|S?Rl=JF61na9S!Ow2^V~@A3QCF3rnR7L!tg4P8$S2;803Krpjq}&6_pRYc zM4{V5L0JO=`fSU`&dMJmW`UU_5Z%j6wUDll4|fBI4jaI`3e^rl%};UZAP~9uo^z{V zsru&y1rdSql5Sq^9eez@4By2E08N3 z{h{?=kdUOx|0M9vZ5y-he*On2QvaH_-u00GVZifx+pXOoucrC`4^@1!L7D)n&^f_u z@FR=id3YLKxX0z7_=6i9ChE_cgb*!=7c|XioaLn3SI=!4)GgAL2xAcyHooeXc#~p!Xn#>3hW82v@s6CM?ZzX(&|r6R!-}jQ%jpea&$xp6xL6ae#RXs{PMQ>0U0dYxy3RQN2;XeSi1- zbZq2{JBugG{!)-6;#%0mEYGC~a)HC@Z=hQ#R7q;@bh08rkOmY3Rh%OQxUIAN)hq}6 zAQo5RXNGZdL^aol+6J{sLoe6lTEm!dM}Nlc^G1$tpYvdlW&+gFm^Csj%<@X!SZ8t# zTbPUhAx~u{rlVy(VRa!e%tRb;BSwfe(?9+O!)x+T#N?JOChNuhI6B8S{kkP>Crk-< zYpb)MWS^=^wxCTZ)OsMMDh6ty&YK%dT6#)4brS=N!8e0q?Z%d!J9uCAR%8Ma2Y3jY z2JJ=af!-^PxV(I9H}@1nEH*|?R<(fLQi9bv6W+x+-xdi#q(~La6AdmcT&2N4nw%bw zq1c8%7Hn{|xb1Z8#eoOfU*>MA8=&BNZ)bMvY_?q%yODohbQra(h~%RGFXt@Cqc~x| zhtiM4p6YjSp!>5B&g!&-Id1T;zD6+I-w~eoY!ICvVXNAc>eIJd#J{zLoVVocS4xJ8 zc83bjd}A_3Mr=P*K&iLCU+^Pp(w%!osf9e6xg2gb zprQ#OBMBi_Y$2==%z~3(!b|b2Pjq@_V*iZXo4`!D80VomYnGB5lt1kXk{}%LBr%gr z)rV3HxmjJcl)vQ#JS`iecitHVHKlNbV(b7W%$vY`3-#oGF-YS+14w6>HtJt{m_?%twint8fvIS^6?|YFADE00p%WD2_%+Y_eU(cjfpcV@mWZD+4SR{raY6`IPdxf$wN|1^W zt!c8XsFq3B^O|*voisN&KJn##0LkPJh%!qEs}}z9DLu{_x$c~p9%R9wcz#>C6`6k8 ze0TUJQ$P)f)fUyW5H`H9+u^%|(I~%&BzGRZtz_<8qRu=7Kpw4B3Dt4svon<4MJUct z(UJmE_Mr?3KJpw&3U(Y#CldkF3a~|FgK(DkF#J`<3+V^Bqw-5JRNNe zSR>0b4cdJ;!4BV8DOU zo4PG|gm1fUi6H|~XVg27mm@p-yGi7qeC+s_1NHcSv?^03t(kQ;WT}XY(0FYRX(0cG ziOH4R{BPVrnKqKk04z)#hnJF|J7Q$2XfqesuPmU7VaC6s_D!s@a9&?*#aR21<$MQ+ zo1TekqF$yie`WLLzmo}=da0SbL)HQ3yt3bo?Z3)9>*a_5xsbPe2?Le4y$j>9rq_Jm zh6$ve<*uguf#>3KF2@ZT3=Z+Oa_yuh?mn&+IslM5^{IEWE&eqiUfp`xAN;!%g(+F` z>ng7dCzTDmNkGKh3Y#{Wq;0ES#mGxEX*wHRS+dZERKfYE; z;y43puP^C(ZHlw>P+_BYW8)WY9BSwU1YC?;J!-7nJ)|A|S(#wVgZDZ1087NEZ~S5qilkDHMd3R+Zj#*o22!8oN14VR0uUNY5jx`jB=^W zX{R4ctHE3a@;_SIO@=)RM$@Q|(~h?wu;Wr!0Ud}e?&gcd?)fSUihesR`(+9tHrHWf zY-%dAS4-ZUS#siBosGxLV;g)qkWq_0IHJUK{o};)mU;+IXx3uwYtMmYAA6B-qW+-1 zpeV61{)MGTmkmLW^PQFXYKa?y2YPp%)^kG*%m$t*kJB%U13RNkvQ_bazs z5^5spv`nAEG1F)6B7A;&IuxRuV;+qJA6lOCw_{efNP75HJwV-+4~n&u3bKECy`@`1 zuraFWt{z&GI!v+1Zi#X4N<^kYMpt25BjM=8C7m(g4voJlic#b4VM~R-Z(F1D4Knvp zq>aLt>c{T!Cj=pk=(YW_HcmS3OtbAC8tgyqMAQWDP*l#)VtNYgP|f=&KzF_wA44Gb z@s?fwAz0z?2L4RQ=Lo%_$aV*8J+NFLH1pm~xo%ZuuC(y#J!VG*qi0^|9{-yru$RwA z^lrffxum|b zR~=OBX&mAUt}iIB!kA>2#8OIz!vrAqa>a89wCj1`^*W;GE=r%m1*3|VceH@F<;nZP z*NUq8$&DPH7rz)?u^+VsY4sN9HpT=rb1|*Eqlka+t2ZPyQr6JwWFblgF)?%4ThXQb z*{)#N(h{chqJAYIRc9OZ6BEQ>!-v!+goVOrfEP?Fjxm{R0U(KU>r5e{t+uUj(PZ^m zDl?$2K^Jf*x^LPk_*ye<(F}N1-;*2ZUrvNo7qJxcfw?!Zc8fsdW)As$A=p7)h_{J5 zEA#bxz3x1^Ka)`p_Hw%7Z(kw^mkex0?OMdov1+NXF1OXM3K`baTO6JWte0(jf|xC8 zVC(n~ihHgi>CV6$eJT*jAiXkz-QcfgSe=u*;xPHt7+9rulZ1a*gY6|G8`R-VtiPm# zg{pRC`Ck}%h#sQV^AfZyudNL-qrBv;Y10ZRSf3(ul1W$C3@^U`(qQNs)hyzUq!K+1 zjF|VeLaHYKVD=WlCe7w|TV?E0++zQx!v{=oq2B$1h+VJ*NeZOI!kODx5jnXre1s&F zc;@dp<0#K&1MuT4)tRQTchX@iq#}&xF)$a~1kbF)(kDP@yCrXk8DI$_ytK0s*V2FK zU_Uvg^3rk63ZqBDHI!rV{@Fs)rIaECoh|2djDc!2?OPf!sH%ESep z+4QHt!T*e@X>>>Y*#Amy;k^FM*Ge?>!bwEZR(jQS`xUKl&Mp6d5bW61n?V8zau?;J zSU^T8Vh5x_Z1uL<@zUtYG*kv+H{p)3X1l1^xAXJ-83bxl0kv+81-r9|%P`fDGX3^@ zT|7Ff2h{hYy`qFAVbhtd^C!zXS^19Bh65*{&11}Y%At z*P-o!oW(%480Ql<1VM9O?@+I2aw(kE^hbc@!fT||vTv%;W|?wR4?T`qR1L4^H-LuYM7w+#%-VL`ywxOeT6k$dCh0+-|=L;;f+PF*O>Oi?;;2?C`1=QbVR&KD+Z@QYhls+ULEF zMZiP#>_}KL-u!Ew_Eyh8SNOaX=bPbu0Gf@~xe|OiT@9qpf732C{zJQ5(X!^>n`50h z&Gx^_TYuZ<6v&wL+`NxkC`I^Rubh|GAZEVB6a0g-Fcpg|ar%u9%nJ8xNFa?2^EhZ< zyDcr%1Pl}M^ws5L$(6(6dtbibB0Dol?f0w zm98`4jP~dX8SRReIdvW}R#0#x49N|WoB+fEv>+~OKDYVaaI0{kj`?U~CqjX}4o$~# zX76yA_XNPirs%nEmSXYj&NMtUQkbx<8;7SE+O1X9N~Wvl6~hPGtq4WwTCfTSMK@Vq z%MXSLY&!PKl>3Fz%Q`i*e&IzB!{gAcR?z!s3;sX~G%`gWxB9ml)M%ZNHnZyKmvNLS z^QMnc=$Swkm-Y>K;avDU3iNe`$LXdJdqS0j(PI>`BdD^!I$W?-5!Z)={OdtljvkzV z30MJukc%VIISP|}>v@fVCQ2O5zaO>rlo9TAYUJdn<`2VIckGw7T(P(rJLa3CuO*nj zQ1`iKtQf*8H{!{JaNmcy#0W)gO;3BRmK9nge(K=+SP;{1)7|V0KBrk!I^R0}s;ADw zvSt`?NXml+zRE$^PQnQdWT>YdZW!`Tr%p9U?133ds&OBk|K^BEjMdV5kMO!5w9%61 z%oqUWzEN*B29peNrm&u*;+%&-62=)X-S(;mgI{01niAquXy|o@J!+O;4WZ-4NyRPwtsR|K zy6zp1BlDL>+TuE9T<`ztpre$IcynLvG_T+Te&?VV#Vut_4fv2;C*ar`c zB)bvK8sUizuan_gQR5nP?>#DBz>s&l&?MJP-_~A~3S8-UkiS8mlL{G#fGDv6Y|7ym zCU}bki8O9Yg?1vU{LJj7)fGKwx*6N!ixSmwxsV;67C+{_U1+solMZw&4y(zusp`o= zi*ApIURqE0(HhP8BWR&{s}1cb1vMlMn4pH4w%e=!bJxp<)A{XihS-}0D!Nh8_~$$6 z%TiW`UEM28U|Gb?xMv9Q`0|$%m+VtNKCttgT)S=0$Pzg**YvZX)mP~zF%&M=6cCOBzOX2K`aZsDWpsdW=7m}=^ho9x^9({Lc8|%s6(PImVt-U$&nO{ zo+f(ap+)*h$-wXHH0$)>p`ju2(F3-Z!JWvDR|?EyZ4$wQX+YX_^f;(eiT1DvB$?Xm zkM>pa0y7#K6|13&JI)H_^@MlY;w9nGPM=_Iz6;?=q7%S&>m}RoDR9JTo%|-`sAVu6 z*Pz7+&f`I2ef1VTG!M@k5iu(`6d0_jUZkJ$5*Q%NEPtN#(Jx<56nLDN46x)oE2S#z z{8p1p&3{rDr;y2k)^UBCeD+HR?)~D^S#6nlz~5Y)&F!S_RW@%g*WDUsVH?))NQQEv zSZ87(_%sapR?uo_z1GIC-ex%R0In$XnPI%pO{pOA@A>=aH7RhFn|b~lzgw<*<(;yG z?LQSKhM{y*9iR0vI*4Isdb!xNwY>G8!_M(=y8Hd@BWc0y-7?AHOpvtmN$;?r`!n2h z106O0;Z^VApkXw^)ot#fT>e~s*Gb|=Q*ra3DW+-n-%pU+DkgMi;jTAps{ohm_4I-UwASt1caZo;5#^{u4dmX9FpucnGmfgxgy@kEeMbjkk z5#X9K+V-xI`y`X-CBZA9?aF(d6;51?kJnm)A;;R2h)UK#R+ahm|-B$W$s`|eMkJYZ$zPero$;Aux$tG`k%W{Ve+^U-C-YP|rW zx@vCh$a`WCi^(tAcK&lrQ1&#kPmYQAa#L3v{g4T*86YLRMqS7lxZ@dHU`6q%^zG1v zzUP&oO*r9eEnf)nszQ8h7sf#{MZskvr>#;1U;T6t+mouo<9?sT1Vr3|EMS)gwZfaa zv&k%Sr17dSr^ITygl^b;d#>+#U~d#K!9F7tWy%?$&bg%C*Rc}ZjGK8V5_Oi75zj%A zBK>c+h=PElZ)~P@daF}muRpzweKxv4i*(?4Q3^IXjqT#kKQZfEfBQ3`%f~I3uI5O_ zFcTuvva&$k#z9KQ;+%7oQ}yVVTgxf;j8x)UEM^yKhgQ3;+X*j-il6Jy1!D#4D)ctr zwhA+K#EvmKSn-WZRMgcq%6!D2Bv!8Yb7)y0*C8ftqahJv(f>|Y?oyy{K{;pkZKS&) zg(t!jT#@P_X*S|Mu4SOHTyv9|T*k<1E5eOvfT8zJdOXW`FnTHkR+^mQHCH@TVz}3W z{vdAER2*Q^ZOO6a@xN##4d^|KC$y^@le^LmN$S+a8g24iku2WFcc07ZvC9Y6QJ z30~v6*gH^bm@gPX_gXy@F6l_=Ckn)_#!YnIW4g{AKDjDBk@*cl>#qKD%!=#7F_SS@ zteuQwPTG@ltWP&=Xf(xBZunf?&;?Q+;U#n_rG7t7_tfj;wSw$YPdN@x(EU8V=tf!JZwd>$9@N~nbbG+9zog)ZSwdZ)Nb&j(DXD-NvSNA~m)eY6YucJ$&vG2rZHVYrk-_nImRshf%DUS8`fP&qUK(5=9PSsbAP90& ztq2I`c(cwB@u`Wt_9{+yVcm!D;2*5xc!kKDHt{h z$nGVhw4OiZ#hDK$d_!9 zi+^ys{(+yR&t*dGTldndX{w(yvuVM83w^XT&xLy{b}zp_Xjv&LDw7!d!6&RUHm+(p zG&RMTC4$wL_FQH1?XytVS}p)pp9%#4an|y-qkvS`5XR}H3m63ShQFF%QMG=3?@o5=WeeiSs-a^tW=~B^ZT!2NEN=31Z+Y)&cA_qc zFxn256zUY%LjjhL+QM`Y!!CXALwceu?+i8l}NVB^fe#|iAz2$ zB05^cp*PABW{(5qA0`|N@db~NNH<@gVtWm1V0V~R-Qi_-m?RGtxzAFDu&ElUCPDO(o@Dk#!CAOFwz*Toy z6uHs`fB3nTj9YS1|0Z*>Q?ZzZz_t_$5#z3d*9xl>4{l?QTPESFT2K>`SdHr}u@gk{ zsZi)`zC9j8t$l=x#InCDt3bxACz2V7V*vgP2w)P{SsL1RwyGHyjA{BBep3N)fQuFK zymat!K+(}erh$>|o=VwajjBtKKwS^4ZrojY2y`=(UrZIxpr!Z7T^wWMJ9V~g#2ad2 z>xnY_VM@`vwqjL5SICz=l0Eh=ld57W z?ZK*cRcyR&@eV8bN7&OcqjHGMKORZV`mg8vTC2p;8}xBr2b{?U{@{6?sEoP$^=e=3 zR#T_fJkGAexG@9!?1n>=Yb@T`!St%vsqu!+B*(XV&Ogq}53qq@_3NGHSJX8Y!Ge4# zSY2=x4b6Sin*9$wF=OWx;HnSE@y+3y#%%OG?xmyW$$Ec}t1(TTiRD zQ3>(2w~}M~S5(C@G(8#GjU^NSwH1F0LQ3qlRQ*VtQ9oWn4p=`e%AdkM`6fkS*pVX_ zL?dc@sA+eKp=$%6j)SxhW=j2+$Wehp?cj?B-dua!OPo@-UaYlJu%&ACLx z2cRXsvLy;Izr6ZXiIGBS@AK50lvbRYe%~k8ZXUR?1`2*cAB&I>nHVBDFH6?P^@*x?dLnsq5B8>8w<;J4N`o|KhbiQa1GMkI4#&fs%y@mLHhJ0YNC_(Af?4?{KMKq zh#!-@otxsHRybP(N19U)J$%!$=o^N!>-ysqZ9FKBTWy)pYw|Qtb>ajOzWCNKiMzJb|EQxx3OIJtnwl?eYuih zD)Aq_*zw8OPk9D>eJ_YjkhsVH_E@O35m~ORS@8)Q9`5VHF;P%g4=0+k7 z33r!qZE8tOwzM7T?QFNUu`9_KQiGSIykrafEZT`Rpxa!k5L1vBKsO`xc*j*9791Q~ zf9JSahD>quVz#Q&elF_BdAJ$PP-?G)gI#$yoGQkDq@T?1=I-%fF6c(@PF(x8l~Ac? zVKpdqT9)lkZr@k?csxIh5qF;l3^NF9)$Ut8cC_gt4SC!cmGYgA)ccS4+O!@lJ{-nN zd!q~L^sXQTNU_io-r8MO*uGK|Z;tr1@iwn}L%k+}TVk?5j*2He(;NSm^&G1k`hpQh z_YGXEyr#@h=pNgT#>Sv~QmI!acKlZDK+pNU-ngH(`MmCY&nw`rn&j=mi?#J3{Or{J^Hawel6+ST z(BE7qRnK%Uo?Xtc@g12Rb@(^8+kHnuo#C;0!C4h)5 z`b@&#c)V$ubOU8PM{;;kr}81@<1b^OuuRTyJn)|5O8&U|_^&-YLJp#Q#*>f%aG~18 z55~5LJ8q$YIg;qewyWQW>>4P722pz{ZLi@RfEZZe-ps}K{u~p_*pn#_Z%dkSa!tm& zl`5HWh!S!L#BLZ`kTX_QH~Ax9P-n6GXDYdi=EZHh)j2p-aG0qtF62!BNfS0^pgdNb)IZL;c}}EfoxU=B`QZ@i zEys#$rf>!(ms~lyR=rX}mGq}tNrG8H?}%y@ryg2oGh6TBo^%b6}``L z5%E~E4i`_&szXbyNmVPRZ_Bbw{PUBB9sLB6CArAikox5xgd>Kgv$HQ3{`U@2GG&!y z$GShv8o)j%NIZavvHYu5B7IPX7r`kRLmKC~)Et;SOIzYMFMuX1)8?sZW-D$H+UGQ_6clCaTeVIYkXY-L>hma#nsV=_Q5w;a#Jcu)6My+*R+^Aeq{SlZMa~FOm zZTUiWWqJ8BzKnE;xHwd0@!Ab)mNXiJ+Rq4F`19%+jpISzupx`#3^%xq=7b#1FmBA@b+MREKZb^5+s&xLXMlnZK^!+9WgQh7ZEJmvJOXIUSI-Lh1&Vbt(WuzCt){K z-**OSM@_(+^7$@f302;ntuKX_>s?n2#zO|T;4upDroirsK|_rK4)ta(B> zU&w{v1R>J4RPHF=>PI-f!Wp+2hIdH%RC3Y<*PwsIA`Yg{6tRm#N}wGadrL4*g>2A< z-as(L>yRxaP5tnJa^Q^Zfm%$3xO5>Hk_W zNoMMuC33Mv#0+n2{ruTF{10-2Yzrm_(Qcvx8?DF^1Rx!GX1?nI@4erHesNts zW~p3NTBEX>k<17^TI)nCGqVJC4=w_v?dBU=Av_K2k64vEv=h1UMf5KOsO*jKYECWA zcn=NJHwVXCUWttpzuF}vd(0>Q$b;PpQ@$uUtZ_JD-j6be=jW&DiW=6~BU+|Rrld%N zBPZ>Ed&s}mc=Qb=_hv71g5%Ffp_e#y{he&N-112c=nG`Dmk1FQUY6ZC)#O&^CTQ`- zo*iwDG8tcWe#AY`9`C>5{+Lv6f_WVEn#shmUiCga8!RB>%xN2P3ZoKft}+qvBwTm& ztH;rSJr7-!%;Ae0M1B=^82@B_YbBDLpnc;H- zZqMr6>{1V((Iw4bg;G~|9_h|D&?Rm94CxsFnJ~Yqk|hjfMjx*eBV4BIgjNM`+8&Jb z27J4?>;)jN*=(~0LTlDd`WCNiID03Tc5$;&Lq_&G>O;u*dm$Pjt&sT#JDvQ_xvZKy zk!w0fNKPZ6eEu-iYs6A%c_B@g1vk%5K;HrN&w*A5k325CbmRJP1MlkD zlil)R0!QL*YqT~ZV}OJ2n%L4LG*I_T4t;Rxe)hIgRp8bX1N@zh5;@)GfUO)0gWP># z$tCRj3JPredse{`$_r=~@doIEbH;X{%~U^>pr1e8j@q2tI#sn|yWF>m(Uk(E*S2{Z zjuCcQOilXFjTuVP(0k8=J|npMU&Q`jMlXj}hCv5q%S9Z8k19!r)5=-FzUTVI_rF!A z%QkpJ`$0E7uNhv|KP|Mw25v8P7>cIf?qsZnF8;C(T`b)E_4v1&n)Dp9vU@4rgaUi1 zN9?w#Ebx4Np3rT2_QbG1^Lj}P`TYBS{)<{5e^Jjq_}|41W0tp9>!TO1@Pp6zk+uA% zMx#;8?xW%;$@V*RNG{)aZQc)M{OGy~M^w1-0S~y0eT(ZL*9U90LtEbZ38e=p=T2Y{ z1W8|P<7iMW-sgR8>Xud!=CT((I0e*-*N+<*UFZedI(Cw?w9NnM-8bp!cN~rEn{9g7 zdA-v<&VHcUtv+rnQ$$U*Quv_=%S$Mm#SCEsHisTgt*exN1ygjE^aj`-waRZ~xd zE%wrim~NLUR_BtN3w=AdL4L3Na(J(zIcjKvDp?f!Z8(oJaWU!ONuP|8UkGMT8snH9 zMLdWwLY?~Ogen6ecFh;|MzZ@lGoR$7CaY^aY0QQT39hV0>A~F5R1{NY?$tWH4z9^KEmIXS&ywFJ00gHi^dqLG!YeQE;tFN7ZPok zMmu$q;1-Zr&U?fo|HgoUY@0X2jHEu32-o)ALRS^{d4+jmr9MMlIobv-+aY330{h?%(l)*FsD#~?R$x!D zs-iX^G?7F0o=!N3zvK@L%G)f5Jm~A{?mgWKYY{lgby@adA60X#{>*v&MUmyijGL(% z#0_GQw*d)owE;v>QDiO2ni}5#v9Y>GHxIh^cgD9u{qp`BWB`vu(B_C7V?GUwR^;MdrPi+G^ zp&{o*^>lZw_n2>ceTW)dvks4#U{v?prkX%(z?YqHTbhUOM7xiF#r4RNFL+GF z5YXTxsuK4(L90)2 z?(KH@@+&J>5>#A%1}!S^1_>p63~1Eq$IMmGnxyDe_!z#_-D2p<99=B1a9B8mWLP?FiM0e~uOhvag^%)3Er1W*Wo1vs~U& z(o0p@qOSLS4S75}A@HU(Ak3X+ECUH8V-B-0U*G3k`w=7JT4Jm{v&a2qAK#E3mt$Js z0Ajy$!G{B{HvTyRxph%&;iXAD5Zv{Aa+7NzSfE>%X;ORfHp-gqCj4Bx=x;6)v91@J zOrn$Zl!Mo;_`c>dcDgyi${1$vfpt-<>#xyv2?_3-_gflSHfh$)x=H}kC*KT-OTP6q zXs{Uy3b-CWD7yUvxbmJ6LhdtOjL2`s%FpMi0Wn+7N;mcVuY9V$A38inmm~aVvDU6m z8c??E_CUnCaCjAaLzwOP)ONFT=_CIO)$u{8|!j(YVd zhI2x>GEa~>#CJ>M=rhOVhBDD(Ie`>mYWPsmR=EzEFNLsrDd4RT+(2$q=7{Fn5vbyV zJ=jLyPv8Jyqj@x&=nZg|)W>xIO$b>Q0{4|4J#n7P+6Mg`mS5v`V`w0}N4#fG38ccV z5S#F3D9CCeB(G+I(YjHwI%aq+8muVmNBvRrHoM@{IPjONt(LsyY~9Hai4*4L7JR?j zx~L9X+WsEXmtYMN8B+fBIC)# z&v(Ezx&~)F(qF)lY_lQG2FUX)MCQ+9Es4p6Q@87!kp zm3Y6>UsT<~$3FT(67vrX1|c6S#Sfr!uL$6Ae)$#kqPbXmQL9rWvlu#wI?YU|XDrFk z1)2j;-s|F`=B!(XSjAB|3^AYQ(0qB&+*{JkSbAU`{eQ@MtEjjFW?Q!#m*8%V1qtr% zkO08~!KHC`cXuZV!JPzmmqvqIW5FF7cMX2|_dfTGJ@3U2N`Aq_X3wgcqJfB}p+r(=^rIx`L&V1J?e4`^w_LyHAy4m$qVk%gRi0?}x zJ@_e(iaca%2X$Tb`6pL4Y8QbgXIVO zeq8oVHetW7504QMGl;$(NngvRu$}uJDiPz`aOHA5wVqS}DnET%H(FO0pAR1_h1O&G zkSnn<+WP=TtW15U0N#HEga3U=dRYCD;bB5vGu()zFDTwySdznZv%6Sfd4g|s^P{Q+ z6wFnDEICTO#J(}?Vp^Yw2UZi7t?9qGc>D7lo8J2apH=(*?FHToiSLyzGmcyc67JCT zzgX9Uxa_5M)X28O%oZ~z=Xr$(J=rO8AFoFrvQ1B04F>WDDRt5U&DK|>gLq6SYMR5r zI~3?PpUTx$|8S!DRXj~Bi>b2Rr#zD5hZP_dTC$Bw?_>uce-vf znzNkzxy#C?ioXI=SF)MhMmyNrD^`w_|L$2^p5b@>%JgUkpSU6p-1%wWUl2W)Ly;DyECbtttRji*qj_Y61#RT z4FfVf%i4{?MsfoJ?vI!ao2r$;g2U+=vHx4XkPEKLsou$b2gl7y3QvjCWB3OdGF)7v z0APQQ=0_67JhokFt}DUWf_I7$?UM%0N&%vLD?zE&^m#Yip2C5V7ft|FMQQ3bIjm9Q9Wyx!(k3R>JS*fc2M||*?`d_< z4%>5yikd$+$i1`p;w>9F7{Bte!l#d~cUqdQSwQCP>5nEJ81A>E>=QA6)Zt_^ei0VR zZ@(~eK}BIhTR?s7rTf@RTq0*Dj}<_X0Q4v^N;Ihu(OtZrtv29K8Rf9HG)W2A56Y5j zdaw#n`H|fW=bdM~Vy+tpRC3rt<+zl&%f4Fdyw|5N7IzGB2r&TWaYnQT4F7Ua9eR>5 zNP&K@pj*1h!ECQu@w~P<08s&&hkw17jVrvGxoF5%MotWQ*Z3Wq;^J1;G03O!*h|c( zTTA9UE!C&J+<0F5L4u!c;;2~YMHnT`k;w9+X*tqW&DtA{6KaA%T1qDmPpl_Xnxrb9 zLcm)9LEKfN9MM_*+dkP85D57DkR@T(}Gf(h<$`j-xMcZ&F&EO!&Lj zgf?<%vBb_rqJiv(0u}AnN%#dbxUzUzKP*7@GVOtVJH~}bp^q=IhOK9&oT5aPOj<%l zoFVerw+V$k>C+2o`fH~@=|^cCk?E#y(42*_`F!1E{c>WxcR=uVKLz(?V@)$O#`|_6 zT+9RAhPm>n=l-*>G$gdDdeb^t99!F*{geZ25lr&YWDebxSrbjDU#!D;waL10|0ksq zw8awBQz#^DjQew0dyc$6;UlDhZ9d|uo?ZKeD)&0HUv*7?K!{;2U*s+XLGw< zY}hB{usv_Wu?v0DbC{RcSi3)Yy||qXrKzb3;!lHb&!Epd&+*Fh&CzgyH)Y~1`~jm~ zYcC6h?V^x3Zly~#;9j)-6?Wp~=iGWp#+Ei4INN_-2*arEk!FxqmwrP%oDT5?ey&X@ zXKOSTm360UZS+8&@-Mg7pKDyUx&n86v-P@$pnzO<{?(^@mr)`IW@bYHHO+q{Teo5E zF9N6241RjveH|(*1SKJ7Z`W0 zT9wyqKWybk*q1isV7_WE7YOG1zp2aOE>CywakAH@iar(lV%>aQ!~cV!{FfS$40rT4 zi&F;NERUEYTk3Hjg}te9ZkfG10kR@Fmv^LSNB(f{b}{sXi8 z=W+1EBu1i6H-QOv4bjEAV|1t)IM5LUN!%Dt*>d8*sKF`eOGz$d4{!OTrmIxLW}5-; zhw~Hr<$Pi3f;^`h5WS0#-HY3khP0ASSZvpnY8M_9tvdS=R3DyNM<2L@$_M`)@yvym zDxR8Z2s=nlI1IcSq&FbsGHXl!EreEz%BPC#-Bl`w&wbtPoG=OhAR=!jJWB2OhFyWn z-x=bdZzKpIlL?ZnVN+Z@6jrARuL44=nsx%5+*L{ma(G;3sBtziXx%XPCdyVt^rUyJ z03AL+n6667HyJK5stcx6*)cYNk~;}IwbC+rN9(x)yZuBZ2G1<*0m}5uVMr2peLO$k z15P!uVs)*&)Q}f-LCXlgd1F9C2{|C(a{nr*w?sK=L_I$TP!JZmROd|HVhWOONK4gQ zk4~_$;vL{}oQ{w;*F!({8?Q)Dmt^+>QTR>tgqkBpX-6q}eO?yOAcqE8VF>(`l^P5~ zEC2Xh!Ar#?o(UdM?=3VS(_K}cY&dwk;qxt4z{HxY(nL|4Y!0hPdpC>-rw89Qo;Ly% z|Gw`_hEMO0?7ZKt1>Wm@zx2CM_xk-}g)bGdagPIoe0Lgt`dQwBf83u zd+ zpWbSifW-8~DHK_UEquRnaak`iM=%`;VDBrolutw^+D`yph4SQ|O{C$#2T|rJh#>cp zuN{j#y7}y9H?jLINK)QpBUk;cFW9y_mpeaiYw1Z-+jGi(rZ?(*yYNF+&&KOy$F){cTRE4_?U3RPI}CDx9E!ZVbJfOK2;^>^U@^%~$$Zyr6h2UchD5XVG-*BW&ed3aSd-o*z~b^{JqXuuKOj6Fl`v zb(hsnC_|2;8{Lq1!QP&&yGzWY_3XZOuV-1Jet$+V8mSvW)18NdZ>p z7+~jphzI%#ddfprhEszEkc+$qz=qc!A(uPl4y=?u(A?Ddmo7(^`Blj8#GAVRF`Cw^ z0Rtc1=0~d-4ZD8a`i_3zKRmCT*bh0HlrzgEIH(W z;74npIhth2q|Ceu_h6eojiR(%atX3YZFMY}>25NhyiOWRig1}d5Oj%1W%381hcdJo z^phEz{yoh~A-uq5vQ_L|zAO^_dL|j229)NoV_y z1f?1lO=T>ME%@LiMXK1fwXpRz^5*t#)olZjo|`b=$p#8r(Ju2mlX0o`Af5{gzPwK3 z>p@Nif#H7)B`BQ4{W}-ep7fQo8D}ifBVG)?VIYZ#*3m0-?+X9`FE8Hh$GM^UF)|U@ z@p)WI&-gtLN#kHQ`Q_g}m+1I$CB0NZ#H1oqhn}z4CE7{jy!%rloQBq!e|$%$xomM5 zCk0_Rot6IfL?#5hM-}N0gT%jlQZn2EzOUiT#@4vA#*vaTGJ_~^U*8r0n$sm+rHk+7N)Ahj6EFi;?h zQXEEO{RGGqYCO=6(M#-&^6`gNFRJt%>=w{?HkXJU<6#>j>mCc*1Fsq+8^2_u?*TkG z#fefe;aC&T{Yqp%?{W%;@|todiDnKWF)VLQt1T>;vrjpt?vQ)9pI;Jn>r13`uXp>x zLrj;{_ztt0-R;ctQGb*4{;;a=M-gqmd;f)OxVGB5I%!v=DLDGmqg4E<_Y!O^{ZamQ zg6EOPO+_YMkgreGtDnc8G{Zu=`gTbj__;&dqQ+gSequo4Y>MGl{HL3D<649%=9e+= z{COxqJJ$ECD&=RrL8U9l1I2XI>%rjUD<8F8oNfpqK7l46Xus| zy0ROtdT?chr|pEvUOBtj=1iIX2ec>RxxaQ=rM}bQ`a`Qd(u7_%=_~sHM!E=9Q+E#j zE?A`iZbW)+VW_o=^Vs{vIe2@aXH6+z8REM1SDBnn*-%^0CqDkeXRvPkMXZR-Z4~+= zO?(kgyhPR59>f%~LiCOTa_`{7(t7VzBtW2lcXd7U(hpWt6VlcAd(2NX)s!oyr;i1> z+KT=343Fx2ETP@V$E(EA;Wxk|L7!v}*fB1qBX;f5GCIbvF_molDljezLN93SeT*7> za!L?jyI+Yh-IaHN3i0)UP0S~NH^wJnd-iV#ar4artz4oP8C@52;9PgKrO`W~^3krf z>)~%8xbwK$&U;C;noVoHA#;u8r(@vKZ*HzNwYBTAyK%YlsW+LlTb`Li zpEXzPptsRT!zhsP{HK;^U~1BCjo&f*nrgt~-!9jIgol1fAB;DJqq5t-^A>21jI59s z#Cu%QP4PeuW_{CAcrTc?+mlCgU*cgGS|W8K`^=|Ycr^>P?5l6;Myhx#WdD*Ox$Cul zotgbUoj)~m8@ZQ4;cwsnC}FoHa4(o{gHHcKVGLbI1h5}Zxuu&!!U2^}XrT7jRhTC< z%6^UVBJ{OZ61DszTooK;gn^kmDSXQ|4 zv{-kPkxDmy{DqYKTrskg9wBZP{3m%iw3d&$h{d{BUTEab$rX|SIVajAoS<0F6CbHE zNfpCrbK@3*PspS{5u)P?-t!KK*S_OOl5aw&%ow3Ln{wPuz;<`#y@x7~HhdfKU7p4B zZsBW<-incs`TAa5?O2{niEy;RS;<2!BY4vkg|R7mv>gM5T*G>Bnk7W-syj>pVBK5M z%a}nGH{C=rjzWrhx6g^yZ9gPX!A&2Mm7qG&`l*9MuP$oahVFMmVrus+&%$TC8q*8% zCs8g3IGx^Ri$>)~ye21@<$%mj9f4h0J)GQpYhrBsPcBg=i$yCbMfJaQ?HgH5Rc=Kg zOH(zjuC910?r`ZgRBn+3{&`(MT{PP0D3UC=!HmB?mDzDb_by_f+hAZTJHCqs%P7$hmAjBlIjs0TRX#lvLV>%M8P}r6D2s%=mTPrJ zo|YOEGYgC9%RgY*a0wd;FMXf)u0(00trcDrb_p!U@mF5lWBwyzo?An1%ri*#ZsM23 zr{1@C-Ze>)y|tonG(`*xD@O&@d{$y{Hf>QwQ{+mfnMSrFs)YN0df})TH7C&1Y@?4F zro;ezgP&c!(`Cs}EQ5afnFt?O<4^A46?jr&f8zyD&IcEtKguh-8< z{SA?M7u03YH__v#GjGf7%6J#f$md;8nmB&S4fd&--7Z|S%jOoHlN{r(dJYW&-k};M zj4(9~P~xHdn9gCIdy$IUEp`@L$-o|!Yxfc)k{#0kitpuJjaZJ8`?HW8SBf6folN#f zn~P{8yA>0Ii&=#ck{j48OOIAn$*Xu}-&8z;CMY}z3bc>V0Myc=?OzBcTi^;A78%i%1CacIlQvP$?~c~6JWltlJN!tj}E9F`}Vsm$}@{nQR-#yC7}h_db0Kf?JwaW8SA z|B1DMfNsdP%jD%pIr6^+pJfkdqUMK1pPv4gsIUtnhdaZTy%Yw6n{$^Nh4shZk5|0wsvy_qlX{BImlIeefAPff zUP-M+u&`$E=F(>!S3QADsZ{Y2UF#fl%O9(M=gPWE)i?6jRl(PBI)U#w?DwzcUv=*L zQ=bwK=^U8kJIc_);B0fyIGN9{M$?5JAYzf07`<%U!p+H^9h>nNq?C|6k^5yztVBbNXe*-Rv1}Q`y(*|I6mpu;Xh#THS|Rb{)6; zaD4e^X{ZLe*X#NM;@p0{``jvf|6&;6;XPj;_}q~FxrY6^GW&mdI(X0&10LBFr!EDy z(1CV5>3yQ4gftudabhn-N4t1KL5@*Wz62#&eLA)rqR7YMD4#`A)ZlYgCQD?5B)ILr9 zJ&;*6I6;puho}Uz!J$GAM-GyOvymRKSQQEnEEs6=|0KB2S&n4V)3i@;uJEpIDr`Vx z+Ab15CiZZDoIAn5a*X!JMk*0-R(ragCA&t+*K#Q(XzCkt1GQLe17&(GfyU<(H-tm1 zsK_S7U+QvM{Rg$Ar(FMH5qvmmuQ=DvOIEs9X z!7DkxaZ_lD{syTJF6LEzdc-X`uG0*!r0@)djW08?|02GMX*qAPCMD5DQN;@LnSZB} zk$jV87ax6NX8_S2+XNDUTY!}fxi@HTuy-}%N+YO9Xh{+AQhFiA-8!as6diK6xJ!D5 z%Z#zlh$0qn`n9rVp|`A|x9H!{=_&JadN%kD8wsQn5a@X)IXG>)cS&3>c3Eb9_lvsr z>vBp+RK6#JoWdH3^_f1hCsm?f%M&=;qhmJm*?#NbY^SOKeeeaCfSy+nXS1Z61wiD_ z&-ixePOKv()~C@4;r=cshruohejr|Z!#WDGY@{pxnRsYJ<6n#K%#p&I%9nkh&-BZj zeYJD&%N&JZ;^*JF_Zf_01Ic)HGe3%8K0*JMR$wU3xj-M1lh!WuL+gm=Jfx%ZRcahY z!j&UwoP-OLC5&u=vH;UcH{|R(4}^}@J?nPP_+BrK)r~dhLQv1=Tq2|!?LXWwuNqB0 zM?K3N@{lL}Zdaxgd0^cTQiJ5Th0zrxRk67mYv5tOI(5%86dA+b>K^-COJ&@KyMXP? z-vYIWjZz=3L#d^87YS*YRdN?NM!cy*cE41xIc5E|KQ%?`rN^>J_2xgFR~qBFhM{xf@J%hzTS9~M{Z8$-VpykG zq{{D#>_535<{=OK+q|8F{V+p)?~nJzsp7v@9#{JDY%MNEM}Lanye1=eo~DkdbUd`- zG3&Yhhw}SRM|$veL;3FNLH@Ij`;ugfO6u#aV_?(M;--Dw`5>kEV_`Mx>$V1z#dDQj zuwWuk(fa_sidDQJQ~WSTLpHwp|24U-$m3(*#n-R#=(LMY)sGB{HVQRLZ56@*FgT@8#(?%kKw33$*ob-vLQl9U8*L_tF=?4PH2Q)>}5Y2A5E?3 z(Avg((^&1b5rrtss2O%BBgw5EBUa5;E{~b5Q?2r5S6*?JGU$T z)eE9aXdJ^jrh@`7-ag`m&yt%Xr+{b0+w@3tCNi*67}pL6xeaBKT3_L2kzQ5D(W+1~ z=5mDVmM+{EZn_0Lg~7J8&Cb00TLh~1X*P-vH;0q&msv&ueD*UNsO!7>8zomCsm5Pu z_*l^_)Y$J%t>HR>+;EW@TJ2d_CqAx^Q6owmtG=7Oj?Jh&v_&%GEvSEWzS}g^vkIDe z_vLhh^5#Nfd{}bASmT>!G@kc?u5i$#-UUFN|83SB^HH)ic|{z{JXpVlwHyJ~~$X4iWy}%%U~Hc}@NiCNOj$ zv)eyzo5r4<4b+$LalpHig;JaC`FE)KX1An>d4a6q{`a{Be#CTXsXO6i6OK^+opDix z-;oR3q{Q|$l&0+P5;<94syaNNlWq=w)^I4$*wZ+rGXv6t)pHjOZcGivF6we^tW^dl zOqniPPg=-`n0u8%Kbq8c!u=XZ_*V#!{5s}Y>C*?X;ms7h5lYp0o5nbqt@Ko?Rhg}U zVxK4{rIzg@UnZtByL*-rDWo4w_Xg$)iN5A2#NiOuCid+s-m=;gWvoudeprX!H_*kZ zS*v~&fuGd3e3B(MX9PfM+Y*|BAYKdCkKw@%`3I9x;z*0ybnLkUm6g?MDgi2ZYB?Vr zbDu-kndcquC>w6`eY;#>^=u2Z{M)`_RU#LX+#71#NxEiLn_B!he~@z%|BnC zGAUPToA27T-U5@w4-sBb%mztqP5y_F@?Ye$Q6SUgCFhhdkX2OUU`Y9&Oo{efXB)>V4Y#x?krSofWc4eIQUJHV*wI+QPuL)o_w7jyS3ey@vUK zAB7f9dL{Gv<#vh4nqrUY2{hHbNRn8g+abtOusz30nW_??+%4#Je8dhA1Y%L_yCQH- z>XPr-ysEV@{{FxzTVl+}vQ6}jn$EF?mvds#rMG#&{)UUNhVHqk%Dba1d_zZSGzCzL z;39Im*n^#n=3iI7Q}gSMy&;`3`05q$|k`GB;GU|c~Xfq!wFYuuNwFvg{ZIHAA&3Awoec$Yx5PZo z;+H?KOlE`Tb z7$nVrqoK%{{gz(tD|LJJeDkLWO?jH9l5no43a-xY__hZdC-b_CYb*kBoUk|4_NOQ1 zLfm7<9)JP{@FF(^gO##XD}jVTs95Ctsfcr1YG)E-i2@0FMhUG2pA#B#ZL)j?=cZE0 z4F_>nTkp6DOVD4_HaaJfs#l3j9e)+u>*^Wq;Nkw}+7=-dOQ=i?@fhAidu-icQBt1M zw8PZRY(mvQ8bc#zv$8husdiKTUA$f+V5BE0Y-s$ITYmg34Hf?uQFLm5V~fjo9w=hZ z*56rM!)Uc%kIqt?d@wrf_0=1IyM9u?8;_k4xMK1n1U)ZU#v$5Hos+gY#l3CO(kR=nE zdNt#}m|4UgABSTczqG418S3JDEHI_B<~fgkf;#6hJOc}u@ZMmi&u=6i8ikQ|ACcCW z!mY~iP&G#TWV>TIKV1qc833)-mc)2%xsIt5bxZ0E_$O+KG=JWWotd9&k2KP7TxlO2 z^vrUaG7g=jeT?{r57E~X?)4$#0L6X4vz0(hXj~7CdH-_MWhe&d~jn5ADkzc@VfqCR{0`u5y<9WTXGvhyE1lc~%?vIiYn z^{;t71*e$qKE5d5E8d@5YTkY{v|%{aNBf5ir)AKIXT-;H=69fyG9UOf@mt}|7D86L;TiwL%UbpBiY zbKM>4F;l=#JmCrUh4Gl#v;Y1{uuC-p3z<(}!1{{$qZ)2jPY`c$P(*Hf!6?)Q(+bEh)Wb|G6l59LG*u*IH?##@3Gw zv8bYuj;nWcHq{xNsom<=`hmN4Q^z-LE#dTe(jgC7RIHHo@Zzhm-9%xFej~~ zNdNYNoFu6Q`2cA@yPmgQLNBfLgOg%dwG}^;i`aC^#xH|y7&-TT$Na^-vdg*S=#!lE zpZZ+i!L3WF-)BTF&U41i``GDd~LJUb-=&Pp$fc9i%5@T z5==NtF6z=sg^C}KX{Aj~_2!^a>s)6hK5xV@#tR~&?6R{PPbUQ;EUWqS_XI~59RAKk z;ZnQT`%~wY<{b9D1H-DWtoc$5Y%!-y*;y>FcrWFWM%S56;-{!>DB?daL3#r)Fs0rj zC8(X~LBU)e`}_PQ*9j{JC@AqT2Si~Y4st#too42MCQSfpa(#qie?y;s=`^kDi@OFL zgP@|w0`lrsq)jLem%MP-*S}9fsk?vW2$n+rTH;Cl&>yqdMQR$~=5>|KyheDV;lRtZ z0p37H&-)c^2I;=}(0viGc;QT3x#_U=#hB>vd76E`!yZ**dGupgMcomth{eFaOtDpA z^(l8d5?-PrH%xns+o>CpY`UK5Ru7jzr=XeGiYu^J7W>lls7u3>zQ%|6+k<`=TFa zoeDi~Y4woyUM0Joajq|iQ99^|YlirHia%`;-5TV6UbH@LgN>g0SW(`3dm0EqM&PR> z%DQ#l%ph8#omuUn<8NZL28?LEwoN)AL;Vd@NseXvKs4bN)}SW#G+%t_+w$g*Q{X;j zUw<07EQAIq-}AHk*n7V+c!qEkY32srcd@WPZX&DDp0a4=ynOjDpeKc~W~P3Z<)D{s z4D$RRBHDxcN^GodfU@qn`10s%-G3hZO53F_)-bcq^fr-P1sn)_7#ffNFIPwl9ur{B z$ql=EN_h3jPfD5!&rEWj3aai&+!=N34x5I>(Z zT-7MI9>oL#0<(+#t+4E%k74w4=bsQ+xOc1;sNGSd5ehju$*5$tV{-Oy6p&*oVmOs97cp7ioQ4HtB4b(((;d2jebX57EYL^-odPEoe5#YJ{-IDa6rc zEF%y0viZ#3(|{j$0cldq4 zS;&I?1Ez_2F!T0lX^f~JntK&97WKYa_1%Aa;W({~D3fX6RHyjY5I4!!4}MKt)HMxl z_YIBpwCk=d^C6JWUYq02gR>%_4bd^ne7}=WTDhX;^mje5@*GjIVnhdMXX*_FbyT(G z66fh{anz#3^4oQq5ccwyET3dLNtCOLh)7di~QyzyS_evIdT(K)6b>gbN3-6C-}OfBWCItsJH z4Ru)~_Q^oNj;3f?;qCgSo;KeYCy*~bX$xQPRh|dl_ULoLx&b4yV1zC-0zcln zvqx;V4F?h{_CRuOG`Bjyz$8np8`BXJ5RBuJ>~cGp%n{}3?dIDYHMrhSw_ERhP@N-+ z$QACr7xqsZPgVTH_uV~$Nj;Oj)>rT?YrzmUwsm1Pm^hmixW?;EL&>GRt_qCbF1ecI zDHCTBbd*A^a0UrZC=uQ?$O0$K*;n;k5%3^NSgB+B5BP(&@GL@>k){KqrpKa8S^oVU zZ)mY>r%9ms%Z4-eoz9Z!X+umzs{Vk|d41wrBM<`O6;vaq;#oT1ci{KECir|-*SY&Q z%0sBZc5+0lW~axMa6~Y2;qHQ^VsraK$XrKdf}hkbm!HYT@#MEF=d7ht#Gd9M#a5Lo zMPlp(DKbj}`nnsOEpHK^3@J)c{CKZ>kNToe8*d?;P4t0w(nhRM6cn%~F0=t#+XLMnV+3S>#tDdBz^IK4u?%RNR-eyD_3;$nXj`xJ~~8at@i9E!8<8Aog@dWtD> z3Q8YpGa6T4+Vu5Y&ynAX`#-cb7<2@I)o*hUwA-x`?!EJ{IaC5zZzXdA*nk?92TP#e7q~UG7`U*)p>8|2HUjx`P%Z z0buTy_JT05{7IpLB~eSDIsEzY>wXzQY?%fq4A?!8{Q61dRw50qjRCx-=kP9z5x<2k z3$^C^8bfg&A|pW)fE|T%pLd)Kf@&6483F=Outi7*)ETH2nkJC27!`C96o(uH(jZ)S1aXhq_yxEppsw|gYO;*K>MyEm&A}D zfc$WPh7?X{OmWbpf)2s$Bun}0ZbTH|Tuvl9^T*UQGutCu+%-;By*l_JCZZJwWMcsp%;$Br zT`BE!*ej*_S(ALFp2m~_KpMbh_`!fD_AZ{ITWr5o87mp+;cSnB%_LNG_T%DU(85!{fmTH7QFE;;1d6O(3HiKoAx6c~@uCBq`@PR7BNX zw7QtVtl~~$V?R7fj2k%_H zGORmoGW6(}+4Qny57np=UZIlH^Jb2?iRZR&Elds-%f(GFDJRI#ZBArX95AN~ynfo+ zq=hy8{R8wy4MS{DoLKNL`SVO4%(7bt!op!b9$*`bHBy2w}X%0eUgo3l=ySri{{a z)6Um+@b^P36s*B>yHSt7O@eI(vMe>z!|9ITYZ~p@1aGYQVv5DB! z4SKn~{nyZ)g;K|DQBW_{T+`W`HX-?44M)zKr{)T=UL`w?e&-T8;4LdRk>9t3F7)n; zg>az3^=og#Ip$cn46mm#p{x!!a_WNNA~0){7U#hGzBv2%bm>qa8UU6MMxY@>rk4j+ zDfIaSTU^9y;i6VLis?v(Qh(X*-pdahqpCP0FNy(p=v>!greXO*oNobsL;&wcpxXm7 z;&Gu@!3n$_S8TdMP|hZaPHZ-M#*c00bF0BH%I7~Q?&}+gj0k83e@-Q*IOxJ}{rkC7 zxL$%kzDJAmCD@iAdve8mlm!B<4>!5!W4Y9juND;xC;t#^$1UR8eQ#r__TO~RglgKl zE+unVj3JH;F4>EJuv@!*M99}^|M0%*ZqGg8J<&Ai0hxLqGQ2`smCv5Tf&9eTGa$4c z%Q27Ol|5bsrDgWZE#M;$71Q6-cDp74nq$tQC|!@V^+>yihVvE#Tvb%US%Rq9&-a9m zhC7OH=-Ylb``%t=%tPwQbBtHF=u#=`Afgb~^TTCcx|`02z`&cMLrT=FVCNF0 ztY9`j$XRGF{ugMjSu`dMsa+!tN!(JC6~8qlIHQk{}@q!C&bYxt-Rk!v>ZDVtmV{ShHfN@YI>p1dA1hSOsp0!3|C z3cX=s_>7k=JImlk(~u##3W-@7V&?eCSFS)Nfoq+trCxn9H^O?=?|gi)iWg*KjoNLc ziskJ6zP-i*?zhJ(?#k6BbLG`c`K>wOWka(?oQt2#cEfU9C8s6LuMeo1K7B3z9w3sl z%x9I%8iFC_y-7E69<48B^WC9vD!rK>AopC=u4)UDq}fQ72;SzV5mu}NUrRo#1o$+^ zQ1A`e;C=f0?Qz{PrE!6}rTVTudE%L{uDnGTFo-IKKdFbFS z$iaHO_3+^U9(u^xn8>Oy+TpUlAtmVP9nEw3O|~@~*@h_3ZrfadiGG+Pfp_!CjfF-S z$^=x9{b@k%FbJ1zN8Vk6$ zBN)@~Qz&V=BTSikLj<9NeMGn8@UX0KX;^o#tDHDCRSC3?&?@ocm`F@V)?I!OJzr#} z75Q3a=FK;-;*|D6vVgJ99qL{-wNKc|TDjzeJFW@K-%#>v)w8ZF>csev`de!Ec-o0! zkn575-1?UCBwyROega0E`{o*s>+=0LdPkU%X?DNRFDnF#9IA4#5~4-8yu4@5InFxP zKAo$54enrCsOHuOJQQsXj|M`%NWw$7_rgYs5j*R|@E(z}R-XvZvZQbKg4jOTc2Zxt z^exTX?jwCUF`^h3ile*oA~>&?7B;0a?b*h#zw^c6Ssl&4$}bXxeUUv#-SNZfm2v6H6?RUjW!Mzc z`tsSI^G&REo_Z}Ju^k}y%&l*)va8Si%GIs!o$c#{6e1gB-G6j!CS#Nprc!;sptDeJ zH6=puSCSyByB49ZvY!?rR`8H^Jerbyn1Q<)8D~+7yA0>vUy_jo3QHt6_t-w5U=eC3|~Am zT9BTk&Zz<%FfMU`;Jm3VX1q2Q=Z z3;vcU7Usz&PaDlFwiUQ8a4I^6q5r`amk*U3O`GB1M-gIvy5{?`yvFkql0`3D$>Om} z%pc|Z%R3lKLb$nl(wGsK{kFE#J3?g&N8i75o6x+x*V9kJU!t5zpt}sDptxsi;}(

-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

_^ojPCtx7=RaLSI(DvgLZZMAMpS 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%0A&_S#TdFlP#AV91qX*Jl)3Kk>d%$41zC-Z3KdCP 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
1gKcpKk;J<3nqJ7J@P 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 z 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%0DK@$3@1fG+?P6qh#lVlhU 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 z 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

?lw{r=kLC_V)0oFQ_6a$+%O9fHe5WH%?D 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

nBzC7JLY-+5gGPN+Ld-Y;9npAFej*^%|+Tz)H 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 literal 318716 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 z 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

I@$YChW{ki4Z@!s@}=l}xl99(1icd_711 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⪼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

aKEMxH-G{9!v$9HobDNgSo{a6?l(5OkQA70x1S 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%0A?esbNh22@f21=;;l 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

344+jo7~@G|6q>*U=rbx~$wOW3Rfd z6T5vg@HMqYK5`VXEGMR-F3Mt#k)0`lHMV}EgGimM)Asa7n7gVxkr{WI&8aH)HJ1Iv zu8%>Ev5_qCEYVgji*wxtozvqL7dl^jy(Vl+xj}7M83=BBzDja4S~%-FXJ??2D3?tWe| zn@$wKHtA5(ZeaU8--A>_yciBPLo2Sc8omw?!OZb>a*JPb&Kfg^xS)AI+3pFMu!Lf+ zLzgc=!iFY(I5g#Z8S`WRs+?Fe=@(h?Awi{U7pboeFJ}SW(?7B=Djc5Xc+BQVW%_OW z4$3Qy(kJdy;9a*pp6HI5+H;=k5*^ABIL{6Zi+5ui=wnXW44iOC-+5BJ9GZRo@=Xu(A z+obXEVdsBbvvE;-@y$7)K?!W;(k?4w?U;g5pm%N@Y!oTvFrSn$U+5@Pnl-#=n2H-E z+JJmd#F=eVTr^xdz(Lh{*AX63dib|~5RefPb40Vvznb5VRgz^&W)h z6$~IlI{nE+H-&g=DoLUHJ#$QLfwvHmePWWK!cO}}iThci{6_Cvk0A~d(6a;2S~

    1Yq%3W+kbqMSAixKVKPfC^X{_;0eSUKw3crI0WO{q;@l8E+U97VMg1=XpM> zJcA%tjGzx{?~WjAu=IUQPUZXS<322#bz^3A?D*;rI6;SB)2bGl`}fG*ulgTvD%!xH zVeo*eq)VlLk?Wg;?+5To!`UG;w)=P~NGTysiQX0EZDT@mMlg*=;a}d=Y82D5Eyzcs z!EEk3)2$+1ixU;NiE;g7T?Ob0hbo>s)7630Kk+ah0t+9-)yOItBrf`EK3I@_ zdXZ8Uz${~HIk=!ZmKCu-#S2Gq)av`N3N}s!FVB!0)Is!46?shu^6tYot(f~sC&@z! zmFRB|3aiA({k+E{$FBC#Dk{&Z+pm!l9<|o?SZg(mc&PnbyOfqzh67m$)TOo z7I61&Z1^8(cQUlB{+XgRyrsX~(eKev%wa{tJ=@qSbgs@ zYc?RR=e`jQ3zmy9RGISP=TzAB$u;l$0?(pHi9rA=1ZWMsA>;+I&8z2ES2w8o1e=?m zp&ck}j9V@d-^#>ogn6!gs_2l6^8I_gf? zm;bB&gH7|XCf20SxKAVTJwq6Khvc4MuZK7O>2FtayBe|%bMxKGXq`T0^Rz=}b^lge z*Wc`y4CmFDyg1gwf`fH65e)JA3R1Xn4ez}ep87_ZI2w{7=jUXniSU zS9P*sIRwvHVhZVzHzztQRDaAUncJMa2&tla%Uz{Je1Br*;_jjPUak}{ybuK^KEdMt z_S@v*+EYacviIJlWCDE1L!oLHR-g~LmmAolW_4IF!#8%N@AkhsEs`dDfj}6iI5hXQ z-3Y<`9qfrs3|e+A8diJ9^aLguiHBePqzf0Y$nkWJmCnu-5c}FU;`t;xf-I-db+5Ob zXe4%Q?$mtt>XVL+I@(X>Aav>0rOcBZo}303nJ7ge!(849$T>C@Xn}X^eArOdzFtpK zlaeum`ENXv*O2*7aM~!ZgDGoboV)IK^&V+M8*GwD(V^*K(F&BX1qGxc-Z9P7CHoi`ggsZo-0s$3zQrYy9ztB2+vi+g&oDKiB-;HX z<3&LzHz93PFmF^ay)Z4yKmCjB3nf?}+yXJum-K1ZYE`bn)26Wve8ch|E| z*1@+TJgolp{>=+p8?aQ@j23~+gPrnvC-G&pH6AqS@}4#8YU{f@#`Hx_!L$sJNrgoa z+FbOb3!H2wJ)X)>9>CwB(C2bw>B~qIS$JQO1S z_k?e?Hoq7VvJHNEzx%Zy-kP2Wf07mZ1i#MPRvIJK=4`|O`k#wa-F>frz|1o|<5Zyy z#e}g`ZWf?PR*$6PW@3*e~XB0_3+xaJVp1|Ks^?poel{Gc+zUF_Z zL{B=&Uscg&Qr4-FZSH_}nJP(Ml_(`4LGSg2%c(7~q&~Z7y7sjgbpKc|;yuF27@IcA zN}};k7lb{Ur_+P_bntZfKdEA{p{09&cGpsoN$HWxO+reHP>fe7^yOYEe=f|taq7E+ zs-S*VG#v83+t?axlt-{GO0QP@8+67nS4MY~m;C0?Ize07;d8Zu<7F->>?7}7DFgW_ z^fwBKlTU+O|9sx1=ENC|ggf~-^WvlC093()NXo&!bnTK4ZcwD!IrT+b zbKS)n$wlt`4=9^+oY}SR*RDW9jzD7}g%V?Ot3r0lE=dTtZIaQ0u@@`VhhEf*lnlo>D`*m3 z^|4o@k%j7ElJrG>Jc7&`MmK<2r{g6BtIsJbL^c_eZA3m%1v3MC0IH<)9G`D@SLU}L zG6*ImtjDqV7J-41ZXrzFhjm=G_F(WzUXPxPe(JQ?&qOz0{Y58N|0VPM)OupOr>_jZ zt-nrBoKKRxYV0V^O7b_g`dMgzoq(_V)zN`2sZ(}_=4>#zpLrp?LyHgK?Vuk1lH+^!w2monA~Xng1&`oX{-^7? zke^0-xAFKDaBV7i#`)|2_1?V>qDNircX~K29-wUW(0F(&3<`EX4TGUhzjQW+Rko$@#Sh|X;^pOcqL8a zz6bjy`|)%t51S+nX}8P|c-YQg6wJx8mQan8@V~#@l{9JViE_{}lu#5fA0hZgndsMB z#kv&-*rVBM>*P=z#d9Qz;|$;Ci6uaect{$%TJjvpV(yr&6o9jqxTw;}oGc zV$UuV|6zXCmy#6IcU5^iB@bpblv1`x$gfDn?NPTTJ!+Z2$~)7hvFao&~RWY!5I&Bxk{aOOITXzLqP07o5-aa(;jz0n?awx<=kARhoKN%Ggmn2o5 zuo!7*LHMXL;i%oWy=r{y0irpq-huO{(h$;sTql@LTjz%jRD5^%&nmJHK+jOc4V@ph zmP+aGTbL{Rt8|!`8T$bolOC;ew?3Nh4$XNAGzcs|U?!<0i7VUiQJ3TIWSv@gp}gHNCz>BZ zogw_!gGvHl{G(9XV%}eOJ}80Dp;yE+OShIyS@8AkqXA2slfC4)Dq zZRlGq)cLRLP7)f_DlKLllWm`L_y<|C>AY#z6|Deg_i^P@bF0BMtkR<1B@4ww;PJL2 zu(oVJI07eNT`I^>sTsit%aSIoAt2l^bqGq@VjMa&(+r6A*sG)9kcrqO@@T(^BC2ynYTn%YU;FaZxcF<)blR(l3fGC6r#yR5nYmI zAj5@{s&bM+nY7@3oFA!}+?1feCV4sS29v)E+2?AtZXR;&3-z!(f%1fGLT}#W)_^bC z|8D}Y0R!3*EH~JHFYo$4y3VR0$~Iiv2nZ-KgmgDZcb9aFNO#xJ-6-89p@~C6`!^Tp+#N!!2+J_BSZTU`Jq=87gl_`i?9r3%abn8y0?%z&n zplmx($YGIsY8Ah@H9ig}gX(x5L%0SuoQ;>^*h`URN$t~W!V+w&i2{awHO`u1x(D7`gPp=-x4=X${mt&a zw_`hXL`LCF*=_Vmupj>rxiYHj&p+{oXL_~bEYb;0xD#Bxd&?Z%EaG4a>>%yu;_En{ zd$R|5kC%fjM)|d;%dM#%pSZQ4XIb5H%Nl`yI;QW>RUX*dX$eiZG?U8&9@U`Q*|FY( zn?W0If4CcYZ>Xw(8f4~11Rw~6W)1=yC$!5HjaA{>1gJELm|l!uq6Qyf`kq;&T*Gu_{xd9|67Vp|yV3s?PoGU(M8zGy56bhZA5oNc; z-3z>md@x?|Eb{qo%62xrRI~{HYGf1fyw)usj!zuUI!E8J8^O0{BRw4scvzZa-9Bkv z09&nPvLy+nL+OfDJmnh0fE;2nBZsk=gm9q2fQ+AtOD>*xyio4tc!-3bZHy12_W8V$#j}Jse$!;qqaQ!KYRjCFmWm#_L>uMoWE%9^PqLm4+x7YVK3l9oJ z>{gdVB6Z;uW;!L4RMdKTk*#45FW z|L(NZ2<0|RO-mV<&RQGP3?wJU8$G0Ca%8{2{uaqEP6fI%PryM#ogeGxyR!rGe%H2L zwUGJN3|)yt&fmcJva$~>e8xzCZ8w646q^d_wv}u5zpy;}$_P*?Z}v=e-IBD5^yLl4 z_WqIuFs_v8izh#dlLp+6&CfS_{$XByj8<*Dr|mu{@Sds1jI;l21{9oOPLr*i9+IAv z4$tLYIo>STT_SY6MsgtjzH%5eZw2zCNJ!QKlF~lvOQ7w*e$t-V5q-}367CF7mIa1N5jC@q2R}^A$C8t>!pp_k{&cK0HK8l`4e>}`A;0H zdY7GohP*-Ge^E%27mtGkUW(xYLcOU7hd~1H)XSW z-uo%f0|&!8t>r@@GOfPeS}@>&m8yKuE4}qoY}6&A5ou+Te^Nzq&s%_dZ~?o1{$>*g zwVHwE<$1Rb2L7Mr+uY{=ew$ZOd;|YfyC0}}cDd}SrR>+v3&kdizEKzJ#U5k@v9;RI z#K3WVEhnhAEfb?-`(igC_*Mjr1Sf+FxWOj%7}J*VS`p>=BUPjISy}T}(KZY|xV2=w z@W63^>-=z?K>=9TO{DIHVcZ<8vk9SDaDFi)TnhEChdcXkT>qGzw<_%6-c8su$(ebL)vcLkBJG~wEL_+nbAv7pU3DP;O) z#gne^3fV^3ktR|>F_c>W<3{-CHzdVF48`52Q)wxzb2@F9HM19vu=7mh45W)JH3$T} zg@n^CQ$d>r$jKWTlj)0v7-&u3(pCb8*#~B-EZi45ntZj!ge9i?LaN8}$6hJJz!=Ll zB_MGM8dZF?9STqwE054v^?elwZIWNtDeE=GL20=c=M4UF?lTpmfuC|OwyktK!;<((^HC+{NFSAvw?l=OEx!l`eWWSLJ}=@kJyGMja+xd=jW801}<`_E3%wvc!x? zBslCDdOs`wWN=eoZi>{7x)(aq`Z4A5vZx){H3uR^s`5LwVS!vU1T_R%ObjH;7lV#7 zsxn50-K&q{`AH2|WhH6o6Yrkiu=KLBT2+rzslN@5TD?N0uQ^z&LZ)1U^EBUYxhY(P z@4R`LYKO4?csKBJtZ#DK#60Uge?v?Ajr%a+=kFlO^Z@KLeo!f0q_eF$$KW_mQN;{w zkSHY;!67Iim?{GQT0V7UXeLn_u_zpZt`2#GFFvXPzz)jMXXtbmnXCH)mJGh_GN(R; z=wh>H%H%12AX+VIHTZ=tav1tAgvcMti_ z?N1D}eKw!o6YH`>w0#sg?1{o1=pAp{qGzzq@v&E(!j~T8lzwir{a9X7TvRqpfHy&P z(W_nCZ*(>q6B{#<@=XO-A{y?>+(@sedSqaL$58~O8H)*Z`Cw#%{KZv0t@j#lEw*i1 zI-M|Z@OLe9{qF)r}9!ni;EulhF^|jxE;Un7Iz0AJIVhsu)TaA=9Ks zN7YX?B_*BnCBdJ8;>5{)2_6D{OCOFm0Q|*_LdDjgS5FS4{k{fDOyqT z`HlNK%a7gf6oKpU6lUC>EP`UVSTl)a@;~Y6;edat{5oK$ss1zPHA}6%`r4dd^Q{+h zu9=Y+h_xOzCNBZ#QU-e4{9?V^W^eP0($Qo9H58ICx?C3Wh+@j*3ZK*dZUuL%ZPnW} zUj?$1wX+x{L>*L>svNq)tSl_KCsZ7A+Gpia3?I!xogue_RmZBZADTr$lz}}4!5L&i zq3JoCd++AcFGF;>*Xq6};(;GuMU&$1s9i{rkc8WxPYa zE~h+A4cDEP?Aj?Wl|f3{#fv1kZ4vkF49j=c%>8DF7#7+~-i3;r?I(UdUj7~w)%Hto z;J(nCb#0vplkk-+*VJ)u?dpmZlGWAbHKDA0K&#FZCLuxd9@G-Xa51N4FyQ^K3)TZ{ z|Cd;(^naXZ;x}CDjcdUodco-oAQ@B~*|WZ00NzUl9f}~;Q!lzXx6I6Y{xF~{)7!A9 zBKRP)a^cXkKaS3KWRF2LJR7zzm2Q1AQ6#Pvw?;A+HhS;yHic{d^y*(61`hUbucHoP z^NcCS&HlYN=lC|3B-;k~wm^@ZuFAO`Om*0RDQ->P8pW<5J8^jeZzt5c^0 zU42_|SBgx^LiVNq7|lnPa?spJ`i$YD zC_iUlw0BbMblh#gAusKY!l&|q+U|Gs#&&Eagm)P^TeJaxAAsK)gTgmVgQLsz=+^b# zd3$j8T&mKs|2_NpVRIQ&tHHhg{``cdfePP5BuBzZb|cNGe!k^?5ILc=vP^kcA=lrV zzh5%S(lUu-vs+JgELy@(P?fCBSEs=!6ssgeD6LE2J;R#Z8<~mmDq_EQqB8dq-f+K; z#O1&B)Zf3CBwmtq+o+&@aI9=ONEu&|!=`a4uyPWahlJ-0|9VnG5|>Fht{M@pV=%m* zbcQ30`An*K5hsBP;@6RywhI0gQfk?Vh?*8O=&!|VkoAACOBfE4A#=l1WW@AtxK(?$ za+`ol!kJdT?lqv|e8RKadpiLe%u``|Ac0%9eM$ZcX3pQku8`iQiYeulZxMv9f_lEE zdi3zS0|B8_i9I7up`H{T^R@7AJ~n;=U(kfoZQ@#`s@v0Y6`n+& zeJDJ(EIh;nA^z{LeTR+=^_-2s3=iQJDkJPfNvNO}b4jKFiJ}w4n1Nw(vhF|J0YCYR z(Wc&83_hrtqw##XQvL4NEn|A)6w-yG;cpl`{`DeCZ>DZY^tfGRWOVF0?e`I2P;tiB zQU6UmOq3SmsLtOHxG{B~TG3fl6_L7Q=D%udMEZ|T#6Vq0oP0XXIaj7r&%_1tK*Gw<$)K+v-`T4Ocmu{fX zo_mv$hzqvM-F8vtf>tN@{JWpMf|vg5F6)GcjEOzp1A@gs0V{gm&8OT8>UEN3m(VDI_l=dHGOvL!=xybj`-DN zh1PIDJnO5Pj zMp2V=3Td{Sn)tCikVrX()wH?AX8gGMid>C*CU-k<%6GPEzLys zyAg@e^2;_mXI>%eE7;~k8led;lZ-v21y$Q5=hk99BWS%%m;_A{pq#_}&7-y8i=A>+ zTj3)+e1f5-CVa#G{=a{K!VO*oUGoqpS9Z>8Vht9xJJ({>?> zv$(3+8YZ~2aIWlYp##0T*c2A7I=+;rCv;<{cktn&&uD{Ov!)8bGBq8CiZg^FG&nVb z;qqg^`;?Kyclk&LCVRye{(F|$ePzs{@t|MXn-Ib1M&qvf z2$}uf5BbCd3KEwUXoHk_jq=rev;BgpqYHAV4C?IH@ByWdqn+JNH+j-tP{Y#6BnH*2 zwstXxsc|TN5uPa~cN6R8_aJUOF1VLS(CvDt**zxN%|5?M(hb^&7Rfj(WwzSQkkFg@~&MOK;rH+Syh5UPSS3Lc6QM%E!VGh z)kyfFk9cs#Mwt>6U@22XC*X_LA)^9YiqgG4RYzVoD)?%mU`bvN*qPpHEf<*iUgE2R zvNC2_X=UVx$y^3(UXb#;7kQ`fhx)A415TQ!&`(?-hLCWa^cS8O;Y`^Na2Vh<3)+!V z{~ane*beuom7{eFXg{z!8bx|PuF&GrDiCz(zIO^fn(}D3wdX-RClCrEXE!_A(CIt8 zN>y8&PpIgzI&@kS#@xtO&tb@5-*XJHSpMmhy??*~itdb~dE)r*6J zbb~WXm(~WC+L71M4X*RJAdl>Vd<#aqACe}_x5=~(g-h?f5eR3TML+b;W8y3VeXLz9))2&|x5O`rC37y0(dm>W*R4-(x za+AQ61YCFWQ2|A&de*7BQZ6spfx%Z-I`S{ijUA*yF1Pz<@^eo?hagpNgY$7yV{%v^ z;QR#0fYK-s@Y_yI1Q^X?vos6 zIuk-han!CumM5AnJ6E}qS0iGsxr77dI4j7?Kw|t33baJO-&rid^2y`z>P$ePEuO?UB=$yCPWY zlqByP+B5eI30z4BdwW+|x3~FA>&{jhnNi5+!akceupE=nnDZy>i?x62tB3lknuSx! zeW7MNoI92++K%Edein38Q=<3cheslpK2ggoEOL>D^h#O#X<=bWA^~57-I#KII2G$~ z(Hj|9LTNA#DxUxpY5y`RB)!=$&<_;)F)VM%L#`33SB;P7{2i#~xvGYnK^IXSjnJxr z62ZwN**WRO$JQmF-*i4EAzvQ*V>4F%bZe zWm++e)+0F2=v8BoUhm#N%b7OzvBiFdIxC&NJxMeJ%|vlA8ttchmwBIA7qp(FjR3E# zmC)kI#o=o0={OsjZuT)QD2DTj?PSPRrS z_9^=a8(A@;E2)L~qM*Mc{M#1#Vc|gr1)JEhZ``MTtczr2uaLe}VS$S!D0$v4d_jn6 zhJCQ=sn6x}yM!@wpK->&RK|5L4VR;S9)_=Zh(K?KE|SEZH1S~Rm-$zYbPuj{Pq)T; ztx;d011F^-dwvpzwc`UqCMN-T%5dml^$bC_4tTZ$w1r*&pK5GHKIM;aog2$qDeY567|p{70aymrN{;2Q=l2r+wX zycxwX$CuOVn+uf>4R)!JX$O10nmoW|j`0LCp{|*N^TmOXxIX)P451Z3%ny5#c)S{* zU*`@;l=A0f=0-1r+;|P)#C#GAvFLKCJuPp{cM7rBMUv82 z`pAWEss~$-X)23$P^?0oM-mDWRmPLW^d~v|rB-UP1H@!7NRWbhD243ZKY*dLng<;e zC@`oRlrz(l9w(-)`k<)JxUR>k$FJzi8Xwh(eX@3T_0d8_QT z@hAN9{sC}}om(NqfBbQ3hZ){bvE>WsmSE@7*6>c5^nAE;DFf2e!h=UYQ{q-G0b(FG z%^oNkMP!RW?%NXA(<~q0P4}*ullzA(mx`@OGI<}`qdM2rO8quR%xF2cCaTNxD}Khj zo1}HIq=K&x*5>j4`&4W=Awcyn*GlXKl?jw+J7AOg~RD*r@ zb7c$E(m9-^5-9rXohVpsVbK>|O!))FyRV`_6$0xgf3$&!Iqbf}|7P)ZU?Jx|-2(aV zd|>@#P3T;Gj~ON^ABza^K1k|yn6xrEW%g3lm}9rHV13m=`IV)yiM#w=Fq!q8{I&v? z-c6DrVQoW)S8tg@)lePYsn;m3;t&pcnS~!bUl2*tD%r#bp{Cx#A=1fQob2rrUDza& zknPWMqN5EJD=~IGg@C_Brw}Q(DOUBg8V~&r#g{unA;-+;2Rjk?CI>F}P8z8E?4ZTsl7KT-AJD?s()NKgbB^ zUH;g3bd%MpC12;Xm0VW+P~-`Cb$D-5EhVxZfV6r`@IajSYG#$(-kP(^F22WeE(c=v zx;v}(Ojq29RVQyvT>816fvL0n2UAW{{_;!&ksX%Ge#yl^-i)ik zbUiqQFHB#4hl%*tg;5eY9q5y6{r_VDtOt|dUH&q%KKd-88K8ODKwy>@1@3Mri&?S>0 z@th&}sBT;Q*_7?KkKTM<*GFND*oBTzY#&b z;{1kw0++08js25#RLl;ks!SYKFc)maakO;ojn) z_b<*zy?GJbk8N)3AbP{KN@sS#jg^fJfxd3fkW*?_q5;BksSv^Z6+z7t8!ItCh3WVs zV%yT2Qqt1B;xaKw)U+U9q89DsTYzyjMV(i6TAT2WLiwm1|IEW{Q0nuGz4^zh-DURXkr&bInlmv4 z%zVh@Z_GW4E%l!x_MQ60HFRC4eEX)x{RVEw*wNEZ=YTBxi^)IbdcE^vqC$WH4-%R- zlIDbpM>8vTh8tj~Dn6Whv_n0%qT zOQgY9zrYs}k1zMtttXHT9yP8ryMjf(vaDq&CLgB8SIawJ!$CY`dS8ik(T`t^XX5>jEjD=a4a6|9oj5-dB zCzg1vvQwD5ebV4)mH01Pp9m-v1n5{FU`IS)-G zu#)NRgDGIen0TL*TiuhUnsu~*HXAB1Y6I1NF;8y@ZTwSz1lT1(&xAvMw5ngHHIxD0 zgL^p3>bdhR``#*1CS%(1A$`1ZLkVB5N+|D&({{=hDYWtlADmjbqbC1a^jQGs1Au*z ztI6APCbHt{X1&{M(19urFELi9)w?yPr}JT~DoAA8T$+X+2`Tnh4=vk5;f0ap`aUuT zT@iJ{RFKX?2*1(P*QqUp=Y3Zo&?-4b0qaWW9D}hbj-bp!m>e;Yc3*c~c#TyCVSM*v zTI0rmzGjFVd9SL0B0gXB>khR5ry}}Boq9ZMn*N$F}8lGTWpn=Wq^Gy&xG_x zrppwt);v~s!e*dbOs6qlw4D6JMe30buWq;1e_Z^%`A}Oju&>0jC(Ifg(WC0f$y8P> zzSaj}0W@0MQj*`u+tXbuEAfFZFyoB;M{uk5{m?E1V1l^S@wK?_hK;YbE;)lrL6& zjXv0}=7b`HOHs5sy`NJUBV<^;q|a3i-T%;H;e=x9q{KDi8use+H3NM)8qYPI4x`OW zh!4X34@k^`BLO|$pKbWnj{?pAmPpJope!Cb1XrvO{>`dP9Qj1%^b64-TgHTFoTV$a z^|!ZhpLeGeOH-mcxKc&Zims*8d?ZN|EAN0u&#N+rxx(W^tHVrxW|{#97*M0{xo@T_ z2j8IP$FVEIlVI}y0+|Eg#1+}kkW$1J7zCh`KCzM(G2?7!M?tSx{7)If^UPo^sR=g^ z@?ozdGxg^7;_hi!m(8qZ;ZNRuy&Owg_jhopDozk*>u}W~ua%iLhRI|0kHhl%$Ng&D z1V}w$t4FRIu--ci9yL=;DW0P;oAHnHN%(l(kvIy(p=Ei=7*2i)LtCT%bcTPV%un+} zJhhGF`188MK*fs*PKm71R53gwwMQO{P*DpZq1j6zPYVV z1zF^QWab~2KS-7zK#MKX%^m<;zcD0K_Eh3xCtJ*1&xM{?fc3M4uQVCI3yPFh|8EkC zeP$iX%8`RMiimsnsO&*<%LLZ(A={a2m2f#BEdh}=z~v=x$bM9S$7JpMv=WI+cMez* zS$*HXB1$W);rCia$scmj22easD0uFh8oN-7Q07~>ueC1}DuWEwtL$hW4it?4VA2Z) z>WcwHuEa=g4q;e#P#P%cCFR6}BE5gJjSd>rCDPYbcH&Eq{qwr-SeVF*Q1B|CQ?MnQn zWt=e3?6fPNF>u66ps=UWWBBMlG1?tO$h~hR_zN!+lY=G1UhFoJG^SZ2)9{aDJsW)F z4NZ}TqIF{Udb4rK7_|3QMFo1z&Ndo6=H;jq>-4BU`kI&En;mS?YxzDF0Sz04$+NZ}az> z#m7lBwc=&&S_Hr9_b=mBc&{gZP=HboQ54ZlE=@vsd2w zuUO@leis!l6I;;lNfNI$-q98RbT5lV-A1j&)Di+6vqde4YC$a?>S9GGkrw12vEnYA zMm)1hVs<3?h%5ct_9VsIzctgqtN4I&!Qi64_?(qOS|++3K7P39zgg%W;q<2fIj zd3^SO<3=`VAd~2WC?`OW6{*l?_ z@`$KN$;5mroxePcxYei5;d_dMbX-djF}VI9^tnmYc_zgxN63+_#XlBo4W$XM6FH2> zLKSyruZ(nT82k+1=oGx?mgad>`%*x<1rTCT?YJT`q_%AST6mHX3~i|^hS484ISFK}S$5L<_8-bW`|(LSdv zr@pgW5f3B98bqO46MZndS6-sz$Gn>edII4Gd%ckhUXf#8({W1wU@%50#|yI&p}vwSi;uI{K9kusuCN;ha6gxZS`a0SxQT7 zwdU%OtE>gwaqF*(tTNph&pmf4tRiG2rC4?WBK#sR0w#5#r+LX$9WVF$9l>{zUwyqV zO`Z=s_?~XArcQ#MmWuEth*#Ju!oSwRPXQBPOs^jQuPc(63>V)Bk!=L#;~ux-pEq#9W@|8tdj)5Y_aJ4t}M zx3aNvqV?erF~kB>F`PHbD8b~o-Z!(u9Ed00EGHLXQ z1mu46kc`<>n5)ln%=;IGz|C%KLj49|c6?3ntI3h{iDv+L;0jh@5x;ownI_1mHS60e zGvO*JOQnB%R61OZ6q)BAfq@=pVJ!+z)Gc3^UrtkiGqI{WEB9_nf5fcrWVm}E)Ry*EZL!HZ(0$Vk&0^`N z38k1)BFtQLS2-QrMWnLDn3_d+hDu60wk$V3<)AA2k2mm>yMlGWsVHxXqWV)|3kQHS zT=y6t-cS(>BY#|F3IoXPfLNy-RDqM)N~>E(vJh{&zC&XDQuDMfko}B zpl~Y#o73MVee>XTkfz?<)53pQ=QfE5U-rwYI)v}f;SvO8S<&>%%tdUKlIT%deQCz# zanYL1-=v8U{}B?zT)d3)ap`gQ^3YhF^~R`bLk4?m%%#udZnXWo*B}Td^Kvo6QLc@C zgtgzy&tt}V*EFkc*z!-BVOqm$1ca5h^nZtvM88)hIa;TirpZ?^^}oYpOfFr}do&T( zIb%DY=%+HT0}}n75*vtlIwebWga$^s-)NJeq2BgNVKCpJI4EYy^^NCqwM_ANO zRfiMd9zQOQM0byeRr4Uk|87@{G%i3?k-`hP0V_{1xf@r-y4fqU+i4-~2ZtfOFzJVK zTc2x(RXzKktnA%^uD2>@@!pfp9+Lw{TlmABSaC-tSsrCa`4BvE2*r?QVb(VA zpQJTJ-GBTpZ6agrdp_7a7R_T7^?6O?NnPUpw6-IAT1)WK4;k^(1E-Z|b1-oz6Uj6~ zI09cuj+RI?epZ)4#6-RL&KDA8dr4MAL>^Lxwj$eqtc=o2pOqXnF+k!=>l=R335T$I&3dY&w;jc7V$Rk4og*3pfU5JP9+biN@A-N3hYIm2RLKu8JmQLfYS)slP zW9c&rFwQg6>@o6E=zv|_jQ){;N}~=XY6f*i(w}5jqf^z$t_oE^$W+Na*?7-*0xvg2 zG*b*H*0f&L>ioHKSh9}4dpM$OqGt#x8721DNJiO^ z){YYwc^0qLHYaj%iA7?|)Vv84(!y!8`)coV`KsBQRf(Jxj$rJ|3o|7*I2Dz7B(O5U z^}O*)FHj~Gxc_YVFt=(7Dw&aoU+-^@yko1NrW9JD3>lfHdi-TnY>6cvaJq5Zz(Lz! zqt*A{KjL6!MDt3@pvR5PW zF{!n)qOD3rTBX2r{85d;#I=wSYnoe>UdB5XkaM4I>OmTY9~-VqpE8~VzJLaSSwyQ~hIt*pd#&3nb9Isrsj2+|}tRR)f`BwJkVh5YeHHS=?@VymA!}+F9 zCN#!gAGGBUR(d`J$(pKrSri_~NI(`89GXuZTFEffz~TuAqM6c7h>dTQxWL6G{i9jC(ul8PrAabq;p<3bNbvzQV{hZ1#AT(B z8_IrxosUmT7MXgtz!8>1$ZffSSR7NMns+3vHZNpxL1RU7c~BHgv6I9PBVsJUD&~nQ zK5=l^-s3cwAr&v%v;Upy+w?U;+HV22-dmq6m4$UBr@psPaX8kq=MrSn@KZ$y&`_3)0rPqteTZ&#i|c;2>Jt=o*m){BH_@84ic zaukrCGm2)S$G<3%2BD{`O%G5D?uP^@x4_YXuciQKw1W94P*hQ@!726s6l zQ%_tHgXc=izXtzdxNz<#_+9QSTguX-20ky|nL0Hjx}1NKMQoNk-rWnZBNed7?hZcu zLynpal^$WB3!FjG@v|Zfwtiz`w8g9{CvJ2vw4TwRS(&2gO!3Q1F2f2A{$kovgfuVx zks4Nm=J(_@rTgztz2Ow;$tC?oUvkcUueIjJ%;6dKj_h64+J;bj6JJfo3EKa^MgCYT zvtDcsds=(hdATR8d3{u8*9JwS&zIJ){q=W3|>5uC_=R+&%d90M*(@ z@%V6YCWxJ#rRLE!X#lzPJpEQW*t}s{kGr`J5MpbEz4;oRF3F^xw zu0Z$v-U0Z%*H5+8*b9KwM?poljK0|SlXn@nb~$4}k0yb3&czY&IF7*vyGCwX9IW}?PDmn(PIhG z5vde0z2P)6Rds&ZADI~_8ox{Rf*wX{IqFiNeO(} z)LyjzGw$+U)Y9;SW?Lru?eZ>#Bww(e9MrONY@LagmFBSh!Ijd}3H@6Bc>|aCPsLO? zb3Ov2Ayl|zO`B0OJ};rL=b_ebxlPXA*LXf0K6m|Ca8EW)Eds!h5>xPPX=F|vSilkQcKID z^_PE3xz7u2&Sj(ca3fIp!y0`rd*IO+PBQ+>m|Oq=wjlP%#*L<>MQ2VChcsyiBa-fl z@d7Lri^lf!IFhz{R%t?3iCcbsu16_D^#R%Picpu=mGY;DJY`Ahh&fug7;s`<^q_UL0vKuk*H6=kWJCQ zTa;;hzph#wH86D1CRDEP$4ElZm7mAUABBKU_tddD_vz%E=L3wNQ5mH%6$`O8GbU4A zGTYVY1x*Z2AY;6{Qu(AR8Yg+yuN(-QOurGDCtQ-5abOY8zh<2riloanfm4w@^zsFt z8}<*kVGlzd&i;}rI~`ZCmG_Da#gW+u{m*EeWdNRbb(+q20nL!AnWs8Fx_JDcotmcS zrgB#f_*C7=)=_&l>S_0>Gv5QFL@uA>LsPvZ$MEijD0e*QNTB%3PW;pJ=Xr@*9yjqs z4+))OuYUP*J6Ml1Ei0_yzhf?sI6jNO*G9MZ%f^19$?Hc8_St+3-<@o*I{GXol-uf4 z8Y02j$s^cg-K&Y~?0h44guBQ(HEtFCW)~ZY#<;w(XcXR972^O>)Bh5anXFRN4ir5n zGqC)&kEa}yMc38ZF~heVCtcon%=TSLFN`=vUF8^?BPQ?+0N5mA62sB3P^mx3pqD+Ek}Bkoi%8_jrE#Vc3h>%p-xDYWn6#AFaK_{s9cMd!Y^K#!({xN)~Z$22HRBF z#T=LNR~F2)=YmRSzB@X?n~MFD`wZ7h`W9P9dF)I3U7=sgAq`0a+X#*!2Ajo|a2|Vr zRe!ggzlO-=?G6_plwCyv>WfCSJ_scFMuB({!=U(f1#Z+rffhv|_<5i8%jRY)>)!=k zO`|p0kBGQK-)2x>=*bGf2mDXdUyHFY+Y~*S{YYrB{0BE(!5-H>c$@{iu6+j+h;+DKrrz+4)sX-7L&eDSZ6sZ(^5?X zrV{}3iJ$o|%*&{uq=sh!V>TAJXLJ8Mg7(pm=s-S`0ScCYx!mtItoUQv2d^Ke+GNl| z_wxEOcHJ|cd%F_uUB?yT>y+@S85Rr4VxcV!aC=2 zm2sxZM@9y+3FOKf>>4naJL!x5T{x2Rll>>e&nWIA$k9p7h&p4v2GXZt-V_?ul%!Qo zI^-F6V2;@ev-}O0mC}ks$GM=FUJg6OX=FEw!NJ>a2Xclj(-ha~kj-;w{E#*}$F>G) zpHwyhX~fRVpv5XX!1fwdbR*#{KAP!GbD*^ps#V`Wk2hL_2!lomf8g(dI!yyy+1}2j zIun@VF`V!b2iS0{`gcQge+r%7o$jlz4x7MDX&@?ZFN3S~?9{q4c*KiSwpn=p9KzZK z0I8va<}Rd*jfSHt?p;LMyi_dMoa2PQz|o5SxBzxUFvVqBKOY zFqV`y*fe{cM5#gtlNIW%xTh&K9;Cu3jSdnYK?_2xbm&hXlJ}_m4U`;;XrZ~D$V0g* z!<)`$4gOI^wdx(O&Cq-soG5-2DdcXW)`zpLMC+Iue-2tN!W481zjNuQUlP`a)g=?f zV9~oPlb~CvmK3^uEp%3Mj10Hz+1L7@mx3m*)$~{BPIfXD4)!2JSCd>aAz@*tc^z?w zXVbX+p$ai36z8}COA1%^!{uE*#>V6Dn?V4>#*=RlCze(;^}CsxS}tqS1*2P$$nnhQ zvGg&DlTLEsVnm)O#C_9adyzAK?myqUz6&2RZ4FRWA1`8LQ&W2QFlXc736CN5P>}}Q z>LAvQbj^3QAKswAt@bw5pv~LYk8Ur7!>S+yxi!vpOf|P+iCxee$1qRfMIs9WbZ35R z1%WEX+6oTAX}$#m5{=N znF4BpndsQ#GIVuA`}&EF~XLU<3_BKn6LWJ6Zf8kwGlr&?>D$d)P_ z;k6>_#ar%eTVkkMR{Z{e2BPIC{eM(+sOpZ8M*r0{=z*a`b?(s+|JXR|=p$$OqopfW zCc-`5z~EpdXPc8~Rk>PLsGf92DV2cD&1#*o1G&$wx7bs>$+I_U^bjFg<%Hl^Ld_|q zeX#xGWsy__FiImB38!U6X{|UG4u-%I3g(b2dK1sJ^#X zYFAuk+`-JR>-s-+o%LIk?bF6ZkdSVWSh^eOZjcm^?i5(MYXRx*E(Kgfy1Tn$X{46! zuBBey-=FXOA6&+ZA7#U$30;OYzS zgdJbu58~}9<0zfsTGM)%tsJsQmZOGqn1_;BEJ{QDuO#@8RNdH#3-oJ*|HO_sl^8@y+f$g zzkFpmp8&_j$4lm04>^M)ai1j)_@#(539ODd{@+Na=Fkolj9Q-dx-08WnA!YOA$^6s zQZ#Ckg?SW*-$A+Rnl%BPxuGW}`I*(>Q5GW0(dq6!z1@zx;}Jmeqwo64O0gRkiL<4= zihw07sHExJE_5+9FJ7-Q!H;AH>guHajm$7rmxzYD9l&duW6!K>i~SRPbg8=y)pfr~ zoQ&2^9B=m6oa>Mh6PYsd3%*Y+d#eDzg<)GH_XT~WAeqbdJoK;EE5O|>V8Lu-*w2?- zcRFpk_*~?*&|oi6y)TR~;H6XUooF6jkG7)`#&^iWQxPDBcJlly2MC)P4}e%841YhXO}?>v_vw+zOKH!+-POoCk%}Bgqv4W6 za(*1|Xabv!x8P^=m<%Qz4cnfjkUuta1B4EVPCakE=qy!9`Gj^sYT%tENhaQW+L)?4 z@HmJi$wBytk_x`mGw|}Kvtz1tRre$!CSbi|wrhx7$n}W?-X$AWdfU}^3A`@oY2jZe zy9!6slV)8_sDN1~>VOL>ZW!f!31Zf}#vc-Xl;Zxq@*uZ(>QZUI1cVs|qY*?K{9d7= zED;YZ6N9%tzMLJ-OUzMaf8av){jTzmI?Oi)BJ`6A-9}v$Ffmkw#}`-bm~yUgkxwwMKrg9pv)dP9BgS6krVh zc=Ml29%;z(f(h6WW8M#!mWkt&;rBA66ukI8{06v$5uNAA6ZABP9W#m|-j7C}Pl1=(Z=w%J(Q+ zU-oCv*!4EIWMx_AVmMzZC68lp&HiE*rh6e=xx>L#`8Vsoa3C0>Z;ioK&w1CPN;uf_ z-5Gl%Mv1#ZuvknTWxCkVexhzOn6xOZk8C@C@hTn30QC4!NnNaEMM}(W)JX(YbBQV` zv&|4yG_+Y4&ipM32_+(TVM=dIsQ_M|Cv^qDGp2F%U}gQ}&dhhPhQu_mrUwI9XUi z89uM_ipUeFwImfP(P=E)U?TaG5(`{y&XE|Vkj1uC9m4v)t^%5E+S<7f&%|cuQY&NK8H8VV7m9c=(@a0N(DNY)waSH64LbDg4jo0qWcP}N z&?d4N9Ewde=;_hxeWh~d(lhR}G6611sD>&zd5k>4bOJRm;8#}$_<#tR1xTaq;-4&V zG%N=W|HH%~Sq?xTTsRB`Z7{thEEdo@oVhjCi<%PRX6~f_Y_+LH9EXUUbZ5U*cI>rM z(Sw+WCWuML#vkUrB}R=o5HaRKQGwwfSovgmG(4Oq&Cwg4Uj?n0{5<37Ie&(__4`*i zz&mSG->*L0Ztj|pB(ZxXvFK1Tl+CsTAs{f$qWn2 zcN+2b^IKBJhe99L?H}@8ERSlvtLR*pc+p=p{+?O>CuTX6k^<4|a(j519^kK@qs?nV z6LGK2!r_aG*U91%ZyF%9CLU5wWYo6v(l>!iT+V-(tSaj69)W+sN+lb^PM$JG6NWPw z;n)X(mfTf)-C;||zv+GV%f>h~0_`gVT1b~ypc$KDyAx3hL(+>3rDWJ7BK>1YWOPd( z2Awtt_dDik40iU-{Q2BvE8S#gBPWL-75wue3Sx)RjsTiUy60>yXA#_VZ7pGjFxk(M zZ&?oBgI@nRb}}frD9^ryO#v2C(fM$#E%j2~bpEox0_e08Jn}50hblga9qrN*HgXwg z_>6PD)%GcvNG}AzQ$2HADw-0sP+L-{j#0Y%4WIA?$h;`Q?aL= zY=Tz5+pRk(qNd2>CgxI_M`r^b{kr7YidBxfQN31VJ^I3>kJP|OD5$%K3- zqHV|1SK$j0m$gx}HmaxF*xLP^&Hg<4Q`8+J@b?dugW5YwihV75twVrFMvxyIhdMAq z;fx2$bFBiUL+2%c?}x0KLVWf8k3k!7*MH$8z;HNba`eL@%}NeSjYx7ggA&Pnya{41^Ib9pO^ze`E$e5~wTOctbZrwverw>*hL@ED_SL~J`RO-% z-9;Zdv1_IFKQ&dISyGJgeY~lM=S37M_*mkeS4LY1(=ZpwXlW;pxjC`8By;UO&4kktU8=c2m^ll z=jG2VcRG;-LBPtjJ_vkzoRtl{L7!?pm@HiiQdn`A&K=A25u7jf_3*)JZ5$E|K)6i0 zAoSQl8ky&-pKnLxBTEe68=-5xZA`y4J@`uaVYxl@E=zEnnnZu83*0(#Nb9e(CumhQ zU3?loK`QJGmTkpa+}bRy{RDMF)fIdxaa@`9j!h4ZEQkf##v2qJ?Mr$^ z#nO|z5vyx!ytTbZ8>=6q>Fyx^mFnJLt$1(-A;2yF4@g>gS;=fmys08ZvdBhkDD|6=)uI!ZEx?k7*-^od#!$_ ztl_xCRE7(QL|W?mB0bp`?oW{XjjDNRI`c7_SqI_gCm<+W*lxJ}``?mrNf1k~gICb0 zK4=scWUC4$5rQEA>}~DJxf_vd*r{G=Je18eTKrcKi6--2KYQ4WYOW*EQrTNjw$|+| z^5Qu=cu*OY(7`zUVQ$OTozWZ_I(58@{7vqwM}okxp<}WK8M!-CzqoAVy-Z30&iaET zdCgHn)-^Ng)mhhE)+}9;rrEPOdhJo_S|9%RNUsmK;b((%A)9old(~W5_Y=C=lXY(p zgI>a24$@4XqP0u0NX=0`8o_E$Sk)s;No2G|w_yxUDO6RZqAp zeVZ~W%>#oQPT~z)afgC#rhPP=aq1QrQ9deU@bfi!&O4L~i|sL#Z1<_8*bE|g^}|m? z$e3}s67Q}v(^{JtKB}35h-VKU{`eI`=p^k8znua^fuEg4CJe*$VZ%|}Sisx!D(|&j z8tQ)zmDqgpe`I`WCf$psIqH`Bcigv?FOL^}0-{b!t{(l8Y9Y=*(GZ&Fw1^Oe9iF?w&lF#_N-CP>dtpmDMtTiV}%=KFp60Sx79}e`Ax;e5$ zL|4W}IZSZr{$OGv&zTFw;X(Jz&2A7Ljcb|9QP3Wo8^D`?UG4K6q^C?uW~YtZr(K52 zXCu^I<&;upvV_nf*)k37@HTX=*lm1L zrRSDepw#|FchAZ^gG^A?5VN_yTj}x?vhGAu{HNT>jy;+8LSD9&{c3%wirU-oQ`;gB zYVqyh*e(}OYZX9eBd^?31a&z!(|EMXVz6KLK80+Ix1*BpCLgH3V}VBw2yZXxrLMF6 zPg{^G>T|KcK(C#v`QyjBvi7~ne8BVOs94I_H4BO*KfWi1BZUW(12?y_fk231eyLzS zJyrI-)oP~=x}ROA7(?(`Fl&WkK~V(d-t1BB9~xUVZ6VB9+NGgY z7dXsRR{QK8bdK^RP(Gh#iZ3}kzc5;IbIOi6NfBm7KC8Pptn_oZyh>VQi@q24QSj+sBlxOoiptVY8Xk9TX(!R9XUn?pE(~i1!OC~18Dxi_l#b=2 zC-2>bWY$gp^6}H+U##1Ldym<{0R0-5s?d|@?YB5saCq`4l(LpM&y4!0=MOMONpoR3r z0w&~$UBho0A~&uPD_hGr?hyU=Rz58Kf063ECCawWdG}ry+1~=~9d0I*&nU^=j=unq2Cu652GsOR!6+~N0 z1{fM+{BYrt7iu|JJ&R3nfurPG{Ypkt)D2p%s8Ww6ovyqM%g ziq9q@B0nq~4`aM|=_c7Re@%ZtBtG%;yPe=K2l(iCWjKL-J2F{lc1;!@T3>$VEU=>k zUvb{IE;EEa6mX(+j>@m9c~y3Xi7YM!?&moExmR1THdMTwCHEZ~?aqmHxRQ%n-{Je8 zaU1<^4O$p4nw7tIQUlx3HYR@#)L|OH$^D1-D%clhM%owEL|jjS=;7bfGD0yw7UN44 z>FR2u+;R%2pssd;$KY(YsjIbflAg10rInXm`BL`gG~V~w-3bM1tKH{R7~XX>RrM#* z2x_>Ux@enJ(9(H9%k5Hdcy4sBI*KC@Dqp;`Iv3kI*Tn6Z4Jew150 ze}7J`N;+ z)A99EAxx@(^ek}4Vgvsy%aT!Q`sL%0#Pic1v}wMfd8Z8B49I#ox@3(XOe}L@mG74( znZc*AG;i7p{8Aw$LXQBq!`heRZW~sKzQeM1{yTjDM~&ug0ppOhHscNK@LSmK*oQ}i z3~P+f(I(_8dM#IMs)4ExOS~=7jk|se9QLykI4;mAOp4rrN0u&nk_wVubBdV1!HY?& zmc=Lr z?*KEd<&zJ97+u~=iyNPH;CmjaS`x_IpzoshKU2743}yzUum~e_fz5*Bk2^9Em-jq^ zbX;;h2?fj-h=K`rNrz;~5T~*9+V$z%1CF|+KqBuE)7oEN`n=XZWkZ_tyh*wVTkO0Q_hU7 z+A30SG<72_qYWMJ9sjT+!mt?bH(F(59DPSGf<+Cl3jf6RL(yA=|BLsespT*$@oJES z=U~koTXQr0jS00fKG{oqsgMCCRuEVFvOE@Pf`*W#UN5-e z^M0DO&&F-|1hmk%@C@%SkeQa}Vw7AX-xzb(os^L?$pik3dP;`6Tg{SLq z76_PX6fBR;(0UG$&WIrcjy9?~{HD7*SFoOpxtN|I75R{Gk9TR3bD`niVX1Tx`JW=h zMeO^4=&s~J)n%pY;px$usSX&dwD7FsRqJKAPmN02x%u8N`l`WmK}OASy&@NASvQ>J z0;sO%bW@LMLDYljqt5eBENX5rx zQw&$bqXrk3bay(maQw4BzjtmGeZ>RN^nRtI;kv#=;H!tJypI|eBVXM6DK)TiXBo6c zg9^egec0u*;^w+D9jz5Gx%|t*PwX_pLKam4IU!Poz^RhP-}}{S1VnjnzLUD>e9<&F z+Z26u`EpIPEK>cM%vesv%y#25arjNNKM^U^DhHFrG+yYRhj5WMdPSGZ!bC za%1D>V!{!0cQ<46B6d%Ty???Z)*)z8yG`N&gWjjrKqSxuBYxE4W=dFB7deIv%ZfXj zm{}-z8?)8Yu>Unbex!f(fzZ)An#)+SQ%3NQcw5XY(H2C*Z%-vZ(;l%WxC-05bnx)= z)OYPs^!90~?j|?qj#8pU<>Vyae+?e@3Hz)wdvPQSG4Cbz{y`CnE_qrI!#$BM2}z8W zlhC15-}o9JZMOSktM2)<<&o%+Tu>nHU~ImFMDDb(Wv~7hK(_?b0?x(aaOP{aSTU|A z`4#Xy>jfRjZYh>*Ey;bE4{n~g2#}Z@Nk~u(-kFax!-$T#WVi29U-wQ3IYzs_x@5eIeJ>0$aLpV77=jt zd56Je6_Qny8GVN`xa_f)n`=_8mn z-weV!oi*KgA5w^DUaa#Q+A&cwX0>_&*?$x}i2gk;uE_|ZiA^_`)hbsIX^_RL87sxg z=XiDadQptFMY^UwJ{783j|%|${)lzlGyXW=nFW}+n2Gy|r!!Szh#Zt34{iXvdQ`~n-?=-cd)H)b1dTfMXSL2uVI}+I)?Sj{S zUDaxh=3%xteO~k_V7c{*Tp(^crdNbeKuWzxn#{;_;T-lDz|NjV#rU=2aC)$p6oPF)`E)TpALtd1;rL|oYz?hDqb^GsDT(f=x*NX){?7_>_tGql@Wf~o zG$*;8-+FP&G6X{U<=HvUDf&Gzj%5yFce;e0o5@hMIUkM%#V{SW$ehW$@x@&^}B zww?~h%wnYFR1*DhGDU4&K?~9*d4i9W4p7D!sECkg35dfo%nllQD^2OQmlP~KFtnC# z0*kpbBULe)!Ib*@H?9aK()63u`s@pv%hm$(JVnPg(wpJeIk|aC^bJPFQ$S2CkpDoX zPnYi^(EQy8xrgW(kB2rMG%MjQLEp>rVOgaaZ!UUjzLj%YcHQuEPn0yfx8%5Bus`_| zV}2rbi(1w-`gxZAm#ROzqNdjG3zKJ6J4$gB$}>VbOmzDk>ujOh6QRt7XAvUoksU{R z5ve!*Y7a&+=H&+y@yYig#{r~A+nJw4s4I_-8~;ETPDG#6V1GVMD6t-d%cS!O)Ho5S?V$yA$VPZ(^d*C!WN3w z2(Ke~uPUp5(?ZYY!bUkzJ@i{3S7#*C%lSaVH#a)T!jAGiCpy%Oriiu+OZl$<26uG+ zRLi)H-`Om`)8T&l!*sfi;S&fu--LIsuXs=gt(iARqI$W{iCNFUWixTDmKb=`e_-~2 zsZ9H9fRhO-XQ@q1q@VCJj!`ro1q+zSYmav?2>46??#Rx4*xDT5JhGlddSrdPFl^m- z$aL1IyySpsww{eR)LwB-Y%C=Y)_QEFFFmbyy!e1!qVK}x{=|7Z>30tC?kw&W&i4zk z|B7rspvlVjur-Hz3%>a|VdY{(su&WtSy&tK{9fp$-)DaNAJC2Q-TrNui3i1_VcLFZ zz!F&HitIUj{ExVn@|09WrT+^Qb3Up6pQ|DX)b6HEtlHy*Qem|>m*KI4u^ZXpHXlu# zrFPXQk>ox!S+M_)ACEA7@_rdRJ)F6}z=qCLfI2?@;bQ@o;P3l{x5y7@S^>HwMD3a# z{d_FsL@NAwB)~Zjp|?(q{XBN}E=%n-F8CY$OJ_JQ$nVMpnGiM!#zFgM$MqW=DP9qP z*JzZ5PK?D28~Bclvz-N^6jmPH85^O9=g(J?k>x!vu?f6~@P!3Mbo1W$axgFl$Eb`5 zl;v9`U^>qV^p=Pbn-A|#@E-au)Mn5ZgCx};Z2yI=kHA?g)GcmCQEkyP zoYl@^nKbvNmba3+S$1!`La8n5d&_5YBBgotHg=6S%Ijzj(a9h3y=^BLHzeBb63lDq z1y;V_!L64FAZTKBtzlYPsH7M?sux&+#_eiOY`W^aP|nQ@f)K@8FDd` zvYnciG2YxepQ5rpz?|f|dQx{?XB%HqH5PdqHiPGn$DaFx-e4G_XGX%ka92*7$$0`- z^(rv4;UQGC%x9~RO>=DJ2CFF+U=t5hl|jFW&sX){jlz?rn}{v+S6Gby?;dg|{rmVR z)Ym6KKwgaaQXsog2ZM*)ZbT=lca(LXwwd)_O&w{4F0NV=*U>BCt7;puGtKB|zHTx! zH*&D=$ZUKBHOqi-vXbYn4*yK;N#p|ip`9)!>yr5zrB;{!Yd@?cQ?mZyOxvjb$uY-<9B9FU)KyC$`G}Id*lT4BmLi$s` zR9%@0Kh-f}R@PlG+t5ZMAz6b|ck9ajxa6QKU?@YJ#%iuS8XWX8AtfT6IMxX;d$t^< zv_ULOk@8b{o98EPHqjLu)1VfbG?PRe{BWzOAr8)*`K!dTnZR`C-&rLjwa(GkxY_$K z^r?M#_9`kNl%tiSGT)NG{Ik1b_Mix6f)f!zhbqQ!#MU8x{v){_@=DbP0yqz29s-DU z;SG)}A)J@0nn!Ag>>%~-o9HcZ)L*h6m%Z9rBC<)X4-d?$n}ezDCe({CsM0HP{R@*b zupe$~x%CCu-C1PlyW9PVNEW55m##MZCzj zi)@uZwEfEIc*Feaup2%A^nnk_H}(Xr;bN&!6|7h=c=n#U*=Hg2B;$;FgR@A}NP`m-MyTo=@&rh38Zf7I=qI`Fa z{~eD3@7{adJwpJmZuhqTJx<3w z13%H}KNb5A60GR`{p)0J#_4__Vxev6SfMy8KZvd8NuxUs!bt7K9MY-H4B^*vth6Hp zTrsrer6!n_OL0so`Yty%DXtpa)9fGC5!k5v|F4XMRQ?@J>`AQ&pWo=0n#4UCEn zVojq=AvZvyum8~OPM!>a?39YnOVULjJL{~dMLHOcR12oAiu>mb!&#ROA6&Z>4L+LZ zx_RG+FSn?wj&5$E&yut=(^zR?v03+DpKgXWY+V$}xsH2sav1i(aH6k!Ym7;>&24!M zfn66eI<0(Jb96Im#-zAg5LUlk(1H^kM|EbjswEh{e_6Cq^m1}1d`{Sia1zr~OSl3M z?0+k=cTMkph=D@D(3OZ@SANGU$sDn*(>h^>XVVa9@Qxb6zNQ+vl(L;kQVi|)Sz$!n zhq2f)so)}4zy5*`>E`pWO^Mvcse&X&@)tL+HNVShJiBpYK^NGyY$B;p2>Ebhdq;wZc9jdU{kCqDpcRu`9(2?A9`Zhr}3*yazVK zT9?#Ocdrio>TSM`XM41_cOJndQpehVk_L~n{ossk8ParcNl?9_Fen+*p#0^-X+@Mn z#pL_v->RNAcHD5FP4GKL!EIyc(~pavt6uD?hN>DE?V-Mm}C=4sYdpE30-I0O5xPgba%R)U!M_S!4; zR`?opcfLyvSo~vLwZ!Bg*}PZnYWcvZ<6+Tfa#?;cc#CO!R%7fyo=Q6uv2|wJ=@*OM zQ-N>6PQ|lSr^Pf6KVSNCc+s}d;Cf>fIB9*y@5HAS`_XOc3Qvppn%vSN_Nnt0z-3^|-dfne1Ibyzv`~;uQ4`mc+Sw}xB(Dwi4 z&OU8q0v4r}b$KQtLIIq6Pv88Ig(ZA8<8I!S_tKF^12c)d=U0y&r49Nul4Z2SLz^T% zJ*1@4Y4N%$``Ow1U1S&<_WMHVIX4LC52H8GZNf>ZjMQ<-NcG1Ub{}=x4u7V1e3#2j z&7}wT>yl!u3;TN9?;fPrHspCZUJ!Z3xp&4lTYoHF1(CV=&Yg}{E}xr2TPdX!+deWw z?B>Xx=>iQ#$`>2%zr`qQ7EX9nyW6km^t$O0yMU`J5VEf;In+;-EwKZ=$OdK4$*6Z} z8*6Yq=e4U(X-Mb3?gdLFmgo9BGG&m9n$COmMOzBNgc9;GYP8{#n*I;VW&dQKGe84;4Awppm?`^&5Wfu6YE?7{kuF z@6s?gKw1PFP6%?jHw(W2d$lim^i6;N(u-T-@aRy($DQFv9B*i9h!iiJt9?WcyeBxe zwy&&lnApfbg|C`mK}`Fo1Yzd-a`}(wS9@GJpGR)OBjV-?!S~N|T8C`CBOf0{2C+Oi zn{}Sk#oA*sp1crT>J^5Mo|_9(f_d;AjvY9*uv zhb@E|NwBBGZfiV9dmTH!JJEc57EI8~^>K#PcQMcxz3Q1eh!9OA>h@Z|cxX-*U2Jdi z`1g49>>l8gqAIY(crya0-tx`ZC(q#Ou!Ev6Yl4^+6~taTcg=g0pRi9P;Dzk4U3P~@ zj+U{UhMknz_gP~-crg^hShS9~{4T4|I={u_*<{BZuGSg#tjc-0<*uD78^05842^ws zZD;nXTdLR1#ejGIywB}mKQwp;SSQcR(P^tgTJ6NrWoN&?gij z2hJ_(Ct&o&BoY6U1w)?L_F9G8y z2-g0Oit!Zzf#$mo;C#igL!|BHz+DLG)e>A^k$Ma&?Q(+a7fT9J`eit3hqBYZAy2Xg zEy8Dx^6e9Dq%{?`U44ng(j>6vg3~-R>yN~ahV-4yKT)r9Y0SqY^E4!?*7cy`*(yKP zd3c`qR(F&XCizG8(G3(v-z&cbLHP;C_9nlw9`dpaSQmIZ-IaDIbWCZ5XavJ8#-OWSikiaIV zllOkU|6-T)B2=O76?R+c)9?+LcBq+F!D&brGI99Ss3ya@oZt+%x7DAKeZHrUthTN= z<}f!5lBRv`Y#~D2Y*9t94gjv{m~dJvA1lRC3`kN-LqTaVef9TuPlcYVQw>Y6rpE@Z zqCag=>})@)-$%mi4K@sGY%i>Wy?cG14QbLs>kdgd8Y=zf-L8zOVamMl(nqku))3xk z8bYz;cJDLL>T7=oU`KU5V`z9F1E&cMsjU$Ag98(3ZBtUZ!JNg54!y%rb%=|PhDA6L zB|U}QgJ8J5%(X~a-nGh-VSs%_M@+f3Y947G?__pRqHQ6-ubwj?S~^+cR&?+Fw@shp zTK%*07>7w$sM|)JS6VINmiy7-ctQN{-)m|0mi8T&n}{?!b(|La$H1tBl7*Y}-uZ2! zIMewc{&IHoj^Vb$8g=e_fr(k2p8+vHFUc^jmi)sc^~&|?xo^6McyCBV-;Sdd>(Aq{oGUU?>n>PD(w?lNzn+Os5E@#NE2(o#iDKE6S{j{ zIoCHPg`-%ZB^CZYaX;GaNCu=DD5-;H*Ol@;p0NfDp&=2ClyJT#*79k>6v}b2|0U_GG(+UJv$EDoGIPj;Eqs8>vQ;!VGH%RV&2!Fe zD)WQRb829{)miyAHs=D>qso^FY<8;MebtJF7QyOYTIWKT**~7n%6IM*gVh#_o7c+vJwQf3&pRSf zeLcM%wlEWIEKOp!IHX%R|D-HxuFv43@VUulnu4L=MJx`%cC=*f1-?^rHPh$B zFY@GG@1iiN?x{6_k0QK6|1?io zT+rTEt`pVQ=7g+f0e_Veul$A^U+*sxpM$D?JRbw598uAUUxH;KMN$+YhrS!=Uq zCYCW*d?OhC>RjK0pCHR6T1V67pg)c~w4(%y_!!B96E1A{!bfw0wg}5r&6Wff?^HYE zu)oQkKEX?a?fhQ={`+fpYu8(MWTUFQ0Y~~=SB6FjrTm5(pmYP?`E*T(<<^+`Y>8vCUZgV5g_t|z8htJuLc*eI+Z-5-amsD-9W>uvqW=HSj|I^?Fu`P+4Y_Y(70$RZB&D&C4AMdf8pHBQcNAn)h+oWt-v(OBwpF5&GUxO zkWZznJ3u?-R)S#Q%L~VLHmKyggdEHzkEporkm`hE@ORgzLtgS|E1TnKEy|W8>wG?g}(r;i({+q=6wj+5rl`m z=Gt+BNr<*igi+%N2K?vpZ-=m%pG06brCUsg`XY=+zedaIQ+ACEjwxhzVt5~tY7}A6 z`kdEWJkRe5;!OJu!*ib(}qxvC;jb zQ1O>lI3+bYlxf-fp6+SzmOKUBW5P~u6Wa(LvCrKOt7mwZ$%2C1daa{ueDua-YjU|m zao}Fyp>X}3*z;+*)MOg;$nMO)TyfCcKfh*n-wBlpp}=hES=u-ulaRb&d1U0Nl8c;c zATk_deSsZ556}#LRB8Z|`clluGe2kr0HxzV2{)}6bGTW27~p|J8Q!eXBtp=nL#cqx24KqmM{7M>Zg4#}=;_)T%DGK8=N4op3^W#((+%seqd1xKSZhv}_CS7d4FZau6ZW!w4 zPfk)~>Ak7qw;!q;;Rha9*GnKFy;18mfP3=In<_ZKhAgWCQRmDC8u3WN{^yC=b{}Dj zg~Juj`Pf;hAIdoaPk4=4FVP9J4Ma=P6-m~8Jvdo?NoGpu8Cg%zo1IsOm* zklxb#fUKs>vC(ebn)z9!TdFfBBL1J7C`^sC@HV(0D$npGC!9JEBj+B|YTvKJ3a-<} zAX^U!BPudV0p6(m1R@WzheqCqz_G&s%Ih-J`#FfU`PpD1=y3BLu&cm=fCQa}Ba_O{ z_wg6AVfnKR-N!=0|DT__1?Pf#^>u4xJsPIypWSbS*--fkM0OtF&}fF9`TErl8)})@ R8s5Eq3Nk9v6_O@D{tv8-jX3}S diff --git a/moldesign/widgets/computeconfig.py b/moldesign/widgets/computeconfig.py index 929724a..acf0abf 100644 --- a/moldesign/widgets/computeconfig.py +++ b/moldesign/widgets/computeconfig.py @@ -17,6 +17,7 @@ import collections import ipywidgets as ipy +from pip._vendor.packaging import version import moldesign as mdt from moldesign import compute, uibase @@ -35,15 +36,16 @@ def configure(): __packageall.append('about') - class MDTConfig(ipy.Box): def __init__(self): super(MDTConfig, self).__init__(display='flex', flex_flow='column') self.compute_config = ComputeConfig() - self.tab_list = uibase.StyledTab([ipy.Box(),self.compute_config]) + self.changelog = ChangeLog() + self.tab_list = uibase.StyledTab([ipy.Box(), self.compute_config, self.changelog]) self.tab_list.set_title(0, '^') self.tab_list.set_title(1, 'Compute configuration') + self.tab_list.set_title(2, "What's new") self.children = [self.make_header(), self.tab_list] @@ -71,6 +73,55 @@ def _makelink(url, text): text=text) +class ChangeLog(ipy.Box): + def __init__(self): + super(ChangeLog, self).__init__(orientation='vertical') + try: + current = version.parse(mdt.__version__) + latest = self.version_check() + if current >= latest: + versiontext = 'Up to date. Latest release: %s' % latest + else: + versiontext = ('New release available! ' + '(Current: %s, latest: %s
    ' % (current, latest) + + 'Install it: ' + 'pip install -U moldesign' + '') + except Exception as e: + versiontext = 'Failed update check: %s' % e + + self.version = ipy.HTML(versiontext) + self.textarea = ipy.Textarea(width='700px', height='300px') + + p1 = os.path.join(mdt.PACKAGEPATH, "HISTORY.rst") + p2 = os.path.join(mdt.PACKAGEPATH, "..", "HISTORY.rst") + if os.path.exists(p1): + path = p1 + elif os.path.exists(p2): + path = p2 + else: + path = None + + if path is not None: + with open(path, 'r') as infile: + self.textarea.value = infile.read() + else: + self.textarea.value = 'HISTORY.rst not found' + + self.textarea.disabled = True + self.children = (self.version, self.textarea) + + @staticmethod + def version_check(): + """ + References: + http://code.activestate.com/recipes/577708-check-for-package-updates-on-pypi-works-best-in-pi/ + """ + import xmlrpclib + pypi = xmlrpclib.ServerProxy('https://pypi.python.org/pypi') + return pypi.package_releases('moldesign') + + class ComputeConfig(ipy.Box): def __init__(self): super(ComputeConfig, self).__init__(display='flex', flex_flow='column') diff --git a/setup.py b/setup.py index 404ded2..900e0a7 100644 --- a/setup.py +++ b/setup.py @@ -15,9 +15,6 @@ import sys from os.path import relpath, join -import imp - -import subprocess from setuptools import find_packages, setup from setuptools.command.install import install From 48f671896e7ad8070670553e126d091462ad59cb Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Thu, 28 Jul 2016 19:14:43 +0200 Subject: [PATCH 02/64] Add gaff parameterization and am1-bcc partial charge calculator --- moldesign/forcefields/forcefield.py | 8 ++ moldesign/interfaces/ambertools.py | 183 +++++++++++++++------------- moldesign/interfaces/openbabel.py | 2 +- moldesign/models/pyscf.py | 4 +- 4 files changed, 106 insertions(+), 91 deletions(-) diff --git a/moldesign/forcefields/forcefield.py b/moldesign/forcefields/forcefield.py index 7db9026..c3d157c 100644 --- a/moldesign/forcefields/forcefield.py +++ b/moldesign/forcefields/forcefield.py @@ -58,3 +58,11 @@ def __init__(self, mol, charges, ffparams=None, minimized_mol=None): def get_ffparams(self): chargemap = {atom: self.charges[atom.pdbname] for atom in self.mol.atoms} return mdt.interfaces.ambertools.get_gaff_parameters(self.mol, chargemap) + +ffdefaults = dict(protein='ff14SB', + dna='OL15', + rna='OL3', + carbohydrate='GLYCAM_06j-1', + lipid='lipid14', + water='tip3p', + organic='gaff2') diff --git a/moldesign/interfaces/ambertools.py b/moldesign/interfaces/ambertools.py index 87f461d..251377f 100644 --- a/moldesign/interfaces/ambertools.py +++ b/moldesign/interfaces/ambertools.py @@ -22,8 +22,8 @@ AmberParameters = collections.namedtuple('AmberParameters', 'prmtop inpcrd job') -GAFFParameters = collections.namedtuple('GAFFParameters', - 'lib frcmod job') +ExtraAmberParameters = collections.namedtuple('GAFFParameters', + 'lib frcmod job') DNA_FF = {ff: 'leaprc.DNA.%s'%ff for ff in ['OL15', 'bsc1']} RNA_FF = {ff: 'leaprc.RNA.%s'%ff for ff in ['OL3', 'YIL']} @@ -47,42 +47,44 @@ LEAPRCFILES.update(ffiles) -class ParameterizationError(Exception): pass +class ParameterizationError(Exception): + pass -def am1_bcc_charges(mol, minsteps=None, wait=True): - """ Doesn't work yet ...""" +@utils.kwargs_from(mdt.compute.run_job) +def calc_am1_bcc_charges(mol, **kwargs): + """Calculate am1 bcc charges at current geometry""" charge = utils.if_not_none(mol.charge, 0) - - engine = mdt.compute.get_engine() - image = compute.get_image_path(IMAGE, engine) command = 'antechamber -fi pdb -i mol.pdb -fo mol2 -o out.mol2 -c bcc -an n' - if charge != 0: command += ' -nc %d' % charge - if minsteps is not None: command += ' -ek "maxcyc=%d"' % minsteps + if charge != 0: + command += ' -nc %d' % charge - def parse_mol2(job): + def finish_job(job): """Callback to complete the job""" - atom_info = utils.DotDict(job=job) lines = iter(job.get_output('out.mol2').read().split('\n')) - while True: + charges = utils.DotDict(type='atomic') + + line = lines.next() + while line.strip()[:len('@ATOM')] != '@ATOM': line = lines.next() + + line = lines.next() + while line.strip()[:len('@BOND')] != '@BOND': fields = line.split() - if fields[0] == 'ATOM': - idx = int(fields[1]) - 1 - name = fields[2] - assert mol.atoms[idx].name == name - atom_info[mol.atoms[idx]] = utils.DotDict(partialcharge=u.q_e * float(fields[-2]), - atomtype=fields[-1]) - return atom_info - - job = engine.launch(image, - command=command, - name="am1-bcc, %s" % mol.name, - inputs={'mol.pdb': mol.write(format='pdb')}, - when_finished=parse_mol2) - uibase.display_log(job.get_display_object(), job.name) - if not wait: return job() - else: job.wait() + idx = int(fields[0]) - 1 + assert mol.atoms[idx].name == fields[1] + charges[mol.atoms[idx]] = u.q_e * float(fields[-1]) + line = lines.next() + + mol.properties['am1_bcc'] = charges + return charges + + job = pyccc.Job(image=mdt.compute.get_image_path(IMAGE), + command=command, + name="am1-bcc, %s" % mol.name, + inputs={'mol.pdb': mol.write(format='pdb')}, + when_finished=finish_job) + return compute.run_job(job, _return_result=True, **kwargs) @utils.kwargs_from(mdt.compute.run_job) @@ -114,19 +116,8 @@ def finish_job(job): return mdt.compute.run_job(job, _return_result=True, **kwargs) -# TODO: use a single force field specification object rather than 20 kwargs @utils.kwargs_from(compute.run_job) -def run_tleap(mol, - protein='ff14SB', - dna='OL15', - rna='OL3', - carbohydrate='GLYCAM_06j-1', - lipid='lipid14', - water='tip3p', - organic='gaff2', - off_files=(), - frcmod_files=(), - **kwargs): +def run_tleap(mol, forcefields=None, parameters=None, **kwargs): """ Drives tleap to create a prmtop and inpcrd file. Specifically uses the AmberTools 16 tleap distribution. @@ -135,15 +126,11 @@ def run_tleap(mol, Args: mol (moldesign.Molecule): Molecule to set up - protein (str): protein forcefield name (default:ff14SB) - dna (str): dna forcefield name (default: OL15) - rna (str): rna forcefield name (default: OL3) - carbohydrate (str): carbohydrate forcefield name (default: GLYCAM_06j) - lipid (str): lipid forcefield name (default: lipid14) - water (str): water forcefield name (default: tip3p) - organic (str): organic forcefield name (default: gaff2) - off_files (List[batch.FileContainer]): - frcmod_files (List[batch.FileContainer]): + forcefields (List[str]): list of the names of forcefields to use + (see AmberTools manual for descriptions) + parameters (List[ExtraAmberParameters]): (optional) list of amber parameters + for non-standard residues + **kwargs: keyword arguments to :meth:`compute.run_job` References: @@ -151,23 +138,25 @@ def run_tleap(mol, recommendations. """ # Prepare input for tleap - leapstr = ['source %s' % LEAPRCFILES[ff] for ff in - (protein, dna, rna, carbohydrate, lipid, water, organic)] - - for frcmod in frcmod_files: - fname = frcmod.dumphere() - leapstr.append('loadamberparam %s' % fname) - for off in off_files: - fname = off.dumphere() - leapstr.append('loadoff %s' % fname) + if forcefields is None: forcefields = mdt.forcefields.ffdefaults.values() + leapstr = ['source %s' % LEAPRCFILES[ff] for ff in forcefields] + inputs = {'input.pdb': mol.write(format='pdb')} + + if parameters: + for ipmtr, p in enumerate(parameters): + frcname = 'res%d.frcmod' % ipmtr + libname = 'res%d.lib' % ipmtr + inputs[frcname] = p.frcmod + inputs[libname] = p.lib + leapstr.append('loadamberparam %s' % frcname) + leapstr.append('loadoff %s' % libname) + leapstr.append('mol = loadpdb input.pdb\n' "check mol\n" "saveamberparm mol output.prmtop output.inpcrd\n" "quit\n") - # Launch the job - inputs = {'input.pdb': mol.write(format='pdb'), - 'input.leap': '\n'.join(leapstr)} + inputs['input.leap'] = '\n'.join(leapstr) job = pyccc.Job(image=compute.get_image_path(IMAGE), command='tleap -f input.leap', @@ -201,24 +190,41 @@ def assign_forcefield(mol, **kwargs): raise ParameterizationError('TLeap failed to assign force field parameters for %s' % mol, job) -def get_gaff_parameters(mol, charges, image=IMAGE, engine=None): - """ Doesn't work yet""" - inputs = {} +@utils.kwargs_from(mdt.compute.run_job) +def parameterize(mol, charges='esp', ffname='gaff2', **kwargs): + """Parameterize ``mol``, typically using GAFF parameters. + + Note: this requires partial charges to alread + + Args: + mol (moldesign.Molecule): + charges (str): what kind of partial charges to use? These will be taken from + ``mol.properties.[charges name]``; typical values will be 'esp', 'mulliken', + 'am1-bcc', etc. Use 'zero' to set all charges to 0 (for QM/MM and testing) + 'am1-bcc' will be calculated automatically if not available. + ffname (str): Name of the gaff-like forcefield file (default: gaff2) + + Returns: + ExtraAmberParameters: Parameters for the molecule + """ + + if charges == 'am1-bcc' and 'am1-bcc' not in mol.properties: + calc_am1_bcc_charges(mol) - # Add charges to molecule - inputs['mol.charges'] = '\n'.join(map(str, charges)) - inputs['mol.mol2'] = mol.write(format='mol2') + if charges == 'zero': + charges = [0.0 for atom in mol.atoms] + else: + charges = u.array([mol.properties[charges][atom] for atom in mol.atoms]) + if not charges.dimensionless: # allow for floats or charge units + charges = charges.to(u.q_e).magnitude - # Creates a mol2 file with the passed charges - cmds.append('antechamber -i mol.mol2 -fi mol2 -o mol_charged.mol2 -fo mol2 -c rc -cf mol.charges') + inputs = {'mol.mol2': mol.write(format='mol2'), + 'mol.charges': '\n'.join(map(str, charges))} - # Add missing parameters, write out library and parameter files - cmds.append('parmchk -i mol_charged.mol2 -f mol2 -o mol.frcmod') + cmds = ['antechamber -i mol.mol2 -fi mol2 -o mol_charged.mol2 -fo mol2 -c rc -cf mol.charges', + 'parmchk -i mol_charged.mol2 -f mol2 -o mol.frcmod', 'tleap -f leap.in'] - # Create the lib file - cmds.append('tleap -f lea.in') - inputs['leap.in'] = '\n'.join(["source leaprc.%s" % ff, - "source leaprc.gaff", + inputs['leap.in'] = '\n'.join(["source leaprc.%s" % ffname, "LIG = loadmol2 mol_charged.mol2", "fmod = loadamberparams mol.frcmod", "check LIG", @@ -226,17 +232,18 @@ def get_gaff_parameters(mol, charges, image=IMAGE, engine=None): "saveamberparm LIG mol.prmtop mol.inpcrd", "quit\n"]) - # Submit the job and wait - job = engine.launch(imagename, - ' && '.join(cmds), - inputs=inputs, - name="GAFF assignments" % mol.name) - uibase.display_log(job.get_display_object(), "tleap, %s"%mol.name) - job.wait() - - param = GAFFParameters(job.get_output('mol.lib'), - job.get_output('mol.frcmod'), - job) - return param + def finish_job(j): + param = ExtraAmberParameters(j.get_output('mol.lib'), + j.get_output('mol.frcmod'), + j) + return param + + job = pyccc.Job(image=mdt.compute.get_image_path(IMAGE), + command=' && '.join(cmds), + inputs=inputs, + when_finished=finish_job, + name="GAFF assignment: %s" % mol.name) + + return mdt.compute.run_job(job, _return_result=True, **kwargs) diff --git a/moldesign/interfaces/openbabel.py b/moldesign/interfaces/openbabel.py index bcb932a..8134780 100644 --- a/moldesign/interfaces/openbabel.py +++ b/moldesign/interfaces/openbabel.py @@ -206,7 +206,7 @@ def mol_to_pybel(mdtmol): obres = resmap[atom.residue] obres.AddAtom(obatom) - obres.SetAtomID(obatom, atom.pdbname) + obres.SetAtomID(obatom, atom.name) for atom in mdtmol.bond_graph: a1 = atommap[atom] diff --git a/moldesign/models/pyscf.py b/moldesign/models/pyscf.py index a12eb58..b513637 100644 --- a/moldesign/models/pyscf.py +++ b/moldesign/models/pyscf.py @@ -66,11 +66,11 @@ def __init__(self, **kwargs): self.kernel = None self.logs = StringIO() self.last_el_state = None - self.logger = uibase.Logger('PySCF interface') # eventually, this be a child of the parent molecule + self.logger = uibase.Logger('PySCF interface') @compute.runsremotely(enable=force_remote, is_imethod=True) def calculate(self, requests=None, guess=None): - self.logger = uibase.Logger('PySCF calc') # eventually, this be a child of the parent molecule + self.logger = uibase.Logger('PySCF calc') do_forces = 'forces' in requests if do_forces and self.params.theory not in self.FORCE_CALCULATORS: raise ValueError('Forces are only available for the following theories:' From ea3ad49f9efeb5d9dcb9768d78db77d7b99d1b47 Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Fri, 29 Jul 2016 15:25:54 +0200 Subject: [PATCH 03/64] Polish GAFF and AM1/BCC, add gasteiger charges --- moldesign/compute/configuration.py | 5 ++- moldesign/interfaces/ambertools.py | 62 +++++++++++++++++++++------ moldesign/models/openmm.py | 16 +------ moldesign/tools.py | 6 ++- moldesign/widgets/parameterization.py | 5 +-- 5 files changed, 60 insertions(+), 34 deletions(-) diff --git a/moldesign/compute/configuration.py b/moldesign/compute/configuration.py index 8a6c3e7..dec22ab 100644 --- a/moldesign/compute/configuration.py +++ b/moldesign/compute/configuration.py @@ -60,7 +60,8 @@ default_python_image (str): Image to run python commands in (default: ``docker.io/autodesk/moldesign:moldesign_complete-[VERSION]``, where [VERSION] is the version of MDT) - default_version_tag (str): Default version tag for docker images (default: 'latest') + default_version_tag (str): Default version tag for docker images + (default: ``moldesign.__version__``) default_docker_machine (str): Name of the docker machine to connect to; if ``engine_type=='docker'``, EITHER this OR ``default_docker_url`` (but not both) must be set. (default: 'default') @@ -91,7 +92,7 @@ default_python_image=None, default_docker_host='unix://var/run/docker.sock', default_docker_machine='default', - default_version_tag='0.7.1') + default_version_tag='0.7.2') DEF_CONFIG = CONFIG_DEFAULTS.copy() """ dict: default configuration to be written to moldesign.yml if it doesn't exist diff --git a/moldesign/interfaces/ambertools.py b/moldesign/interfaces/ambertools.py index 251377f..bbffb5e 100644 --- a/moldesign/interfaces/ambertools.py +++ b/moldesign/interfaces/ambertools.py @@ -53,11 +53,42 @@ class ParameterizationError(Exception): @utils.kwargs_from(mdt.compute.run_job) def calc_am1_bcc_charges(mol, **kwargs): - """Calculate am1 bcc charges at current geometry""" + """Calculate am1 bcc charges + + Args: + mol (moldesign.Molecule): assign partial charges to this molecule + (they will be stored at ``mol.properties['am1-bcc']``) + + Note: + This will implicity run an AM1 energy minimization before calculating the final + partial charges. For more control over this process, use the + ``moldesign.models.SQMPotential`` energy model to calculate the charges. + + Returns: + Mapping[moldesign.Atom, units.Scalar[charge]]: AM1-BCC partial charges on each atom + """ + return _antechamber_calc_charges(mol, 'bcc', 'am1-bcc', kwargs) + + +@utils.kwargs_from(mdt.compute.run_job) +def calc_gasteiger_charges(mol, **kwargs): + """Calculate gasteiger charges + + Args: + mol (moldesign.Molecule): assign partial charges to this molecule + + Returns: + Mapping[moldesign.Atom, units.Scalar[charge]]: gasteiger partial charges on each atom + (they will be stored at ``mol.properties['gasteiger']``) + """ + return _antechamber_calc_charges(mol, 'gas', 'gasteiger', kwargs) + + +def _antechamber_calc_charges(mol, ambname, chargename, kwargs): charge = utils.if_not_none(mol.charge, 0) - command = 'antechamber -fi pdb -i mol.pdb -fo mol2 -o out.mol2 -c bcc -an n' + command = 'antechamber -fi pdb -i mol.pdb -fo mol2 -o out.mol2 -c %s -an n'%ambname if charge != 0: - command += ' -nc %d' % charge + command += ' -nc %d'%charge def finish_job(job): """Callback to complete the job""" @@ -71,22 +102,23 @@ def finish_job(job): line = lines.next() while line.strip()[:len('@BOND')] != '@BOND': fields = line.split() - idx = int(fields[0]) - 1 + idx = int(fields[0])-1 assert mol.atoms[idx].name == fields[1] - charges[mol.atoms[idx]] = u.q_e * float(fields[-1]) + charges[mol.atoms[idx]] = u.q_e*float(fields[-1]) line = lines.next() - mol.properties['am1_bcc'] = charges + mol.properties[chargename] = charges return charges job = pyccc.Job(image=mdt.compute.get_image_path(IMAGE), command=command, - name="am1-bcc, %s" % mol.name, + name="%s, %s"%(chargename, mol.name), inputs={'mol.pdb': mol.write(format='pdb')}, when_finished=finish_job) return compute.run_job(job, _return_result=True, **kwargs) + @utils.kwargs_from(mdt.compute.run_job) def build_bdna(sequence, **kwargs): """ Uses Ambertools' Nucleic Acid Builder to build a 3D double-helix B-DNA structure. @@ -143,6 +175,8 @@ def run_tleap(mol, forcefields=None, parameters=None, **kwargs): inputs = {'input.pdb': mol.write(format='pdb')} if parameters: + if isinstance(parameters, ExtraAmberParameters): + parameters = [parameters] for ipmtr, p in enumerate(parameters): frcname = 'res%d.frcmod' % ipmtr libname = 'res%d.lib' % ipmtr @@ -207,15 +241,19 @@ def parameterize(mol, charges='esp', ffname='gaff2', **kwargs): Returns: ExtraAmberParameters: Parameters for the molecule """ + assert mol.num_residues == 1 + resname = mol.residues[0].resname if charges == 'am1-bcc' and 'am1-bcc' not in mol.properties: calc_am1_bcc_charges(mol) + elif charges == 'gasteiger' and 'gasteiger' not in mol.properties: + calc_gasteiger_charges(mol) if charges == 'zero': charges = [0.0 for atom in mol.atoms] else: charges = u.array([mol.properties[charges][atom] for atom in mol.atoms]) - if not charges.dimensionless: # allow for floats or charge units + if not charges.dimensionless: # implicitly convert floats to fundamental charge units charges = charges.to(u.q_e).magnitude inputs = {'mol.mol2': mol.write(format='mol2'), @@ -225,11 +263,11 @@ def parameterize(mol, charges='esp', ffname='gaff2', **kwargs): 'parmchk -i mol_charged.mol2 -f mol2 -o mol.frcmod', 'tleap -f leap.in'] inputs['leap.in'] = '\n'.join(["source leaprc.%s" % ffname, - "LIG = loadmol2 mol_charged.mol2", + "%s = loadmol2 mol_charged.mol2" % resname, "fmod = loadamberparams mol.frcmod", - "check LIG", - "saveoff LIG mol.lib", - "saveamberparm LIG mol.prmtop mol.inpcrd", + "check %s" % resname, + "saveoff %s mol.lib" % resname, + "saveamberparm %s mol.prmtop mol.inpcrd" % resname, "quit\n"]) def finish_job(j): diff --git a/moldesign/models/openmm.py b/moldesign/models/openmm.py index 194185f..4e87231 100644 --- a/moldesign/models/openmm.py +++ b/moldesign/models/openmm.py @@ -234,21 +234,7 @@ def _create_system(self): self.mm_topology = self.mm_prmtop.topology print 'Created force field using embedded prmtop file' else: - self.mm_pdb = from_filepath(opm.app.PDBFile, - StringIO(self.mol.write(format='pdb'))) - self.mm_topology = self.mm_pdb.topology - ffs = self._get_forcefield_args() - self.mm_forcefield = opm.app.ForceField(*self._get_forcefield_args()) - print 'Created force field using OpenMM templates: %s' % str(ffs) - self.mm_system.createSystem(self.mm_topology, self.mol.name, - **system_params) - - def _get_forcefield_args(self): - ff = self.params.forcefield[:2] - if ff[:5] == 'amber': - return ('%s.xml' % ff, 'tip3p.xml') - else: - raise NotImplementedError() + raise NotImplementedError('OpenMM requires a PRMTOP file') def _set_openmm_state(self): # TODO: periodic state self.sim.context.setPositions(opm.pint2simtk(self.mol.positions)) diff --git a/moldesign/tools.py b/moldesign/tools.py index 655e224..234b5d7 100644 --- a/moldesign/tools.py +++ b/moldesign/tools.py @@ -18,9 +18,11 @@ from moldesign.interfaces.openbabel import add_hydrogen, guess_bond_orders from moldesign.interfaces.pdbfixer_interface import mutate, solvate -from moldesign.interfaces.ambertools import assign_forcefield +from moldesign.interfaces.ambertools import assign_forcefield, parameterize +from moldesign.interfaces.ambertools import calc_am1_bcc_charges, calc_gasteiger_charges -__all__ = 'add_hydrogen guess_bond_orders mutate solvate assign_forcefield'.split() +__all__ = ('add_hydrogen guess_bond_orders mutate solvate' + ' assign_forcefield parameterize').split() diff --git a/moldesign/widgets/parameterization.py b/moldesign/widgets/parameterization.py index e1fd78e..f6be813 100644 --- a/moldesign/widgets/parameterization.py +++ b/moldesign/widgets/parameterization.py @@ -47,15 +47,14 @@ def __init__(self, job, molin, molout=None): self.errorlist = ipy.Select(options=collections.OrderedDict((e.short, e) for e in self.msg)) self.errmsg = ipy.HTML('-') - self.viewerpane = self.molin.draw() - self.viewer = self.viewerpane.children[0] + self.viewer = self.molin.draw3d() self.viewer.ribbon(opacity=0.7) if self.errorlist.value is not None: self.switch_display({'old': self.errorlist.value, 'new': self.errorlist.value}) self.errorlist.observe(self.switch_display, 'value') children = (self.status, - ipy.HBox([self.viewerpane, ipy.VBox([self.listdesc, self.errorlist])]), + ipy.HBox([self.viewer, ipy.VBox([self.listdesc, self.errorlist])]), self.errmsg) super(ParameterizationDisplay, self).__init__(children=children) From 3e3b06470efc60aeb22a35e02039a7e05eef41b6 Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Fri, 29 Jul 2016 22:23:15 +0200 Subject: [PATCH 04/64] Improved formal charge and topology handling --- moldesign/HISTORY.rst | 26 ++++++++++++++++---------- moldesign/interfaces/openbabel.py | 16 ++++++++-------- moldesign/molecules/atomcollections.py | 2 +- moldesign/molecules/atoms.py | 7 +++++-- moldesign/molecules/biounits.py | 6 ------ moldesign/molecules/molecule.py | 20 ++++++++++++-------- moldesign/viewer/viewer2d.py | 26 +++++++++++++++++++++++--- moldesign/viewer/viewer3d.py | 4 ++-- 8 files changed, 67 insertions(+), 40 deletions(-) diff --git a/moldesign/HISTORY.rst b/moldesign/HISTORY.rst index 9e4aac9..e65e32d 100644 --- a/moldesign/HISTORY.rst +++ b/moldesign/HISTORY.rst @@ -1,29 +1,35 @@ 0.7.3 (WIP) =========== - - Add changelog and version check to the ``mdt.about()`` (aka mdt.configure) widget - - Add GAFF parameterizer for small molecules -- ``params = mdt.parameterize(mol)`` +NEW MODELLING FEATURES + - GAFF parameterizer for small molecules -- ``params = mdt.parameterize(mol)`` + - AM1-BCC and Gasteiger partial charge calculators + +CHANGES + - create changelog and version check to the ``mdt.about()`` (aka mdt.configure) widget + +BUGFIXES 0.7.2 - July 26, 2016 ===================== -FEATURES - - Completed tutorials +NEW MODELLING FEATURES - Add trajectory geometry analysis functions (``traj.dihedral``, ``traj.angle``, etc.) - Can now calculate angles, dists, and dihedrals by name within a residue (``residue.distance('CA','CG')``) - - Can request a dihedral angle using only two atoms defining the central bond (MDT will try to - infer the other two atoms uniquely and sanely) + - Calculate dihedral angles using only two atoms defining the central bond (MDT will infer + infer the other two in a consistent way) -BUGS +CHANGES + - Completed tutorials + +BUGFIXES - #28: Fixed a rounding error and logging problems with OpenMM trajectory snapshots - #21: Better bond orders to structures in Amber files, which don't store them - #20: Store OpenMM force vector correctly 0.7.1 - July 20, 2016 ===================== -Bugfix release - -BUGS +BUGFIXES - #4: Use public demo CCC server by default - #3: Fix ``python -m moldesign intro`` diff --git a/moldesign/interfaces/openbabel.py b/moldesign/interfaces/openbabel.py index 8134780..e414b27 100644 --- a/moldesign/interfaces/openbabel.py +++ b/moldesign/interfaces/openbabel.py @@ -216,12 +216,11 @@ def mol_to_pybel(mdtmol): obmol.AddBond(a1.GetIdx(), a2.GetIdx(), order) obmol.EndModify() pbmol = pb.Molecule(obmol) - if hasattr(mdtmol.atoms[0], 'charge'): - for atom in atommap: - idx = atommap[atom].GetIdx() - obatom = obmol.GetAtom(idx) - obatom.SetPartialCharge(atom.charge) - print atommap[atom], + + for atom in atommap: + idx = atommap[atom].GetIdx() + obatom = obmol.GetAtom(idx) + obatom.SetFormalCharge(atom.formal_charge) return pbmol @@ -254,16 +253,17 @@ def pybel_to_mol(pbmol, atom_names=True, **kwargs): if pybatom.atomicnum == 67: print ("WARNING: openbabel parsed atom serial %d (name:%s) as Holmium; " - "correcting to hydrogen. ")%(pybatom.OBAtom.GetIdx(), name) + "correcting to hydrogen. ") % (pybatom.OBAtom.GetIdx(), name) atnum = 1 elif pybatom.atomicnum == 0: print "WARNING: openbabel failed to parse atom serial %d (name:%s); guessing %s. " % ( pybatom.OBAtom.GetIdx(), name, name[0]) - atnum = moldesign.core.data.ATOMIC_NUMBERS[name[0]] + atnum = moldesign.data.ATOMIC_NUMBERS[name[0]] else: atnum = pybatom.atomicnum mdtatom = moldesign.molecules.atoms.Atom(atnum=atnum, name=name, + formal_charge=pybatom.formalcharge, pdbname=name, pdbindex=pybatom.OBAtom.GetIdx()) newatom_map[pybatom.OBAtom.GetIdx()] = mdtatom mdtatom.position = pybatom.coords * angstrom diff --git a/moldesign/molecules/atomcollections.py b/moldesign/molecules/atomcollections.py index 647f32c..1228058 100644 --- a/moldesign/molecules/atomcollections.py +++ b/moldesign/molecules/atomcollections.py @@ -163,7 +163,7 @@ def atoms_within(self, radius, other=None, include_self=False): def num_atoms(self): """ int: number of atoms in this object """ return len(self.atoms) - natoms = numatoms = num_atoms + natoms = num_atoms @property def center_of_mass(self): diff --git a/moldesign/molecules/atoms.py b/moldesign/molecules/atoms.py index fefb1dd..0c439df 100644 --- a/moldesign/molecules/atoms.py +++ b/moldesign/molecules/atoms.py @@ -198,6 +198,7 @@ def markdown_summary(self): lines.append('**Atomic number**: %d' % self.atnum) lines.append("**Mass**: %s" % self.mass) + lines.append('**Formal charge**: %s' % self.formal_charge) if self.molecule is not None: if self.molecule.is_biomolecule: @@ -311,7 +312,7 @@ class Atom(AtomDrawingMixin, AtomGeometryMixin, AtomPropertyMixin, AtomReprMixin ################################################################# # Methods for BUILDING the atom and indexing it in a molecule def __init__(self, name=None, atnum=None, mass=None, chain=None, residue=None, - pdbname=None, pdbindex=None, element=None): + formal_charge=None, pdbname=None, pdbindex=None, element=None): # Allow user to instantiate an atom as Atom(6) or Atom('C') if atnum is None and element is None: @@ -330,13 +331,14 @@ def __init__(self, name=None, atnum=None, mass=None, chain=None, residue=None, if mass is None: self.mass = data.ATOMIC_MASSES[self.atnum] else: self.mass = mass + self.formal_charge = formal_charge self.residue = residue self.chain = chain self.molecule = None self.index = None self._position = np.zeros(3) * u.default.length self._momentum = np.zeros(3) * (u.default.length* - u.default.mass/u.default.time) + u.default.mass/u.default.time) self._bond_graph = {} def to_json(self, parent=None): @@ -475,6 +477,7 @@ def num_bonds(self): """ int: the number of other atoms this atom is bonded to """ return len(self.bond_graph) + nbonds = num_bonds @property def symbol(self): diff --git a/moldesign/molecules/biounits.py b/moldesign/molecules/biounits.py index 618551d..70fe17c 100644 --- a/moldesign/molecules/biounits.py +++ b/moldesign/molecules/biounits.py @@ -158,12 +158,6 @@ def atoms(self): key=lambda x: x.index)) return atoms - @property - def natoms(self): - """ int: number of atoms contained in this entity and its children - """ - return len(self.atoms) - num_atoms = numatoms = natoms @toplevel diff --git a/moldesign/molecules/molecule.py b/moldesign/molecules/molecule.py index 73a450f..c3d9037 100644 --- a/moldesign/molecules/molecule.py +++ b/moldesign/molecules/molecule.py @@ -565,11 +565,6 @@ def _rebuild_topology(self, bond_graph=None): self._assign_atom_indices() self._assign_residue_indices() self._dof = None - num_bonds = 0 - for atom in self.bond_graph: - num_bonds += len(atom.bond_graph) - assert num_bonds % 2 == 0 - self.num_bonds = num_bonds / 2 @staticmethod def _build_bonds(atoms): @@ -906,7 +901,8 @@ class Molecule(AtomContainer, name (str): A descriptive name for molecule charge (units.Scalar[charge]): molecule's formal charge ndims (int): length of the positions, momenta, and forces arrays (usually 3*self.num_atoms) - num_atoms (int): number of atoms (synonyms: num_atoms, numatoms) + num_atoms (int): number of atoms (synonym: natoms) + num_bonds (int): number of bonds (synonym: nbonds) positions (units.Array[length]): Nx3 array of atomic positions momenta (units.Array[momentum]): Nx3 array of atomic momenta masses (units.Vector[mass]): vector of atomic masses @@ -942,7 +938,7 @@ def __init__(self, atomcontainer, name=None, bond_graph=None, copy_atoms=False, pdbname=None, - charge=0): + charge=None): # NEW_FEATURE: deal with random number generators per-geometry # NEW_FEATURE: per-geometry output logging super(Molecule, self).__init__() @@ -969,11 +965,12 @@ def __init__(self, atomcontainer, self._defres = None self._defchain = None self.pdbname = pdbname - self.charge = charge self.constraints = [] self.energy_model = None self.integrator = None + self.charge = utils.if_not_none(charge, sum(atom.formal_charge for atom in self.atoms)) + # Builds the internal memory structures self.chains = Instance(molecule=self) self.residues = [] @@ -1015,6 +1012,13 @@ def velocities(self): def velocities(self, value): self.momenta = value * self.dim_masses + @property + def num_bonds(self): + """int: number of chemical bonds in this molecule""" + return sum(atom.nbonds for atom in self.atoms) + + nbonds = num_bonds + def addatom(self, newatom): """ Add a new atom to the molecule diff --git a/moldesign/viewer/viewer2d.py b/moldesign/viewer/viewer2d.py index 9c1e902..0aa800a 100644 --- a/moldesign/viewer/viewer2d.py +++ b/moldesign/viewer/viewer2d.py @@ -19,7 +19,6 @@ from moldesign import utils import moldesign.units as u -from moldesign.data import color_rotation from moldesign.molecules import AtomList from . import toplevel, ColorMixin @@ -61,7 +60,15 @@ def __init__(self, mol, raise ValueError('Refusing to draw more than 200 atoms in 2D visualization. ' 'Override this with _forcebig=True') - if names is None: self.names = [atom.name for atom in self.atoms] + if names is None: + names = [] + for atom in self.atoms: + if atom.formal_charge == 0: + names.append(atom.name) + else: + names.append(atom.name + _charge_str(atom.formal_charge)) + + self.names = names self.atom_indices = {atom: i for i, atom in enumerate(self.atoms)} self.selection_group = None @@ -78,7 +85,7 @@ def __reduce__(self): def to_graph(self, atoms): nodes, links = [], [] for i1, atom1 in enumerate(atoms): - nodes.append(dict(atom=atom1.name, index=i1)) + nodes.append(dict(atom=self.names[i1], index=i1)) if atom1.atnum == 6 and not self.carbon_labels: nodes[-1].update({'atom': '', 'size': 0.5, @@ -117,6 +124,19 @@ def handle_selection_event(self, selection): [a for a in selection['atoms'] if a in self.atom_indices]) +def _charge_str(q): + if q == 0: + return '' + elif q == 1: + return '+' + elif q == -1: + return '-' + elif q > 0: + return '+%d' % q + else: + return str(q) + + @toplevel class DistanceGraphViewer(ChemicalGraphViewer): """ Create a 2D graph that includes edges with 3D information. This gives a 2D chemical that diff --git a/moldesign/viewer/viewer3d.py b/moldesign/viewer/viewer3d.py index de3e9ff..fbf2343 100644 --- a/moldesign/viewer/viewer3d.py +++ b/moldesign/viewer/viewer3d.py @@ -96,7 +96,7 @@ def autostyle(self, render=True): cartoon_atoms.extend(residue.atoms) elif residue.type in ('water', 'solvent'): line_atoms.extend(residue.atoms) - elif residue.type in ('dna', 'rna') and self.mol.numatoms > 1000: + elif residue.type in ('dna', 'rna') and self.mol.num_atoms > 1000: cartoon_atoms.extend(residue.atoms) else: # includes DNA, RNA if molecule is small enough stick_atoms.extend(residue.atoms) @@ -113,7 +113,7 @@ def autostyle(self, render=True): self.stick(atoms=stick_atoms, render=False) # Deal with unbonded atoms (they only show up in VDW rep) - if self.mol.numatoms > 1000: + if self.mol.num_atoms > 1000: print 'WARN: large structure; waters not shown by default.' lone = [atom for atom in self.mol.atoms if atom.num_bonds == 0 and atom.residue.type != 'water'] From 00f7e1398c86cb50074939e69808388888de1069 Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Fri, 29 Jul 2016 16:18:52 -0700 Subject: [PATCH 05/64] Work on water box solvation tool - rename it from `solvate` to `add_water` (because it doesn't solvate in anything besides water) - fix relevant unit comparison bugs - add mol_to_topology and mol_to_modeller converters for openmm interface --- moldesign/_tests/test_units.py | 21 ++++++ moldesign/interfaces/openmm.py | 30 +++++++- moldesign/interfaces/pdbfixer_interface.py | 84 ++++++++++++++++++++-- moldesign/tools.py | 4 +- moldesign/units/constants.py | 1 + moldesign/units/quantity.py | 20 +++--- 6 files changed, 139 insertions(+), 21 deletions(-) create mode 100644 moldesign/_tests/test_units.py diff --git a/moldesign/_tests/test_units.py b/moldesign/_tests/test_units.py new file mode 100644 index 0000000..4f58f45 --- /dev/null +++ b/moldesign/_tests/test_units.py @@ -0,0 +1,21 @@ +import pytest + +from moldesign import units + +u = units # because I'm lazy -- AMV + + +def test_comparisons_to_zero(): + num = 1.0*units.angstrom + assert num > 0.0 + assert num > 0.0 * units.angstrom + assert num > 0.0 * units.nm + with pytest.raises(units.DimensionalityError): + tmp = 1.0*u.angstrom == 1.0 * u.ureg.kilograms + + +def test_compatible_units_comparison(): + num = 1.0*units.angstrom + assert abs(num-0.1*units.nm) < 1.0e-15 * u.angstrom + assert 1.0 * units.ureg.meter > 123456.0 * units.nm + diff --git a/moldesign/interfaces/openmm.py b/moldesign/interfaces/openmm.py index 42a277e..783a789 100644 --- a/moldesign/interfaces/openmm.py +++ b/moldesign/interfaces/openmm.py @@ -288,5 +288,31 @@ def topology_to_mol(topo, name=None, positions=None, velocities=None, assign_bon return newmol -def mol_to_toplogy(mol): - raise NotImplementedError +def mol_to_topology(mol): + """ Create an openmm topology object from an MDT molecule + + Args: + mol (moldesign.Molecule): molecule to copy topology from + + Returns: + simtk.openmm.app.Topology: topology of the molecule + + """ + top = app.Topology() + chainmap = {chain: top.addChain(chain.name) for chain in mol.chains} + resmap = {res: top.addResidue(res.resname, chainmap[res.chain], str(res.pdbindex)) + for res in mol.residues} + atommap = {atom: top.addAtom(atom.name, + app.Element.getBySymbol(atom.element), + resmap[atom.residue], + id=str(atom.pdbindex)) + for atom in mol.atoms} + for bond in mol.bonds: + top.addBond(atommap[bond.a1], atommap[bond.a2]) + + return top + + +def mol_to_modeller(mol): + return app.Modeller(mol_to_topology(mol), pint2simtk(mol.positions)) + diff --git a/moldesign/interfaces/pdbfixer_interface.py b/moldesign/interfaces/pdbfixer_interface.py index bf238b9..65779d0 100644 --- a/moldesign/interfaces/pdbfixer_interface.py +++ b/moldesign/interfaces/pdbfixer_interface.py @@ -12,6 +12,8 @@ # See the License for the specific language governing permissions and # limitations under the License. +import numpy as np + try: import pdbfixer as pf except ImportError: @@ -20,17 +22,21 @@ else: force_remote = False +import moldesign as mdt from moldesign import units as u +from moldesign import compute -from . import openmm as opm +from . import openmm as opm +@compute.runsremotely(enable=force_remote) def add_hydrogen(mol, pH=7.4): fixer = _get_fixer(mol) fixer.addMissingHydrogens(pH) return _get_mol(fixer) +@compute.runsremotely(enable=force_remote) def mutate(mol, mutationmap): fixer = _get_fixer(mol) chain_mutations = {} @@ -44,12 +50,76 @@ def mutate(mol, mutationmap): return _get_mol(fixer) -def solvate(mol, padding=10.0*u.angstrom, size=None, cation='Na+', anion='Cl-'): - fixer = _get_fixer(mol) - if size is not None: size = size.to_simtk() - if padding is not None: padding = padding.to_simtk() - fixer.addSolvent(padding=padding, boxSize=size, positiveIon=cation, negativeIon=anion) - return _get_mol(fixer) +@compute.runsremotely(enable=force_remote) +def add_water(mol, min_box_size=None, padding=None, + ion_concentration=None, neutralize=True, + positive_ion='Na+', negative_ion='Cl-'): + """ Solvate a molecule in a water box with optional ions + + Args: + mol (moldesign.Molecule): solute molecule + min_box_size (u.Scalar[length] or u.Vector[length]): size of the water box - either + a vector of x,y,z dimensions, or just a uniform cube length. Either this or + ``padding`` (or both) must be passed + padding (u.Scalar[length]): distance to edge of water box from the solute in each dimension + neutralize (bool): add ions to neutralize solute charge (in + addition to specified ion concentration) + positive_ion (str): type of positive ions to add, if needed. Allowed values + (from OpenMM modeller) are Cs, K, Li, Na (the default) and Rb + negative_ion (str): type of negative ions to add, if needed. Allowed values + (from OpenMM modeller) are Cl (the default), Br, F, and I + ion_concentration (float or u.Scalar[molarity]): ionic concentration in addition to + whatever is needed to neutralize the solute. (if float is passed, we assume the + number is Molar) + + Returns: + moldesign.Molecule: new Molecule object containing both solvent and solute + """ + if padding is None and min_box_size is None: + raise ValueError('Solvate arguments: must pass padding or min_box_size or both.') + + # add +s and -s to ion names if not already present + if positive_ion[-1] != '+': + assert positive_ion[-1] != '-' + positive_ion += '+' + if negative_ion[-1] != '-': + assert negative_ion[-1] != '+' + negative_ion += '-' + + if ion_concentration is not None: + ion_concentration = u.MdtQuantity(ion_concentration) + if ion_concentration.dimensionless: + ion_concentration *= u.molar + + # calculate box size - in each dimension, use the largest of min_box_size or + # the calculated padding + boxsize = np.zeros(3) * u.angstrom + if min_box_size: + boxsize[:] = min_box_size + if padding: + ranges = mol.positions.max(axis=0) - mol.positions.min(axis=0) + for idim, r in enumerate(ranges): + boxsize[idim] = max(boxsize[idim], r+padding) + assert (boxsize >= 0.0).all() + + modeller = opm.mol_to_modeller(mol) + + # TODO: this is like 10 bad things at once. Should probably submit a + # PR to PDBFixer to make this a public staticmethod instead of a private instancemethod + # Alternatively, PR to create Fixers directly from Topology objs + ff = pf.PDBFixer.__dict__['_createForceField'](None, modeller.getTopology(), True) + + modeller.addSolvent(ff, + boxSize=opm.pint2simtk(boxsize), + positiveIon=positive_ion, + negativeIon=negative_ion, + ionicStrength=opm.pint2simtk(ion_concentration), + neutralize=neutralize) + + return opm.topology_to_mol(modeller.getTopology(), + positions=modeller.getPositions(), + name='%s with water box' % mol.name) + def _get_fixer(mol): diff --git a/moldesign/tools.py b/moldesign/tools.py index 234b5d7..cd1437d 100644 --- a/moldesign/tools.py +++ b/moldesign/tools.py @@ -17,12 +17,12 @@ """ from moldesign.interfaces.openbabel import add_hydrogen, guess_bond_orders -from moldesign.interfaces.pdbfixer_interface import mutate, solvate +from moldesign.interfaces.pdbfixer_interface import mutate, add_water from moldesign.interfaces.ambertools import assign_forcefield, parameterize from moldesign.interfaces.ambertools import calc_am1_bcc_charges, calc_gasteiger_charges -__all__ = ('add_hydrogen guess_bond_orders mutate solvate' +__all__ = ('add_hydrogen guess_bond_orders mutate add_water' ' assign_forcefield parameterize').split() diff --git a/moldesign/units/constants.py b/moldesign/units/constants.py index eeeaf38..e146228 100644 --- a/moldesign/units/constants.py +++ b/moldesign/units/constants.py @@ -47,6 +47,7 @@ kelvin = ureg.kelvin nm = ureg.nanometers ang = angstrom = ureg.ang +molar = ureg.mole / ureg.liter # sets default unit systems def_length = angstrom diff --git a/moldesign/units/quantity.py b/moldesign/units/quantity.py index 12a11cb..fe085ab 100644 --- a/moldesign/units/quantity.py +++ b/moldesign/units/quantity.py @@ -114,14 +114,13 @@ def __eq__(self, other): Notes: - Allow equality test between compatible units - - Allow comparisons to 0 to ignore units + - Allow comparisons to unitless 0 """ - if hasattr(other, 'value_in'): - return self.magnitude == other.value_in(self.units) - elif other == 0.0: # ignore units - return self.magnitude == other + other = MdtQuantity(other) + if other.magnitude == 0.0 and other.dimensionless: + return self.magnitude == other.magnitude else: - return super(MdtQuantity, self).__eq__(other) + return self.magnitude == other.value_in(self.units) @property def shape(self): @@ -133,12 +132,13 @@ def shape(self, value): def compare(self, other, op): """ Augments the :class:`pint._Quantity` method with the following features: - - Comparisons to 0 ignore units + - Comparisons to dimensionless 0 can proceed without unit checking """ - if other == 0.0: - return op(self.magnitude, other) + other = MdtQuantity(other) + if other.magnitude == 0.0 and other.dimensionless: + return op(self.magnitude, other.magnitude) else: - return super(MdtQuantity, self).compare(other, op) + return op(self.magnitude, other.value_in(self.units)) def get_units(self): """ From fb97b6e03d63214650e7726d767e9b92fab4223c Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Wed, 10 Aug 2016 20:44:27 -0700 Subject: [PATCH 06/64] Fix misc. unit-related bugs and build out tests for unit system --- moldesign/_tests/test_data_structures.py | 25 ++------- moldesign/_tests/test_units.py | 66 +++++++++++++++++++++--- moldesign/data.py | 32 +++++++++--- moldesign/units/quantity.py | 27 ++++------ moldesign/units/tools.py | 9 +++- 5 files changed, 106 insertions(+), 53 deletions(-) diff --git a/moldesign/_tests/test_data_structures.py b/moldesign/_tests/test_data_structures.py index 4a841e2..f146464 100644 --- a/moldesign/_tests/test_data_structures.py +++ b/moldesign/_tests/test_data_structures.py @@ -55,24 +55,7 @@ def test_dictlike(objkey, request): assert set(dd.values()) == {'b', 3, 'e'} -######################################## -# Test the unit system -def test_units(): - assert u.default.length == u.angstrom - assert u.default.mass == u.amu - assert u.default.energy == u.eV - - -def test_default_unit_conversions(): - my_list = [1.0*u.angstrom, 1.0*u.nm, 1.0*u.a0] - my_array = u.array(my_list).defunits() - assert my_array.get_units() == u.default.convert(my_array).get_units() - result = my_array.value_in(u.nm) - np.testing.assert_almost_equal(result[0], 0.1, 9) - np.testing.assert_almost_equal(result[1], 1.0, 9) - np.testing.assert_almost_equal(result[2], 0.05291772, 7) - - +# Some objects with units @typedfixture('object') def list_of_units(): return [1.0 * u.angstrom, 1.0 * u.nm, 1.0 * u.a0] @@ -230,10 +213,12 @@ def test_h2_harmonic_oscillator(h2_harmonic): mol = h2_harmonic atoms = h2_harmonic.atoms atoms[0].x = -1.0*u.angstrom + atoms[1].x = 0.0*u.angstrom + atoms[1].y = 0.3 * u.angstrom e1 = mol.calc_potential_energy() - f1 = mol.forces[0] + f1 = mol.forces[0,0] atoms[0].x = 1.0*u.angstrom - f2 = mol.calc_forces()[0] + f2 = mol.calc_forces()[0,0] e2 = mol.potential_energy assert e1 == e2 == 0.5*u.kcalpermol diff --git a/moldesign/_tests/test_units.py b/moldesign/_tests/test_units.py index 4f58f45..1a6f7e3 100644 --- a/moldesign/_tests/test_units.py +++ b/moldesign/_tests/test_units.py @@ -1,21 +1,71 @@ import pytest +import numpy as np from moldesign import units -u = units # because I'm lazy -- AMV +def test_scalar_comparison_dimensionality_errors(): + with pytest.raises(units.DimensionalityError): + x = 1.0 * units.angstrom == 1.0*units.ureg.kilograms + + with pytest.raises(units.DimensionalityError): + y = 1.0 * units.fs < 1.0 * units.ureg.meter + + with pytest.raises(units.DimensionalityError): + z = 1.0 * units.ureg.hectare >= 1.0 * units.ureg.astronomical_unit + + +def test_array_comparison_dimensionality_errors(): + mylist = [0.0, -1.0, 1.0] + + with pytest.raises(units.DimensionalityError): + x = mylist * units.angstrom == mylist*units.ureg.kilograms + + with pytest.raises(units.DimensionalityError): + y = mylist * units.fs < mylist * units.ureg.meter -def test_comparisons_to_zero(): - num = 1.0*units.angstrom - assert num > 0.0 - assert num > 0.0 * units.angstrom - assert num > 0.0 * units.nm with pytest.raises(units.DimensionalityError): - tmp = 1.0*u.angstrom == 1.0 * u.ureg.kilograms + z = mylist * units.ureg.hectare >= mylist * units.ureg.astronomical_unit + + +def test_addition_dimensionality_errors(): + with pytest.raises(units.DimensionalityError): + x = 1.0 * units.angstrom + 1.0*units.ureg.kilograms + + with pytest.raises(units.DimensionalityError): + y = 1.0 * units.fs - 1.0 * units.ureg.meter def test_compatible_units_comparison(): num = 1.0*units.angstrom - assert abs(num-0.1*units.nm) < 1.0e-15 * u.angstrom + assert abs(num-0.1*units.nm) < 1.0e-15 * units.angstrom assert 1.0 * units.ureg.meter > 123456.0 * units.nm + +def test_default_units(): + assert units.default.length == units.angstrom + assert units.default.mass == units.amu + assert units.default.energy == units.eV + + +def test_default_unit_conversions(): + my_list = [1.0*units.angstrom, 1.0*units.nm, 1.0*units.a0] + my_array = units.array(my_list).defunits() + assert my_array.get_units() == units.default.convert(my_array).get_units() + result = my_array.value_in(units.nm) + np.testing.assert_almost_equal(result[0], 0.1, 9) + np.testing.assert_almost_equal(result[1], 1.0, 9) + np.testing.assert_almost_equal(result[2], 0.05291772, 7) + + +def test_scalar_comparisons_to_zero_ignore_units(): + num = 1.0*units.angstrom + assert num > 0.0 + assert num > 0.0 * units.angstrom + assert num > 0.0 * units.nm + + +def test_array_comparisons_to_zero_ignore_units(): + num = [1, -2, 0]*units.angstrom + assert ((num > 0) == [True, False, False]).all() + assert ((num == 0) == [False, False, True]).all() \ No newline at end of file diff --git a/moldesign/data.py b/moldesign/data.py index 2951614..60ec0f6 100644 --- a/moldesign/data.py +++ b/moldesign/data.py @@ -163,19 +163,37 @@ def print_environment(): """For reporting bugs - spits out the user's environment""" import sys version = {} - for pkg in 'moldesign IPython ipywidgets jupyter matplotlib numpy docker pyccc ' \ - 'nbmolviz jupyter_client jupyter_core pint Bio openbabel simtk pyscf'.split(): + for pkg in 'moldesign IPython ipywidgets jupyter matplotlib numpy docker pyccc distutils' \ + 'nbmolviz jupyter_client jupyter_core pint Bio openbabel simtk pyscf pip setuptools'\ + .split(): try: module = __import__(pkg) - except ImportError: - version[pkg] = 'FAILED' + except ImportError as e: + version[pkg] = str(e) else: try: version[pkg] = module.__version__ - except AttributeError: - version[pkg] = '???' + except AttributeError as e: + version[pkg] = str(e) env = {'platform': sys.platform, - 'version': sys.version} + 'version': sys.version, + 'prefix': sys.prefix} + + try: + import platform + env['machine'] = platform.machine() + env['linux'] = platform.linux_distribution() + env['mac'] = platform.mac_ver() + env['windows'] = platform.win32_ver() + env['impl'] = platform.python_implementation() + env['arch'] = platform.architecture() + env['system'] = platform.system() + env['python_build'] = platform.python_build() + env['platform_version'] = platform.version() + + except Exception as e: + env['platform_exception'] = str(e) + print json.dumps({'env': env, 'versions': version}) diff --git a/moldesign/units/quantity.py b/moldesign/units/quantity.py index fe085ab..7f8d921 100644 --- a/moldesign/units/quantity.py +++ b/moldesign/units/quantity.py @@ -14,6 +14,7 @@ """ Set up physical constants and unit systems """ +import operator import copy from os.path import join, abspath, dirname @@ -109,18 +110,7 @@ def to_json(self): 'units': str(self.units)} def __eq__(self, other): - """ Bug fixes and behavior changes for pint's implementation - These get removed as they are fixed in pint - - Notes: - - Allow equality test between compatible units - - Allow comparisons to unitless 0 - """ - other = MdtQuantity(other) - if other.magnitude == 0.0 and other.dimensionless: - return self.magnitude == other.magnitude - else: - return self.magnitude == other.value_in(self.units) + return self.compare(other, operator.eq) @property def shape(self): @@ -135,7 +125,12 @@ def compare(self, other, op): - Comparisons to dimensionless 0 can proceed without unit checking """ other = MdtQuantity(other) - if other.magnitude == 0.0 and other.dimensionless: + try: + iszero = other.magnitude == 0.0 and other.dimensionless + except ValueError: + iszero = False + + if iszero: return op(self.magnitude, other.magnitude) else: return op(self.magnitude, other.value_in(self.units)) @@ -197,9 +192,9 @@ def __mod__(self, other): m = s_mag % o_mag return m * my_units - def value_in(self, units): - val = self.to(units) - return val._magnitude + # backwards-compatible name + value_in = ureg.Quantity.m_as + def defunits_value(self): return self.defunits()._magnitude diff --git a/moldesign/units/tools.py b/moldesign/units/tools.py index 31ea83e..299faff 100644 --- a/moldesign/units/tools.py +++ b/moldesign/units/tools.py @@ -72,14 +72,19 @@ def array(qlist, baseunit=None): if baseunit is None: baseunit = get_units(qlist) - if baseunit == 1.0: return np.array(qlist) + try: + if baseunit == 1.0: + return np.array(qlist) + except DimensionalityError: + pass try: - newlist = [array(item, baseunit=baseunit).magnitude for item in qlist] + newlist = [array(item, baseunit=baseunit).value_in(baseunit) for item in qlist] return baseunit * newlist except TypeError as exc: return qlist.to(baseunit) + #@utils.args_from(np.broadcast_to) def broadcast_to(arr, *args, **kwargs): units = arr.units From 520c0ac441d73a1fa246717c5c0457cd67edcaae Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Wed, 10 Aug 2016 21:19:44 -0700 Subject: [PATCH 07/64] Update data structure tests, correct formal charge units error --- moldesign/_tests/data/ACTG.cif | 262 ++++++++++++ moldesign/_tests/data/ACTG.pdb | 506 +++++++++++++++++++++++ moldesign/_tests/data/bipyridine.mol2 | 49 +++ moldesign/_tests/data/bipyridine.sdf | 47 +++ moldesign/_tests/data/bipyridine.xyz | 22 + moldesign/_tests/test_data_structures.py | 33 +- moldesign/interfaces/openbabel.py | 8 +- moldesign/molecules/atoms.py | 9 +- moldesign/molecules/molecule.py | 2 +- moldesign/viewer/viewer3d.py | 2 +- 10 files changed, 924 insertions(+), 16 deletions(-) create mode 100644 moldesign/_tests/data/ACTG.cif create mode 100644 moldesign/_tests/data/ACTG.pdb create mode 100644 moldesign/_tests/data/bipyridine.mol2 create mode 100644 moldesign/_tests/data/bipyridine.sdf create mode 100644 moldesign/_tests/data/bipyridine.xyz diff --git a/moldesign/_tests/data/ACTG.cif b/moldesign/_tests/data/ACTG.cif new file mode 100644 index 0000000..8338dd1 --- /dev/null +++ b/moldesign/_tests/data/ACTG.cif @@ -0,0 +1,262 @@ +# CIF file generated by openbabel 2.3.90, see http://openbabel.sf.net +data_I +_chemical_name_common '' +loop_ + _atom_site_label + _atom_site_type_symbol + _atom_site_fract_x + _atom_site_fract_y + _atom_site_fract_z + _atom_site_occupancy + H0 H -0.43000 -8.39100 -1.87700 1.000 + O1 O 0.41300 -8.02900 -1.59200 1.000 + C2 C 1.43800 -7.78900 -2.57400 1.000 + H3 H 1.07200 -7.07700 -3.31500 1.000 + H4 H 1.69600 -8.72500 -3.06800 1.000 + C5 C 2.67700 -7.21900 -1.90300 1.000 + H6 H 3.54200 -7.36800 -2.55000 1.000 + O7 O 2.53800 -5.76900 -1.80800 1.000 + C8 C 2.25000 -5.39500 -0.46800 1.000 + H9 H 3.03300 -4.73200 -0.09900 1.000 + N10 N 1.01300 -4.51200 -0.44000 1.000 + C11 C -0.32000 -4.82500 -0.46800 1.000 + H12 H -0.63100 -5.85800 -0.52000 1.000 + N13 N -1.10600 -3.79400 -0.36600 1.000 + C14 C -0.23500 -2.71600 -0.26200 1.000 + C15 C -0.44900 -1.33900 -0.12700 1.000 + N16 N -1.66600 -0.78200 -0.07000 1.000 + H17 H -1.75900 0.21900 0.02800 1.000 + H18 H -2.49100 -1.36200 -0.12600 1.000 + N19 N 0.63200 -0.55100 -0.05100 1.000 + C20 C 1.83800 -1.11000 -0.10800 1.000 + H21 H 2.72200 -0.49300 -0.04900 1.000 + N22 N 2.16100 -2.38400 -0.23300 1.000 + C23 C 1.05500 -3.15400 -0.30700 1.000 + C24 C 2.92300 -7.67400 -0.46300 1.000 + H25 H 2.52100 -8.67700 -0.32500 1.000 + C26 C 2.09700 -6.67700 0.35300 1.000 + H27 H 1.34400 -7.21400 0.92900 1.000 + H28 H 2.75300 -6.13100 1.03100 1.000 + O29 O 4.26200 -7.60100 0.00500 1.000 + P30 P 4.02800 -7.50400 1.25200 1.000 + O31 O 5.02500 -8.53700 0.89300 1.000 + O32 O 2.99400 -7.87500 2.24300 1.000 + O33 O 4.88100 -6.23000 1.71100 1.000 + C34 C 5.53800 -5.43200 0.70900 1.000 + H35 H 4.79500 -5.02900 0.02000 1.000 + H36 H 6.24600 -6.05000 0.15700 1.000 + C37 C 6.28400 -4.28300 1.36600 1.000 + H38 H 7.04500 -3.90500 0.68400 1.000 + O39 O 5.36500 -3.16300 1.54500 1.000 + C40 C 4.99600 -3.04800 2.91100 1.000 + H41 H 5.29600 -2.07100 3.28800 1.000 + N42 N 3.50800 -3.01500 2.98800 1.000 + C43 C 2.77700 -4.16000 2.94500 1.000 + H44 H 3.27300 -5.11500 2.85400 1.000 + C45 C 1.41900 -4.12700 3.01500 1.000 + H46 H 0.84800 -5.05500 2.97900 1.000 + C47 C 0.80800 -2.83900 3.13500 1.000 + N48 N -0.50500 -2.73400 3.20800 1.000 + H49 H -0.89800 -1.80700 3.29300 1.000 + H50 H -1.08500 -3.56100 3.18000 1.000 + N51 N 1.53200 -1.72400 3.17700 1.000 + C52 C 2.88900 -1.77900 3.10500 1.000 + O53 O 3.59700 -0.76200 3.14000 1.000 + C54 C 6.82500 -4.55800 2.77100 1.000 + H55 H 7.06100 -5.61800 2.86900 1.000 + C56 C 5.63300 -4.21600 3.66700 1.000 + H57 H 5.34400 -5.09700 4.23900 1.000 + H58 H 5.91000 -3.41400 4.35100 1.000 + O59 O 7.92000 -3.76000 3.19600 1.000 + P60 P 7.87200 -3.61400 4.66400 1.000 + O61 O 9.31000 -3.81800 4.38100 1.000 + O62 O 7.22600 -4.55900 5.60200 1.000 + O63 O 7.74300 -2.09400 5.14600 1.000 + C64 C 7.83100 -1.04200 4.16700 1.000 + H65 H 7.03600 -1.16200 3.43100 1.000 + H66 H 8.79800 -1.08900 3.66800 1.000 + C67 C 7.68300 0.31100 4.84500 1.000 + H68 H 8.09200 1.08800 4.19900 1.000 + O69 O 6.26300 0.63400 4.95000 1.000 + C70 C 5.82600 0.47300 6.29200 1.000 + H71 H 5.44500 1.42300 6.66700 1.000 + N72 N 4.59100 -0.43000 6.32400 1.000 + C73 C 4.66400 -1.79700 6.28100 1.000 + H74 H 5.62600 -2.28500 6.22200 1.000 + C75 C 3.56200 -2.55500 6.36600 1.000 + C76 C 3.63200 -4.05300 6.32000 1.000 + H77 H 4.24300 -4.41400 7.14700 1.000 + H78 H 2.62700 -4.46600 6.40400 1.000 + H79 H 4.07600 -4.36800 5.37600 1.000 + C80 C 2.26200 -1.95100 6.50500 1.000 + O81 O 1.19900 -2.56400 6.58900 1.000 + N82 N 2.28300 -0.57200 6.53900 1.000 + H83 H 1.32100 -0.06900 6.64300 1.000 + C84 C 3.40000 0.23400 6.45400 1.000 + O85 O 3.31700 1.45000 6.49400 1.000 + C86 C 8.20100 0.39600 6.28200 1.000 + H87 H 9.02800 -0.30200 6.41200 1.000 + C88 C 7.00000 -0.07800 7.10300 1.000 + H89 H 7.27700 -0.96400 7.67500 1.000 + H90 H 6.69200 0.71300 7.78700 1.000 + O91 O 8.55500 1.68800 6.75300 1.000 + P92 P 8.39400 1.53500 8.00900 1.000 + O93 O 9.67900 2.17200 7.64600 1.000 + O94 O 8.43800 0.44100 9.00500 1.000 + O95 O 7.43900 2.73500 8.46700 1.000 + C96 C 6.87300 3.59800 7.46300 1.000 + H97 H 6.26300 3.01000 6.77800 1.000 + H98 H 7.67500 4.08500 6.90800 1.000 + C99 C 6.00500 4.65900 8.12000 1.000 + H100 H 5.87300 5.49700 7.43400 1.000 + O101 O 4.66000 4.12200 8.30300 1.000 + C102 C 4.44300 3.80900 9.67100 1.000 + H103 H 3.60200 4.39200 10.04800 1.000 + N104 N 3.96200 2.40200 9.75300 1.000 + C105 C 4.68800 1.22900 9.72700 1.000 + H106 H 5.76400 1.26100 9.63600 1.000 + N107 N 3.95600 0.14600 9.81800 1.000 + C108 C 2.65600 0.63000 9.91100 1.000 + C109 C 1.42300 -0.06400 10.03200 1.000 + O110 O 1.22200 -1.27600 10.08300 1.000 + N111 N 0.34200 0.82400 10.09600 1.000 + H112 H -0.57300 0.42900 10.18100 1.000 + C113 C 0.43800 2.20000 10.05100 1.000 + N114 N -0.71800 2.87200 10.12600 1.000 + H115 H -1.64600 2.48000 10.20000 1.000 + H116 H -0.65800 3.88000 10.08500 1.000 + N117 N 1.59400 2.84800 9.93900 1.000 + C118 C 2.65500 1.99900 9.87600 1.000 + C119 C 6.43400 5.09700 9.52100 1.000 + H120 H 7.51600 5.00200 9.61700 1.000 + C121 C 5.75000 4.06700 10.42300 1.000 + H122 H 6.50400 3.52600 10.99500 1.000 + H123 H 5.07100 4.57600 11.10700 1.000 + O124 O 6.00500 6.38300 9.94400 1.000 + H125 H 6.28700 6.63500 10.82600 1.000 + H126 H -7.64600 -3.09100 12.08300 1.000 + O127 O -7.61100 -2.17200 11.80800 1.000 + C128 C -7.67200 -1.14000 12.81100 1.000 + H129 H -6.83500 -1.25100 13.49900 1.000 + H130 H -8.60900 -1.22400 13.36300 1.000 + C131 C -7.60100 0.22800 12.15400 1.000 + H132 H -7.99500 0.98100 12.83700 1.000 + O133 O -6.19900 0.59400 11.97600 1.000 + C134 C -5.83400 0.47000 10.60900 1.000 + H135 H -5.50100 1.43800 10.23200 1.000 + N136 N -4.61000 -0.37700 10.53100 1.000 + C137 C -4.69200 -1.73400 10.57400 1.000 + H138 H -5.65500 -2.21400 10.66500 1.000 + C139 C -3.57400 -2.50500 10.50300 1.000 + H140 H -3.65800 -3.59100 10.53800 1.000 + C141 C -2.32300 -1.82200 10.38300 1.000 + N142 N -1.19800 -2.50900 10.30900 1.000 + H143 H -0.33600 -1.99000 10.22500 1.000 + H144 H -1.21500 -3.51800 10.33700 1.000 + N145 N -2.25300 -0.49500 10.34200 1.000 + C146 C -3.38300 0.25900 10.41500 1.000 + O147 O -3.35800 1.49800 10.38000 1.000 + C148 C -8.20100 0.32400 10.74900 1.000 + H149 H -9.01500 -0.39400 10.65200 1.000 + C150 C -7.03600 -0.09900 9.85300 1.000 + H151 H -7.31900 -0.98200 9.28000 1.000 + H152 H -6.78900 0.71300 9.17000 1.000 + O153 O -8.61700 1.61400 10.32500 1.000 + P154 P -8.51200 1.73200 8.84600 1.000 + O155 O -9.79300 2.42100 9.11800 1.000 + O156 O -8.54400 0.58300 7.91400 1.000 + O157 O -7.50600 2.87800 8.36200 1.000 + C158 C -6.95900 3.78500 9.33900 1.000 + H159 H -6.39400 3.22100 10.08100 1.000 + H160 H -7.77000 4.32200 9.83100 1.000 + C161 C -6.03600 4.78400 8.66100 1.000 + H162 H -5.91000 5.65600 9.30200 1.000 + O163 O -4.70000 4.20300 8.56600 1.000 + C164 C -4.43600 3.80700 7.22800 1.000 + H165 H -3.56500 4.34500 6.85500 1.000 + N166 N -3.97700 2.35800 7.20700 1.000 + C167 C -4.68600 1.18600 7.24300 1.000 + H168 H -5.76500 1.20900 7.29700 1.000 + N169 N -3.94900 0.12000 7.14600 1.000 + C170 C -2.65500 0.61500 7.03600 1.000 + C171 C -1.41100 -0.01300 6.90200 1.000 + N172 N -1.25600 -1.34400 6.85300 1.000 + H173 H -0.33300 -1.74100 6.75500 1.000 + H174 H -2.06300 -1.94800 6.91300 1.000 + N175 N -0.32800 0.77100 6.82100 1.000 + C176 C -0.48800 2.09100 6.87000 1.000 + H177 H 0.37200 2.74200 6.80600 1.000 + N178 N -1.59900 2.79200 6.99400 1.000 + C179 C -2.67300 1.97800 7.07400 1.000 + C180 C -6.39600 5.15000 7.21900 1.000 + H181 H -7.47500 5.07600 7.08300 1.000 + C182 C -5.70300 4.05300 6.40800 1.000 + H183 H -6.44800 3.49900 5.83600 1.000 + H184 H -4.98300 4.50400 5.72600 1.000 + O185 O -5.91400 6.39800 6.74300 1.000 + P186 P -5.88900 6.17500 5.50900 1.000 + O187 O -6.55400 7.44600 5.87300 1.000 + O188 O -6.56700 5.31600 4.51300 1.000 + O189 O -4.41100 6.58400 5.05200 1.000 + C190 C -3.44600 6.95000 6.05600 1.000 + H191 H -3.29900 6.11500 6.74100 1.000 + H192 H -3.80900 7.81500 6.61200 1.000 + C193 C -2.12000 7.29900 5.40100 1.000 + H194 H -1.52100 7.89800 6.08600 1.000 + O195 O -1.34800 6.07300 5.21700 1.000 + C196 C -1.35500 5.69300 3.84900 1.000 + H197 H -0.33300 5.67000 3.47200 1.000 + N198 N -1.79300 4.27200 3.76600 1.000 + C199 C -3.07100 3.75000 3.79200 1.000 + H200 H -3.92200 4.40900 3.88300 1.000 + N201 N -3.11400 2.44400 3.70000 1.000 + C202 C -1.77900 2.07000 3.60800 1.000 + C203 C -1.18900 0.78500 3.48600 1.000 + O204 O -1.73900 -0.31400 3.43500 1.000 + N205 N 0.20700 0.86800 3.42300 1.000 + H206 H 0.71500 0.01000 3.33800 1.000 + C207 C 0.93900 2.03700 3.46900 1.000 + N208 N 2.27000 1.90200 3.39400 1.000 + H209 H 2.79000 1.03900 3.32000 1.000 + H210 H 2.81300 2.75200 3.43600 1.000 + N211 N 0.38400 3.24100 3.58100 1.000 + C212 C -0.97300 3.17800 3.64300 1.000 + C213 C -2.21000 7.90600 3.99900 1.000 + H214 H -3.14100 8.46400 3.90300 1.000 + C215 C -2.26100 6.67000 3.09700 1.000 + H216 H -3.18900 6.67700 2.52500 1.000 + H217 H -1.41300 6.68300 2.41400 1.000 + O218 O -1.10600 8.69400 3.57700 1.000 + P219 P -0.99700 8.60200 2.11500 1.000 + O220 O -0.74500 10.03300 2.39700 1.000 + O221 O -2.10000 8.27900 1.18300 1.000 + O222 O 0.40600 8.01100 1.62500 1.000 + C223 C 1.44000 7.76900 2.59700 1.000 + H224 H 1.08500 7.05000 3.33600 1.000 + H225 H 1.69700 8.70400 3.09500 1.000 + C226 C 2.67800 7.21100 1.91300 1.000 + H227 H 3.54700 7.36100 2.55400 1.000 + O228 O 2.54600 5.76100 1.80800 1.000 + C229 C 2.25000 5.39500 0.46800 1.000 + H230 H 3.03400 4.74000 0.08800 1.000 + N231 N 1.01000 4.49900 0.44300 1.000 + C232 C -0.26800 4.99000 0.49300 1.000 + H233 H -0.43500 6.05600 0.55400 1.000 + C234 C -1.32900 4.17600 0.41500 1.000 + C235 C -2.73200 4.70400 0.46900 1.000 + H236 H -2.89200 5.39700 -0.35700 1.000 + H237 H -3.43600 3.87500 0.38900 1.000 + H238 H -2.88900 5.22300 1.41400 1.000 + C239 C -1.15700 2.75300 0.27500 1.000 + O240 O -2.06800 1.93000 0.19600 1.000 + N241 N 0.16200 2.34700 0.23300 1.000 + H242 H 0.34300 1.27700 0.12800 1.000 + C243 C 1.27300 3.16100 0.31100 1.000 + O244 O 2.40500 2.70700 0.26500 1.000 + C245 C 2.91000 7.67800 0.47400 1.000 + H246 H 2.50100 8.68000 0.34600 1.000 + C247 C 2.08400 6.68200 -0.34200 1.000 + H248 H 1.32300 7.21800 -0.90900 1.000 + H249 H 2.73700 6.14400 -1.03000 1.000 + O250 O 4.24500 7.61600 -0.00500 1.000 + H251 H 4.36500 7.91400 -0.90900 1.000 diff --git a/moldesign/_tests/data/ACTG.pdb b/moldesign/_tests/data/ACTG.pdb new file mode 100644 index 0000000..a204523 --- /dev/null +++ b/moldesign/_tests/data/ACTG.pdb @@ -0,0 +1,506 @@ +COMPND UNNAMED +AUTHOR GENERATED BY OPEN BABEL 2.3.90 +ATOM 1 HO5' DA A 1 -0.430 -8.391 -1.877 1.00 0.00 H +ATOM 2 O5' DA A 1 0.413 -8.029 -1.592 1.00 0.00 O +ATOM 3 C5' DA A 1 1.438 -7.789 -2.574 1.00 0.00 C +ATOM 4 H5' DA A 1 1.072 -7.077 -3.315 1.00 0.00 H +ATOM 5 H5'' DA A 1 1.696 -8.725 -3.068 1.00 0.00 H +ATOM 6 C4' DA A 1 2.677 -7.219 -1.903 1.00 0.00 C +ATOM 7 H4' DA A 1 3.542 -7.368 -2.550 1.00 0.00 H +ATOM 8 O4' DA A 1 2.538 -5.769 -1.808 1.00 0.00 O +ATOM 9 C1' DA A 1 2.250 -5.395 -0.468 1.00 0.00 C +ATOM 10 H1' DA A 1 3.033 -4.732 -0.099 1.00 0.00 H +ATOM 11 N9 DA A 1 1.013 -4.512 -0.440 1.00 0.00 N +ATOM 12 C8 DA A 1 -0.320 -4.825 -0.468 1.00 0.00 C +ATOM 13 H8 DA A 1 -0.631 -5.858 -0.520 1.00 0.00 H +ATOM 14 N7 DA A 1 -1.106 -3.794 -0.366 1.00 0.00 N +ATOM 15 C5 DA A 1 -0.235 -2.716 -0.262 1.00 0.00 C +ATOM 16 C6 DA A 1 -0.449 -1.339 -0.127 1.00 0.00 C +ATOM 17 N6 DA A 1 -1.666 -0.782 -0.070 1.00 0.00 N +ATOM 18 H61 DA A 1 -1.759 0.219 0.028 1.00 0.00 H +ATOM 19 H62 DA A 1 -2.491 -1.362 -0.126 1.00 0.00 H +ATOM 20 N1 DA A 1 0.632 -0.551 -0.051 1.00 0.00 N +ATOM 21 C2 DA A 1 1.838 -1.110 -0.108 1.00 0.00 C +ATOM 22 H2 DA A 1 2.722 -0.493 -0.049 1.00 0.00 H +ATOM 23 N3 DA A 1 2.161 -2.384 -0.233 1.00 0.00 N +ATOM 24 C4 DA A 1 1.055 -3.154 -0.307 1.00 0.00 C +ATOM 25 C3' DA A 1 2.923 -7.674 -0.463 1.00 0.00 C +ATOM 26 H3' DA A 1 2.521 -8.677 -0.325 1.00 0.00 H +ATOM 27 C2' DA A 1 2.097 -6.677 0.353 1.00 0.00 C +ATOM 28 H2' DA A 1 1.344 -7.214 0.929 1.00 0.00 H +ATOM 29 H2'' DA A 1 2.753 -6.131 1.031 1.00 0.00 H +ATOM 30 O3' DA A 1 4.262 -7.601 0.005 1.00 0.00 O +ATOM 31 P DC A 2 4.028 -7.504 1.252 1.00 0.00 P +ATOM 32 OP1 DC A 2 5.025 -8.537 0.893 1.00 0.00 O +ATOM 33 OP2 DC A 2 2.994 -7.875 2.243 1.00 0.00 O +ATOM 34 O5' DC A 2 4.881 -6.230 1.711 1.00 0.00 O +ATOM 35 C5' DC A 2 5.538 -5.432 0.709 1.00 0.00 C +ATOM 36 H5' DC A 2 4.795 -5.029 0.020 1.00 0.00 H +ATOM 37 H5'' DC A 2 6.246 -6.050 0.157 1.00 0.00 H +ATOM 38 C4' DC A 2 6.284 -4.283 1.366 1.00 0.00 C +ATOM 39 H4' DC A 2 7.045 -3.905 0.684 1.00 0.00 H +ATOM 40 O4' DC A 2 5.365 -3.163 1.545 1.00 0.00 O +ATOM 41 C1' DC A 2 4.996 -3.048 2.911 1.00 0.00 C +ATOM 42 H1' DC A 2 5.296 -2.071 3.288 1.00 0.00 H +ATOM 43 N1 DC A 2 3.508 -3.015 2.988 1.00 0.00 N +ATOM 44 C6 DC A 2 2.777 -4.160 2.945 1.00 0.00 C +ATOM 45 H6 DC A 2 3.273 -5.115 2.854 1.00 0.00 H +ATOM 46 C5 DC A 2 1.419 -4.127 3.015 1.00 0.00 C +ATOM 47 H5 DC A 2 0.848 -5.055 2.979 1.00 0.00 H +ATOM 48 C4 DC A 2 0.808 -2.839 3.135 1.00 0.00 C +ATOM 49 N4 DC A 2 -0.505 -2.734 3.208 1.00 0.00 N +ATOM 50 H41 DC A 2 -0.898 -1.807 3.293 1.00 0.00 H +ATOM 51 H42 DC A 2 -1.085 -3.561 3.180 1.00 0.00 H +ATOM 52 N3 DC A 2 1.532 -1.724 3.177 1.00 0.00 N +ATOM 53 C2 DC A 2 2.889 -1.779 3.105 1.00 0.00 C +ATOM 54 O2 DC A 2 3.597 -0.762 3.140 1.00 0.00 O +ATOM 55 C3' DC A 2 6.825 -4.558 2.771 1.00 0.00 C +ATOM 56 H3' DC A 2 7.061 -5.618 2.869 1.00 0.00 H +ATOM 57 C2' DC A 2 5.633 -4.216 3.667 1.00 0.00 C +ATOM 58 H2' DC A 2 5.344 -5.097 4.239 1.00 0.00 H +ATOM 59 H2'' DC A 2 5.910 -3.414 4.351 1.00 0.00 H +ATOM 60 O3' DC A 2 7.920 -3.760 3.196 1.00 0.00 O +ATOM 61 P DT A 3 7.872 -3.614 4.664 1.00 0.00 P +ATOM 62 OP1 DT A 3 9.310 -3.818 4.381 1.00 0.00 O +ATOM 63 OP2 DT A 3 7.226 -4.559 5.602 1.00 0.00 O +ATOM 64 O5' DT A 3 7.743 -2.094 5.146 1.00 0.00 O +ATOM 65 C5' DT A 3 7.831 -1.042 4.167 1.00 0.00 C +ATOM 66 H5' DT A 3 7.036 -1.162 3.431 1.00 0.00 H +ATOM 67 H5'' DT A 3 8.798 -1.089 3.668 1.00 0.00 H +ATOM 68 C4' DT A 3 7.683 0.311 4.845 1.00 0.00 C +ATOM 69 H4' DT A 3 8.092 1.088 4.199 1.00 0.00 H +ATOM 70 O4' DT A 3 6.263 0.634 4.950 1.00 0.00 O +ATOM 71 C1' DT A 3 5.826 0.473 6.292 1.00 0.00 C +ATOM 72 H1' DT A 3 5.445 1.423 6.667 1.00 0.00 H +ATOM 73 N1 DT A 3 4.591 -0.430 6.324 1.00 0.00 N +ATOM 74 C6 DT A 3 4.664 -1.797 6.281 1.00 0.00 C +ATOM 75 H6 DT A 3 5.626 -2.285 6.222 1.00 0.00 H +ATOM 76 C5 DT A 3 3.562 -2.555 6.366 1.00 0.00 C +ATOM 77 C7 DT A 3 3.632 -4.053 6.320 1.00 0.00 C +ATOM 78 H71 DT A 3 4.243 -4.414 7.147 1.00 0.00 H +ATOM 79 H72 DT A 3 2.627 -4.466 6.404 1.00 0.00 H +ATOM 80 H73 DT A 3 4.076 -4.368 5.376 1.00 0.00 H +ATOM 81 C4 DT A 3 2.262 -1.951 6.505 1.00 0.00 C +ATOM 82 O4 DT A 3 1.199 -2.564 6.589 1.00 0.00 O +ATOM 83 N3 DT A 3 2.283 -0.572 6.539 1.00 0.00 N +ATOM 84 H3 DT A 3 1.321 -0.069 6.643 1.00 0.00 H +ATOM 85 C2 DT A 3 3.400 0.234 6.454 1.00 0.00 C +ATOM 86 O2 DT A 3 3.317 1.450 6.494 1.00 0.00 O +ATOM 87 C3' DT A 3 8.201 0.396 6.282 1.00 0.00 C +ATOM 88 H3' DT A 3 9.028 -0.302 6.412 1.00 0.00 H +ATOM 89 C2' DT A 3 7.000 -0.078 7.103 1.00 0.00 C +ATOM 90 H2' DT A 3 7.277 -0.964 7.675 1.00 0.00 H +ATOM 91 H2'' DT A 3 6.692 0.713 7.787 1.00 0.00 H +ATOM 92 O3' DT A 3 8.555 1.688 6.753 1.00 0.00 O +ATOM 93 P DG A 4 8.394 1.535 8.009 1.00 0.00 P +ATOM 94 OP1 DG A 4 9.679 2.172 7.646 1.00 0.00 O +ATOM 95 OP2 DG A 4 8.438 0.441 9.005 1.00 0.00 O +ATOM 96 O5' DG A 4 7.439 2.735 8.467 1.00 0.00 O +ATOM 97 C5' DG A 4 6.873 3.598 7.463 1.00 0.00 C +ATOM 98 H5' DG A 4 6.263 3.010 6.778 1.00 0.00 H +ATOM 99 H5'' DG A 4 7.675 4.085 6.908 1.00 0.00 H +ATOM 100 C4' DG A 4 6.005 4.659 8.120 1.00 0.00 C +ATOM 101 H4' DG A 4 5.873 5.497 7.434 1.00 0.00 H +ATOM 102 O4' DG A 4 4.660 4.122 8.303 1.00 0.00 O +ATOM 103 C1' DG A 4 4.443 3.809 9.671 1.00 0.00 C +ATOM 104 H1' DG A 4 3.602 4.392 10.048 1.00 0.00 H +ATOM 105 N9 DG A 4 3.962 2.402 9.753 1.00 0.00 N +ATOM 106 C8 DG A 4 4.688 1.229 9.727 1.00 0.00 C +ATOM 107 H8 DG A 4 5.764 1.261 9.636 1.00 0.00 H +ATOM 108 N7 DG A 4 3.956 0.146 9.818 1.00 0.00 N +ATOM 109 C5 DG A 4 2.656 0.630 9.911 1.00 0.00 C +ATOM 110 C6 DG A 4 1.423 -0.064 10.032 1.00 0.00 C +ATOM 111 O6 DG A 4 1.222 -1.276 10.083 1.00 0.00 O +ATOM 112 N1 DG A 4 0.342 0.824 10.096 1.00 0.00 N +ATOM 113 H1 DG A 4 -0.573 0.429 10.181 1.00 0.00 H +ATOM 114 C2 DG A 4 0.438 2.200 10.051 1.00 0.00 C +ATOM 115 N2 DG A 4 -0.718 2.872 10.126 1.00 0.00 N +ATOM 116 H21 DG A 4 -1.646 2.480 10.200 1.00 0.00 H +ATOM 117 H22 DG A 4 -0.658 3.880 10.085 1.00 0.00 H +ATOM 118 N3 DG A 4 1.594 2.848 9.939 1.00 0.00 N +ATOM 119 C4 DG A 4 2.655 1.999 9.876 1.00 0.00 C +ATOM 120 C3' DG A 4 6.434 5.097 9.521 1.00 0.00 C +ATOM 121 H3' DG A 4 7.516 5.002 9.617 1.00 0.00 H +ATOM 122 C2' DG A 4 5.750 4.067 10.423 1.00 0.00 C +ATOM 123 H2' DG A 4 6.504 3.526 10.995 1.00 0.00 H +ATOM 124 H2'' DG A 4 5.071 4.576 11.107 1.00 0.00 H +ATOM 125 O3' DG A 4 6.005 6.383 9.944 1.00 0.00 O +ATOM 126 HO3' DG A 4 6.287 6.635 10.826 1.00 0.00 H +ATOM 127 HO5' DC B 1 -7.646 -3.091 12.083 1.00 0.00 H +ATOM 128 O5' DC B 1 -7.611 -2.172 11.808 1.00 0.00 O +ATOM 129 C5' DC B 1 -7.672 -1.140 12.811 1.00 0.00 C +ATOM 130 H5' DC B 1 -6.835 -1.251 13.499 1.00 0.00 H +ATOM 131 H5'' DC B 1 -8.609 -1.224 13.363 1.00 0.00 H +ATOM 132 C4' DC B 1 -7.601 0.228 12.154 1.00 0.00 C +ATOM 133 H4' DC B 1 -7.995 0.981 12.837 1.00 0.00 H +ATOM 134 O4' DC B 1 -6.199 0.594 11.976 1.00 0.00 O +ATOM 135 C1' DC B 1 -5.834 0.470 10.609 1.00 0.00 C +ATOM 136 H1' DC B 1 -5.501 1.438 10.232 1.00 0.00 H +ATOM 137 N1 DC B 1 -4.610 -0.377 10.531 1.00 0.00 N +ATOM 138 C6 DC B 1 -4.692 -1.734 10.574 1.00 0.00 C +ATOM 139 H6 DC B 1 -5.655 -2.214 10.665 1.00 0.00 H +ATOM 140 C5 DC B 1 -3.574 -2.505 10.503 1.00 0.00 C +ATOM 141 H5 DC B 1 -3.658 -3.591 10.538 1.00 0.00 H +ATOM 142 C4 DC B 1 -2.323 -1.822 10.383 1.00 0.00 C +ATOM 143 N4 DC B 1 -1.198 -2.509 10.309 1.00 0.00 N +ATOM 144 H41 DC B 1 -0.336 -1.990 10.225 1.00 0.00 H +ATOM 145 H42 DC B 1 -1.215 -3.518 10.337 1.00 0.00 H +ATOM 146 N3 DC B 1 -2.253 -0.495 10.342 1.00 0.00 N +ATOM 147 C2 DC B 1 -3.383 0.259 10.415 1.00 0.00 C +ATOM 148 O2 DC B 1 -3.358 1.498 10.380 1.00 0.00 O +ATOM 149 C3' DC B 1 -8.201 0.324 10.749 1.00 0.00 C +ATOM 150 H3' DC B 1 -9.015 -0.394 10.652 1.00 0.00 H +ATOM 151 C2' DC B 1 -7.036 -0.099 9.853 1.00 0.00 C +ATOM 152 H2' DC B 1 -7.319 -0.982 9.280 1.00 0.00 H +ATOM 153 H2'' DC B 1 -6.789 0.713 9.170 1.00 0.00 H +ATOM 154 O3' DC B 1 -8.617 1.614 10.325 1.00 0.00 O +ATOM 155 P DA B 2 -8.512 1.732 8.846 1.00 0.00 P +ATOM 156 OP1 DA B 2 -9.793 2.421 9.118 1.00 0.00 O +ATOM 157 OP2 DA B 2 -8.544 0.583 7.914 1.00 0.00 O +ATOM 158 O5' DA B 2 -7.506 2.878 8.362 1.00 0.00 O +ATOM 159 C5' DA B 2 -6.959 3.785 9.339 1.00 0.00 C +ATOM 160 H5' DA B 2 -6.394 3.221 10.081 1.00 0.00 H +ATOM 161 H5'' DA B 2 -7.770 4.322 9.831 1.00 0.00 H +ATOM 162 C4' DA B 2 -6.036 4.784 8.661 1.00 0.00 C +ATOM 163 H4' DA B 2 -5.910 5.656 9.302 1.00 0.00 H +ATOM 164 O4' DA B 2 -4.700 4.203 8.566 1.00 0.00 O +ATOM 165 C1' DA B 2 -4.436 3.807 7.228 1.00 0.00 C +ATOM 166 H1' DA B 2 -3.565 4.345 6.855 1.00 0.00 H +ATOM 167 N9 DA B 2 -3.977 2.358 7.207 1.00 0.00 N +ATOM 168 C8 DA B 2 -4.686 1.186 7.243 1.00 0.00 C +ATOM 169 H8 DA B 2 -5.765 1.209 7.297 1.00 0.00 H +ATOM 170 N7 DA B 2 -3.949 0.120 7.146 1.00 0.00 N +ATOM 171 C5 DA B 2 -2.655 0.615 7.036 1.00 0.00 C +ATOM 172 C6 DA B 2 -1.411 -0.013 6.902 1.00 0.00 C +ATOM 173 N6 DA B 2 -1.256 -1.344 6.853 1.00 0.00 N +ATOM 174 H61 DA B 2 -0.333 -1.741 6.755 1.00 0.00 H +ATOM 175 H62 DA B 2 -2.063 -1.948 6.913 1.00 0.00 H +ATOM 176 N1 DA B 2 -0.328 0.771 6.821 1.00 0.00 N +ATOM 177 C2 DA B 2 -0.488 2.091 6.870 1.00 0.00 C +ATOM 178 H2 DA B 2 0.372 2.742 6.806 1.00 0.00 H +ATOM 179 N3 DA B 2 -1.599 2.792 6.994 1.00 0.00 N +ATOM 180 C4 DA B 2 -2.673 1.978 7.074 1.00 0.00 C +ATOM 181 C3' DA B 2 -6.396 5.150 7.219 1.00 0.00 C +ATOM 182 H3' DA B 2 -7.475 5.076 7.083 1.00 0.00 H +ATOM 183 C2' DA B 2 -5.703 4.053 6.408 1.00 0.00 C +ATOM 184 H2' DA B 2 -6.448 3.499 5.836 1.00 0.00 H +ATOM 185 H2'' DA B 2 -4.983 4.504 5.726 1.00 0.00 H +ATOM 186 O3' DA B 2 -5.914 6.398 6.743 1.00 0.00 O +ATOM 187 P DG B 3 -5.889 6.175 5.509 1.00 0.00 P +ATOM 188 OP1 DG B 3 -6.554 7.446 5.873 1.00 0.00 O +ATOM 189 OP2 DG B 3 -6.567 5.316 4.513 1.00 0.00 O +ATOM 190 O5' DG B 3 -4.411 6.584 5.052 1.00 0.00 O +ATOM 191 C5' DG B 3 -3.446 6.950 6.056 1.00 0.00 C +ATOM 192 H5' DG B 3 -3.299 6.115 6.741 1.00 0.00 H +ATOM 193 H5'' DG B 3 -3.809 7.815 6.612 1.00 0.00 H +ATOM 194 C4' DG B 3 -2.120 7.299 5.401 1.00 0.00 C +ATOM 195 H4' DG B 3 -1.521 7.898 6.086 1.00 0.00 H +ATOM 196 O4' DG B 3 -1.348 6.073 5.217 1.00 0.00 O +ATOM 197 C1' DG B 3 -1.355 5.693 3.849 1.00 0.00 C +ATOM 198 H1' DG B 3 -0.333 5.670 3.472 1.00 0.00 H +ATOM 199 N9 DG B 3 -1.793 4.272 3.766 1.00 0.00 N +ATOM 200 C8 DG B 3 -3.071 3.750 3.792 1.00 0.00 C +ATOM 201 H8 DG B 3 -3.922 4.409 3.883 1.00 0.00 H +ATOM 202 N7 DG B 3 -3.114 2.444 3.700 1.00 0.00 N +ATOM 203 C5 DG B 3 -1.779 2.070 3.608 1.00 0.00 C +ATOM 204 C6 DG B 3 -1.189 0.785 3.486 1.00 0.00 C +ATOM 205 O6 DG B 3 -1.739 -0.314 3.435 1.00 0.00 O +ATOM 206 N1 DG B 3 0.207 0.868 3.423 1.00 0.00 N +ATOM 207 H1 DG B 3 0.715 0.010 3.338 1.00 0.00 H +ATOM 208 C2 DG B 3 0.939 2.037 3.469 1.00 0.00 C +ATOM 209 N2 DG B 3 2.270 1.902 3.394 1.00 0.00 N +ATOM 210 H21 DG B 3 2.790 1.039 3.320 1.00 0.00 H +ATOM 211 H22 DG B 3 2.813 2.752 3.436 1.00 0.00 H +ATOM 212 N3 DG B 3 0.384 3.241 3.581 1.00 0.00 N +ATOM 213 C4 DG B 3 -0.973 3.178 3.643 1.00 0.00 C +ATOM 214 C3' DG B 3 -2.210 7.906 3.999 1.00 0.00 C +ATOM 215 H3' DG B 3 -3.141 8.464 3.903 1.00 0.00 H +ATOM 216 C2' DG B 3 -2.261 6.670 3.097 1.00 0.00 C +ATOM 217 H2' DG B 3 -3.189 6.677 2.525 1.00 0.00 H +ATOM 218 H2'' DG B 3 -1.413 6.683 2.414 1.00 0.00 H +ATOM 219 O3' DG B 3 -1.106 8.694 3.577 1.00 0.00 O +ATOM 220 P DT B 4 -0.997 8.602 2.115 1.00 0.00 P +ATOM 221 OP1 DT B 4 -0.745 10.033 2.397 1.00 0.00 O +ATOM 222 OP2 DT B 4 -2.100 8.279 1.183 1.00 0.00 O +ATOM 223 O5' DT B 4 0.406 8.011 1.625 1.00 0.00 O +ATOM 224 C5' DT B 4 1.440 7.769 2.597 1.00 0.00 C +ATOM 225 H5' DT B 4 1.085 7.050 3.336 1.00 0.00 H +ATOM 226 H5'' DT B 4 1.697 8.704 3.095 1.00 0.00 H +ATOM 227 C4' DT B 4 2.678 7.211 1.913 1.00 0.00 C +ATOM 228 H4' DT B 4 3.547 7.361 2.554 1.00 0.00 H +ATOM 229 O4' DT B 4 2.546 5.761 1.808 1.00 0.00 O +ATOM 230 C1' DT B 4 2.250 5.395 0.468 1.00 0.00 C +ATOM 231 H1' DT B 4 3.034 4.740 0.088 1.00 0.00 H +ATOM 232 N1 DT B 4 1.010 4.499 0.443 1.00 0.00 N +ATOM 233 C6 DT B 4 -0.268 4.990 0.493 1.00 0.00 C +ATOM 234 H6 DT B 4 -0.435 6.056 0.554 1.00 0.00 H +ATOM 235 C5 DT B 4 -1.329 4.176 0.415 1.00 0.00 C +ATOM 236 C7 DT B 4 -2.732 4.704 0.469 1.00 0.00 C +ATOM 237 H71 DT B 4 -2.892 5.397 -0.357 1.00 0.00 H +ATOM 238 H72 DT B 4 -3.436 3.875 0.389 1.00 0.00 H +ATOM 239 H73 DT B 4 -2.889 5.223 1.414 1.00 0.00 H +ATOM 240 C4 DT B 4 -1.157 2.753 0.275 1.00 0.00 C +ATOM 241 O4 DT B 4 -2.068 1.930 0.196 1.00 0.00 O +ATOM 242 N3 DT B 4 0.162 2.347 0.233 1.00 0.00 N +ATOM 243 H3 DT B 4 0.343 1.277 0.128 1.00 0.00 H +ATOM 244 C2 DT B 4 1.273 3.161 0.311 1.00 0.00 C +ATOM 245 O2 DT B 4 2.405 2.707 0.265 1.00 0.00 O +ATOM 246 C3' DT B 4 2.910 7.678 0.474 1.00 0.00 C +ATOM 247 H3' DT B 4 2.501 8.680 0.346 1.00 0.00 H +ATOM 248 C2' DT B 4 2.084 6.682 -0.342 1.00 0.00 C +ATOM 249 H2' DT B 4 1.323 7.218 -0.909 1.00 0.00 H +ATOM 250 H2'' DT B 4 2.737 6.144 -1.030 1.00 0.00 H +ATOM 251 O3' DT B 4 4.245 7.616 -0.005 1.00 0.00 O +ATOM 252 HO3' DT B 4 4.365 7.914 -0.909 1.00 0.00 H +CONECT 2 3 +CONECT 3 2 4 6 5 +CONECT 4 3 +CONECT 5 3 +CONECT 6 25 3 7 8 +CONECT 7 6 +CONECT 8 9 6 +CONECT 9 27 8 10 11 +CONECT 10 9 +CONECT 11 24 9 12 +CONECT 12 11 13 14 +CONECT 13 12 +CONECT 14 12 15 +CONECT 15 24 14 16 +CONECT 16 15 17 20 +CONECT 17 16 18 19 +CONECT 18 17 +CONECT 19 17 +CONECT 20 16 21 +CONECT 21 20 22 23 +CONECT 22 21 +CONECT 23 24 21 +CONECT 24 15 23 11 +CONECT 25 6 26 27 30 +CONECT 26 25 +CONECT 27 9 25 28 29 +CONECT 28 27 +CONECT 29 27 +CONECT 30 25 31 +CONECT 31 30 33 34 32 +CONECT 32 31 +CONECT 33 31 +CONECT 34 31 35 +CONECT 35 34 36 37 38 +CONECT 36 35 +CONECT 37 35 +CONECT 38 35 39 40 55 +CONECT 39 38 +CONECT 40 38 41 +CONECT 41 57 40 42 43 +CONECT 42 41 +CONECT 43 41 44 53 +CONECT 44 43 45 46 +CONECT 45 44 +CONECT 46 44 47 48 +CONECT 47 46 +CONECT 48 52 46 49 +CONECT 49 50 48 51 +CONECT 50 49 +CONECT 51 49 +CONECT 52 48 53 +CONECT 53 52 43 54 +CONECT 54 53 +CONECT 55 57 60 56 38 +CONECT 56 55 +CONECT 57 41 55 58 59 +CONECT 58 57 +CONECT 59 57 +CONECT 60 55 61 +CONECT 61 62 60 63 64 +CONECT 62 61 +CONECT 63 61 +CONECT 64 61 65 +CONECT 65 64 66 67 68 +CONECT 66 65 +CONECT 67 65 +CONECT 68 87 65 69 70 +CONECT 69 68 +CONECT 70 68 71 +CONECT 71 73 72 89 70 +CONECT 72 71 +CONECT 73 71 74 85 +CONECT 74 73 75 76 +CONECT 75 74 +CONECT 76 74 77 81 +CONECT 77 76 78 79 80 +CONECT 78 77 +CONECT 79 77 +CONECT 80 77 +CONECT 81 76 82 83 +CONECT 82 81 +CONECT 83 81 84 85 +CONECT 84 83 +CONECT 85 83 73 86 +CONECT 86 85 +CONECT 87 88 89 68 92 +CONECT 88 87 +CONECT 89 87 71 90 91 +CONECT 90 89 +CONECT 91 89 +CONECT 92 93 87 +CONECT 93 92 94 95 96 +CONECT 94 93 +CONECT 95 93 +CONECT 96 93 97 +CONECT 97 96 98 99 100 +CONECT 98 97 +CONECT 99 97 +CONECT 100 120 97 101 102 +CONECT 101 100 +CONECT 102 103 100 +CONECT 103 102 104 105 122 +CONECT 104 103 +CONECT 105 119 103 106 +CONECT 106 105 107 108 +CONECT 107 106 +CONECT 108 106 109 +CONECT 109 119 110 108 +CONECT 110 111 109 112 +CONECT 111 110 +CONECT 112 114 110 113 +CONECT 113 112 +CONECT 114 112 115 118 +CONECT 115 114 116 117 +CONECT 116 115 +CONECT 117 115 +CONECT 118 119 114 +CONECT 119 105 118 109 +CONECT 120 125 100 121 122 +CONECT 121 120 +CONECT 122 124 103 120 123 +CONECT 123 122 +CONECT 124 122 +CONECT 125 120 126 +CONECT 126 125 +CONECT 128 129 +CONECT 129 128 130 131 132 +CONECT 130 129 +CONECT 131 129 +CONECT 132 134 129 133 149 +CONECT 133 132 +CONECT 134 132 135 +CONECT 135 136 137 134 151 +CONECT 136 135 +CONECT 137 135 138 147 +CONECT 138 137 139 140 +CONECT 139 138 +CONECT 140 138 141 142 +CONECT 141 140 +CONECT 142 140 146 143 +CONECT 143 145 144 142 +CONECT 144 143 +CONECT 145 143 +CONECT 146 147 142 +CONECT 147 148 137 146 +CONECT 148 147 +CONECT 149 132 154 151 150 +CONECT 150 149 +CONECT 151 152 153 135 149 +CONECT 152 151 +CONECT 153 151 +CONECT 154 149 155 +CONECT 155 156 157 158 154 +CONECT 156 155 +CONECT 157 155 +CONECT 158 155 159 +CONECT 159 160 161 162 158 +CONECT 160 159 +CONECT 161 159 +CONECT 162 181 159 163 164 +CONECT 163 162 +CONECT 164 165 162 +CONECT 165 164 166 167 183 +CONECT 166 165 +CONECT 167 165 168 180 +CONECT 168 167 169 170 +CONECT 169 168 +CONECT 170 171 168 +CONECT 171 172 170 180 +CONECT 172 176 171 173 +CONECT 173 174 172 175 +CONECT 174 173 +CONECT 175 173 +CONECT 176 172 177 +CONECT 177 176 178 179 +CONECT 178 177 +CONECT 179 177 180 +CONECT 180 179 171 167 +CONECT 181 186 162 183 182 +CONECT 182 181 +CONECT 183 181 165 184 185 +CONECT 184 183 +CONECT 185 183 +CONECT 186 181 187 +CONECT 187 188 186 190 189 +CONECT 188 187 +CONECT 189 187 +CONECT 190 191 187 +CONECT 191 190 192 194 193 +CONECT 192 191 +CONECT 193 191 +CONECT 194 196 195 191 214 +CONECT 195 194 +CONECT 196 194 197 +CONECT 197 196 199 198 216 +CONECT 198 197 +CONECT 199 213 200 197 +CONECT 200 202 201 199 +CONECT 201 200 +CONECT 202 200 203 +CONECT 203 213 204 202 +CONECT 204 206 205 203 +CONECT 205 204 +CONECT 206 208 207 204 +CONECT 207 206 +CONECT 208 206 212 209 +CONECT 209 211 210 208 +CONECT 210 209 +CONECT 211 209 +CONECT 212 213 208 +CONECT 213 199 212 203 +CONECT 214 194 219 215 216 +CONECT 215 214 +CONECT 216 218 217 214 197 +CONECT 217 216 +CONECT 218 216 +CONECT 219 220 214 +CONECT 220 221 222 219 223 +CONECT 221 220 +CONECT 222 220 +CONECT 223 224 220 +CONECT 224 226 223 227 225 +CONECT 225 224 +CONECT 226 224 +CONECT 227 224 229 228 246 +CONECT 228 227 +CONECT 229 227 230 +CONECT 230 231 232 229 248 +CONECT 231 230 +CONECT 232 244 230 233 +CONECT 233 235 234 232 +CONECT 234 233 +CONECT 235 233 240 236 +CONECT 236 239 238 235 237 +CONECT 237 236 +CONECT 238 236 +CONECT 239 236 +CONECT 240 235 241 242 +CONECT 241 240 +CONECT 242 244 243 240 +CONECT 243 242 +CONECT 244 245 232 242 +CONECT 245 244 +CONECT 246 247 251 227 248 +CONECT 247 246 +CONECT 248 249 250 230 246 +CONECT 249 248 +CONECT 250 248 +CONECT 251 246 252 +CONECT 252 251 +MASTER 0 0 0 0 0 0 0 0 252 0 252 0 +END diff --git a/moldesign/_tests/data/bipyridine.mol2 b/moldesign/_tests/data/bipyridine.mol2 new file mode 100644 index 0000000..97e0f24 --- /dev/null +++ b/moldesign/_tests/data/bipyridine.mol2 @@ -0,0 +1,49 @@ +@MOLECULE +***** + 20 21 0 0 0 +SMALL +GASTEIGER + +@ATOM + 1 N0 -0.7015 -1.2104 0.0598 N.ar 1 UNL1 -0.2534 + 2 C1 -1.4095 -0.0497 0.0357 C.ar 1 UNL1 0.0891 + 3 C2 -0.7311 1.1783 0.0646 C.ar 1 UNL1 -0.0342 + 4 C3 0.6605 1.2269 -0.0027 C.ar 1 UNL1 -0.0583 + 5 C4 1.3724 0.0469 -0.0163 C.ar 1 UNL1 -0.0436 + 6 C5 0.6575 -1.1366 0.0579 C.ar 1 UNL1 0.0283 + 7 C6 -2.9039 -0.1126 -0.1283 C.ar 1 UNL1 0.0891 + 8 N7 -3.5029 -1.3283 -0.2388 N.ar 1 UNL1 -0.2534 + 9 C8 -4.8314 -1.3682 -0.5322 C.ar 1 UNL1 0.0283 + 10 C9 -5.6084 -0.2481 -0.7751 C.ar 1 UNL1 -0.0436 + 11 C10 -5.0146 0.9870 -0.6303 C.ar 1 UNL1 -0.0583 + 12 C11 -3.6706 1.0545 -0.2661 C.ar 1 UNL1 -0.0342 + 13 H12 -1.2549 2.1214 0.1109 H 1 UNL1 0.0639 + 14 H13 1.1641 2.1886 -0.0484 H 1 UNL1 0.0619 + 15 H14 2.4567 0.0509 -0.0673 H 1 UNL1 0.0633 + 16 H15 1.1771 -2.0879 0.1185 H 1 UNL1 0.0830 + 17 H16 -5.2721 -2.3596 -0.5697 H 1 UNL1 0.0830 + 18 H17 -6.6538 -0.3342 -1.0547 H 1 UNL1 0.0633 + 19 H18 -5.5730 1.9036 -0.7995 H 1 UNL1 0.0619 + 20 H19 -3.2478 2.0379 -0.1250 H 1 UNL1 0.0639 +@BOND + 1 6 5 ar + 2 6 1 ar + 3 20 12 1 + 4 11 10 ar + 5 5 4 ar + 6 9 8 ar + 7 3 2 ar + 8 7 2 1 + 9 8 7 ar + 10 10 9 ar + 11 2 1 ar + 12 12 11 ar + 13 12 7 ar + 14 16 6 1 + 15 19 11 1 + 16 14 4 1 + 17 15 5 1 + 18 17 9 1 + 19 18 10 1 + 20 4 3 ar + 21 13 3 1 diff --git a/moldesign/_tests/data/bipyridine.sdf b/moldesign/_tests/data/bipyridine.sdf new file mode 100644 index 0000000..a657614 --- /dev/null +++ b/moldesign/_tests/data/bipyridine.sdf @@ -0,0 +1,47 @@ + + OpenBabel08101621003D + + 20 21 0 0 0 0 0 0 0 0999 V2000 + -0.7015 -1.2104 0.0598 N 0 0 0 0 0 0 0 0 0 0 0 0 + -1.4095 -0.0497 0.0357 C 0 0 0 0 0 0 0 0 0 0 0 0 + -0.7311 1.1783 0.0646 C 0 0 0 0 0 0 0 0 0 0 0 0 + 0.6605 1.2269 -0.0027 C 0 0 0 0 0 0 0 0 0 0 0 0 + 1.3724 0.0469 -0.0163 C 0 0 0 0 0 0 0 0 0 0 0 0 + 0.6575 -1.1366 0.0579 C 0 0 0 0 0 0 0 0 0 0 0 0 + -2.9039 -0.1126 -0.1283 C 0 0 0 0 0 0 0 0 0 0 0 0 + -3.5029 -1.3283 -0.2388 N 0 0 0 0 0 0 0 0 0 0 0 0 + -4.8314 -1.3682 -0.5322 C 0 0 0 0 0 0 0 0 0 0 0 0 + -5.6084 -0.2481 -0.7751 C 0 0 0 0 0 0 0 0 0 0 0 0 + -5.0146 0.9870 -0.6303 C 0 0 0 0 0 0 0 0 0 0 0 0 + -3.6706 1.0545 -0.2661 C 0 0 0 0 0 0 0 0 0 0 0 0 + -1.2549 2.1214 0.1109 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1.1641 2.1886 -0.0484 H 0 0 0 0 0 0 0 0 0 0 0 0 + 2.4567 0.0509 -0.0673 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1.1771 -2.0879 0.1185 H 0 0 0 0 0 0 0 0 0 0 0 0 + -5.2721 -2.3596 -0.5697 H 0 0 0 0 0 0 0 0 0 0 0 0 + -6.6538 -0.3342 -1.0547 H 0 0 0 0 0 0 0 0 0 0 0 0 + -5.5730 1.9036 -0.7995 H 0 0 0 0 0 0 0 0 0 0 0 0 + -3.2478 2.0379 -0.1250 H 0 0 0 0 0 0 0 0 0 0 0 0 + 2 1 2 0 0 0 0 + 3 2 1 0 0 0 0 + 4 3 2 0 0 0 0 + 5 4 1 0 0 0 0 + 6 5 2 0 0 0 0 + 6 1 1 0 0 0 0 + 7 2 1 0 0 0 0 + 8 7 2 0 0 0 0 + 9 8 1 0 0 0 0 + 10 9 2 0 0 0 0 + 11 10 1 0 0 0 0 + 12 11 2 0 0 0 0 + 12 7 1 0 0 0 0 + 13 3 1 0 0 0 0 + 14 4 1 0 0 0 0 + 15 5 1 0 0 0 0 + 16 6 1 0 0 0 0 + 17 9 1 0 0 0 0 + 18 10 1 0 0 0 0 + 19 11 1 0 0 0 0 + 20 12 1 0 0 0 0 +M END +$$$$ diff --git a/moldesign/_tests/data/bipyridine.xyz b/moldesign/_tests/data/bipyridine.xyz new file mode 100644 index 0000000..1af7c73 --- /dev/null +++ b/moldesign/_tests/data/bipyridine.xyz @@ -0,0 +1,22 @@ +20 + +N -0.70146 -1.21041 0.05981 +C -1.40947 -0.04966 0.03570 +C -0.73107 1.17826 0.06459 +C 0.66051 1.22692 -0.00267 +C 1.37237 0.04687 -0.01631 +C 0.65746 -1.13662 0.05787 +C -2.90390 -0.11263 -0.12831 +N -3.50292 -1.32833 -0.23877 +C -4.83136 -1.36820 -0.53219 +C -5.60843 -0.24807 -0.77508 +C -5.01459 0.98698 -0.63027 +C -3.67060 1.05453 -0.26612 +H -1.25489 2.12136 0.11089 +H 1.16407 2.18862 -0.04841 +H 2.45667 0.05087 -0.06733 +H 1.17706 -2.08790 0.11855 +H -5.27209 -2.35957 -0.56974 +H -6.65380 -0.33424 -1.05474 +H -5.57299 1.90361 -0.79947 +H -3.24778 2.03785 -0.12496 diff --git a/moldesign/_tests/test_data_structures.py b/moldesign/_tests/test_data_structures.py index f146464..131c037 100644 --- a/moldesign/_tests/test_data_structures.py +++ b/moldesign/_tests/test_data_structures.py @@ -184,14 +184,15 @@ def test_h2_hierarchy(h2): assert chain == atom1.chain == atom2.chain assert res == atom1.residue == atom2.residue + def test_h2_array_link(h2): atom1, atom2 = h2.atoms - atom2.momentum[1] = 3.0 * u.default.momentum - h2.positions[0, 1] = 0.1 * u.angstrom + atom2.momentum[1] = 3.0*u.default.momentum + h2.positions[0, 1] = 0.1*u.angstrom assert atom1.index == 0 and atom2.index == 1 - assert atom1.y == 0.1 * u.angstrom - assert h2.momenta[1, 1] == 3.0 * u.default.momentum - assert h2.atoms[1].py == 3.0 * u.default.momentum + assert atom1.y == 0.1*u.angstrom + assert h2.momenta[1, 1] == 3.0*u.default.momentum + assert h2.atoms[1].py == 3.0*u.default.momentum def test_copy_breaks_link(h2): @@ -239,6 +240,7 @@ def test_h2_harmonic_copy_loses_simulation(h2_harmonic_copy, h2_harmonic): assert mol.atoms[0].bond_graph[mol.atoms[1]] == 1 assert mol.atoms[1].bond_graph[mol.atoms[0]] == 1 + def test_h2_calculation_caching(h2_harmonic): h2 = h2_harmonic h2.properties = moldesign.molecules.molecule.MolecularProperties(h2) @@ -255,6 +257,7 @@ def test_h2_calculation_caching(h2_harmonic): assert props2.potential_energy == h2.potential_energy == true_energy assert h2.calc_potential_energy() == true_energy + def test_h2_cache_flush(h2_harmonic): h2 = h2_harmonic pe = h2.calc_potential_energy() @@ -263,7 +266,8 @@ def test_h2_cache_flush(h2_harmonic): pe2 = h2.calc_potential_energy() f2 = h2.forces assert pe != pe2 - assert not np.array_equal(f,f2) + assert not np.array_equal(f, f2) + def test_h2_not_calculated_yet(h2_harmonic): h2_harmonic.calculate() @@ -273,6 +277,7 @@ def test_h2_not_calculated_yet(h2_harmonic): with pytest.raises(moldesign.exceptions.NotCalculatedError): h2_harmonic.potential_energy + def h2_properties_raises_not_calculated_yet(h2_harmonic): h2_harmonic.calculate() h2_harmonic.atoms[1].x += 0.3*u.ang @@ -281,6 +286,7 @@ def h2_properties_raises_not_calculated_yet(h2_harmonic): with pytest.raises(moldesign.exceptions.NotCalculatedError): h2_harmonic.properties.potential_energy + @typedfixture('submolecule') def copy_atoms_from_h2_harmonic(h2_harmonic): atoms = h2_harmonic.atoms.copy() @@ -361,6 +367,7 @@ def ligand3aid(ligand_residue_3aid): newmol = mdt.Molecule(ligand_residue_3aid) return newmol + @pytest.fixture def random_atoms_from_3aid(pdb3aid): atoms = moldesign.molecules.atomcollections.AtomList(random.sample(pdb3aid.atoms, 10)) @@ -387,12 +394,22 @@ def test_ligand3aid(ligand3aid): assert len(mol.residues) == 1 +def test_nucleic_build(nucleic): + mol = nucleic + assert mol.num_chains == 2 + assert mol.num_residues == 8 + assert mol.chains[0] is mol.chains['A'] + assert mol.chains[1] is mol.chains['B'] + assert len(mol.chains[0].residues) == len(mol.chains[1].residues) == 4 + + + ###################################### # Tests around a piece of DNA @typedfixture('molecule', scope='session') def nucleic(): - mol = mdt.interfaces.openmm.amber_to_mol('../notebooks/data/nuc.prmtop', - '../notebooks/data/nuc.inpcrd') + # ACTG.pdb contains a molecule generated using mdt.build_dna('ACTG') + mol = mdt.read('data/ACTG.pdb') return mol diff --git a/moldesign/interfaces/openbabel.py b/moldesign/interfaces/openbabel.py index e414b27..2c343ae 100644 --- a/moldesign/interfaces/openbabel.py +++ b/moldesign/interfaces/openbabel.py @@ -30,8 +30,8 @@ import moldesign as mdt from moldesign.compute.runsremotely import runsremotely import moldesign.molecules.atoms -from moldesign.units import * from moldesign.molecules import biounits +from moldesign import units as u def read_file(filename, name=None, format=None): @@ -220,7 +220,7 @@ def mol_to_pybel(mdtmol): for atom in atommap: idx = atommap[atom].GetIdx() obatom = obmol.GetAtom(idx) - obatom.SetFormalCharge(atom.formal_charge) + obatom.SetFormalCharge(int(atom.formal_charge.value_in(u.q_e))) return pbmol @@ -263,10 +263,10 @@ def pybel_to_mol(pbmol, atom_names=True, **kwargs): else: atnum = pybatom.atomicnum mdtatom = moldesign.molecules.atoms.Atom(atnum=atnum, name=name, - formal_charge=pybatom.formalcharge, + formal_charge=pybatom.formalcharge * u.q_e, pdbname=name, pdbindex=pybatom.OBAtom.GetIdx()) newatom_map[pybatom.OBAtom.GetIdx()] = mdtatom - mdtatom.position = pybatom.coords * angstrom + mdtatom.position = pybatom.coords * u.angstrom obres = pybatom.OBAtom.GetResidue() resname = obres.GetName() residx = obres.GetIdx() diff --git a/moldesign/molecules/atoms.py b/moldesign/molecules/atoms.py index 0c439df..1fe4a82 100644 --- a/moldesign/molecules/atoms.py +++ b/moldesign/molecules/atoms.py @@ -331,7 +331,7 @@ def __init__(self, name=None, atnum=None, mass=None, chain=None, residue=None, if mass is None: self.mass = data.ATOMIC_MASSES[self.atnum] else: self.mass = mass - self.formal_charge = formal_charge + self.formal_charge = utils.if_not_none(formal_charge, 0.0 * u.q_e) self.residue = residue self.chain = chain self.molecule = None @@ -402,7 +402,6 @@ def bond_to(self, other, order): """ if self.molecule is other.molecule: self.bond_graph[other] = other.bond_graph[self] = order - if self.molecule is not None: self.molecule.num_bonds += 1 else: # allow unassigned atoms to be bonded to anything for building purposes self.bond_graph[other] = order return Bond(self, other, order) @@ -479,6 +478,12 @@ def num_bonds(self): return len(self.bond_graph) nbonds = num_bonds + @property + def valence(self): + """ int: the sum of this atom's bond orders + """ + return sum(v for v in self.bond_graph.itervalues()) + @property def symbol(self): """ str: elemental symbol diff --git a/moldesign/molecules/molecule.py b/moldesign/molecules/molecule.py index c3d9037..261fdc2 100644 --- a/moldesign/molecules/molecule.py +++ b/moldesign/molecules/molecule.py @@ -218,7 +218,7 @@ def dynamic_dof(self, val): @property def num_electrons(self): """int: The number of electrons in the system, based on the atomic numbers and self.charge""" - return sum(self.atoms.atnum)-self.charge + return sum(self.atoms.atnum) - self.charge.value_in(u.q_e) @property def homo(self): diff --git a/moldesign/viewer/viewer3d.py b/moldesign/viewer/viewer3d.py index fbf2343..92f4aab 100644 --- a/moldesign/viewer/viewer3d.py +++ b/moldesign/viewer/viewer3d.py @@ -39,7 +39,7 @@ class GeometryViewer(MolViz_3DMol, ColorMixin): DEFAULT_COLOR_MAP = colormap DEFAULT_WIDTH = 625 DEFAULT_HEIGHT = 400 - DEF_PADDING = 1.75 * u.angstrom + DEF_PADDING = 2.25 * u.angstrom def __reduce__(self): """prevent these from being pickled for now""" From fb7f75cfc9a5beba9f749fb1dc4af7da5c2c5a48 Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Wed, 10 Aug 2016 21:48:23 -0700 Subject: [PATCH 08/64] Add i/o tests; fix num_bonds double counting bug --- moldesign/_tests/test_data_structures.py | 8 --- moldesign/_tests/test_io.py | 79 ++++++++++++++++++++++++ moldesign/molecules/molecule.py | 2 +- 3 files changed, 80 insertions(+), 9 deletions(-) create mode 100644 moldesign/_tests/test_io.py diff --git a/moldesign/_tests/test_data_structures.py b/moldesign/_tests/test_data_structures.py index 131c037..60229ff 100644 --- a/moldesign/_tests/test_data_structures.py +++ b/moldesign/_tests/test_data_structures.py @@ -529,14 +529,6 @@ def test_pickled_equality(objkey, request): assert (y == obj).all() -@pytest.mark.parametrize('fixture_name', moldesign_objects) -def test_markdown_repr(fixture_name, request): - """Just tests whether it works, not its content""" - obj = request.getfuncargvalue(fixture_name) - result = obj._repr_markdown_() - assert bool(result) - - @pytest.mark.parametrize('fixture_key', ['h2_harmonic_atoms', 'ligand_3aid_atoms', 'random_atoms_from_3aid']) diff --git a/moldesign/_tests/test_io.py b/moldesign/_tests/test_io.py new file mode 100644 index 0000000..0728f75 --- /dev/null +++ b/moldesign/_tests/test_io.py @@ -0,0 +1,79 @@ +import collections + +import pytest + +import moldesign as mdt +from moldesign import units as u + + +@pytest.fixture +def bipyridine_sdf(): + return mdt.read('data/bipyridine.sdf') + + +@pytest.fixture +def bipyridine_xyz(): + return mdt.read('data/bipyridine.xyz') + + +@pytest.fixture +def bipyridine_mol2(): + return mdt.read('data/bipyridine.mol2') + + +@pytest.fixture +def bipyridine_iupac(): + return mdt.from_name('bipyridine') + + +@pytest.fixture +def bipyridine_smiles(): + return mdt.from_smiles('c1ccnc(c1)c2ccccn2') + +ATOMDATA = { # (symbol, valence, mass) + 1: ('H', 1, 1.008 * u.amu), + 6: ('C', 4, 12.000 * u.amu), + 7: ('N', 3, 14.003 * u.amu), + 8: ('O', 2, 15.995 * u.amu)} + + +@pytest.mark.parametrize('key', 'mol2 xyz sdf iupac smiles'.split()) +def test_read_bipyridine_from_format(key, request): + mol = request.getfuncargvalue('bipyridine_'+key) + + atomcounts = collections.Counter(atom.symbol for atom in mol.atoms) + assert len(atomcounts) == 3 + assert atomcounts['C'] == 10 + assert atomcounts['N'] == 2 + assert atomcounts['H'] == 8 + + assert mol.charge == 0 + assert abs(mol.mass - 156.069*u.amu) < 0.001 * u.amu + for atom in mol.atoms: + assert atom.formal_charge == 0.0 + symb, val, mss = ATOMDATA[atom.atnum] + assert atom.symbol == symb + assert atom.valence == val + assert abs(atom.mass - mss) < 0.001 * u.amu + + assert mol.num_bonds == 21 + bondorders = collections.Counter(bond.order for bond in mol.bonds) + assert bondorders[2] == 6 + assert bondorders[1] == 15 + assert len(bondorders) == 2 + + + + + +@pytest.fixture +def dna_pdb(): + return mdt.read('data/ACTG.pdb') + +@pytest.fixture +def dna_mmcif(): + return mdt.read('data/ACTG.cif') + +@pytest.fixture +def dna_sequence(): + return mdt.build_bdna('ACTG') \ No newline at end of file diff --git a/moldesign/molecules/molecule.py b/moldesign/molecules/molecule.py index 261fdc2..61839ea 100644 --- a/moldesign/molecules/molecule.py +++ b/moldesign/molecules/molecule.py @@ -1015,7 +1015,7 @@ def velocities(self, value): @property def num_bonds(self): """int: number of chemical bonds in this molecule""" - return sum(atom.nbonds for atom in self.atoms) + return sum(atom.nbonds for atom in self.atoms)/2 nbonds = num_bonds From 5bf217b820f21532bb17e7810bc0040cc60fd7fe Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Thu, 11 Aug 2016 12:30:10 -0700 Subject: [PATCH 09/64] Fix #61 --- moldesign/interfaces/biopython_interface.py | 10 ++++------ moldesign/molecules/biounits.py | 6 +++++- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/moldesign/interfaces/biopython_interface.py b/moldesign/interfaces/biopython_interface.py index 568c90d..5f297d2 100644 --- a/moldesign/interfaces/biopython_interface.py +++ b/moldesign/interfaces/biopython_interface.py @@ -99,7 +99,10 @@ def biopy_to_mol(struc): newchain.add(newresidue) for atom in residue.get_atom(): - newatom = mdt.Atom(element=atom.element, + elem = atom.element + if len(elem) == 2: + elem = elem[0] + elem[1].lower() + newatom = mdt.Atom(element=elem, name=atom.get_name(), pdbname=atom.get_name(), pdbindex=atom.get_serial_number()) @@ -209,8 +212,3 @@ def _read_assembly(lineiter): - - - - - diff --git a/moldesign/molecules/biounits.py b/moldesign/molecules/biounits.py index 70fe17c..020627e 100644 --- a/moldesign/molecules/biounits.py +++ b/moldesign/molecules/biounits.py @@ -320,7 +320,11 @@ def assign_template_bonds(self): bonds_by_name = data.RESIDUE_BONDS[resname] self._template_name = resname except KeyError: - raise ValueError("No bonding template for residue '%s'" % resname) + if len(self) == 1: + print 'INFO: no bonds assigned to residue %s' % self + return + else: + raise ValueError("No bonding template for residue '%s'" % resname) # intra-residue bonds bond_graph = {atom: {} for atom in self} From 2b35e39fcb324076dd07b2e54c44bd0f0e1f574b Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Thu, 11 Aug 2016 12:34:16 -0700 Subject: [PATCH 10/64] Basic fix for #72. - Add `assign_formal_charges` tool - this is a rough routine based on basic valence cases. - Add `clean_pdb` tool - convenience routine for assigning hydrogens, bonds, and formal charges to structures from PDB files --- moldesign/tools.py | 110 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) diff --git a/moldesign/tools.py b/moldesign/tools.py index cd1437d..bb3acde 100644 --- a/moldesign/tools.py +++ b/moldesign/tools.py @@ -15,6 +15,8 @@ """ This module contains various utility functions that are exposed to API users """ +import moldesign as mdt +from moldesign import units as u from moldesign.interfaces.openbabel import add_hydrogen, guess_bond_orders from moldesign.interfaces.pdbfixer_interface import mutate, add_water @@ -26,3 +28,111 @@ ' assign_forcefield parameterize').split() +def exports(o): + __all__.append(o.__name__) + return o + + +@exports +def assign_formal_charges(mol, ignore_nonzero=True): + """ Assign formal charges to C,N,O,F atoms in this molecule based on valence + + Args: + mol (moldesign.Molecule): Molecule to assign formal charges to. The formal charges of its + atoms and its total charge will be adjusted in place. + ignore_nonzero (bool): If formal charge is already set to a nonzero value, ignore this atom + + Note: + This method ONLY applies to C,N, O and F, based on a simple valence model. + These results should be manually inspected for consistency. + + Raises: + UnhandledValenceError: for cases not handled by the simple valence model + + References: + These assignments are illustrated by the formal charge patterns in + http://www.chem.ucla.edu/~harding/tutorials/formalcharge.pdf + """ + from moldesign.exceptions import UnhandledValenceError + + # cache these values in case we fail to assign charges + totalcharge = mol.charge + oldcharges = [atom.formal_charge for atom in mol.atoms] + + def fail(): # reset all charges before raising exception + for oldcharge, a in zip(oldcharges, mol.atoms): + a.oldcharge = oldcharge + mol.charge = totalcharge + raise UnhandledValenceError(atom) + + for atom in mol.atoms: + if ignore_nonzero and atom.formal_charge != 0: continue + + v = atom.valence + newcharge = None + + if atom.atnum == 6: + if v == 3: + newcharge = -1 + elif v == 4: + newcharge = 0 + else: + fail() + + elif atom.atnum == 7: + if v == 2: + newcharge = -1 + elif v == 3: + newcharge = 0 + elif v == 4: + newcharge = 1 + else: + fail() + + elif atom.atnum == 8: + if v == 1: + newcharge = -1 + elif v == 2: + newcharge = 0 + elif v == 3: + newcharge = 1 + else: + fail() + + elif atom.atnum == 9: + if v == 1: + newcharge = 0 + elif v == 2: + newcharge = 1 + else: + fail() + + if newcharge is not None: + mol.charge += newcharge * u.q_e - atom.formal_charge + atom.formal_charge = newcharge * u.q_e + +@exports +def clean_pdb(mol): + """ Attempt to clean up a molecule from PDB format that may be missing data + + Specifically, this is a convenience function that runs: + ``mdt.guess_bond_orders``, ``mdt.add_hydrogen``, and ``mdt.assign_formal_charges`` + + Args: + mol (moldesign.Molecule): molecule to clean + + Returns: + moldesign.Molecule: cleaned version of the molecule + """ + m = mdt.add_hydrogen(mdt.guess_bond_orders(mol)) + assign_formal_charges(m) + return m + + + + + + + + + From 8b93c1139232bae83e547172e90d75adf0b86980 Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Thu, 11 Aug 2016 13:38:49 -0700 Subject: [PATCH 11/64] Add 3D residue templates --- moldesign/_static_data/residue_templates.json | 1 + .../{ => scripts}/generate_residue_bonds.py | 0 .../scripts/generate_residue_templates.py | 26 +++++++++++++++++++ moldesign/exceptions.py | 9 ++++++- moldesign/molecules/biounits.py | 12 ++++----- 5 files changed, 41 insertions(+), 7 deletions(-) create mode 100644 moldesign/_static_data/residue_templates.json rename moldesign/_static_data/{ => scripts}/generate_residue_bonds.py (100%) create mode 100644 moldesign/_static_data/scripts/generate_residue_templates.py diff --git a/moldesign/_static_data/residue_templates.json b/moldesign/_static_data/residue_templates.json new file mode 100644 index 0000000..b5c04aa --- /dev/null +++ b/moldesign/_static_data/residue_templates.json @@ -0,0 +1 @@ +{"ILE": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 N ILE B 92 -66.813 -7.120 7.545 1.00 0.00 N \nATOM 2 CA ILE B 92 -65.821 -8.056 8.073 1.00 0.00 C \nATOM 3 C ILE B 92 -66.404 -9.432 8.417 1.00 0.00 C \nATOM 4 O ILE B 92 -65.709 -10.448 8.340 1.00 0.00 O \nATOM 5 CB ILE B 92 -65.095 -7.471 9.303 1.00 0.00 C \nATOM 6 CG1 ILE B 92 -63.886 -8.330 9.675 1.00 0.00 C \nATOM 7 CG2 ILE B 92 -66.047 -7.344 10.479 1.00 0.00 C \nATOM 8 CD1 ILE B 92 -62.788 -8.299 8.661 1.00 0.00 C \nATOM 9 H ILE B 92 -66.363 -6.229 7.338 1.00 0.00 H \nATOM 10 H10 ILE B 92 -67.548 -6.977 8.238 1.00 0.00 H \nATOM 11 H11 ILE B 92 -65.116 -8.202 7.281 1.00 0.00 H \nATOM 12 H12 ILE B 92 -67.389 -9.509 8.716 1.00 0.00 H \nATOM 13 H13 ILE B 92 -64.745 -6.492 9.051 1.00 0.00 H \nATOM 14 H14 ILE B 92 -64.213 -9.343 9.787 1.00 0.00 H \nATOM 15 H15 ILE B 92 -63.484 -7.927 10.581 1.00 0.00 H \nATOM 16 H16 ILE B 92 -66.411 -8.313 10.750 1.00 0.00 H \nATOM 17 H17 ILE B 92 -66.870 -6.717 10.205 1.00 0.00 H \nATOM 18 H18 ILE B 92 -65.531 -6.912 11.311 1.00 0.00 H \nATOM 19 H19 ILE B 92 -63.147 -8.695 7.734 1.00 0.00 H \nATOM 20 H20 ILE B 92 -61.966 -8.890 9.007 1.00 0.00 H \nATOM 21 H21 ILE B 92 -62.465 -7.289 8.516 1.00 0.00 H \nCONECT 1 9 2 10 \nCONECT 2 1 3 5 11 \nCONECT 3 4 12 2 \nCONECT 4 3 \nCONECT 5 6 13 7 2 \nCONECT 6 15 5 8 14 \nCONECT 7 17 16 5 18 \nCONECT 8 6 21 20 19 \nCONECT 9 1 \nCONECT 10 1 \nCONECT 11 2 \nCONECT 12 3 \nCONECT 13 5 \nCONECT 14 6 \nCONECT 15 6 \nCONECT 16 7 \nCONECT 17 7 \nCONECT 18 7 \nCONECT 19 8 \nCONECT 20 8 \nCONECT 21 8 \nMASTER 0 0 0 0 0 0 0 0 21 0 21 0\nEND\n", "GLN": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 N GLN B 72 -75.527 -11.475 17.192 1.00 0.00 N \nATOM 2 CA GLN B 72 -76.080 -10.134 17.093 1.00 0.00 C \nATOM 3 C GLN B 72 -76.405 -9.695 15.673 1.00 0.00 C \nATOM 4 O GLN B 72 -77.351 -8.949 15.473 1.00 0.00 O \nATOM 5 CB GLN B 72 -75.167 -9.118 17.774 1.00 0.00 C \nATOM 6 CG GLN B 72 -75.174 -9.228 19.281 1.00 0.00 C \nATOM 7 CD GLN B 72 -74.183 -8.294 19.926 1.00 0.00 C \nATOM 8 OE1 GLN B 72 -73.178 -8.732 20.481 1.00 0.00 O \nATOM 9 NE2 GLN B 72 -74.458 -6.995 19.856 1.00 0.00 N \nATOM 10 H GLN B 72 -75.337 -11.693 18.170 1.00 0.00 H \nATOM 11 H11 GLN B 72 -74.659 -11.525 16.658 1.00 0.00 H \nATOM 12 H12 GLN B 72 -77.018 -10.173 17.607 1.00 0.00 H \nATOM 13 H13 GLN B 72 -75.829 -10.026 14.883 1.00 0.00 H \nATOM 14 H14 GLN B 72 -75.491 -8.135 17.503 1.00 0.00 H \nATOM 15 H15 GLN B 72 -74.168 -9.317 17.445 1.00 0.00 H \nATOM 16 H16 GLN B 72 -76.154 -8.991 19.639 1.00 0.00 H \nATOM 17 H17 GLN B 72 -74.896 -10.229 19.538 1.00 0.00 H \nATOM 18 H18 GLN B 72 -75.276 -6.689 19.401 1.00 0.00 H \nATOM 19 H19 GLN B 72 -73.844 -6.339 20.259 1.00 0.00 H \nCONECT 1 11 10 2 \nCONECT 2 5 12 3 1 \nCONECT 3 4 13 2 \nCONECT 4 3 \nCONECT 5 2 15 6 14 \nCONECT 6 5 16 7 17 \nCONECT 7 6 9 8 \nCONECT 8 7 \nCONECT 9 19 7 18 \nCONECT 10 1 \nCONECT 11 1 \nCONECT 12 2 \nCONECT 13 3 \nCONECT 14 5 \nCONECT 15 5 \nCONECT 16 6 \nCONECT 17 6 \nCONECT 18 9 \nCONECT 19 9 \nMASTER 0 0 0 0 0 0 0 0 19 0 19 0\nEND\n", "DG": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 P DG B 5 -5.889 6.175 5.509 1.00 0.00 P \nATOM 2 OP1 DG B 5 -6.554 7.446 5.873 1.00 0.00 O \nATOM 3 OP2 DG B 5 -6.567 5.316 4.513 1.00 0.00 O \nATOM 4 O5' DG B 5 -4.411 6.584 5.052 1.00 0.00 O \nATOM 5 C5' DG B 5 -3.446 6.950 6.056 1.00 0.00 C \nATOM 6 H5' DG B 5 -3.299 6.115 6.741 1.00 0.00 H \nATOM 7 H5'' DG B 5 -3.809 7.815 6.612 1.00 0.00 H \nATOM 8 C4' DG B 5 -2.120 7.299 5.401 1.00 0.00 C \nATOM 9 H4' DG B 5 -1.521 7.898 6.086 1.00 0.00 H \nATOM 10 O4' DG B 5 -1.348 6.073 5.217 1.00 0.00 O \nATOM 11 C1' DG B 5 -1.355 5.693 3.849 1.00 0.00 C \nATOM 12 H1' DG B 5 -0.333 5.670 3.472 1.00 0.00 H \nATOM 13 N9 DG B 5 -1.793 4.272 3.766 1.00 0.00 N \nATOM 14 C8 DG B 5 -3.071 3.750 3.792 1.00 0.00 C \nATOM 15 H8 DG B 5 -3.922 4.409 3.883 1.00 0.00 H \nATOM 16 N7 DG B 5 -3.114 2.444 3.700 1.00 0.00 N \nATOM 17 C5 DG B 5 -1.779 2.070 3.608 1.00 0.00 C \nATOM 18 C6 DG B 5 -1.189 0.785 3.486 1.00 0.00 C \nATOM 19 O6 DG B 5 -1.739 -0.314 3.435 1.00 0.00 O \nATOM 20 N1 DG B 5 0.207 0.868 3.423 1.00 0.00 N \nATOM 21 H1 DG B 5 0.715 0.010 3.338 1.00 0.00 H \nATOM 22 C2 DG B 5 0.939 2.037 3.469 1.00 0.00 C \nATOM 23 N2 DG B 5 2.270 1.902 3.394 1.00 0.00 N \nATOM 24 H21 DG B 5 2.790 1.039 3.320 1.00 0.00 H \nATOM 25 H22 DG B 5 2.813 2.752 3.436 1.00 0.00 H \nATOM 26 N3 DG B 5 0.384 3.241 3.581 1.00 0.00 N \nATOM 27 C4 DG B 5 -0.973 3.178 3.643 1.00 0.00 C \nATOM 28 C3' DG B 5 -2.210 7.906 3.999 1.00 0.00 C \nATOM 29 H3' DG B 5 -3.141 8.464 3.903 1.00 0.00 H \nATOM 30 C2' DG B 5 -2.261 6.670 3.097 1.00 0.00 C \nATOM 31 H2' DG B 5 -3.189 6.677 2.525 1.00 0.00 H \nATOM 32 H2'' DG B 5 -1.413 6.683 2.414 1.00 0.00 H \nATOM 33 O3' DG B 5 -1.106 8.694 3.577 1.00 0.00 O \nATOM 34 H DG B 5 -6.090 5.027 6.247 1.00 0.00 H \nATOM 35 H35 DG B 5 -6.660 5.801 3.678 1.00 0.00 H \nATOM 36 H36 DG B 5 -1.045 9.488 4.131 1.00 0.00 H \nCONECT 1 2 3 34 4 \nCONECT 2 1 \nCONECT 3 35 1 \nCONECT 4 5 1 \nCONECT 5 8 4 6 7 \nCONECT 6 5 \nCONECT 7 5 \nCONECT 8 5 28 9 10 \nCONECT 9 8 \nCONECT 10 11 8 \nCONECT 11 10 30 13 12 \nCONECT 12 11 \nCONECT 13 11 27 14 \nCONECT 14 15 16 13 \nCONECT 15 14 \nCONECT 16 17 14 \nCONECT 17 16 18 27 \nCONECT 18 19 17 20 \nCONECT 19 18 \nCONECT 20 22 18 21 \nCONECT 21 20 \nCONECT 22 20 26 23 \nCONECT 23 25 24 22 \nCONECT 24 23 \nCONECT 25 23 \nCONECT 26 22 27 \nCONECT 27 13 26 17 \nCONECT 28 8 30 33 29 \nCONECT 29 28 \nCONECT 30 11 28 31 32 \nCONECT 31 30 \nCONECT 32 30 \nCONECT 33 36 28 \nCONECT 34 1 \nCONECT 35 3 \nCONECT 36 33 \nMASTER 0 0 0 0 0 0 0 0 36 0 36 0\nEND\n", "DC": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 P DC B 3 -7.669 -3.704 12.267 1.00 0.00 P \nATOM 2 OP1 DC B 3 -9.083 -3.954 12.625 1.00 0.00 O \nATOM 3 OP2 DC B 3 -7.051 -4.611 11.274 1.00 0.00 O \nATOM 4 O5' DC B 3 -7.611 -2.172 11.808 1.00 0.00 O \nATOM 5 C5' DC B 3 -7.672 -1.140 12.811 1.00 0.00 C \nATOM 6 H5' DC B 3 -6.835 -1.251 13.499 1.00 0.00 H \nATOM 7 H5'' DC B 3 -8.609 -1.224 13.363 1.00 0.00 H \nATOM 8 C4' DC B 3 -7.601 0.228 12.154 1.00 0.00 C \nATOM 9 H4' DC B 3 -7.995 0.981 12.837 1.00 0.00 H \nATOM 10 O4' DC B 3 -6.199 0.594 11.976 1.00 0.00 O \nATOM 11 C1' DC B 3 -5.834 0.470 10.609 1.00 0.00 C \nATOM 12 H1' DC B 3 -5.501 1.438 10.232 1.00 0.00 H \nATOM 13 N1 DC B 3 -4.610 -0.377 10.531 1.00 0.00 N \nATOM 14 C6 DC B 3 -4.692 -1.734 10.574 1.00 0.00 C \nATOM 15 H6 DC B 3 -5.655 -2.214 10.665 1.00 0.00 H \nATOM 16 C5 DC B 3 -3.574 -2.505 10.503 1.00 0.00 C \nATOM 17 H5 DC B 3 -3.658 -3.591 10.538 1.00 0.00 H \nATOM 18 C4 DC B 3 -2.323 -1.822 10.383 1.00 0.00 C \nATOM 19 N4 DC B 3 -1.198 -2.509 10.309 1.00 0.00 N \nATOM 20 H41 DC B 3 -0.336 -1.990 10.225 1.00 0.00 H \nATOM 21 H42 DC B 3 -1.215 -3.518 10.337 1.00 0.00 H \nATOM 22 N3 DC B 3 -2.253 -0.495 10.342 1.00 0.00 N \nATOM 23 C2 DC B 3 -3.383 0.259 10.415 1.00 0.00 C \nATOM 24 O2 DC B 3 -3.358 1.498 10.380 1.00 0.00 O \nATOM 25 C3' DC B 3 -8.201 0.324 10.749 1.00 0.00 C \nATOM 26 H3' DC B 3 -9.015 -0.394 10.652 1.00 0.00 H \nATOM 27 C2' DC B 3 -7.036 -0.099 9.853 1.00 0.00 C \nATOM 28 H2' DC B 3 -7.319 -0.982 9.280 1.00 0.00 H \nATOM 29 H2'' DC B 3 -6.789 0.713 9.170 1.00 0.00 H \nATOM 30 O3' DC B 3 -8.617 1.614 10.325 1.00 0.00 O \nATOM 31 H DC B 3 -7.361 -2.862 11.218 1.00 0.00 H \nATOM 32 H32 DC B 3 -7.036 -5.514 11.627 1.00 0.00 H \nATOM 33 H33 DC B 3 -8.979 1.558 9.427 1.00 0.00 H \nCONECT 1 3 4 31 2 \nCONECT 2 1 \nCONECT 3 1 32 \nCONECT 4 5 1 \nCONECT 5 4 8 7 6 \nCONECT 6 5 \nCONECT 7 5 \nCONECT 8 10 25 5 9 \nCONECT 9 8 \nCONECT 10 8 11 \nCONECT 11 12 27 13 10 \nCONECT 12 11 \nCONECT 13 14 11 23 \nCONECT 14 16 13 15 \nCONECT 15 14 \nCONECT 16 14 17 18 \nCONECT 17 16 \nCONECT 18 19 16 22 \nCONECT 19 18 20 21 \nCONECT 20 19 \nCONECT 21 19 \nCONECT 22 23 18 \nCONECT 23 24 22 13 \nCONECT 24 23 \nCONECT 25 30 27 8 26 \nCONECT 26 25 \nCONECT 27 25 11 29 28 \nCONECT 28 27 \nCONECT 29 27 \nCONECT 30 25 33 \nCONECT 31 1 \nCONECT 32 3 \nCONECT 33 30 \nMASTER 0 0 0 0 0 0 0 0 33 0 33 0\nEND\n", "DA": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 P DA B 4 -8.512 1.732 8.846 1.00 0.00 P \nATOM 2 OP1 DA B 4 -9.793 2.421 9.118 1.00 0.00 O \nATOM 3 OP2 DA B 4 -8.544 0.583 7.914 1.00 0.00 O \nATOM 4 O5' DA B 4 -7.506 2.878 8.362 1.00 0.00 O \nATOM 5 C5' DA B 4 -6.959 3.785 9.339 1.00 0.00 C \nATOM 6 H5' DA B 4 -6.394 3.221 10.081 1.00 0.00 H \nATOM 7 H5'' DA B 4 -7.770 4.322 9.831 1.00 0.00 H \nATOM 8 C4' DA B 4 -6.036 4.784 8.661 1.00 0.00 C \nATOM 9 H4' DA B 4 -5.910 5.656 9.302 1.00 0.00 H \nATOM 10 O4' DA B 4 -4.700 4.203 8.566 1.00 0.00 O \nATOM 11 C1' DA B 4 -4.436 3.807 7.228 1.00 0.00 C \nATOM 12 H1' DA B 4 -3.565 4.345 6.855 1.00 0.00 H \nATOM 13 N9 DA B 4 -3.977 2.358 7.207 1.00 0.00 N \nATOM 14 C8 DA B 4 -4.686 1.186 7.243 1.00 0.00 C \nATOM 15 H8 DA B 4 -5.765 1.209 7.297 1.00 0.00 H \nATOM 16 N7 DA B 4 -3.949 0.120 7.146 1.00 0.00 N \nATOM 17 C5 DA B 4 -2.655 0.615 7.036 1.00 0.00 C \nATOM 18 C6 DA B 4 -1.411 -0.013 6.902 1.00 0.00 C \nATOM 19 N6 DA B 4 -1.256 -1.344 6.853 1.00 0.00 N \nATOM 20 H61 DA B 4 -0.333 -1.741 6.755 1.00 0.00 H \nATOM 21 H62 DA B 4 -2.063 -1.948 6.913 1.00 0.00 H \nATOM 22 N1 DA B 4 -0.328 0.771 6.821 1.00 0.00 N1+\nATOM 23 C2 DA B 4 -0.488 2.091 6.870 1.00 0.00 C \nATOM 24 H2 DA B 4 0.372 2.742 6.806 1.00 0.00 H \nATOM 25 N3 DA B 4 -1.599 2.792 6.994 1.00 0.00 N \nATOM 26 C4 DA B 4 -2.673 1.978 7.074 1.00 0.00 C \nATOM 27 C3' DA B 4 -6.396 5.150 7.219 1.00 0.00 C \nATOM 28 H3' DA B 4 -7.475 5.076 7.083 1.00 0.00 H \nATOM 29 C2' DA B 4 -5.703 4.053 6.408 1.00 0.00 C \nATOM 30 H2' DA B 4 -6.448 3.499 5.836 1.00 0.00 H \nATOM 31 H2'' DA B 4 -4.983 4.504 5.726 1.00 0.00 H \nATOM 32 O3' DA B 4 -5.914 6.398 6.743 1.00 0.00 O \nATOM 33 H DA B 4 -9.284 1.056 7.923 1.00 0.00 H \nATOM 34 H34 DA B 4 -7.699 0.108 7.957 1.00 0.00 H \nATOM 35 H35 DA B 4 -1.639 3.775 7.024 1.00 0.00 H \nATOM 36 H36 DA B 4 -6.335 7.118 7.238 1.00 0.00 H \nCONECT 1 2 4 3 33 \nCONECT 2 1 \nCONECT 3 34 1 \nCONECT 4 5 1 \nCONECT 5 6 4 7 8 \nCONECT 6 5 \nCONECT 7 5 \nCONECT 8 9 10 27 5 \nCONECT 9 8 \nCONECT 10 8 11 \nCONECT 11 10 12 13 29 \nCONECT 12 11 \nCONECT 13 26 11 14 \nCONECT 14 16 13 15 \nCONECT 15 14 \nCONECT 16 17 14 \nCONECT 17 16 18 26 \nCONECT 18 22 17 19 \nCONECT 19 18 21 20 \nCONECT 20 19 \nCONECT 21 19 \nCONECT 22 18 23 \nCONECT 23 24 25 22 \nCONECT 24 23 \nCONECT 25 35 26 23 \nCONECT 26 25 13 17 \nCONECT 27 28 8 29 32 \nCONECT 28 27 \nCONECT 29 11 27 30 31 \nCONECT 30 29 \nCONECT 31 29 \nCONECT 32 36 27 \nCONECT 33 1 \nCONECT 34 3 \nCONECT 35 25 \nCONECT 36 32 \nMASTER 0 0 0 0 0 0 0 0 36 0 36 0\nEND\n", "GLY": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 N GLY B 96 -65.752 -12.672 6.506 1.00 0.00 N \nATOM 2 CA GLY B 96 -65.330 -13.835 7.265 1.00 0.00 C \nATOM 3 C GLY B 96 -65.956 -15.114 6.748 1.00 0.00 C \nATOM 4 O GLY B 96 -65.286 -16.137 6.603 1.00 0.00 O \nATOM 5 H GLY B 96 -65.308 -11.837 6.888 1.00 0.00 H \nATOM 6 H6 GLY B 96 -66.766 -12.576 6.567 1.00 0.00 H \nATOM 7 H7 GLY B 96 -65.615 -13.701 8.288 1.00 0.00 H \nATOM 8 H8 GLY B 96 -64.269 -13.925 7.165 1.00 0.00 H \nATOM 9 H9 GLY B 96 -66.961 -15.128 6.513 1.00 0.00 H \nCONECT 1 2 5 6 \nCONECT 2 1 8 3 7 \nCONECT 3 9 2 4 \nCONECT 4 3 \nCONECT 5 1 \nCONECT 6 1 \nCONECT 7 2 \nCONECT 8 2 \nCONECT 9 3 \nMASTER 0 0 0 0 0 0 0 0 9 0 9 0\nEND\n", "DT": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 P DT B 2 -4.249 -7.545 15.635 1.00 0.00 P \nATOM 2 OP1 DT B 2 -5.294 -8.554 15.917 1.00 0.00 O \nATOM 3 OP2 DT B 2 -3.167 -7.932 14.703 1.00 0.00 O \nATOM 4 O5' DT B 2 -5.037 -6.242 15.145 1.00 0.00 O \nATOM 5 C5' DT B 2 -5.732 -5.438 16.117 1.00 0.00 C \nATOM 6 H5' DT B 2 -5.022 -5.066 16.856 1.00 0.00 H \nATOM 7 H5'' DT B 2 -6.489 -6.044 16.615 1.00 0.00 H \nATOM 8 C4' DT B 2 -6.405 -4.260 15.433 1.00 0.00 C \nATOM 9 H4' DT B 2 -7.196 -3.870 16.074 1.00 0.00 H \nATOM 10 O4' DT B 2 -5.446 -3.164 15.328 1.00 0.00 O \nATOM 11 C1' DT B 2 -4.991 -3.042 13.988 1.00 0.00 C \nATOM 12 H1' DT B 2 -5.240 -2.051 13.608 1.00 0.00 H \nATOM 13 N1 DT B 2 -3.462 -3.046 13.963 1.00 0.00 N \nATOM 14 C6 DT B 2 -2.717 -4.195 14.013 1.00 0.00 C \nATOM 15 H6 DT B 2 -3.208 -5.155 14.074 1.00 0.00 H \nATOM 16 C5 DT B 2 -1.379 -4.159 13.935 1.00 0.00 C \nATOM 17 C7 DT B 2 -0.555 -5.411 13.989 1.00 0.00 C \nATOM 18 H71 DT B 2 -0.833 -6.066 13.163 1.00 0.00 H \nATOM 19 H72 DT B 2 0.502 -5.155 13.909 1.00 0.00 H \nATOM 20 H73 DT B 2 -0.733 -5.924 14.934 1.00 0.00 H \nATOM 21 C4 DT B 2 -0.682 -2.907 13.795 1.00 0.00 C \nATOM 22 O4 DT B 2 0.538 -2.777 13.716 1.00 0.00 O \nATOM 23 N3 DT B 2 -1.510 -1.804 13.753 1.00 0.00 N \nATOM 24 H3 DT B 2 -1.028 -0.832 13.648 1.00 0.00 H \nATOM 25 C2 DT B 2 -2.888 -1.809 13.831 1.00 0.00 C \nATOM 26 O2 DT B 2 -3.536 -0.776 13.785 1.00 0.00 O \nATOM 27 C3' DT B 2 -6.867 -4.501 13.994 1.00 0.00 C \nATOM 28 H3' DT B 2 -7.125 -5.552 13.866 1.00 0.00 H \nATOM 29 C2' DT B 2 -5.613 -4.181 13.178 1.00 0.00 C \nATOM 30 H2' DT B 2 -5.313 -5.062 12.611 1.00 0.00 H \nATOM 31 H2'' DT B 2 -5.826 -3.362 12.490 1.00 0.00 H \nATOM 32 O3' DT B 2 -7.911 -3.666 13.515 1.00 0.00 O \nATOM 33 H DT B 2 -5.520 -8.055 15.466 1.00 0.00 H \nATOM 34 H34 DT B 2 -2.344 -7.488 14.961 1.00 0.00 H \nATOM 35 H35 DT B 2 -7.663 -2.736 13.637 1.00 0.00 H \nCONECT 1 2 4 33 3 \nCONECT 2 1 \nCONECT 3 34 1 \nCONECT 4 5 1 \nCONECT 5 6 7 8 4 \nCONECT 6 5 \nCONECT 7 5 \nCONECT 8 5 9 10 27 \nCONECT 9 8 \nCONECT 10 8 11 \nCONECT 11 10 12 13 29 \nCONECT 12 11 \nCONECT 13 25 11 14 \nCONECT 14 16 15 13 \nCONECT 15 14 \nCONECT 16 14 17 21 \nCONECT 17 18 16 20 19 \nCONECT 18 17 \nCONECT 19 17 \nCONECT 20 17 \nCONECT 21 22 23 16 \nCONECT 22 21 \nCONECT 23 25 21 24 \nCONECT 24 23 \nCONECT 25 13 23 26 \nCONECT 26 25 \nCONECT 27 28 32 8 29 \nCONECT 28 27 \nCONECT 29 30 31 11 27 \nCONECT 30 29 \nCONECT 31 29 \nCONECT 32 27 35 \nCONECT 33 1 \nCONECT 34 3 \nCONECT 35 32 \nMASTER 0 0 0 0 0 0 0 0 35 0 35 0\nEND\n", "GLU": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 N GLU B 85 -69.608 2.339 12.362 1.00 0.00 N \nATOM 2 CA GLU B 85 -69.012 1.134 12.925 1.00 0.00 C \nATOM 3 C GLU B 85 -69.847 -0.107 12.644 1.00 0.00 C \nATOM 4 O GLU B 85 -69.330 -1.222 12.622 1.00 0.00 O \nATOM 5 CB GLU B 85 -68.781 1.305 14.428 1.00 0.00 C \nATOM 6 CG GLU B 85 -67.656 2.274 14.770 1.00 0.00 C \nATOM 7 CD GLU B 85 -68.067 3.734 14.657 1.00 0.00 C \nATOM 8 OE1 GLU B 85 -69.228 4.049 14.991 1.00 0.00 O \nATOM 9 OE2 GLU B 85 -67.232 4.569 14.240 1.00 0.00 O \nATOM 10 H GLU B 85 -69.016 3.142 12.574 1.00 0.00 H \nATOM 11 H11 GLU B 85 -70.533 2.482 12.767 1.00 0.00 H \nATOM 12 H12 GLU B 85 -68.067 0.990 12.443 1.00 0.00 H \nATOM 13 H13 GLU B 85 -70.860 -0.011 12.470 1.00 0.00 H \nATOM 14 H14 GLU B 85 -68.541 0.349 14.844 1.00 0.00 H \nATOM 15 H15 GLU B 85 -69.681 1.715 14.837 1.00 0.00 H \nATOM 16 H16 GLU B 85 -67.340 2.087 15.775 1.00 0.00 H \nATOM 17 H17 GLU B 85 -66.869 2.110 14.063 1.00 0.00 H \nATOM 18 H18 GLU B 85 -66.370 4.290 14.000 1.00 0.00 H \nCONECT 1 2 11 10 \nCONECT 2 12 1 5 3 \nCONECT 3 4 13 2 \nCONECT 4 3 \nCONECT 5 14 2 6 15 \nCONECT 6 7 16 5 17 \nCONECT 7 8 6 9 \nCONECT 8 7 \nCONECT 9 18 7 \nCONECT 10 1 \nCONECT 11 1 \nCONECT 12 2 \nCONECT 13 3 \nCONECT 14 5 \nCONECT 15 5 \nCONECT 16 6 \nCONECT 17 6 \nCONECT 18 9 \nMASTER 0 0 0 0 0 0 0 0 18 0 18 0\nEND\n", "CYS": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 N CYS B 66 -65.831 -3.341 19.224 1.00 0.00 N \nATOM 2 CA CYS B 66 -66.627 -4.442 18.692 1.00 0.00 C \nATOM 3 C CYS B 66 -67.251 -5.245 19.828 1.00 0.00 C \nATOM 4 O CYS B 66 -66.828 -6.368 20.100 1.00 0.00 O \nATOM 5 CB CYS B 66 -65.773 -5.358 17.812 1.00 0.00 C \nATOM 6 SG CYS B 66 -66.653 -6.196 16.468 1.00 0.00 S \nATOM 7 H CYS B 66 -65.421 -2.814 18.453 1.00 0.00 H \nATOM 8 H8 CYS B 66 -65.087 -3.713 19.815 1.00 0.00 H \nATOM 9 H9 CYS B 66 -67.408 -4.025 18.091 1.00 0.00 H \nATOM 10 H10 CYS B 66 -68.032 -4.845 20.371 1.00 0.00 H \nATOM 11 H11 CYS B 66 -64.996 -4.765 17.377 1.00 0.00 H \nATOM 12 H12 CYS B 66 -65.416 -6.134 18.457 1.00 0.00 H \nATOM 13 H13 CYS B 66 -67.140 -5.270 15.599 1.00 0.00 H \nCONECT 1 8 7 2 \nCONECT 2 9 5 3 1 \nCONECT 3 10 4 2 \nCONECT 4 3 \nCONECT 5 6 12 11 2 \nCONECT 6 13 5 \nCONECT 7 1 \nCONECT 8 1 \nCONECT 9 2 \nCONECT 10 3 \nCONECT 11 5 \nCONECT 12 5 \nCONECT 13 6 \nMASTER 0 0 0 0 0 0 0 0 13 0 13 0\nEND\n", "HIS": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 N HIS B 90 -70.685 -5.477 9.408 1.00 0.00 N \nATOM 2 CA HIS B 90 -71.321 -6.180 8.296 1.00 0.00 C \nATOM 3 C HIS B 90 -70.311 -6.707 7.283 1.00 0.00 C \nATOM 4 O HIS B 90 -70.386 -7.867 6.866 1.00 0.00 O \nATOM 5 CB HIS B 90 -72.320 -5.274 7.581 1.00 0.00 C \nATOM 6 CG HIS B 90 -73.602 -5.077 8.327 1.00 0.00 C \nATOM 7 ND1 HIS B 90 -73.763 -4.090 9.276 1.00 0.00 N \nATOM 8 CD2 HIS B 90 -74.780 -5.736 8.262 1.00 0.00 C \nATOM 9 CE1 HIS B 90 -74.988 -4.154 9.764 1.00 0.00 C \nATOM 10 NE2 HIS B 90 -75.626 -5.142 9.168 1.00 0.00 N \nATOM 11 H HIS B 90 -70.023 -6.100 9.870 1.00 0.00 H \nATOM 12 H12 HIS B 90 -71.397 -5.182 10.076 1.00 0.00 H \nATOM 13 H13 HIS B 90 -71.831 -7.018 8.724 1.00 0.00 H \nATOM 14 H14 HIS B 90 -69.558 -6.089 6.943 1.00 0.00 H \nATOM 15 H15 HIS B 90 -71.864 -4.317 7.437 1.00 0.00 H \nATOM 16 H16 HIS B 90 -72.569 -5.754 6.658 1.00 0.00 H \nATOM 17 H17 HIS B 90 -75.003 -6.535 7.648 1.00 0.00 H \nATOM 18 H18 HIS B 90 -75.380 -3.535 10.490 1.00 0.00 H \nATOM 19 H19 HIS B 90 -76.557 -5.411 9.343 1.00 0.00 H \nCONECT 1 2 11 12 \nCONECT 2 13 5 1 3 \nCONECT 3 14 4 2 \nCONECT 4 3 \nCONECT 5 2 16 6 15 \nCONECT 6 7 5 8 \nCONECT 7 6 9 \nCONECT 8 17 6 10 \nCONECT 9 18 7 10 \nCONECT 10 19 8 9 \nCONECT 11 1 \nCONECT 12 1 \nCONECT 13 2 \nCONECT 14 3 \nCONECT 15 5 \nCONECT 16 5 \nCONECT 17 8 \nCONECT 18 9 \nCONECT 19 10 \nMASTER 0 0 0 0 0 0 0 0 19 0 19 0\nEND\n", "SER": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 N SER B 94 -69.234 -10.629 6.814 1.00 0.00 N \nATOM 2 CA SER B 94 -69.535 -11.155 5.487 1.00 0.00 C \nATOM 3 C SER B 94 -68.243 -11.664 4.872 1.00 0.00 C \nATOM 4 O SER B 94 -68.197 -12.752 4.298 1.00 0.00 O \nATOM 5 CB SER B 94 -70.149 -10.079 4.594 1.00 0.00 C \nATOM 6 OG SER B 94 -70.318 -10.558 3.272 1.00 0.00 O \nATOM 7 H SER B 94 -70.091 -10.282 7.244 1.00 0.00 H \nATOM 8 H8 SER B 94 -68.561 -9.867 6.733 1.00 0.00 H \nATOM 9 H9 SER B 94 -70.247 -11.949 5.574 1.00 0.00 H \nATOM 10 H10 SER B 94 -67.389 -11.088 4.936 1.00 0.00 H \nATOM 11 H11 SER B 94 -71.102 -9.797 4.989 1.00 0.00 H \nATOM 12 H12 SER B 94 -69.491 -9.236 4.571 1.00 0.00 H \nATOM 13 H13 SER B 94 -70.914 -11.324 3.279 1.00 0.00 H \nCONECT 1 2 8 7 \nCONECT 2 1 9 5 3 \nCONECT 3 4 10 2 \nCONECT 4 3 \nCONECT 5 6 2 11 12 \nCONECT 6 13 5 \nCONECT 7 1 \nCONECT 8 1 \nCONECT 9 2 \nCONECT 10 3 \nCONECT 11 5 \nCONECT 12 5 \nCONECT 13 6 \nMASTER 0 0 0 0 0 0 0 0 13 0 13 0\nEND\n", "LYS": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 N LYS B 56 -62.900 -7.407 16.360 1.00 0.00 N \nATOM 2 CA LYS B 56 -62.435 -7.205 17.724 1.00 0.00 C \nATOM 3 C LYS B 56 -60.952 -6.850 17.742 1.00 0.00 C \nATOM 4 O LYS B 56 -60.521 -6.029 18.549 1.00 0.00 O \nATOM 5 CB LYS B 56 -62.692 -8.451 18.575 1.00 0.00 C \nATOM 6 CG LYS B 56 -64.159 -8.700 18.904 1.00 0.00 C \nATOM 7 CD LYS B 56 -64.344 -9.991 19.700 1.00 0.00 C \nATOM 8 CE LYS B 56 -65.819 -10.293 19.970 1.00 0.00 C \nATOM 9 NZ LYS B 56 -66.502 -9.261 20.806 1.00 0.00 N \nATOM 10 H LYS B 56 -63.892 -7.643 16.371 1.00 0.00 H \nATOM 11 H11 LYS B 56 -62.374 -8.168 15.931 1.00 0.00 H \nATOM 12 H12 LYS B 56 -62.985 -6.388 18.143 1.00 0.00 H \nATOM 13 H13 LYS B 56 -60.308 -7.301 17.074 1.00 0.00 H \nATOM 14 H14 LYS B 56 -62.157 -8.343 19.495 1.00 0.00 H \nATOM 15 H15 LYS B 56 -62.364 -9.288 17.995 1.00 0.00 H \nATOM 16 H16 LYS B 56 -64.530 -7.879 19.482 1.00 0.00 H \nATOM 17 H17 LYS B 56 -64.698 -8.793 17.984 1.00 0.00 H \nATOM 18 H18 LYS B 56 -63.834 -9.896 20.636 1.00 0.00 H \nATOM 19 H19 LYS B 56 -63.943 -10.796 19.120 1.00 0.00 H \nATOM 20 H20 LYS B 56 -65.884 -11.234 20.476 1.00 0.00 H \nATOM 21 H21 LYS B 56 -66.314 -10.303 19.021 1.00 0.00 H \nATOM 22 H22 LYS B 56 -66.059 -9.219 21.724 1.00 0.00 H \nATOM 23 H23 LYS B 56 -67.486 -9.508 20.915 1.00 0.00 H \nCONECT 1 10 11 2 \nCONECT 2 3 12 5 1 \nCONECT 3 2 4 13 \nCONECT 4 3 \nCONECT 5 14 15 6 2 \nCONECT 6 16 7 5 17 \nCONECT 7 8 6 19 18 \nCONECT 8 9 7 20 21 \nCONECT 9 8 23 22 \nCONECT 10 1 \nCONECT 11 1 \nCONECT 12 2 \nCONECT 13 3 \nCONECT 14 5 \nCONECT 15 5 \nCONECT 16 6 \nCONECT 17 6 \nCONECT 18 7 \nCONECT 19 7 \nCONECT 20 8 \nCONECT 21 8 \nCONECT 22 9 \nCONECT 23 9 \nMASTER 0 0 0 0 0 0 0 0 23 0 23 0\nEND\n", "PRO": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 N PRO B 67 -68.249 -4.660 20.513 1.00 0.00 N \nATOM 2 CA PRO B 67 -69.014 -5.385 21.528 1.00 0.00 C \nATOM 3 C PRO B 67 -70.070 -6.235 20.843 1.00 0.00 C \nATOM 4 O PRO B 67 -71.252 -6.158 21.171 1.00 0.00 O \nATOM 5 CB PRO B 67 -69.692 -4.260 22.301 1.00 0.00 C \nATOM 6 CG PRO B 67 -69.915 -3.215 21.273 1.00 0.00 C \nATOM 7 CD PRO B 67 -68.705 -3.265 20.384 1.00 0.00 C \nATOM 8 H PRO B 67 -68.362 -5.130 19.615 1.00 0.00 H \nATOM 9 H9 PRO B 67 -68.421 -6.032 22.140 1.00 0.00 H \nATOM 10 H10 PRO B 67 -69.791 -6.886 20.092 1.00 0.00 H \nATOM 11 H11 PRO B 67 -69.058 -3.898 23.083 1.00 0.00 H \nATOM 12 H12 PRO B 67 -70.597 -4.571 22.780 1.00 0.00 H \nATOM 13 H13 PRO B 67 -70.801 -3.425 20.711 1.00 0.00 H \nATOM 14 H14 PRO B 67 -70.047 -2.248 21.711 1.00 0.00 H \nATOM 15 H15 PRO B 67 -68.964 -3.038 19.371 1.00 0.00 H \nATOM 16 H16 PRO B 67 -67.955 -2.552 20.656 1.00 0.00 H \nCONECT 1 7 2 8 \nCONECT 2 3 9 5 1 \nCONECT 3 4 2 10 \nCONECT 4 3 \nCONECT 5 11 2 12 6 \nCONECT 6 14 7 13 5 \nCONECT 7 15 1 6 16 \nCONECT 8 1 \nCONECT 9 2 \nCONECT 10 3 \nCONECT 11 5 \nCONECT 12 5 \nCONECT 13 6 \nCONECT 14 6 \nCONECT 15 7 \nCONECT 16 7 \nMASTER 0 0 0 0 0 0 0 0 16 0 16 0\nEND\n", "ASN": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 N ASN B 77 -79.700 -6.939 17.196 1.00 0.00 N \nATOM 2 CA ASN B 77 -79.635 -6.262 18.478 1.00 0.00 C \nATOM 3 C ASN B 77 -78.192 -5.881 18.779 1.00 0.00 C \nATOM 4 O ASN B 77 -77.281 -6.696 18.635 1.00 0.00 O \nATOM 5 CB ASN B 77 -80.206 -7.144 19.587 1.00 0.00 C \nATOM 6 CG ASN B 77 -80.649 -6.342 20.796 1.00 0.00 C \nATOM 7 OD1 ASN B 77 -80.062 -5.308 21.120 1.00 0.00 O \nATOM 8 ND2 ASN B 77 -81.696 -6.812 21.466 1.00 0.00 N \nATOM 9 H ASN B 77 -80.667 -7.194 16.995 1.00 0.00 H \nATOM 10 H10 ASN B 77 -79.126 -7.781 17.227 1.00 0.00 H \nATOM 11 H11 ASN B 77 -80.228 -5.373 18.433 1.00 0.00 H \nATOM 12 H12 ASN B 77 -77.975 -4.927 19.108 1.00 0.00 H \nATOM 13 H13 ASN B 77 -79.453 -7.840 19.894 1.00 0.00 H \nATOM 14 H14 ASN B 77 -81.067 -7.644 19.195 1.00 0.00 H \nATOM 15 H15 ASN B 77 -82.028 -6.333 22.259 1.00 0.00 H \nATOM 16 H16 ASN B 77 -82.140 -7.639 21.169 1.00 0.00 H \nCONECT 1 2 10 9 \nCONECT 2 11 3 1 5 \nCONECT 3 2 12 4 \nCONECT 4 3 \nCONECT 5 6 14 13 2 \nCONECT 6 7 5 8 \nCONECT 7 6 \nCONECT 8 15 6 16 \nCONECT 9 1 \nCONECT 10 1 \nCONECT 11 2 \nCONECT 12 3 \nCONECT 13 5 \nCONECT 14 5 \nCONECT 15 8 \nCONECT 16 8 \nMASTER 0 0 0 0 0 0 0 0 16 0 16 0\nEND\n", "VAL": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 N VAL B 97 -67.253 -15.051 6.473 1.00 0.00 N \nATOM 2 CA VAL B 97 -67.992 -16.197 5.968 1.00 0.00 C \nATOM 3 C VAL B 97 -67.420 -16.633 4.627 1.00 0.00 C \nATOM 4 O VAL B 97 -67.132 -17.813 4.420 1.00 0.00 O \nATOM 5 CB VAL B 97 -69.496 -15.872 5.828 1.00 0.00 C \nATOM 6 CG1 VAL B 97 -70.243 -17.021 5.170 1.00 0.00 C \nATOM 7 CG2 VAL B 97 -70.090 -15.562 7.187 1.00 0.00 C \nATOM 8 H VAL B 97 -67.642 -14.765 7.371 1.00 0.00 H \nATOM 9 H9 VAL B 97 -67.326 -14.280 5.809 1.00 0.00 H \nATOM 10 H10 VAL B 97 -67.892 -16.998 6.671 1.00 0.00 H \nATOM 11 H11 VAL B 97 -67.272 -15.933 3.883 1.00 0.00 H \nATOM 12 H12 VAL B 97 -69.598 -15.011 5.201 1.00 0.00 H \nATOM 13 H13 VAL B 97 -70.157 -17.897 5.778 1.00 0.00 H \nATOM 14 H14 VAL B 97 -69.822 -17.214 4.205 1.00 0.00 H \nATOM 15 H15 VAL B 97 -71.275 -16.761 5.063 1.00 0.00 H \nATOM 16 H16 VAL B 97 -69.993 -16.418 7.822 1.00 0.00 H \nATOM 17 H17 VAL B 97 -71.125 -15.316 7.076 1.00 0.00 H \nATOM 18 H18 VAL B 97 -69.571 -14.734 7.623 1.00 0.00 H \nCONECT 1 2 9 8 \nCONECT 2 5 1 10 3 \nCONECT 3 4 11 2 \nCONECT 4 3 \nCONECT 5 6 2 7 12 \nCONECT 6 15 5 14 13 \nCONECT 7 18 16 5 17 \nCONECT 8 1 \nCONECT 9 1 \nCONECT 10 2 \nCONECT 11 3 \nCONECT 12 5 \nCONECT 13 6 \nCONECT 14 6 \nCONECT 15 6 \nCONECT 16 7 \nCONECT 17 7 \nCONECT 18 7 \nMASTER 0 0 0 0 0 0 0 0 18 0 18 0\nEND\n", "THR": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 N THR B 86 -71.139 0.090 12.422 1.00 0.00 N \nATOM 2 CA THR B 86 -72.021 -1.015 12.082 1.00 0.00 C \nATOM 3 C THR B 86 -71.720 -1.488 10.663 1.00 0.00 C \nATOM 4 O THR B 86 -71.880 -2.666 10.340 1.00 0.00 O \nATOM 5 CB THR B 86 -73.493 -0.608 12.204 1.00 0.00 C \nATOM 6 OG1 THR B 86 -73.720 -0.040 13.499 1.00 0.00 O \nATOM 7 CG2 THR B 86 -74.393 -1.807 12.039 1.00 0.00 C \nATOM 8 H THR B 86 -70.168 -0.210 12.332 1.00 0.00 H \nATOM 9 H9 THR B 86 -71.316 0.384 13.383 1.00 0.00 H \nATOM 10 H10 THR B 86 -71.846 -1.815 12.771 1.00 0.00 H \nATOM 11 H11 THR B 86 -71.377 -0.811 9.963 1.00 0.00 H \nATOM 12 H12 THR B 86 -73.714 0.104 11.437 1.00 0.00 H \nATOM 13 H13 THR B 86 -73.515 -0.698 14.181 1.00 0.00 H \nATOM 14 H14 THR B 86 -74.177 -2.523 12.804 1.00 0.00 H \nATOM 15 H15 THR B 86 -74.226 -2.249 11.079 1.00 0.00 H \nATOM 16 H16 THR B 86 -75.415 -1.499 12.117 1.00 0.00 H \nCONECT 1 2 8 9 \nCONECT 2 10 1 5 3 \nCONECT 3 4 11 2 \nCONECT 4 3 \nCONECT 5 7 2 12 6 \nCONECT 6 13 5 \nCONECT 7 5 16 15 14 \nCONECT 8 1 \nCONECT 9 1 \nCONECT 10 2 \nCONECT 11 3 \nCONECT 12 5 \nCONECT 13 6 \nCONECT 14 7 \nCONECT 15 7 \nCONECT 16 7 \nMASTER 0 0 0 0 0 0 0 0 16 0 16 0\nEND\n", "ASP": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 N ASP B 297 -59.479 10.941 28.834 1.00 0.00 N \nATOM 2 CA ASP B 297 -60.327 11.754 27.959 1.00 0.00 C \nATOM 3 C ASP B 297 -61.803 11.421 28.137 1.00 0.00 C \nATOM 4 O ASP B 297 -62.676 12.136 27.648 1.00 0.00 O \nATOM 5 CB ASP B 297 -59.938 11.562 26.492 1.00 0.00 C \nATOM 6 CG ASP B 297 -58.646 12.260 26.136 1.00 0.00 C \nATOM 7 OD1 ASP B 297 -58.252 12.213 24.949 1.00 0.00 O \nATOM 8 OD2 ASP B 297 -58.032 12.863 27.042 1.00 0.00 O \nATOM 9 H ASP B 297 -58.501 11.191 28.688 1.00 0.00 H \nATOM 10 H10 ASP B 297 -59.614 9.954 28.616 1.00 0.00 H \nATOM 11 H11 ASP B 297 -60.173 12.776 28.237 1.00 0.00 H \nATOM 12 H12 ASP B 297 -62.074 10.583 28.676 1.00 0.00 H \nATOM 13 H13 ASP B 297 -60.720 11.954 25.876 1.00 0.00 H \nATOM 14 H14 ASP B 297 -59.795 10.514 26.330 1.00 0.00 H \nATOM 15 H15 ASP B 297 -58.371 12.867 27.915 1.00 0.00 H \nCONECT 1 2 10 9 \nCONECT 2 1 5 11 3 \nCONECT 3 12 2 4 \nCONECT 4 3 \nCONECT 5 6 2 14 13 \nCONECT 6 5 7 8 \nCONECT 7 6 \nCONECT 8 6 15 \nCONECT 9 1 \nCONECT 10 1 \nCONECT 11 2 \nCONECT 12 3 \nCONECT 13 5 \nCONECT 14 5 \nCONECT 15 8 \nMASTER 0 0 0 0 0 0 0 0 15 0 15 0\nEND\n", "TRP": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 N TRP B 64 -65.076 2.218 20.952 1.00 0.00 N \nATOM 2 CA TRP B 64 -65.913 1.126 20.481 1.00 0.00 C \nATOM 3 C TRP B 64 -64.976 -0.036 20.159 1.00 0.00 C \nATOM 4 O TRP B 64 -64.055 0.108 19.357 1.00 0.00 O \nATOM 5 CB TRP B 64 -66.696 1.558 19.239 1.00 0.00 C \nATOM 6 CG TRP B 64 -67.632 0.513 18.706 1.00 0.00 C \nATOM 7 CD1 TRP B 64 -68.906 0.264 19.124 1.00 0.00 C \nATOM 8 CD2 TRP B 64 -67.370 -0.418 17.645 1.00 0.00 C \nATOM 9 NE1 TRP B 64 -69.451 -0.766 18.396 1.00 0.00 N \nATOM 10 CE2 TRP B 64 -68.526 -1.202 17.483 1.00 0.00 C \nATOM 11 CE3 TRP B 64 -66.266 -0.666 16.822 1.00 0.00 C \nATOM 12 CZ2 TRP B 64 -68.611 -2.214 16.536 1.00 0.00 C \nATOM 13 CZ3 TRP B 64 -66.353 -1.671 15.886 1.00 0.00 C \nATOM 14 CH2 TRP B 64 -67.515 -2.432 15.749 1.00 0.00 C \nATOM 15 H TRP B 64 -64.560 1.918 21.779 1.00 0.00 H \nATOM 16 H16 TRP B 64 -65.662 3.018 21.189 1.00 0.00 H \nATOM 17 H17 TRP B 64 -66.630 0.838 21.221 1.00 0.00 H \nATOM 18 H18 TRP B 64 -65.117 -0.949 20.618 1.00 0.00 H \nATOM 19 H19 TRP B 64 -65.995 1.804 18.469 1.00 0.00 H \nATOM 20 H20 TRP B 64 -67.301 2.391 19.532 1.00 0.00 H \nATOM 21 H21 TRP B 64 -69.391 0.775 19.878 1.00 0.00 H \nATOM 22 H22 TRP B 64 -70.358 -1.131 18.511 1.00 0.00 H \nATOM 23 H23 TRP B 64 -65.404 -0.107 16.915 1.00 0.00 H \nATOM 24 H24 TRP B 64 -69.468 -2.779 16.431 1.00 0.00 H \nATOM 25 H25 TRP B 64 -65.545 -1.865 15.275 1.00 0.00 H \nATOM 26 H26 TRP B 64 -67.547 -3.177 15.036 1.00 0.00 H \nCONECT 1 2 15 16 \nCONECT 2 17 5 1 3 \nCONECT 3 2 4 18 \nCONECT 4 3 \nCONECT 5 2 6 19 20 \nCONECT 6 5 8 7 \nCONECT 7 6 21 9 \nCONECT 8 11 6 10 \nCONECT 9 10 7 22 \nCONECT 10 8 9 12 \nCONECT 11 23 8 13 \nCONECT 12 24 14 10 \nCONECT 13 14 11 25 \nCONECT 14 26 12 13 \nCONECT 15 1 \nCONECT 16 1 \nCONECT 17 2 \nCONECT 18 3 \nCONECT 19 5 \nCONECT 20 5 \nCONECT 21 7 \nCONECT 22 9 \nCONECT 23 11 \nCONECT 24 12 \nCONECT 25 13 \nCONECT 26 14 \nMASTER 0 0 0 0 0 0 0 0 26 0 26 0\nEND\n", "PHE": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 N PHE B 88 -68.683 -1.575 9.290 1.00 0.00 N \nATOM 2 CA PHE B 88 -67.517 -2.436 9.379 1.00 0.00 C \nATOM 3 C PHE B 88 -67.897 -3.839 9.834 1.00 0.00 C \nATOM 4 O PHE B 88 -67.418 -4.822 9.277 1.00 0.00 O \nATOM 5 CB PHE B 88 -66.457 -1.843 10.306 1.00 0.00 C \nATOM 6 CG PHE B 88 -65.209 -2.664 10.379 1.00 0.00 C \nATOM 7 CD1 PHE B 88 -64.271 -2.611 9.363 1.00 0.00 C \nATOM 8 CD2 PHE B 88 -64.982 -3.508 11.452 1.00 0.00 C \nATOM 9 CE1 PHE B 88 -63.130 -3.376 9.420 1.00 0.00 C \nATOM 10 CE2 PHE B 88 -63.843 -4.273 11.515 1.00 0.00 C \nATOM 11 CZ PHE B 88 -62.915 -4.208 10.496 1.00 0.00 C \nATOM 12 H PHE B 88 -68.396 -0.645 8.984 1.00 0.00 H \nATOM 13 H13 PHE B 88 -69.128 -1.509 10.206 1.00 0.00 H \nATOM 14 H14 PHE B 88 -67.099 -2.506 8.396 1.00 0.00 H \nATOM 15 H15 PHE B 88 -68.561 -3.964 10.615 1.00 0.00 H \nATOM 16 H16 PHE B 88 -66.201 -0.867 9.949 1.00 0.00 H \nATOM 17 H17 PHE B 88 -66.876 -1.815 11.290 1.00 0.00 H \nATOM 18 H18 PHE B 88 -64.430 -1.991 8.554 1.00 0.00 H \nATOM 19 H19 PHE B 88 -65.676 -3.563 12.213 1.00 0.00 H \nATOM 20 H20 PHE B 88 -62.436 -3.327 8.658 1.00 0.00 H \nATOM 21 H21 PHE B 88 -63.682 -4.895 12.323 1.00 0.00 H \nATOM 22 H22 PHE B 88 -62.059 -4.783 10.540 1.00 0.00 H \nCONECT 1 13 12 2 \nCONECT 2 14 3 1 5 \nCONECT 3 4 2 15 \nCONECT 4 3 \nCONECT 5 6 16 17 2 \nCONECT 6 5 8 7 \nCONECT 7 9 6 18 \nCONECT 8 6 10 19 \nCONECT 9 20 7 11 \nCONECT 10 8 21 11 \nCONECT 11 22 10 9 \nCONECT 12 1 \nCONECT 13 1 \nCONECT 14 2 \nCONECT 15 3 \nCONECT 16 5 \nCONECT 17 5 \nCONECT 18 7 \nCONECT 19 8 \nCONECT 20 9 \nCONECT 21 10 \nCONECT 22 11 \nMASTER 0 0 0 0 0 0 0 0 22 0 22 0\nEND\n", "ALA": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 N ALA B 95 -67.191 -10.867 5.017 1.00 0.00 N \nATOM 2 CA ALA B 95 -65.862 -11.236 4.552 1.00 0.00 C \nATOM 3 C ALA B 95 -65.371 -12.495 5.246 1.00 0.00 C \nATOM 4 O ALA B 95 -64.658 -13.290 4.653 1.00 0.00 O \nATOM 5 CB ALA B 95 -64.882 -10.094 4.785 1.00 0.00 C \nATOM 6 H ALA B 95 -67.835 -11.641 4.854 1.00 0.00 H \nATOM 7 H7 ALA B 95 -67.513 -10.044 4.508 1.00 0.00 H \nATOM 8 H8 ALA B 95 -65.923 -11.433 3.502 1.00 0.00 H \nATOM 9 H9 ALA B 95 -65.642 -12.680 6.225 1.00 0.00 H \nATOM 10 H10 ALA B 95 -64.815 -9.890 5.833 1.00 0.00 H \nATOM 11 H11 ALA B 95 -65.225 -9.220 4.272 1.00 0.00 H \nATOM 12 H12 ALA B 95 -63.917 -10.370 4.413 1.00 0.00 H \nCONECT 1 2 6 7 \nCONECT 2 8 1 3 5 \nCONECT 3 9 2 4 \nCONECT 4 3 \nCONECT 5 10 12 2 11 \nCONECT 6 1 \nCONECT 7 1 \nCONECT 8 2 \nCONECT 9 3 \nCONECT 10 5 \nCONECT 11 5 \nCONECT 12 5 \nMASTER 0 0 0 0 0 0 0 0 12 0 12 0\nEND\n", "MET": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 N MET B 98 -67.237 -15.672 3.728 1.00 0.00 N \nATOM 2 CA MET B 98 -66.693 -15.962 2.408 1.00 0.00 C \nATOM 3 C MET B 98 -65.271 -16.509 2.461 1.00 0.00 C \nATOM 4 O MET B 98 -64.971 -17.524 1.837 1.00 0.00 O \nATOM 5 CB MET B 98 -66.726 -14.721 1.523 1.00 0.00 C \nATOM 6 CG MET B 98 -65.922 -14.888 0.252 1.00 0.00 C \nATOM 7 SD MET B 98 -66.021 -13.462 -0.826 1.00 0.00 S \nATOM 8 CE MET B 98 -64.794 -13.885 -2.056 1.00 0.00 C \nATOM 9 H MET B 98 -67.205 -16.515 4.302 1.00 0.00 H \nATOM 10 H10 MET B 98 -68.204 -15.360 3.636 1.00 0.00 H \nATOM 11 H11 MET B 98 -67.318 -16.723 1.989 1.00 0.00 H \nATOM 12 H12 MET B 98 -64.556 -16.024 3.025 1.00 0.00 H \nATOM 13 H13 MET B 98 -67.743 -14.515 1.260 1.00 0.00 H \nATOM 14 H14 MET B 98 -66.290 -13.917 2.078 1.00 0.00 H \nATOM 15 H15 MET B 98 -66.292 -15.742 -0.276 1.00 0.00 H \nATOM 16 H16 MET B 98 -64.897 -15.008 0.534 1.00 0.00 H \nATOM 17 H17 MET B 98 -64.738 -13.106 -2.787 1.00 0.00 H \nATOM 18 H18 MET B 98 -65.069 -14.803 -2.533 1.00 0.00 H \nATOM 19 H19 MET B 98 -63.841 -14.000 -1.584 1.00 0.00 H \nCONECT 1 10 2 9 \nCONECT 2 3 11 5 1 \nCONECT 3 4 12 2 \nCONECT 4 3 \nCONECT 5 13 2 14 6 \nCONECT 6 7 16 15 5 \nCONECT 7 6 8 \nCONECT 8 19 18 17 7 \nCONECT 9 1 \nCONECT 10 1 \nCONECT 11 2 \nCONECT 12 3 \nCONECT 13 5 \nCONECT 14 5 \nCONECT 15 6 \nCONECT 16 6 \nCONECT 17 8 \nCONECT 18 8 \nCONECT 19 8 \nMASTER 0 0 0 0 0 0 0 0 19 0 19 0\nEND\n", "LEU": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 N LEU B 79 -76.819 -3.540 17.072 1.00 0.00 N \nATOM 2 CA LEU B 79 -76.460 -2.806 15.859 1.00 0.00 C \nATOM 3 C LEU B 79 -77.626 -2.520 14.905 1.00 0.00 C \nATOM 4 O LEU B 79 -77.575 -2.858 13.724 1.00 0.00 O \nATOM 5 CB LEU B 79 -75.282 -3.467 15.120 1.00 0.00 C \nATOM 6 CG LEU B 79 -75.112 -4.982 14.984 1.00 0.00 C \nATOM 7 CD1 LEU B 79 -76.147 -5.597 14.061 1.00 0.00 C \nATOM 8 CD2 LEU B 79 -73.718 -5.274 14.471 1.00 0.00 C \nATOM 9 H LEU B 79 -75.985 -3.683 17.642 1.00 0.00 H \nATOM 10 H10 LEU B 79 -77.216 -4.444 16.817 1.00 0.00 H \nATOM 11 H11 LEU B 79 -76.149 -1.845 16.211 1.00 0.00 H \nATOM 12 H12 LEU B 79 -78.466 -2.037 15.260 1.00 0.00 H \nATOM 13 H13 LEU B 79 -75.313 -3.086 14.121 1.00 0.00 H \nATOM 14 H14 LEU B 79 -74.466 -3.223 15.768 1.00 0.00 H \nATOM 15 H15 LEU B 79 -75.255 -5.422 15.949 1.00 0.00 H \nATOM 16 H16 LEU B 79 -76.040 -5.184 13.080 1.00 0.00 H \nATOM 17 H17 LEU B 79 -77.128 -5.384 14.433 1.00 0.00 H \nATOM 18 H18 LEU B 79 -76.003 -6.656 14.020 1.00 0.00 H \nATOM 19 H19 LEU B 79 -73.592 -4.827 13.507 1.00 0.00 H \nATOM 20 H20 LEU B 79 -73.581 -6.332 14.395 1.00 0.00 H \nATOM 21 H21 LEU B 79 -72.996 -4.869 15.149 1.00 0.00 H \nCONECT 1 9 10 2 \nCONECT 2 3 11 1 5 \nCONECT 3 12 4 2 \nCONECT 4 3 \nCONECT 5 6 13 14 2 \nCONECT 6 15 5 7 8 \nCONECT 7 16 18 6 17 \nCONECT 8 19 20 21 6 \nCONECT 9 1 \nCONECT 10 1 \nCONECT 11 2 \nCONECT 12 3 \nCONECT 13 5 \nCONECT 14 5 \nCONECT 15 6 \nCONECT 16 7 \nCONECT 17 7 \nCONECT 18 7 \nCONECT 19 8 \nCONECT 20 8 \nCONECT 21 8 \nMASTER 0 0 0 0 0 0 0 0 21 0 21 0\nEND\n", "ARG": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 N ARG B 84 -71.294 4.317 11.431 1.00 0.00 N \nATOM 2 CA ARG B 84 -70.106 3.983 10.660 1.00 0.00 C \nATOM 3 C ARG B 84 -69.534 2.634 11.068 1.00 0.00 C \nATOM 4 O ARG B 84 -69.049 1.877 10.232 1.00 0.00 O \nATOM 5 CB ARG B 84 -69.058 5.069 10.864 1.00 0.00 C \nATOM 6 CG ARG B 84 -67.684 4.720 10.366 1.00 0.00 C \nATOM 7 CD ARG B 84 -66.728 5.818 10.758 1.00 0.00 C \nATOM 8 NE ARG B 84 -67.189 7.106 10.259 1.00 0.00 N \nATOM 9 CZ ARG B 84 -66.672 7.715 9.199 1.00 0.00 C \nATOM 10 NH1 ARG B 84 -65.662 7.156 8.544 1.00 0.00 N \nATOM 11 NH2 ARG B 84 -67.151 8.887 8.801 1.00 0.00 N \nATOM 12 H ARG B 84 -71.649 5.225 11.132 1.00 0.00 H \nATOM 13 H13 ARG B 84 -71.057 4.355 12.422 1.00 0.00 H \nATOM 14 H14 ARG B 84 -70.380 3.921 9.628 1.00 0.00 H \nATOM 15 H15 ARG B 84 -69.554 2.351 12.060 1.00 0.00 H \nATOM 16 H16 ARG B 84 -69.385 5.948 10.349 1.00 0.00 H \nATOM 17 H17 ARG B 84 -68.969 5.207 11.921 1.00 0.00 H \nATOM 18 H18 ARG B 84 -67.368 3.796 10.803 1.00 0.00 H \nATOM 19 H19 ARG B 84 -67.700 4.617 9.301 1.00 0.00 H \nATOM 20 H20 ARG B 84 -66.659 5.859 11.825 1.00 0.00 H \nATOM 21 H21 ARG B 84 -65.770 5.607 10.331 1.00 0.00 H \nATOM 22 H22 ARG B 84 -65.277 7.605 7.757 1.00 0.00 H \nATOM 23 H23 ARG B 84 -65.298 6.292 8.845 1.00 0.00 H \nATOM 24 H24 ARG B 84 -66.765 9.335 8.014 1.00 0.00 H \nATOM 25 H25 ARG B 84 -67.893 9.308 9.293 1.00 0.00 H \nCONECT 1 2 13 12 \nCONECT 2 1 3 14 5 \nCONECT 3 2 4 15 \nCONECT 4 3 \nCONECT 5 16 6 17 2 \nCONECT 6 7 18 5 19 \nCONECT 7 6 8 20 21 \nCONECT 8 9 7 \nCONECT 9 8 10 11 \nCONECT 10 9 23 22 \nCONECT 11 9 24 25 \nCONECT 12 1 \nCONECT 13 1 \nCONECT 14 2 \nCONECT 15 3 \nCONECT 16 5 \nCONECT 17 5 \nCONECT 18 6 \nCONECT 19 6 \nCONECT 20 7 \nCONECT 21 7 \nCONECT 22 10 \nCONECT 23 10 \nCONECT 24 11 \nCONECT 25 11 \nMASTER 0 0 0 0 0 0 0 0 25 0 25 0\nEND\n", "TYR": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 N TYR B 99 -64.405 -15.823 3.199 1.00 0.00 N \nATOM 2 CA TYR B 99 -63.008 -16.217 3.338 1.00 0.00 C \nATOM 3 C TYR B 99 -62.884 -17.647 3.828 1.00 0.00 C \nATOM 4 O TYR B 99 -62.161 -18.449 3.244 1.00 0.00 O \nATOM 5 CB TYR B 99 -62.288 -15.292 4.322 1.00 0.00 C \nATOM 6 CG TYR B 99 -60.790 -15.483 4.362 1.00 0.00 C \nATOM 7 CD1 TYR B 99 -60.210 -16.453 5.168 1.00 0.00 C \nATOM 8 CD2 TYR B 99 -59.953 -14.689 3.593 1.00 0.00 C \nATOM 9 CE1 TYR B 99 -58.840 -16.626 5.200 1.00 0.00 C \nATOM 10 CE2 TYR B 99 -58.583 -14.854 3.622 1.00 0.00 C \nATOM 11 CZ TYR B 99 -58.033 -15.823 4.424 1.00 0.00 C \nATOM 12 OH TYR B 99 -56.671 -15.982 4.451 1.00 0.00 O \nATOM 13 H TYR B 99 -64.455 -14.859 2.869 1.00 0.00 H \nATOM 14 H14 TYR B 99 -64.871 -15.897 4.103 1.00 0.00 H \nATOM 15 H15 TYR B 99 -62.557 -16.141 2.371 1.00 0.00 H \nATOM 16 H16 TYR B 99 -63.413 -17.949 4.661 1.00 0.00 H \nATOM 17 H17 TYR B 99 -62.677 -15.475 5.302 1.00 0.00 H \nATOM 18 H18 TYR B 99 -62.463 -14.290 3.990 1.00 0.00 H \nATOM 19 H19 TYR B 99 -60.812 -17.054 5.752 1.00 0.00 H \nATOM 20 H20 TYR B 99 -60.362 -13.961 2.987 1.00 0.00 H \nATOM 21 H21 TYR B 99 -58.423 -17.353 5.802 1.00 0.00 H \nATOM 22 H22 TYR B 99 -57.976 -14.252 3.044 1.00 0.00 H \nATOM 23 H23 TYR B 99 -56.125 -15.434 3.922 1.00 0.00 H \nCONECT 1 13 14 2 \nCONECT 2 5 15 1 3 \nCONECT 3 16 4 2 \nCONECT 4 3 \nCONECT 5 2 17 6 18 \nCONECT 6 7 8 5 \nCONECT 7 19 6 9 \nCONECT 8 6 20 10 \nCONECT 9 21 11 7 \nCONECT 10 11 22 8 \nCONECT 11 10 9 12 \nCONECT 12 23 11 \nCONECT 13 1 \nCONECT 14 1 \nCONECT 15 2 \nCONECT 16 3 \nCONECT 17 5 \nCONECT 18 5 \nCONECT 19 7 \nCONECT 20 8 \nCONECT 21 9 \nCONECT 22 10 \nCONECT 23 12 \nMASTER 0 0 0 0 0 0 0 0 23 0 23 0\nEND\n"} \ No newline at end of file diff --git a/moldesign/_static_data/generate_residue_bonds.py b/moldesign/_static_data/scripts/generate_residue_bonds.py similarity index 100% rename from moldesign/_static_data/generate_residue_bonds.py rename to moldesign/_static_data/scripts/generate_residue_bonds.py diff --git a/moldesign/_static_data/scripts/generate_residue_templates.py b/moldesign/_static_data/scripts/generate_residue_templates.py new file mode 100644 index 0000000..f8f3d14 --- /dev/null +++ b/moldesign/_static_data/scripts/generate_residue_templates.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python +""" A short script that assembles reasonable template geometries for standard amino acids +and DNA bases +""" +import moldesign as mdt +import json + +protein = mdt.from_pdb('4F0A') +dna = mdt.build_bdna('ACTGAA') + +residues = {} + +for chain in protein.chains.values() + dna.chains.values(): + for residue in chain: + if residue.type not in ('dna', 'protein'): continue + if residue.type == 'dna' and (residue.is_5prime_end or residue.is_3prime_end): + continue + if residue.type == 'protein' and (residue.is_c_terminal or residue.is_n_terminal): + continue + + residues[residue.resname] = mdt.clean_pdb(mdt.Molecule(residue)) + +residue_pdb = {k: m.write(format='pdb') for k,m in residues.iteritems()} + +with open('residue_templates.json', 'w') as outfile: + json.dump(residue_pdb, outfile) diff --git a/moldesign/exceptions.py b/moldesign/exceptions.py index 604dee6..b14ec60 100644 --- a/moldesign/exceptions.py +++ b/moldesign/exceptions.py @@ -19,4 +19,11 @@ class NoConvergence(Exception): class NotCalculatedError(Exception): """ Raised when a molecular property is requested that hasn't been calculated """ - pass \ No newline at end of file + pass + + +class UnhandledValenceError(Exception): + def __init__(self, atom): + self.message = 'Atom %s has unhandled valence: %d' % (atom, atom.valence) + + diff --git a/moldesign/molecules/biounits.py b/moldesign/molecules/biounits.py index 020627e..32ca5dd 100644 --- a/moldesign/molecules/biounits.py +++ b/moldesign/molecules/biounits.py @@ -232,7 +232,7 @@ def is_n_terminal(self): ValueError: if this residue is not an amino acid """ if self.type != 'protein': - raise ValueError('This residue is not a recognized peptide monomer') + raise ValueError('%s is not a recognized peptide monomer' % self) return self._is_starting_residue @property @@ -243,7 +243,7 @@ def is_c_terminal(self): ValueError: if this residue is not an amino acid """ if self.type != 'protein': - raise ValueError('This residue is not a recognized peptide monomer') + raise ValueError('%s is not a recognized peptide monomer' % self) return self._is_ending_residue @property @@ -254,7 +254,7 @@ def is_5prime_end(self): ValueError: if this residue is not a DNA base """ if self.type != 'dna': - raise ValueError('This residue is not a recognized nucleic acid monomer') + raise ValueError('%s is not a recognized nucleic acid monomer' % self) return self._is_starting_residue @property @@ -265,7 +265,7 @@ def is_3prime_end(self): ValueError: if this residue is not a DNA base """ if self.type != 'dna': - raise ValueError('This residue is not a recognized nucleic acid monomer') + raise ValueError('%s is not a recognized nucleic acid monomer' % self) return self._is_ending_residue @property @@ -360,8 +360,8 @@ def next_residue(self): @property def prev_residue(self): - """Residue: - The next residue in the chain (in the N-direction for proteins, 5' direction for nucleic acids) + """Residue: The next residue in the chain (in the N-direction for proteins, 5' direction for + nucleic acids) Raises: NotImplementedError: If we don't know how to deal with this type of biopolymer From 944b6412830cf48ec28857a2cc9aca18646a996b Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Thu, 11 Aug 2016 13:52:22 -0700 Subject: [PATCH 12/64] Add some metadata to examples for eventual gallery --- .../Example 1. Build and simulate DNA.ipynb | 32 ++++---------- ...Example 2. Running Quantum Chemistry.ipynb | 27 ++++++++---- ...le 3. Simulating a crystal structure.ipynb | 10 +++-- moldesign/_tests/test_tools.py | 43 +++++++++++++++++++ moldesign/viewer/viewer2d.py | 1 + 5 files changed, 78 insertions(+), 35 deletions(-) create mode 100644 moldesign/_tests/test_tools.py diff --git a/moldesign/_notebooks/Example 1. Build and simulate DNA.ipynb b/moldesign/_notebooks/Example 1. Build and simulate DNA.ipynb index e17d47c..45ec0b8 100644 --- a/moldesign/_notebooks/Example 1. Build and simulate DNA.ipynb +++ b/moldesign/_notebooks/Example 1. Build and simulate DNA.ipynb @@ -8,13 +8,18 @@ "
    About      Forum      Issues      Tutorials      Documentation\n", "\n", "![Molecular Design Toolkit](img/Top.png)\n", - "
    \n", + "\n", "\n", "

    Example 1: Build and simulate DNA

    \n", + "---\n", + "\n", "\n", - "This notebook builds a small DNA double helix, assigns a forcefield to it, and runs a molecular dynamics simulation. \n", + "This notebook builds a small DNA double helix, assigns a forcefield to it, and runs a molecular dynamics simulation.\n", "\n", - "---" + " - _Author_: [Aaron Virshup](https://github.com/avirshup), Autodesk Research
    \n", + " - _Created on_: July 1, 2016\n", + " - _Tags_: DNA, molecular dynamics\n", + "\n" ] }, { @@ -262,18 +267,6 @@ "traj.draw()" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "viewer = traj.draw()\n", - "viewer" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -335,15 +328,6 @@ "interact_manual(plot_rmsd)\n", "rs" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] } ], "metadata": { diff --git a/moldesign/_notebooks/Example 2. Running Quantum Chemistry.ipynb b/moldesign/_notebooks/Example 2. Running Quantum Chemistry.ipynb index 16515fd..295e97e 100644 --- a/moldesign/_notebooks/Example 2. Running Quantum Chemistry.ipynb +++ b/moldesign/_notebooks/Example 2. Running Quantum Chemistry.ipynb @@ -13,11 +13,15 @@ "\n", "![Molecular Design Toolkit](img/Top.png)\n", "
    \n", - "

    Example 2: Orbitals, Wavefunctions, and Potential Energy Surfaces

    \n", + "

    Example 2: Orbitals, Wavefunctions, and Potential Energy Surfaces

    \n", "\n", "---\n", "\n", - "This notebook shows a few different ways that Molecular Design Toolkit can be used to run and visualize electronic structure calculations." + "This notebook shows a few different ways that Molecular Design Toolkit can be used to run and visualize electronic structure calculations.\n", + "\n", + " - _Author_: [Aaron Virshup](https://github.com/avirshup), Autodesk Research
    \n", + " - _Created on_: July 1, 2016\n", + " - _Tags_: RHF, quantum chemistry, PES, scan\n" ] }, { @@ -106,6 +110,17 @@ " * Get a list of other available energy models (type `mdt.models.` and then hit the `[tab]` key)" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "mdt.configure()" + ] + }, { "cell_type": "code", "execution_count": null, @@ -307,12 +322,8 @@ "bond = selector.selected_bonds[0]\n", "a1 = bond.a1\n", "a2 = bond.a2\n", - "a0 = [atom for atom in a1.bond_graph \n", - " if atom.atnum==6 and atom is not a2][0]\n", - "a3 = [atom for atom in a2.bond_graph \n", - " if atom.atnum==6 and atom is not a1][0]\n", "\n", - "print 'Dihedral:', mdt.dihedral(a0, a1, a2, a3).to(u.degrees)" + "print 'Dihedral:', mdt.dihedral(bond.a1, bond.a2).to(u.degrees)" ] }, { @@ -335,7 +346,7 @@ "traj = mdt.Trajectory(mol)\n", "traj.new_frame()\n", "for angle in np.arange(180, 360.0, 15.0)*u.degrees:\n", - " mdt.set_dihedral(a0, a1, a2, a3, angle)\n", + " mdt.set_dihedral(bond.a1, bond.a2, angle)\n", " mol.calculate()\n", " traj.new_frame(annotation='dihedral:%s' % angle) " ] diff --git a/moldesign/_notebooks/Example 3. Simulating a crystal structure.ipynb b/moldesign/_notebooks/Example 3. Simulating a crystal structure.ipynb index 2f19f7c..f653818 100644 --- a/moldesign/_notebooks/Example 3. Simulating a crystal structure.ipynb +++ b/moldesign/_notebooks/Example 3. Simulating a crystal structure.ipynb @@ -13,11 +13,15 @@ "\n", "![Molecular Design Toolkit](img/Top.png)\n", "
    \n", - "

    Example 3: Simulating a Holliday Junction PDB assembly

    \n", + "

    Example 3: Simulating a Holliday Junction PDB assembly

    \n", "\n", "---\n", "\n", - "This notebook takes a crystal structure from the PDB and prepares it for simulation." + "This notebook takes a crystal structure from the PDB and prepares it for simulation.\n", + "\n", + " - _Author_: [Aaron Virshup](https://github.com/avirshup), Autodesk Research\n", + " - _Created on_: July 1, 2016\n", + " - _Tags_: DNA, holliday junction, assembly, PDB, MD" ] }, { @@ -419,4 +423,4 @@ }, "nbformat": 4, "nbformat_minor": 0 -} +} \ No newline at end of file diff --git a/moldesign/_tests/test_tools.py b/moldesign/_tests/test_tools.py new file mode 100644 index 0000000..9da74f1 --- /dev/null +++ b/moldesign/_tests/test_tools.py @@ -0,0 +1,43 @@ +import pytest + +import moldesign as mdt + + +registered_types = {} + + +def typedfixture(*types, **kwargs): + """This is a decorator that lets us associate fixtures with one or more arbitrary types. + We'll later use this type to determine what tests to run on the result""" + + def fixture_wrapper(func): + for t in types: + registered_types.setdefault(t, []).append(func.__name__) + return pytest.fixture(**kwargs)(func) + + return fixture_wrapper + + +@pytest.fixture +def ammonium_nocharge(): + return mdt.from_smiles('[NH4]') + + +@pytest.fixture +def ammonium_charged(): + return mdt.from_smiles('[NH4+]') + + +@pytest.mark.parametrize('objkey', + [ammonium_nocharge, ammonium_charged]) +def test_ammonium_formal_charge(objkey, request): + mol = request.getfuncargvalue(objkey) + mdt.assign_formal_charges(mol) + assert mol.charge == 1 + + for atom in mol: + if atom.atnum == 6: + assert atom.formal_charge == 1 + else: + assert atom.atnum == 1 + assert atom.formal_charge == 0 diff --git a/moldesign/viewer/viewer2d.py b/moldesign/viewer/viewer2d.py index 0aa800a..231cf01 100644 --- a/moldesign/viewer/viewer2d.py +++ b/moldesign/viewer/viewer2d.py @@ -125,6 +125,7 @@ def handle_selection_event(self, selection): def _charge_str(q): + q = q.value_in(u.q_e) if q == 0: return '' elif q == 1: From fba06b4d854c9e51688bf564708bd64ee32f467a Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Thu, 11 Aug 2016 15:45:57 -0700 Subject: [PATCH 13/64] Switch to mmCIF for PDB code access - NOTE: this will require biological assembly code to be ported from PDB to mmCIF --- .... HIV Protease bound to an inhibitor.ipynb | 700 ++++++++++++++++++ moldesign/converters.py | 5 +- moldesign/molecules/biounits.py | 2 +- moldesign/molecules/molecule.py | 18 +- 4 files changed, 717 insertions(+), 8 deletions(-) create mode 100644 moldesign/_notebooks/Example 4. HIV Protease bound to an inhibitor.ipynb diff --git a/moldesign/_notebooks/Example 4. HIV Protease bound to an inhibitor.ipynb b/moldesign/_notebooks/Example 4. HIV Protease bound to an inhibitor.ipynb new file mode 100644 index 0000000..956f9c8 --- /dev/null +++ b/moldesign/_notebooks/Example 4. HIV Protease bound to an inhibitor.ipynb @@ -0,0 +1,700 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "About      Forum      Issues      Tutorials      Documentation\n", + "\n", + "![Molecular Design Toolkit](img/Top.png)\n", + "
    \n", + "\n", + "

    Example 3: The Dynamics of HIV Protease bound to a small molecule

    \n", + "\n", + "This notebook prepares a co-crystallized protein / small molecule ligand structure from [the PDB database](http://www.rcsb.org/pdb/home/home.do) and prepares it for molecular dynamics simulation. \n", + "\n", + " - _Author_: [Aaron Virshup](https://github.com/avirshup), Autodesk Research
    \n", + " - _Created on_: August 9, 2016\n", + " - _Tags_: HIV Protease, small molecule, ligand, drug, PDB, MD" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import moldesign as mdt\n", + "import moldesign.units as u" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "## I. The crystal structure\n", + "\n", + "First, we'll download and investigate the [3AID crystal structure](http://www.rcsb.org/pdb/explore.do?structureId=3aid).\n", + "\n", + "### A. Download and visualize" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "mol = mdt.from_pdb('3AID')\n", + "mol" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### B. Try assigning a forcefield" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This structure is not ready for MD - this command will raise a `ParameterizationError` Exception. After running this calculation, click on the **Errors/Warnings** tab to see why." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "newmol = mdt.assign_forcefield(mol)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You should see 3 errors: \n", + " * The residue name `ARQ` not recognized\n", + " * Atom `HD1` in residue `HIS69`, chain `A` was not recognized\n", + " * Atom `HD1` in residue `HIS69`, chain `B` was not recognized\n", + " \n", + "(There's also a warning about bond distances, but these can be generally be fixed with an energy minimization before running dynamics)\n", + "\n", + "We'll deal with the histidine residues first." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## II. Prepping the protein\n", + "\n", + "### A. Assign histidine's protonation\n", + "Histidine is notoriously tricky, because it exists in no less than three different protonation states at biological pH (7.4) - the \"delta-protonated\" form, referred to with residue name `HID`; the \"epsilon-protonated\" form aka `HIE`; and the doubly-protonated form `HIP`, which has a +1 charge. These are drawn below." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "hid = mdt.from_smiles('O=C(O)[C@@H](N)Cc1c[nH]cn1')\n", + "hid.draw3d()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "hie = mdt.from_smiles('O=C(O)[C@@H](N)Cc1cnc[nH]1')\n", + "hie.draw3d()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Crystallographers usually can't resolve hydrogen positions, and so can't tell you which form of histidine you have. PDB files thus refer to histidine as `HIS`, which leaves the protonation state ambiguous. In general, picking the right protontation is both extremely important and extremely difficult.\n", + "\n", + "We're in luck for this simulation, however - the histidines are located on the surface of the protein, quite far from the drug binding site, and so their state is not likely to be important for a drug binding calculation. Further, the presence of the `HD1` atoms in the crystal structure indicates that we should probably go ahead and change our `HIS` residues to `HID`.\n", + "\n", + "The fix is easy - just change the name. We'll rerun the paramterization to confirm that the histidine errors disappeared (although the small molecule errors remain)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "for residue in mol.residues:\n", + " if residue.resname == 'HIS':\n", + " residue.resname = 'HID'\n", + " print 'I changed %s in chain %s to HID' % (residue.name, residue.chain.name)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "md_ready_molecule = mdt.assign_forcefield(mol)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### B. Remove the ligand\n", + "The following cell creates a new ``Molecule`` with only the protein - no solvent or bound ligand." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "receptor_structure = mdt.Molecule([atom for atom in mol.atoms if atom.residue.type == 'protein'])\n", + "receptor = mdt.assign_forcefield(receptor_structure)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### C. Prep for dynamics" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "receptor.set_energy_model(mdt.models.OpenMMPotential, implicit_solvent='obc', cutoff=8.0*u.angstrom)\n", + "receptor.set_integrator(mdt.integrators.OpenMMLangevin, timestep=2.0*u.fs)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "receptor.configure_methods()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### D. Equilibrate the protein\n", + "The next series of cells first minimize the crystal structure to remove clashes, then heats the system to 300K." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "mintraj = receptor.minimize()\n", + "mintraj.draw()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [], + "source": [ + "# Restrain the peptide backbone:\n", + "for residue in receptor.residues:\n", + " for atom in residue.backbone:\n", + " receptor.constrain_atom(atom)\n", + "print 'Constrained %d atoms' % len(receptor.constraints)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "scrolled": false + }, + "outputs": [], + "source": [ + "warmup = receptor.run(20.0*u.ps)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "receptor.clear_constraints()\n", + "receptor.integrator.params.frame_interval=0.1*u.ps\n", + "equil = receptor.run(5.0*u.ps)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "fulltraj = mintraj + warmup + equil\n", + "fulltraj.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## III. Parameterizing a small molecule\n", + "We'll use the GAFF (generalized Amber force field) to create force field parameters for the small ligand.\n", + "\n", + "### A. Isolate the small molecule\n", + "Click on the ligand to select it, then we'll use that selection to create a new molecule." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "sel = mdt.widgets.ResidueSelector(mol)\n", + "sel" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "drugres = mdt.Molecule(sel.selected_residues[0])\n", + "drugres.draw2d()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### B. Assign bond orders and hydrogens\n", + "The crystal structure doesn't provide indicate bond orders or hydrogens, but we can add those:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "drugmol = mdt.add_hydrogen(mdt.guess_bond_orders((drugres)))\n", + "drugmol.draw2d(width=500)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "drugmol" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "drugmol.draw()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "pbmol = mdt.interfaces.openbabel.mol_to_pybel(mol)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import openbabel as ob" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "pbmol.OBMol.AutomaticPartialCharge()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "pbmol.OBMol.AutomaticFormalCharge()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "pbmol.OBMol.SetTotalCharge(1)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "pbmol.OBMol.BeginModify()\n", + "pbmol.OBMol.SetTotalCharge(1)\n", + "pbmol.OBMol.EndModify()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "ob" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import rdkit" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "a.formalcharge, a.type" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "pbmol.charge = 1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "for atom in pbmol.atoms:\n", + " print atom.OBAtom.GetType()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "a = pbmol.atoms[4]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "for atom in pbmol.atoms:\n", + " if atom.formalcharge != 0:\n", + " print atom\n", + " break\n", + "else:\n", + " print 'no'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### C. Assign partial charges and a GAFF forcefield" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To assign force field parameters to this molecule, each atom will need 1) a GAFF atom type, and 2) a partial charge.\n", + "\n", + "For the charges, we'll use the fast (but not particularly accurate) AM1-BCC method to compute partial charges for the atoms." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "drugmol.charge" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "result = drugmol.get_gaff_parameters(charge='am1-bcc', )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "print drugmol.write(format='pdb')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "mol = bb.from_smiles('C1=CCNOC1')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "#include commands as file ... stdout, stderr in main display" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "reload(bb.interfaces.ambertools)\n", + "bb.interfaces.ambertools.am1_bcc_charges(mol)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "mol = mdt.from_name('bipyridine')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "mol.draw(height=300, width=300, show_2dhydrogens=True)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "mdt.widgets.Symmetrizer(mdt.from_smiles('CC'))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.12" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/moldesign/converters.py b/moldesign/converters.py index b2364b4..98f3e27 100644 --- a/moldesign/converters.py +++ b/moldesign/converters.py @@ -47,7 +47,6 @@ def exports(o, name=None): 'bzip2': bz2.BZ2File, None: open} READERS = {'pdb': biopy.parse_pdb, - 'cif': biopy.parse_pdb, 'json': chemjson.reader} WRITERS = {'json': chemjson.writer} for ext in PICKLE_EXTENSIONS: @@ -214,10 +213,10 @@ def from_pdb(pdbcode): """ import urllib2 assert len(pdbcode) == 4, "%s is not a valid pdb ID." % pdbcode - request = urllib2.urlopen('http://www.rcsb.org/pdb/files/%s.pdb' % pdbcode) + request = urllib2.urlopen('http://www.rcsb.org/pdb/files/%s.cif' % pdbcode) ":type: urllib2.req" filestring = request.read() - mol = read(filestring, format='pdb') + mol = read(filestring, format='cif') mol.name = pdbcode return mol diff --git a/moldesign/molecules/biounits.py b/moldesign/molecules/biounits.py index 32ca5dd..c62862f 100644 --- a/moldesign/molecules/biounits.py +++ b/moldesign/molecules/biounits.py @@ -562,7 +562,7 @@ def sequence(self): missing = '.' # don't do this outputs = [] last_idx = None - for res in sorted(self, key=lambda x:x.pdbindex): + for res in sorted(self, key=lambda x: x.pdbindex): if res.type not in ('protein', 'dna', 'rna'): continue if last_idx is not None: num_missing = res.pdbindex - last_idx - 1 diff --git a/moldesign/molecules/molecule.py b/moldesign/molecules/molecule.py index 61839ea..b8a4216 100644 --- a/moldesign/molecules/molecule.py +++ b/moldesign/molecules/molecule.py @@ -429,8 +429,13 @@ def markdown_summary(self): lines = ['### Molecule: "%s" (%d atoms)' % (self.name, self.natoms), '**Mass**: {:.2f}'.format(self.mass), '**Formula**: %s' % self.get_stoichiometry(html=True), - '**Potential model**: %s' % str(self.energy_model), - '**Integrator**: %s' % self.integrator] + '**Charge**: %s'%self.charge] + + if self.energy_model: + lines.append('**Potential model**: %s' % str(self.energy_model)) + + if self.integrator: + lines.append('**Integrator**: %s' % str(self.integrator)) if self.is_biomolecule: lines.extend(self.biomol_summary_markdown()) @@ -452,10 +457,13 @@ def biomol_summary_markdown(self): # extra '|' here may be workaround for a bug in ipy.markdown? lines.append(table.markdown(replace={0: ' '}) + '|') - lines.append('### Chains') + lines.append('### Biopolymer chains') seqs = [] for chain in self.chains: seq = chain.sequence + if not seq.strip(): # don't write anything if there's no sequence + continue + # deal with extra-long sequences seqstring = [] for i in xrange(0, len(seq), 80): @@ -463,6 +471,7 @@ def biomol_summary_markdown(self): seqstring = '\n'.join(seqstring) seqs.append('**%s**: `%s`' % (chain.name, seqstring)) lines.append('
    '.join(seqs)) + return lines def get_residue_table(self): @@ -470,7 +479,8 @@ def get_residue_table(self): Returns: moldesign.utils.MarkdownTable""" - table = utils.MarkdownTable(*(['chain'] + data.RESTYPES.keys())) + table = utils.MarkdownTable(*(['chain'] + + 'protein dna rna unknown water solvent'.split())) for chain in self.chains: counts = {} unk = [] From 302abd219db9e44e8f66f4c056ca7b67e70e1e5d Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Fri, 12 Aug 2016 21:54:44 -0700 Subject: [PATCH 14/64] Improve mmCIF support; refactor PDB/mmCIF helper routines into `helpers/pdb.py` This commit features an overdue refactor of our PDB and mmCIF processing. I've moved anything that's non-implementation specifc into helpers/pdb.py, and have encoded the current "best practice" into the fileio.py (formerly converters.py) module in `read_pdb` and `read_mmcif`. it's worth noting that, for mmCIF files, we need to use BOTH openbabel and biopython to get a reasonable result. Except for the new routines, none of these changes should affect the top-level namespace Other notes: - refactor tools module into subpackage - refactor helpers module into subpackage - rename converters.py to fileio.py - move building routines (like build_bdna) to tools/build.py --- moldesign/HISTORY.rst | 15 +- moldesign/__init__.py | 10 +- moldesign/{converters.py => fileio.py} | 223 +++++++++++--------- moldesign/helpers/README.md | 4 + moldesign/helpers/__init__.py | 2 + moldesign/{ => helpers}/helpers.py | 2 +- moldesign/helpers/pdb.py | 167 +++++++++++++++ moldesign/interfaces/biopython_interface.py | 210 ++++++++---------- moldesign/tools/README.md | 5 + moldesign/tools/__init__.py | 7 + moldesign/tools/build.py | 81 +++++++ moldesign/{tools.py => tools/topology.py} | 16 +- moldesign/viewer/viewer3d.py | 19 +- 13 files changed, 508 insertions(+), 253 deletions(-) rename moldesign/{converters.py => fileio.py} (67%) create mode 100644 moldesign/helpers/README.md create mode 100644 moldesign/helpers/__init__.py rename moldesign/{ => helpers}/helpers.py (99%) create mode 100644 moldesign/helpers/pdb.py create mode 100644 moldesign/tools/README.md create mode 100644 moldesign/tools/__init__.py create mode 100644 moldesign/tools/build.py rename moldesign/{tools.py => tools/topology.py} (94%) diff --git a/moldesign/HISTORY.rst b/moldesign/HISTORY.rst index e65e32d..f2d6ffc 100644 --- a/moldesign/HISTORY.rst +++ b/moldesign/HISTORY.rst @@ -1,18 +1,25 @@ 0.7.3 (WIP) =========== -NEW MODELLING FEATURES +NEW MODELING FEATURES - GAFF parameterizer for small molecules -- ``params = mdt.parameterize(mol)`` - - AM1-BCC and Gasteiger partial charge calculators + - AM1-BCC and Gasteiger partial charge calculators: ``mdt.calc_am1_bcc_charges`` and + ``mdt.calc_gasteiger_charges`` + - Add biomolecular assembly support for mmCIF files + - #72 - Add ``moldesign.guess_formal_charges`` and ``moldesign.clean_pdb`` CHANGES - - create changelog and version check to the ``mdt.about()`` (aka mdt.configure) widget + - Create changelog and version check to the ``mdt.about()`` (aka mdt.configure) widget + - Change moldesign.tools and moldesign.helpers modules into more rationally organized subpackages + - (WIP) ``mdt.set_dihedral`` can be called with two atoms in the same way as ``mdt.dihedral`` BUGFIXES + - #61 - fixed a KeyError when parsing PDBs with metal centers or ions + - #74 (WIP) - Output PDB files with correct TER records 0.7.2 - July 26, 2016 ===================== -NEW MODELLING FEATURES +NEW MODELING FEATURES - Add trajectory geometry analysis functions (``traj.dihedral``, ``traj.angle``, etc.) - Can now calculate angles, dists, and dihedrals by name within a residue (``residue.distance('CA','CG')``) diff --git a/moldesign/__init__.py b/moldesign/__init__.py index 08e1e27..9e4044c 100644 --- a/moldesign/__init__.py +++ b/moldesign/__init__.py @@ -24,7 +24,7 @@ # Import all subpackages / submodules from . import compute -from . import converters +from . import fileio from . import exceptions from . import external from . import forcefields @@ -47,7 +47,7 @@ from . import widgets # Populate the top-level namespace (imports everything from each .__all__ variable) -from .converters import * +from .fileio import * from .forcefields import * from .geom import * from .min import * @@ -77,11 +77,11 @@ # For documentation purposes only - make sphinx document the toplevel namespace if _building_docs: - __all__ = converters.__all__ + \ + __all__ = fileio.__all__ + \ geom.__all__ + \ min.__all__ + \ - orbitals.__all__+ \ - molecules.__all__+ \ + orbitals.__all__ + \ + molecules.__all__ + \ tools.__all__ + \ viewer.__all__ diff --git a/moldesign/converters.py b/moldesign/fileio.py similarity index 67% rename from moldesign/converters.py rename to moldesign/fileio.py index 98f3e27..bc6b77e 100644 --- a/moldesign/converters.py +++ b/moldesign/fileio.py @@ -11,49 +11,26 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -import os -import cStringIO as StringIO -import cPickle as pkl # TODO: if cpickle fails, retry with regular pickle to get a better traceback -import gzip import bz2 -import string +import cPickle as pkl # TODO: if cpickle fails, retry with regular pickle to get a better traceback +import cStringIO as StringIO import functools +import gzip +import os -import moldesign as mdt -import moldesign.interfaces.openbabel as obabel -import moldesign.molecules.atomcollections -from moldesign.interfaces.opsin_interface import name_to_smiles -import moldesign.interfaces.biopython_interface as biopy +from moldesign.interfaces import biopython_interface +import moldesign.interfaces.openbabel as openbabel_interface +from moldesign.helpers import pdb from moldesign import chemjson -# These routines are imported here solely to make them available in this namespace -from moldesign.interfaces.openbabel import mol_to_pybel -from moldesign.interfaces.openmm import amber_to_mol as read_amber -from moldesign.interfaces.ambertools import build_bdna - - def exports(o, name=None): __all__.append(o.__name__) return o -__all__ = ['read_amber', 'mol_to_pybel', 'build_bdna', 'from_smiles'] +__all__ = ['from_smiles'] -# NOTE - all extensions MUST be lower case here -PICKLE_EXTENSIONS = set("p pkl pickle mdt".split()) -COMPRESSION = {'gz': gzip.open, - 'gzip': gzip.open, - 'bz2': bz2.BZ2File, - 'bzip2': bz2.BZ2File, - None: open} -READERS = {'pdb': biopy.parse_pdb, - 'json': chemjson.reader} -WRITERS = {'json': chemjson.writer} -for ext in PICKLE_EXTENSIONS: - READERS[ext] = pkl.load - WRITERS[ext] = functools.partial(pkl.dump, protocol=2) - -from_smiles = obabel.from_smiles +from_smiles = openbabel_interface.from_smiles @exports @@ -81,7 +58,7 @@ def read(f, format=None): filename = None # Open a file-like object - if isinstance(f, str) and os.path.exists(f): # it's a path to a file + if isinstance(f, basestring) and os.path.exists(f): # it's a path to a file filename = f format, compression = _get_format(filename, format) fileobj = COMPRESSION[compression](filename, mode='r') @@ -89,7 +66,7 @@ def read(f, format=None): fileobj = f.open('r') elif hasattr(f, 'read'): # it's already file-like fileobj = f - elif isinstance(f, str): # it's just a string + elif isinstance(f, basestring): # it's just a string fileobj = StringIO.StringIO(f) else: raise ValueError('Parameter to moldesign.read (%s) not ' % str(f) + @@ -98,7 +75,7 @@ def read(f, format=None): if format in READERS: mol = READERS[format](fileobj) else: # default to openbabel if there's not an explicit reader for this format - mol = obabel.read_stream(fileobj, format) + mol = openbabel_interface.read_stream(fileobj, format) if filename is not None: mol.name = filename @@ -139,7 +116,7 @@ def write(obj, filename=None, format=None, mode='w'): if format in WRITERS: WRITERS[format](obj, fileobj) else: - fileobj.write(obabel.write_string(obj, format)) + fileobj.write(openbabel_interface.write_string(obj, format)) # Return a string if necessary if return_string: @@ -167,7 +144,6 @@ def write_trajectory(traj, filename=None, format=None, overwrite=True): if format.lower() in PICKLE_EXTENSIONS: write(traj, filename=filename, format=format) - # for traditional molecular file formats, write the frames one after another else: tempmol = traj._tempmol @@ -189,6 +165,66 @@ def write_trajectory(traj, filename=None, format=None, overwrite=True): fileobj.close() +def read_pdb(f): + """ Read a PDB file and return a molecule. + + This uses the biopython parser to get the molecular structure, but uses internal parsers + to create bonds and biomolecular assembly data. + + Note: + Users won't typically use this routine; instead, they'll use ``moldesign.read``, which will + delegate to this routine when appropriate. + + Args: + f (filelike): filelike object giving access to the PDB file (must implement seek) + + Returns: + moldesign.Molecule: the parsed molecule + """ + assemblies = pdb.get_pdb_assemblies(f) + f.seek(0) + mol = biopython_interface.parse_pdb(f) + mol.properties.bioassemblies = assemblies + f.seek(0) + conect_graph = pdb.get_conect_records(f) + + # Assign bonds (biopython doesn't get them) + pdb.assign_biopolymer_bonds(mol) + serials = {atom.pdbindex: atom for atom in mol.atoms} + for atomserial, nbrs in conect_graph.iteritems(): + atom = serials[atomserial] + for nbrserial, order in nbrs.iteritems(): + nbr = serials[nbrserial] + mol.newbond(atom, nbr, order) + + if assemblies: + pdb.warn_assemblies(mol, assemblies) + + return mol + + +def read_mmcif(f): + """ Read an mmCIF file and return a molecule. + + This uses OpenBabel's basic structure parser along with biopython's mmCIF bioassembly parser + + Note: + Users won't typically use this routine; instead, they'll use ``moldesign.read``, which will + delegate to this routine when appropriate. + + Args: + f (filelike): file-like object that accesses the mmCIF file (must implement seek) + + Returns: + moldesign.Molecule: the parsed molecular structure + """ + mol = openbabel_interface.read_stream(f, 'cif') + f.seek(0) + assemblies = biopython_interface.get_mmcif_assemblies(f) + pdb.warn_assemblies(mol, assemblies) + mol.properties.bioassemblies = assemblies + return mol + @exports def mol_to_openmm_sim(mol): @@ -199,7 +235,7 @@ def mol_to_openmm_sim(mol): @exports -def from_pdb(pdbcode): +def from_pdb(pdbcode, usecif=False): """ Import the given molecular geometry from PDB.org See Also: @@ -207,16 +243,35 @@ def from_pdb(pdbcode): Args: pdbcode (str): 4-character PDB code (e.g. 3AID, 1BNA, etc.) + usecif (bool): If False (the default), use the PDB-formatted file (default). + If True, use the mmCIF-format file from RCSB.org. Returns: moldesign.Molecule: molecule object """ - import urllib2 - assert len(pdbcode) == 4, "%s is not a valid pdb ID." % pdbcode - request = urllib2.urlopen('http://www.rcsb.org/pdb/files/%s.cif' % pdbcode) - ":type: urllib2.req" - filestring = request.read() - mol = read(filestring, format='cif') + import requests + assert len(pdbcode) == 4, "%s is not a valid PDB ID." % pdbcode + + fileext = 'cif' if usecif else 'pdb' + request = requests.get('http://www.rcsb.org/pdb/files/%s.%s' % (pdbcode, fileext)) + + if request.status_code == 404 and not usecif: # if not found, try the cif-format version + print 'WARNING: %s.pdb not found in rcsb.org database. Trying %s.cif...' % ( + pdbcode, pdbcode), + retval = from_pdb(pdbcode, usecif=True) + print 'success.' + return retval + + elif request.status_code != 200: + raise ValueError('Failed to download %s.%s from rcsb.org: %s %s' % ( + pdbcode, fileext, request.status_code, request.reason)) + + if usecif: + filestring = request.text + else: + filestring = request.text.encode('ascii') + + mol = read(filestring, format=fileext) mol.name = pdbcode return mol @@ -231,67 +286,14 @@ def from_name(name): Returns: moldesign.Molecule: molecule object """ + from moldesign.interfaces.opsin_interface import name_to_smiles + # TODO: fallback to http://cactus.nci.nih.gov/chemical/structure smi = name_to_smiles(name) mol = from_smiles(smi, name) return mol -@exports -def build_assembly(mol, assembly_name): - """ Create biological assembly using a bioassembly specification. - - This routine builds a biomolecular assembly using the specification from a PDB header (if - present, this data can be found in the "REMARK 350" lines in the PDB file). Assemblies are - author-assigned structures created by copying, translating, and rotating a subset of the - chains in the PDB file. - - See Also: - http://pdb101.rcsb.org/learn/guide-to-understanding-pdb-data/biological-assemblies - - Args: - mol (moldesign.Molecule): Molecule with assembly data (assembly data will be created by the - PDB parser at ``molecule.properties.bioassembly``) - assembly_name (str): name of the biomolecular assembly to build. - - Returns: - mol (moldesign.Molecule): molecule containing the complete assembly - - Raises: - AttributeError: If the molecule does not contain any biomolecular assembly data - KeyError: If the specified assembly is not present - """ - if 'bioassemblies' not in mol.properties: - raise AttributeError('This molecule does not contain any biomolecular assembly data') - try: - asm = mol.properties.bioassemblies[assembly_name] - except KeyError: - raise KeyError(('The specified assembly name ("%s") was not found. The following ' - 'assemblies are present: %s') % - (assembly_name, - ', '.join(mol.properties.bioassemblies.keys()))) - - # Make sure each chain gets a unique name - up to all the letters in the alphabet, anyway - used_chain_names = set() - alpha = iter(string.ascii_uppercase) - - # Create the new molecule by copying, transforming, and renaming the original chains - all_atoms = moldesign.molecules.atomcollections.AtomList() - for i, t in enumerate(asm.transforms): - for chain_name in asm.chains: - chain = mol.chains[chain_name].copy() - chain.transform(t) - - while chain.name in used_chain_names: - chain.name = alpha.next() - used_chain_names.add(chain.name) - chain.pdbname = chain.pdbindex = chain.name - all_atoms.extend(chain.atoms) - newmol = mdt.Molecule(all_atoms, - name="%s (bioassembly %s)" % (mol.name, assembly_name)) - return newmol - - def _get_format(filename, format): """ Determine the requested file format and optional compression library @@ -326,3 +328,26 @@ def _get_format(filename, format): format = suffix return format, compressor + +#################################### +# FILE EXTENSION HANDLERS # +#################################### + +# All extensions MUST be lower case +READERS = {'json': chemjson.reader, + 'pdb': read_pdb, + 'cif': read_mmcif, + 'mmcif': read_mmcif} + +WRITERS = {'json': chemjson.writer} + +PICKLE_EXTENSIONS = set("p pkl pickle mdt".split()) +COMPRESSION = {'gz': gzip.open, + 'gzip': gzip.open, + 'bz2': bz2.BZ2File, + 'bzip2': bz2.BZ2File, + None: open} + +for ext in PICKLE_EXTENSIONS: + READERS[ext] = pkl.load + WRITERS[ext] = functools.partial(pkl.dump, protocol=2) diff --git a/moldesign/helpers/README.md b/moldesign/helpers/README.md new file mode 100644 index 0000000..0cbfa07 --- /dev/null +++ b/moldesign/helpers/README.md @@ -0,0 +1,4 @@ +## Helpers subpackage + +The `moldesign.helpers` subpackage contains molecular data processing +routines for internal MDT use \ No newline at end of file diff --git a/moldesign/helpers/__init__.py b/moldesign/helpers/__init__.py new file mode 100644 index 0000000..9d0eff5 --- /dev/null +++ b/moldesign/helpers/__init__.py @@ -0,0 +1,2 @@ +from .helpers import * +from .pdb import * diff --git a/moldesign/helpers.py b/moldesign/helpers/helpers.py similarity index 99% rename from moldesign/helpers.py rename to moldesign/helpers/helpers.py index 98122e2..ae8ff48 100644 --- a/moldesign/helpers.py +++ b/moldesign/helpers/helpers.py @@ -64,7 +64,7 @@ def get_all_atoms(*objects): List[moldesign.AtomContainer]): objects to take atoms from """ - from . import molecules + from moldesign import molecules atoms = collections.OrderedDict() diff --git a/moldesign/helpers/pdb.py b/moldesign/helpers/pdb.py new file mode 100644 index 0000000..e4b114e --- /dev/null +++ b/moldesign/helpers/pdb.py @@ -0,0 +1,167 @@ +# Copyright 2016 Autodesk Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +""" PDB file parsing utilities + +We don't yet (and hopefully will never need) an internal PDB parser or writer. For now, +routines in this module read and write data that's not necessarily parsed by other implementations. +""" +import collections + +import numpy as np + +BioAssembly = collections.namedtuple('BioAssembly', 'desc chains transforms') + + +def warn_assemblies(mol, assemblies): + """ Print a warning message if the PDB structure contains a biomolecular assembly + """ + + # Don't warn if the only assembly is the asymmetric unit + if len(assemblies) > 1 or len(assemblies.values()[0].transforms) > 1: + print "WARNING: This PDB file contains the following biomolecular assemblies:" + for name, asm in assemblies.iteritems(): + print 'WARNING: Assembly "%s": %d copies of chains %s'%( + name, len(asm.transforms), ', '.join(asm.chains)) + print 'WARNING: Use ``mdt.build_assembly([molecule],[assembly_name])``' \ + ' to build one of the above assemblies' + + +def get_conect_records(pdbfile): + """Parse a PDB file, return CONECT records + + Bond orders are assigned as 1 by default. Repeated CONECT records are interpreted as + higher order bonds. + + Args: + pdbfile (file): file-like object + + Example: + > CONECT 1 2 3 + > CONECT 1 2 + > CONECT 2 1 1 + > CONECT 3 1 + These records are interpreted as a double-bond between atoms 1 and 2 + and a single bond between atoms 1 and 3 + + Note: + This only returns the covalent CONECT records (the first 4 entries) - it doesn't + return salt bridges or hydrogen bonds + + Returns: + dict: CONECT records using serial numbers - + ``{serial1: {serial2:order. serial3:order, }, ...}`` + """ + conect = {} + for line in pdbfile: + fields = line.split() + if len(fields) == 0: continue + if fields[0] != 'CONECT': continue + + atombonds = conect.setdefault(int(fields[1]), {}) + for f in fields[2:6]: # TODO: check the end bound + serial = int(f) + if serial not in atombonds: + atombonds[serial] = 0 + atombonds[serial] += 1 + return conect + + +def get_pdb_assemblies(fileobj): + """Parse a PDB file, return biomolecular assembly specifications + + Args: + fileobj (file-like): File-like object for the PDB file + (this object will be rewound before returning) + + Returns: + Mapping[str, BioAssembly]: dict mapping assembly ids to BioAssembly instances + """ + assemblies = {} + lineiter = iter(fileobj) + while True: # first, search for assembly transformations + line = lineiter.next() + fields = line.split() + + # Conditions that indicate we're past the "REMARK 350" section + if fields[0] in ('ATOM', 'HETATM', 'CONECT'): + break + if fields[0] == 'REMARK' and int(fields[1]) > 350: + break + + # look for start of a assembly transformation, i.e. "REMARK 350 BIOMOLECULE: [name] " + if fields[:3] == 'REMARK 350 BIOMOLECULE:'.split(): + assembly_name = fields[-1] + assemblies[assembly_name] = _read_pdb_assembly(lineiter) + + return assemblies + + +def _read_pdb_assembly(lineiter): + """Helper for get_pdb_assemblies + """ + # First, there's description lines: "REMARK 350 AUTHOR DETERMINED BIOLOGICAL UNIT: OCTAMERIC" + description_lines = [] + line = lineiter.next() + fields = line.split() + while fields[:7] != 'REMARK 350 APPLY THE FOLLOWING TO CHAINS:'.split(): + description_lines.append(line[len('REMARK 350 '):]) + line = lineiter.next() + fields = line.split() + description = (''.join(description_lines)).strip() + + # Next, we get the chains in this assembly: "REMARK 350 APPLY THE FOLLOWING TO CHAINS: C, D" + assert fields[:7] == 'REMARK 350 APPLY THE FOLLOWING TO CHAINS:'.split() + chain_names = [x.rstrip(',') for x in fields[7:]] + while fields[-1][-1] == ',': # deal with multi-line lists of chains + line = lineiter.next() + fields = line.split() + assert fields[2:4] == ['AND', 'CHAINS:'] + chain_names.extend(x.rstrip(',') for x in fields[4:]) + + transforms = [] + while True: # loop over each assembly transformation + # example: "REMARK 350 BIOMT1 1 1.000000 0.000000 0.000000 0.00000 " + t = np.zeros((4, 4)) + t[3, 3] = 1.0 + + for idim in xrange(3): + line = lineiter.next() + fields = line.split() + if idim == 0 and len(fields) == 2: + return BioAssembly(description, chain_names, transforms) + + assert int(fields[3]) == len(transforms)+1 + assert fields[2] == ('BIOMT%d' % (idim+1)) + t[idim, :] = map(float, fields[4:8]) + + transforms.append(t) + + +def assign_biopolymer_bonds(mol): + """ Assign bonds to all standard residues using the PDB chemical component dictionary + + Any unrecognized residues are ignored. + + References: + http://www.wwpdb.org/data/ccd + """ + + for chain in mol.chains: + chain.assign_biopolymer_bonds() + for residue in mol.residues: + try: + residue.assign_template_bonds() + except KeyError: + print ('WARNING: failed to assign bonds for residue %s; use ' + '``residue.assign_distance.bonds`` to guess the topology') % str(residue) \ No newline at end of file diff --git a/moldesign/interfaces/biopython_interface.py b/moldesign/interfaces/biopython_interface.py index 5f297d2..556c0d7 100644 --- a/moldesign/interfaces/biopython_interface.py +++ b/moldesign/interfaces/biopython_interface.py @@ -11,19 +11,51 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -import collections + +import itertools import Bio.PDB +import Bio.PDB.MMCIF2Dict import numpy as np import moldesign as mdt from moldesign import units as u +from moldesign.helpers.pdb import BioAssembly + + +def parse_mmcif(f): + """Parse an mmCIF file (using the Biopython parser), assign bonds, and return a molecule + + Note: + This routine is not currently called by any part of the user-facing API! The + OpenBabel parser appears to give more accurate results for the time being. The + molecules created using this routine will NOT have any bond topology! + + Args: + f (file): file-like object containing the mmCIF file -BioAssembly = collections.namedtuple('BioAssembly', 'desc chains transforms') + Returns: + moldesign.Molecule: parsed molecule + """ + raise NotImplementedError + + # First, get the structure + parser = Bio.PDB.MMCIFParser() + struc = parser.get_structure('no name', f) + mol = biopy_to_mol(struc) + return mol def parse_pdb(f): - """Parse a PDB file (using the Biopython parser), assign bonds, and return a molecule + """Parse a PDB file (using the Biopython parser) and return the basic structure + + Note: + This structure will be missing some key data - most notably bonds, but also + any biomolecular assembly information. Therefore, our default parser combines + this routine with a few other methods to create the final Molecule object + + See also: + moldesign.fileio.read_pdb Args: f (file): file-like object containing the PDB file @@ -38,40 +70,6 @@ def parse_pdb(f): parser = Bio.PDB.PDBParser() struc = parser.get_structure('no name', f) mol = biopy_to_mol(struc) - - # Next, assign standard biopolymer bonds - for chain in mol.chains: - chain.assign_biopolymer_bonds() - for residue in mol.residues: - try: - residue.assign_template_bonds() - except KeyError: - print ('WARNING: failed to assign bonds for residue %s; use ' - '``residue.assign_distance.bonds`` to guess the topology') % str(residue) - - # Get biomolecular assembly info - f.seek(0) - assemblies = get_assemblies(f) - if assemblies: - # Don't warn if the only assembly is the asymmetric unit - if len(assemblies) > 1 or len(assemblies.values()[0].transforms) > 1: - print "WARNING: This PDB file contains the following biomolecular assemblies:" - for name, asm in assemblies.iteritems(): - print 'WARNING: Assembly "%s": %d copies of chains %s' % ( - name, len(asm.transforms), ', '.join(asm.chains)) - print 'WARNING: Use ``mdt.build_assembly([molecule],[assembly_name])``' \ - ' to build one of the above assemblies' - mol.properties.bioassemblies = assemblies - - # Finally, parse the CONECT records - conect_graph = get_conect_records(f) - serials = {atom.pdbindex: atom for atom in mol.atoms} - for atomserial, nbrs in conect_graph.iteritems(): - atom = serials[atomserial] - for nbrserial, order in nbrs.iteritems(): - nbr = serials[nbrserial] - mol.newbond(atom, nbr, order) - return mol @@ -115,100 +113,70 @@ def biopy_to_mol(struc): name=struc.get_full_id()[0]) -def get_conect_records(pdbfile): - """Parse a PDB file, return CONECT records - - Bond orders are assigned as 1 by default. Repeated CONECT records are interpreted as - higher order bonds. +def get_mmcif_assemblies(fileobj): + """Parse an mmCIF file, return biomolecular assembly specifications Args: - pdbfile (file): file-like object - - Example: - > CONECT 1 2 3 - > CONECT 1 2 - > CONECT 2 1 1 - > CONECT 3 1 - These records are interpreted as a double-bond between atoms 1 and 2 - and a single bond between atoms 1 and 3 - - Note: - This only returns the covalent CONECT records (the first 4 entries) - it doesn't - return salt bridges or hydrogen bonds + fileobj (file-like): File-like object for the PDB file + (this object will be rewound before returning) Returns: - dict: CONECT records using serial numbers - - ``{serial1: {serial2:order. serial3:order, }, ...}`` + Mapping[str, BioAssembly]: dict mapping assembly ids to BioAssembly instances """ - conect = {} - for line in pdbfile: - fields = line.split() - if len(fields) == 0: continue - if fields[0] != 'CONECT': continue - - atombonds = conect.setdefault(int(fields[1]), {}) - for f in fields[2:6]: # TODO: check the end bound - serial = int(f) - if serial not in atombonds: - atombonds[serial] = 0 - atombonds[serial] += 1 - return conect - - -def get_assemblies(fileobj): + mmcdata = Bio.PDB.MMCIF2Dict.MMCIF2Dict(fileobj) + fileobj.seek(0) # rewind for future access + + if '_pdbx_struct_assembly.id' not in mmcdata: + return {} # no assemblies present + + # Get assembly metadata + ids = mmcdata['_pdbx_struct_assembly.id'] + details = mmcdata['_pdbx_struct_assembly.details'] + chains = mmcdata['_pdbx_struct_assembly_gen.asym_id_list'] + opers = mmcdata['_pdbx_struct_assembly_gen.oper_expression'] + transform_ids = mmcdata['_pdbx_struct_oper_list.id'] + + # Get matrix transformations + tmat = np.zeros((4, 4)).tolist() + for i in xrange(3): # construct displacement vector + tmat[i][3] = mmcdata['_pdbx_struct_oper_list.vector[%d]' % (i+1)] + for i, j in itertools.product(xrange(0, 3), xrange(0, 3)): # construct rotation matrix + tmat[i][j] = mmcdata['_pdbx_struct_oper_list.matrix[%d][%d]' % (i+1, j+1)] + transforms = _make_transform_dict(tmat, transform_ids) + + # Make sure it's a list + if not isinstance(ids, list): + ids = [ids] + details = [details] + chains = [chains] + opers = [opers] + + # now create the assembly specifications assemblies = {} - lineiter = iter(fileobj) - while True: # first, search for assembly transformations - line = lineiter.next() - fields = line.split() - - # Conditions that indicate we're past the "REMARK 350" section - if fields[0] in ('ATOM', 'HETATM', 'CONECT'): - break - if fields[0] == 'REMARK' and int(fields[1]) > 350: - break - - # look for start of a assembly transformation, i.e. "REMARK 350 BIOMOLECULE: [name] " - if fields[:3] == 'REMARK 350 BIOMOLECULE:'.split(): - assembly_name = fields[-1] - assemblies[assembly_name] = _read_assembly(lineiter) + for id, detail, chainlist, operlist in zip(ids, details, chains, opers): + assert id not in assemblies + transforms = [transforms[i] for i in operlist.split(',')] + assemblies[id] = BioAssembly(detail, chainlist.split(','), transforms) return assemblies -def _read_assembly(lineiter): - - # First, there's description lines: "REMARK 350 AUTHOR DETERMINED BIOLOGICAL UNIT: OCTAMERIC" - description_lines = [] - line = lineiter.next() - fields = line.split() - while fields[:7] != 'REMARK 350 APPLY THE FOLLOWING TO CHAINS:'.split(): - description_lines.append(line[len('REMARK 350 '):]) - line = lineiter.next() - fields = line.split() - description = (''.join(description_lines)).strip() - - # Next, we get the chains in this assembly: "REMARK 350 APPLY THE FOLLOWING TO CHAINS: C, D" - assert fields[:7] == 'REMARK 350 APPLY THE FOLLOWING TO CHAINS:'.split() - chain_names = [x.rstrip(',') for x in fields[7:]] - transforms = [] - - while True: # loop over each assembly transformation - # example: "REMARK 350 BIOMT1 1 1.000000 0.000000 0.000000 0.00000 " - t = np.zeros((4, 4)) - t[3, 3] = 1.0 - - for idim in xrange(3): - line = lineiter.next() - fields = line.split() - if idim == 0 and len(fields) == 2: - return BioAssembly(description, chain_names, transforms) - - assert int(fields[3]) == len(transforms)+1 - assert fields[2] == ('BIOMT%d' % (idim+1)) - t[idim, :] = map(float, fields[4:8]) - - transforms.append(t) +def _make_transform_dict(tmat, transform_ids): + if isinstance(transform_ids, list): + for i, j in itertools.product(xrange(0, 3), xrange(0, 4)): + tmat[i][j] = map(float, tmat[i][j]) + tmat[3][3] = [1.0]*len(transform_ids) + tmat[3][0] = tmat[3][1] = tmat[3][2] = [0.0]*len(transform_ids) + tmat = np.array(tmat) + transforms = {id: tmat[:, :, i] for i, id in enumerate(transform_ids)} + else: + for i, j in itertools.product(xrange(0, 4), xrange(0, 4)): + tmat[i][j] = float(tmat[i][j]) + tmat[3][3] = 1.0 + tmat = np.array(tmat) + transforms = {transform_ids: tmat} + + return transforms diff --git a/moldesign/tools/README.md b/moldesign/tools/README.md new file mode 100644 index 0000000..998b84e --- /dev/null +++ b/moldesign/tools/README.md @@ -0,0 +1,5 @@ +## Tools subpackage + + +The `moldesign.tools` subpackage collects functions for manipulating +and building molecules \ No newline at end of file diff --git a/moldesign/tools/__init__.py b/moldesign/tools/__init__.py new file mode 100644 index 0000000..20f3710 --- /dev/null +++ b/moldesign/tools/__init__.py @@ -0,0 +1,7 @@ +def toplevel(o): + __all__.append(o.__name__) + return o +__all__ = [] + +from .topology import * +from .build import * \ No newline at end of file diff --git a/moldesign/tools/build.py b/moldesign/tools/build.py new file mode 100644 index 0000000..7fcb7ad --- /dev/null +++ b/moldesign/tools/build.py @@ -0,0 +1,81 @@ +# Copyright 2016 Autodesk Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import string + +import moldesign as mdt +import moldesign.molecules + +from moldesign.interfaces.ambertools import build_bdna + +from . import toplevel, __all__ as _pkgall + +_pkgall.append('build_bdna') + + +@toplevel +def build_assembly(mol, assembly_name): + """ Create biological assembly using a bioassembly specification. + + This routine builds a biomolecular assembly using the specification from a PDB header (if + present, this data can be found in the "REMARK 350" lines in the PDB file). Assemblies are + author-assigned structures created by copying, translating, and rotating a subset of the + chains in the PDB file. + + See Also: + http://pdb101.rcsb.org/learn/guide-to-understanding-pdb-data/biological-assemblies + + Args: + mol (moldesign.Molecule): Molecule with assembly data (assembly data will be created by the + PDB parser at ``molecule.properties.bioassembly``) + assembly_name (str OR int): id of the biomolecular assembly to build. + + Returns: + mol (moldesign.Molecule): molecule containing the complete assembly + + Raises: + AttributeError: If the molecule does not contain any biomolecular assembly data + KeyError: If the specified assembly is not present + """ + if isinstance(assembly_name, int): assembly_name = str(assembly_name) + + if 'bioassemblies' not in mol.properties: + raise AttributeError('This molecule does not contain any biomolecular assembly data') + try: + asm = mol.properties.bioassemblies[assembly_name] + except KeyError: + raise KeyError(('The specified assembly name ("%s") was not found. The following ' + 'assemblies are present: %s') % + (assembly_name, + ', '.join(mol.properties.bioassemblies.keys()))) + + # Make sure each chain gets a unique name - up to all the letters in the alphabet, anyway + used_chain_names = set() + alpha = iter(string.ascii_uppercase) + + # Create the new molecule by copying, transforming, and renaming the original chains + all_atoms = moldesign.molecules.atomcollections.AtomList() + for i, t in enumerate(asm.transforms): + for chain_name in asm.chains: + chain = mol.chains[chain_name].copy() + chain.transform(t) + + while chain.name in used_chain_names: + chain.name = alpha.next() + used_chain_names.add(chain.name) + chain.pdbname = chain.pdbindex = chain.name + all_atoms.extend(chain.atoms) + newmol = mdt.Molecule(all_atoms, + name="%s (bioassembly %s)" % (mol.name, assembly_name)) + return newmol \ No newline at end of file diff --git a/moldesign/tools.py b/moldesign/tools/topology.py similarity index 94% rename from moldesign/tools.py rename to moldesign/tools/topology.py index bb3acde..45dac95 100644 --- a/moldesign/tools.py +++ b/moldesign/tools/topology.py @@ -18,22 +18,18 @@ import moldesign as mdt from moldesign import units as u +from . import toplevel, __all__ as _pkgall + from moldesign.interfaces.openbabel import add_hydrogen, guess_bond_orders from moldesign.interfaces.pdbfixer_interface import mutate, add_water from moldesign.interfaces.ambertools import assign_forcefield, parameterize from moldesign.interfaces.ambertools import calc_am1_bcc_charges, calc_gasteiger_charges - -__all__ = ('add_hydrogen guess_bond_orders mutate add_water' - ' assign_forcefield parameterize').split() - - -def exports(o): - __all__.append(o.__name__) - return o +_pkgall.extend(('add_hydrogen guess_bond_orders mutate add_water' + ' assign_forcefield parameterize calc_am1_bcc_charges calc_gasteiger_charges').split()) -@exports +@toplevel def assign_formal_charges(mol, ignore_nonzero=True): """ Assign formal charges to C,N,O,F atoms in this molecule based on valence @@ -111,7 +107,7 @@ def fail(): # reset all charges before raising exception mol.charge += newcharge * u.q_e - atom.formal_charge atom.formal_charge = newcharge * u.q_e -@exports +@toplevel def clean_pdb(mol): """ Attempt to clean up a molecule from PDB format that may be missing data diff --git a/moldesign/viewer/viewer3d.py b/moldesign/viewer/viewer3d.py index 92f4aab..5fa7771 100644 --- a/moldesign/viewer/viewer3d.py +++ b/moldesign/viewer/viewer3d.py @@ -113,20 +113,13 @@ def autostyle(self, render=True): self.stick(atoms=stick_atoms, render=False) # Deal with unbonded atoms (they only show up in VDW rep) - if self.mol.num_atoms > 1000: - print 'WARN: large structure; waters not shown by default.' - lone = [atom for atom in self.mol.atoms if - atom.num_bonds == 0 and atom.residue.type != 'water'] - self.hide(atoms=[atom for atom in self.mol.atoms if atom.num_bonds == 0 and - atom.residue.type == 'water']) - else: - self.show_unbonded() - - if render: self.render() + if self.mol.num_atoms < 1000: + lone = [atom for atom in self.mol.atoms if atom.num_bonds == 0] + if lone: + self.vdw(atoms=lone, render=False, radius=0.5) - def show_unbonded(self, radius=0.5): - lone = [atom for atom in self.mol.atoms if atom.num_bonds == 0] - if lone: self.vdw(atoms=lone, render=False, radius=radius) + if render: + self.render() @staticmethod def _atoms_to_json(atomlist): From 83c25d082cff6e5ad1fe703d042f369efae03ba0 Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Mon, 15 Aug 2016 11:33:17 -0700 Subject: [PATCH 15/64] Improve residue and HETATM handling. - PDB files produced by OpenBabel (the default) now have HetAtoms and the correct serial numbers for atoms - Add "ion" residue types and handle their formal charge assignment - Add residue.is_standard_residue for the purposes of determining HETATM records - More flexible residue.next_residue, residue.prev_residue methods can handle some non-standard amino acids and DNA bases - Add chain-level @properties "type" (classifies the biopolymer type) and properties to find polymer termini --- moldesign/data.py | 40 +++++++-- moldesign/fileio.py | 10 ++- moldesign/interfaces/openbabel.py | 4 +- moldesign/molecules/biounits.py | 136 ++++++++++++++++++++++++------ moldesign/tools/topology.py | 69 ++++++--------- 5 files changed, 183 insertions(+), 76 deletions(-) diff --git a/moldesign/data.py b/moldesign/data.py index 60ec0f6..a4ebea1 100644 --- a/moldesign/data.py +++ b/moldesign/data.py @@ -71,21 +71,21 @@ "HO5' HO3'").split()), 'protein': set("N CA C O OXT H HA HA2 HA3 H2 H3".split())} -RESTYPES = dict( - protein=set(('ALA ARG ASN ASP ASX CYS GLU GLN GLX GLY HIS ILE LEU LYS MET ' + - 'PHE PRO SER THR TRP TYR VAL').split()), - water={'HOH', 'H2O'}, - solvent=set(), - dna=set(DBASES), - rna=set(RBASES), - unknown=set()) - RESIDUE_ONE_LETTER = dict(ALA="A", ASX="B", CYS="C", ASP="D", GLU="E", PHE="F", GLY="G", HIS="H", ILE="I", LYS="K", LEU="L", MET="M", ASN="N", PRO="P", GLN="Q", ARG="R", SER="S", THR="T", VAL="V", TRP="W", XAA="X", TYR="Y", GLX="Z") +BIOPOLYMER_TYPES = set('dna rna protein'.split()) + +CHAIN_MONOMER_NAMES = {'dna': 'dna base', + 'protein': 'amino acid', + 'unkonwn': 'small molecule', + 'water': 'water', + 'solvent': 'solvent', + 'ion': 'ion'} + # This is a very big dict, so we load it as a compressed database _bondfilename = os.path.join(PACKAGEPATH, '_static_data/residue_bonds') RESIDUE_BONDS = utils.CompressedJsonDbm(_bondfilename, 'r', dbm=utils.ReadOnlyDumb) @@ -126,6 +126,28 @@ 'T': 'Thymine', 'U': 'Uracil'} +IONS = {'NA': 'Na+', + 'K': 'K+', + 'MG': 'Mg+2', + 'CA': 'Ca+2', + 'F': 'F-', + 'Cl': 'Cl-', + 'Br': 'Br-', + 'I': 'I-'} + +RESTYPES = dict( + protein=set(AMINO_NAMES), + water={'HOH', 'H2O'}, + solvent=set(), + dna=set(DBASES), + rna=set(RBASES), + unknown=set(), + ions=set(IONS)) + +RESIDUE_TYPES = {} +for typename, namelist in RESTYPES.iteritems(): + for resname in namelist: RESIDUE_TYPES[resname] = typename + RESIDUE_DESCRIPTIONS = dict(AMINO_NAMES) for base, name in AMINO_NAMES.iteritems(): RESIDUE_DESCRIPTIONS['N' + name] = name + ' (N-terminal)' diff --git a/moldesign/fileio.py b/moldesign/fileio.py index bc6b77e..ff09b3b 100644 --- a/moldesign/fileio.py +++ b/moldesign/fileio.py @@ -101,7 +101,15 @@ def write(obj, filename=None, format=None, mode='w'): Returns: str: if filename is none, return the output file as a string (otherwise returns ``None``) """ - # TODO: handle writing and return file-like objects + # TODO: handle writing and returning file-like objects instead of strings + + # lets users call mdt.write(obj, 'pdb') and get a string (without needing the "format" keyword + if (format is None and + filename is not None and + len(filename) < 5 and + '.' not in filename): + filename, format = None, filename + format, compression = _get_format(filename, format) # First, create an object to write to (either file handle or file-like buffer) diff --git a/moldesign/interfaces/openbabel.py b/moldesign/interfaces/openbabel.py index 2c343ae..aec5690 100644 --- a/moldesign/interfaces/openbabel.py +++ b/moldesign/interfaces/openbabel.py @@ -193,7 +193,7 @@ def mol_to_pybel(mdtmol): obatom = obmol.NewAtom() obatom.SetAtomicNum(atom.atnum) atommap[atom] = obatom - pos = atom.position.to('angstrom')._magnitude + pos = atom.position.value_in(u.angstrom) obatom.SetVector(*pos) if atom.residue and atom.residue not in resmap: @@ -206,7 +206,9 @@ def mol_to_pybel(mdtmol): obres = resmap[atom.residue] obres.AddAtom(obatom) + obres.SetHetAtom(obatom, not atom.residue.is_standard_residue) obres.SetAtomID(obatom, atom.name) + obres.SetSerialNum(obatom, atom.pdbindex) for atom in mdtmol.bond_graph: a1 = atommap[atom] diff --git a/moldesign/molecules/biounits.py b/moldesign/molecules/biounits.py index c62862f..f8d353e 100644 --- a/moldesign/molecules/biounits.py +++ b/moldesign/molecules/biounits.py @@ -11,6 +11,8 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. +import collections + import moldesign as mdt from moldesign import data, utils @@ -276,24 +278,23 @@ def is_monomer(self): @property def _is_ending_residue(self): - """bool: this is the last residue in the chain""" - for otherres in self.molecule.residues[self.index+1:]: - if otherres.chain != self.chain: - return True - elif otherres.type == self.type: - return False - return True + """bool: this is the last residue in a polymer""" + try: + nextres = self.next_residue + except StopIteration: + return True + else: + return False @property def _is_starting_residue(self): - """bool: this is the first residue of its type in the chain""" - for otherres in self.molecule.residues[self.index-1::-1]: - if otherres.chain != self.chain: - return True - elif otherres.type == self.type: - return False - - return True + """bool: this is the first residue in a polymer""" + try: + prevres = self.prev_residue + except StopIteration: + return True + else: + return False def assign_template_bonds(self): """Assign bonds from bioresidue templates. @@ -351,9 +352,9 @@ def next_residue(self): NotImplementedError: If we don't know how to deal with this type of biopolymer StopIteration: If there isn't a next residue (i.e. it's a 3'- or C-terminus) """ - if self.type == 'protein': + if self.chain.type == 'protein': return self._get_neighbor('C', 'C-terminus') - elif self.type == 'dna': + elif self.chain.type == 'dna': return self._get_neighbor("O3'", "3' end") else: raise NotImplementedError('We only deal with dna and amino acids right now') @@ -367,9 +368,9 @@ def prev_residue(self): NotImplementedError: If we don't know how to deal with this type of biopolymer StopIteration: If there isn't a previous residue (i.e. it's a 5'- or N-terminus) """ - if self.type == 'protein': + if self.chain.type == 'protein': return self._get_neighbor('N', 'N-terminus') - elif self.type == 'dna': + elif self.chain.type == 'dna': return self._get_neighbor("P", "5' end") else: raise NotImplementedError('We only deal with dna and amino acids right now') @@ -396,10 +397,7 @@ def resname(self, val): @property def type(self): """str: Classification of the residue (protein, solvent, dna, water, unknown)""" - for restype, names in data.RESTYPES.iteritems(): - if self.pdbname in names: - return restype - return 'unknown' + return data.RESIDUE_TYPES.get(self.resname, 'unknown') @property def code(self): @@ -439,6 +437,23 @@ def sidechain(self): self._sidechain = [atom for atom in self if atom not in bb] return self._sidechain + @property + def is_standard_residue(self): + """ bool: this residue is a "standard residue" for the purposes of a PDB entry. + + In PDB files, this will be stored using 'ATOM' if this is a standard residue + and 'HETATM' records if not. + + Note: + We currently define "standard" residues as those whose 3 letter residue code appears in + the ``moldesign.data.RESIDUE_DESCRIPTIONS`` dictionary. Although this seems to work + well, we'd welcome a PR with a less hacky method. + + References: + PDB format guide: http://www.wwpdb.org/documentation/file-format + """ + return self.resname in mdt.data.RESIDUE_DESCRIPTIONS + def __str__(self): return 'Residue %s (index %d, chain %s)' % (self.name, self.index, self.chain.name) @@ -479,7 +494,6 @@ def markdown_summary(self): return '
    '.join(lines) - @toplevel class Chain(Entity): """ Biomolecular chain class - its children are almost always residues. @@ -493,6 +507,52 @@ def __init__(self, pdbname=None, **kwargs): super(Chain, self).__init__(pdbname=pdbname, **kwargs) if self.name is None: self.name = self.pdbname if self.pdbindex is not None: self.pdbindex = self.pdbname + self._type = None + + self._5p_end = self._3p_end = self._n_terminal = self._c_terminal = None + + @property + def type(self): + """ str: the type of chain - protein, DNA, solvent, etc. + + This field returns the type of chain, classified by the following rules: + 1) If the chain contains only one type of residue, it is given that classification + (so a chain containing only ions has type "ion" + 2) If the chain contains a biopolymer + ligands and solvent, it is classified as a + biopolymer (i.e. 'protein', 'dna', or 'rna'). This is the most common case with .pdb + files from the PDB. + 3) If the chain contains multiple biopolymer types, it will be given a hybrid classification + (e.g. 'dna/rna', 'protein/dna') - this is rare! + 4) If it contains multiple kinds of non-biopolymer residues, it will be called "solvent" + (if all non-bio residues are water/solvent/ion) or given a hybrid name as in 3) + """ + if self._type is None: + + counts = collections.Counter(x.type for x in self.residues) + unique_types = sum(bool(v) for v in counts.itervalues()) + if unique_types == 1: + if self.num_residues == 1: + self._type = data.CHAIN_MONOMER_NAMES[self.residues[0].type] + else: + self._type = self.residues[0].type + + else: + polymer_types = sum(bool(counts[t]) for t in data.BIOPOLYMER_TYPES) + if polymer_types == 1: # the most common case - a polymer + solvent/ligands + for residue in self.residues: + if residue.type in data.BIOPOLYMER_TYPES: break + else: + assert False, "No biopolymer found but polymer_types==1" + self._type = residue.type + + elif polymer_types > 1: # for rare cases, e.g. "DNA/RNA/PROTEIN" + self._type = '/'.join(k for k in data.BIOPOLYMER_TYPES if counts[k]) + elif polymer_types == 0: + if counts['unknown'] > 0: # some molecule + solvent + self._type = '/'.join(k for k in counts if counts[k]) + else: # just solvent + self._type = 'solvent' + return self._type def to_json(self): js = mdt.chemjson.jsonify(self, 'index name pdbindex'.split()) @@ -518,6 +578,34 @@ def add(self, residue, **kwargs): return super(Chain, self).add(residue, **kwargs) + def _get_chain_end(self, restype, selfattr, test): + currval = getattr(self, selfattr) + if currval is None or not getattr(currval, test): + for residue in self.residues: + if residue.type != restype: + continue + if getattr(residue, test): + setattr(self, selfattr, residue) + break + return getattr(self, selfattr) + + @property + def c_terminal(self): + return self._get_chain_end('protein', '_c_terminal', 'is_c_terminal') + + @property + def n_terminal(self): + return self._get_chain_end('protein', '_n_terminal', 'is_n_terminal') + + @property + def fiveprime_end(self): + return self._get_chain_end('dna', '_5p_end', 'is_5prime_end') + + @property + def threeprime_end(self): + return self._get_chain_end('dna', '_3p_end', 'is_3prime_end') + + def assign_biopolymer_bonds(self): """Connect bonds between residues in this chain. diff --git a/moldesign/tools/topology.py b/moldesign/tools/topology.py index 45dac95..3775f3e 100644 --- a/moldesign/tools/topology.py +++ b/moldesign/tools/topology.py @@ -28,6 +28,21 @@ _pkgall.extend(('add_hydrogen guess_bond_orders mutate add_water' ' assign_forcefield parameterize calc_am1_bcc_charges calc_gasteiger_charges').split()) +ATNUM_VALENCE_CHARGE = {6: {3: -1, 4: 0}, + 7: {2: -1, 3: 0, 4: 1}, + 8: {1: -1, 2: 0, 3: 1}, + 9: {1: 0, 2: 1}} + +ION_CHARGE = {1: 1, # H + 11: 1, # Na+ + 19: 1, # K+ + 12: 2, # Mg 2+ + 20: 2, # Ca 2+ + 9: -1, # F- + 17: -1, # Cl- + 35: -1, # Br- + 53: -1} # I- + @toplevel def assign_formal_charges(mol, ignore_nonzero=True): @@ -51,57 +66,29 @@ def assign_formal_charges(mol, ignore_nonzero=True): """ from moldesign.exceptions import UnhandledValenceError + # TODO: scrape formal charge data from the PDB chem comp dictionary + # cache these values in case we fail to assign charges totalcharge = mol.charge oldcharges = [atom.formal_charge for atom in mol.atoms] - def fail(): # reset all charges before raising exception - for oldcharge, a in zip(oldcharges, mol.atoms): - a.oldcharge = oldcharge - mol.charge = totalcharge - raise UnhandledValenceError(atom) - for atom in mol.atoms: - if ignore_nonzero and atom.formal_charge != 0: continue + if ignore_nonzero and atom.formal_charge != 0: + continue v = atom.valence newcharge = None - if atom.atnum == 6: - if v == 3: - newcharge = -1 - elif v == 4: - newcharge = 0 - else: - fail() - - elif atom.atnum == 7: - if v == 2: - newcharge = -1 - elif v == 3: - newcharge = 0 - elif v == 4: - newcharge = 1 - else: - fail() - - elif atom.atnum == 8: - if v == 1: - newcharge = -1 - elif v == 2: - newcharge = 0 - elif v == 3: - newcharge = 1 - else: - fail() - - elif atom.atnum == 9: - if v == 1: - newcharge = 0 - elif v == 2: - newcharge = 1 + if atom.atnum in ATNUM_VALENCE_CHARGE: + if v in ATNUM_VALENCE_CHARGE[atom.atnum]: + newcharge = ATNUM_VALENCE_CHARGE[atom.atnum][v] else: - fail() + for oldcharge, a in zip(oldcharges, mol.atoms): + a.oldcharge = oldcharge + mol.charge = totalcharge + raise UnhandledValenceError(atom) + elif atom in ION_CHARGE and v == 0: + newcharge = ION_CHARGE[atom.atnum] if newcharge is not None: mol.charge += newcharge * u.q_e - atom.formal_charge From a46af3ccd2a96a2a4a4642dba95659defb442624 Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Mon, 15 Aug 2016 14:08:45 -0700 Subject: [PATCH 16/64] Cleanup from recent changes --- moldesign/interfaces/ambertools.py | 2 +- moldesign/interfaces/biopython_interface.py | 22 +- moldesign/interfaces/openbabel.py | 5 +- moldesign/interfaces/opsin_interface.py | 6 +- moldesign/molecules/__init__.py | 2 + moldesign/molecules/biounits.py | 497 -------------------- 6 files changed, 21 insertions(+), 513 deletions(-) diff --git a/moldesign/interfaces/ambertools.py b/moldesign/interfaces/ambertools.py index bbffb5e..d855075 100644 --- a/moldesign/interfaces/ambertools.py +++ b/moldesign/interfaces/ambertools.py @@ -88,7 +88,7 @@ def _antechamber_calc_charges(mol, ambname, chargename, kwargs): charge = utils.if_not_none(mol.charge, 0) command = 'antechamber -fi pdb -i mol.pdb -fo mol2 -o out.mol2 -c %s -an n'%ambname if charge != 0: - command += ' -nc %d'%charge + command += ' -nc %d'%charge.value_in(u.q_e) def finish_job(job): """Callback to complete the job""" diff --git a/moldesign/interfaces/biopython_interface.py b/moldesign/interfaces/biopython_interface.py index 556c0d7..cb61422 100644 --- a/moldesign/interfaces/biopython_interface.py +++ b/moldesign/interfaces/biopython_interface.py @@ -24,7 +24,7 @@ def parse_mmcif(f): - """Parse an mmCIF file (using the Biopython parser), assign bonds, and return a molecule + """Parse an mmCIF file (using the Biopython parser) and return a molecule Note: This routine is not currently called by any part of the user-facing API! The @@ -37,13 +37,7 @@ def parse_mmcif(f): Returns: moldesign.Molecule: parsed molecule """ - raise NotImplementedError - - # First, get the structure - parser = Bio.PDB.MMCIFParser() - struc = parser.get_structure('no name', f) - mol = biopy_to_mol(struc) - return mol + return _parse_file(f, Bio.PDB.MMCIFParser) def parse_pdb(f): @@ -66,8 +60,11 @@ def parse_pdb(f): # TODO: this needs to handle strings and streams # TODO: deal with alternate locations - # First, get the structure - parser = Bio.PDB.PDBParser() + return _parse_file(f, Bio.PDB.PDBParser) + + +def _parse_file(f, parser_type): + parser = parser_type() struc = parser.get_structure('no name', f) mol = biopy_to_mol(struc) return mol @@ -75,7 +72,10 @@ def parse_pdb(f): def biopy_to_mol(struc): """Convert a biopython PDB structure to an MDT molecule. - Because Biopython doesn't assign bonds, assign connectivity using templates. + + Note: + Biopython doesn't deal with bond data, so no bonds will be present + in the Molecule Args: struc (Bio.PDB.Structure.Structure): Biopython PDB structure to convert diff --git a/moldesign/interfaces/openbabel.py b/moldesign/interfaces/openbabel.py index aec5690..42e4f02 100644 --- a/moldesign/interfaces/openbabel.py +++ b/moldesign/interfaces/openbabel.py @@ -30,7 +30,6 @@ import moldesign as mdt from moldesign.compute.runsremotely import runsremotely import moldesign.molecules.atoms -from moldesign.molecules import biounits from moldesign import units as u @@ -281,7 +280,7 @@ def pybel_to_mol(pbmol, atom_names=True, **kwargs): chain_id = backup_chain_names.pop() print 'WARNING: assigned name %s to unnamed chain object @ %s' % ( chain_id, hex(chain_id_num)) - chn = biounits.Chain(pdbname=str(chain_id)) + chn = mdt.Chain(pdbname=str(chain_id)) newchains[chain_id_num] = chn else: chn = newchains[chain_id_num] @@ -289,7 +288,7 @@ def pybel_to_mol(pbmol, atom_names=True, **kwargs): if residx not in newresidues: # Create new residue pdb_idx = obres.GetNum() - res = biounits.Residue(pdbname=resname, + res = mdt.Residue(pdbname=resname, pdbindex=pdb_idx) newresidues[residx] = res chn.add(res) diff --git a/moldesign/interfaces/opsin_interface.py b/moldesign/interfaces/opsin_interface.py index 8b89e8a..1dc0e0f 100644 --- a/moldesign/interfaces/opsin_interface.py +++ b/moldesign/interfaces/opsin_interface.py @@ -29,4 +29,8 @@ def name_to_smiles(name, name="opsin, %s" % name) mdt.uibase.display_log(job.get_display_object(), "opsin, %s"%name) job.wait() - return job.get_output('output.txt').read().strip() + smistring = job.get_output('output.txt').read().strip() + if not smistring: + raise ValueError('Could not parse chemical name "%s"' % name) + else: + return smistring diff --git a/moldesign/molecules/__init__.py b/moldesign/molecules/__init__.py index 8b08af2..b4ab73f 100644 --- a/moldesign/molecules/__init__.py +++ b/moldesign/molecules/__init__.py @@ -9,5 +9,7 @@ def toplevel(o): from .bonds import * from .atoms import * from .biounits import * +from .residue import * +from .chain import * from .molecule import * from .trajectory import * diff --git a/moldesign/molecules/biounits.py b/moldesign/molecules/biounits.py index f8d353e..4a8798e 100644 --- a/moldesign/molecules/biounits.py +++ b/moldesign/molecules/biounits.py @@ -170,500 +170,3 @@ class Instance(Entity): def __str__(self): return "biounit container (chains: %s) for molecule %s" % (', '.join(self.keys()), self.molecule.name) - -@toplevel -class Residue(Entity): - """ A biomolecular residue - most often an amino acid, a nucleic base, or a solvent - molecule. In PDB structures, also often refers to non-biochemical molecules. - - Its children are almost always residues. - - Attributes: - parent (mdt.Molecule): the molecule this residue belongs to - chain (Chain): the chain this residue belongs to - """ - - def copy(self): - newatoms = super(Residue, self).copy() - return newatoms[0].residue - copy.__doc__ = Entity.copy.__doc__ - - def to_json(self): - js = mdt.chemjson.jsonify(self, 'index resname name pdbindex'.split()) - js['chain'] = self.chain.index - js['atoms'] = [atom.index for atom in self.atoms] - return js - - @utils.args_from(Entity) - def __init__(self, **kwargs): - """ Initialization - Args: - **kwargs (): - """ - self.chain = kwargs.get('chain', None) - super(Residue, self).__init__(**kwargs) - if self.index is None and self.molecule is not None: - self.index = self.molecule.residues.index(self) - self.chainindex = None - self._backbone = None - self._sidechain = None - self._template_name = None - if self.name is None: self.name = self.pdbname + str(self.pdbindex) - - def add(self, atom, key=None): - """Deals with atom name clashes within a residue - common for small molecules""" - if atom.residue is not None: - assert atom.residue is self, 'Atom already assigned to a residue' - atom.residue = self - if atom.chain is None: - atom.chain = self.chain - else: - assert atom.chain == self.chain, "Atom's chain does not match residue's chain" - - if key is not None or atom.name not in self: - return super(Residue, self).add(atom, key=key) - else: - return super(Residue, self).add(atom, key='%s%s' % (atom.name, len(self))) - add.__doc__ = Entity.__doc__ - - @property - def is_n_terminal(self): - """bool: this is the last residue in a peptide - - Raises: - ValueError: if this residue is not an amino acid - """ - if self.type != 'protein': - raise ValueError('%s is not a recognized peptide monomer' % self) - return self._is_starting_residue - - @property - def is_c_terminal(self): - """bool: this is the first residue in a peptide - - Raises: - ValueError: if this residue is not an amino acid - """ - if self.type != 'protein': - raise ValueError('%s is not a recognized peptide monomer' % self) - return self._is_ending_residue - - @property - def is_5prime_end(self): - """bool: this is the first base in a strand - - Raises: - ValueError: if this residue is not a DNA base - """ - if self.type != 'dna': - raise ValueError('%s is not a recognized nucleic acid monomer' % self) - return self._is_starting_residue - - @property - def is_3prime_end(self): - """bool: this is the last base in a strand - - Raises: - ValueError: if this residue is not a DNA base - """ - if self.type != 'dna': - raise ValueError('%s is not a recognized nucleic acid monomer' % self) - return self._is_ending_residue - - @property - def is_monomer(self): - """bool: this residue is not part of a biopolymer - """ - return self._is_ending_residue and self._is_starting_residue - - @property - def _is_ending_residue(self): - """bool: this is the last residue in a polymer""" - try: - nextres = self.next_residue - except StopIteration: - return True - else: - return False - - @property - def _is_starting_residue(self): - """bool: this is the first residue in a polymer""" - try: - prevres = self.prev_residue - except StopIteration: - return True - else: - return False - - def assign_template_bonds(self): - """Assign bonds from bioresidue templates. - - Only assigns bonds that are internal to this residue (does not connect different residues). - The topologies here assume pH7.4 and may need to be corrected for other pHs - - See Also: - :ref:`moldesign.Chain.assign_biopolymer_bonds` - - Raises: - ValueError: if ``residue.resname`` is not in bioresidue templates - KeyError: if an atom in this residue is not recognized """ - try: - resname = self.resname - if self.type == 'protein': - if self.is_n_terminal: - resname = self.resname + '_LSN3' # the protonated form (with NH3+ on the end) - elif self.is_c_terminal: - resname = self.resname + '_LEO2H' # deprotonated form (COO-) - elif self.is_monomer: - resname = self.resname + '_LFZW' # free zwitterion form - - bonds_by_name = data.RESIDUE_BONDS[resname] - self._template_name = resname - except KeyError: - if len(self) == 1: - print 'INFO: no bonds assigned to residue %s' % self - return - else: - raise ValueError("No bonding template for residue '%s'" % resname) - - # intra-residue bonds - bond_graph = {atom: {} for atom in self} - for atom in self: - for nbrname, order in bonds_by_name.get(atom.name, {}).iteritems(): - try: - nbr = self[nbrname] - except KeyError: # missing atom in this structure is normal (often hydrogen) - pass - else: - bond_graph[atom][nbr] = bond_graph[nbr][atom] = order - - # copy bonds into the right structure (do this last to avoid mangling the graph) - for atom in bond_graph: - atom.bond_graph.update(bond_graph[atom]) - - @property - def next_residue(self): - """Residue: - The next residue in the chain (in the C-direction for proteins, 3' - direction for nucleic acids) - - Raises: - NotImplementedError: If we don't know how to deal with this type of biopolymer - StopIteration: If there isn't a next residue (i.e. it's a 3'- or C-terminus) - """ - if self.chain.type == 'protein': - return self._get_neighbor('C', 'C-terminus') - elif self.chain.type == 'dna': - return self._get_neighbor("O3'", "3' end") - else: - raise NotImplementedError('We only deal with dna and amino acids right now') - - @property - def prev_residue(self): - """Residue: The next residue in the chain (in the N-direction for proteins, 5' direction for - nucleic acids) - - Raises: - NotImplementedError: If we don't know how to deal with this type of biopolymer - StopIteration: If there isn't a previous residue (i.e. it's a 5'- or N-terminus) - """ - if self.chain.type == 'protein': - return self._get_neighbor('N', 'N-terminus') - elif self.chain.type == 'dna': - return self._get_neighbor("P", "5' end") - else: - raise NotImplementedError('We only deal with dna and amino acids right now') - - def _get_neighbor(self, atomname, name): - """Return the first residue found that's bound to the passed atom name - """ - conn_atom = self[atomname] - for nbr in conn_atom.bond_graph: - if nbr.residue is not self: - return nbr.residue - else: - raise StopIteration('%s reached' % name) - - @property - def resname(self): - """str: Synonym for pdbname""" - return self.pdbname - - @resname.setter - def resname(self, val): - self.pdbname = val - - @property - def type(self): - """str: Classification of the residue (protein, solvent, dna, water, unknown)""" - return data.RESIDUE_TYPES.get(self.resname, 'unknown') - - @property - def code(self): - """str: one-letter amino acid code or two letter nucleic acid code, or '?' otherwise""" - return data.RESIDUE_ONE_LETTER.get(self.pdbname, '?') - - @property - def atomnames(self): - """Residue: synonym for ```self``` for for the sake of readability: - ```molecule.chains['A'].residues[123].atomnames['CA']``` - """ - return self - - @property - def backbone(self): - """ AtomList: all backbone atoms for nucleic and protein residues - (indentified using PDB names); returns None for other residue types - """ - if self._backbone is None: - if self.type not in data.BACKBONES: - return None - self._backbone = AtomList() - for name in data.BACKBONES[self.type]: - try: self._backbone.append(self[name]) - except KeyError: pass - return self._backbone - - @property - def sidechain(self): - """ AtomList: all sidechain atoms for nucleic and protein residues - (defined as non-backbone atoms); returns None for other residue types - """ - if self._sidechain is None: - if self.backbone is None: - return None - bb = set(self.backbone) - self._sidechain = [atom for atom in self if atom not in bb] - return self._sidechain - - @property - def is_standard_residue(self): - """ bool: this residue is a "standard residue" for the purposes of a PDB entry. - - In PDB files, this will be stored using 'ATOM' if this is a standard residue - and 'HETATM' records if not. - - Note: - We currently define "standard" residues as those whose 3 letter residue code appears in - the ``moldesign.data.RESIDUE_DESCRIPTIONS`` dictionary. Although this seems to work - well, we'd welcome a PR with a less hacky method. - - References: - PDB format guide: http://www.wwpdb.org/documentation/file-format - """ - return self.resname in mdt.data.RESIDUE_DESCRIPTIONS - - def __str__(self): - return 'Residue %s (index %d, chain %s)' % (self.name, self.index, - self.chain.name) - - def _repr_markdown_(self): - return self.markdown_summary() - - def markdown_summary(self): - """ Markdown-formatted information about this residue - - Returns: - str: markdown-formatted string - """ - if self.molecule is None: - lines = ["

    Residue %s

    " % self.name] - else: - lines = ["

    Residue %s (index %d)

    " % (self.name, self.index)] - - if self.type == 'protein': - lines.append('**Residue codes**: %s / %s' % (self.resname, self.code)) - else: - lines.append("**Residue code**: %s" % self.resname) - lines.append('**Type**: %s' % self.type) - if self.resname in data.RESIDUE_DESCRIPTIONS: - lines.append('**Description**: %s'%data.RESIDUE_DESCRIPTIONS[self.resname]) - - lines.append('**

    Chain:** %s' % self.chain.name) - lines.append('**Sequence number**: %d' % self.pdbindex) - if self.molecule is not None: - lines.append("**Molecule**: %s" % self.molecule.name) - - lines.append("**

    Number of atoms**: %s" % self.num_atoms) - if self.backbone: - lines.append("**Backbone atoms:** %s" % ', '.join(x.name for x in self.backbone)) - lines.append("**Sidechain atoms:** %s" % ', '.join(x.name for x in self.sidechain)) - else: - lines.append("**Atom:** %s" % ', '.join(x.name for x in self.atoms)) - - return '
    '.join(lines) - -@toplevel -class Chain(Entity): - """ Biomolecular chain class - its children are almost always residues. - - Attributes: - parent (mdt.Molecule): the molecule this residue belongs to - chain (Chain): the chain this residue belongs to - """ - @utils.args_from(Entity) - def __init__(self, pdbname=None, **kwargs): - super(Chain, self).__init__(pdbname=pdbname, **kwargs) - if self.name is None: self.name = self.pdbname - if self.pdbindex is not None: self.pdbindex = self.pdbname - self._type = None - - self._5p_end = self._3p_end = self._n_terminal = self._c_terminal = None - - @property - def type(self): - """ str: the type of chain - protein, DNA, solvent, etc. - - This field returns the type of chain, classified by the following rules: - 1) If the chain contains only one type of residue, it is given that classification - (so a chain containing only ions has type "ion" - 2) If the chain contains a biopolymer + ligands and solvent, it is classified as a - biopolymer (i.e. 'protein', 'dna', or 'rna'). This is the most common case with .pdb - files from the PDB. - 3) If the chain contains multiple biopolymer types, it will be given a hybrid classification - (e.g. 'dna/rna', 'protein/dna') - this is rare! - 4) If it contains multiple kinds of non-biopolymer residues, it will be called "solvent" - (if all non-bio residues are water/solvent/ion) or given a hybrid name as in 3) - """ - if self._type is None: - - counts = collections.Counter(x.type for x in self.residues) - unique_types = sum(bool(v) for v in counts.itervalues()) - if unique_types == 1: - if self.num_residues == 1: - self._type = data.CHAIN_MONOMER_NAMES[self.residues[0].type] - else: - self._type = self.residues[0].type - - else: - polymer_types = sum(bool(counts[t]) for t in data.BIOPOLYMER_TYPES) - if polymer_types == 1: # the most common case - a polymer + solvent/ligands - for residue in self.residues: - if residue.type in data.BIOPOLYMER_TYPES: break - else: - assert False, "No biopolymer found but polymer_types==1" - self._type = residue.type - - elif polymer_types > 1: # for rare cases, e.g. "DNA/RNA/PROTEIN" - self._type = '/'.join(k for k in data.BIOPOLYMER_TYPES if counts[k]) - elif polymer_types == 0: - if counts['unknown'] > 0: # some molecule + solvent - self._type = '/'.join(k for k in counts if counts[k]) - else: # just solvent - self._type = 'solvent' - return self._type - - def to_json(self): - js = mdt.chemjson.jsonify(self, 'index name pdbindex'.split()) - js['residues'] = [res.index for res in self.residues] - return js - - def copy(self): - newatoms = super(Chain, self).copy() - return newatoms[0].chain - copy.__doc__ = Entity.copy.__doc__ - - @property - def residues(self): - """Chain: synonym for 'self' to enhance readability, - e.g. ``molecule.chains['A'].residue[123]``""" - return self - - def add(self, residue, **kwargs): - if residue.chain is None: - residue.chain = self - else: - assert residue.chain is self, "Residue is not a member of this chain" - - return super(Chain, self).add(residue, **kwargs) - - def _get_chain_end(self, restype, selfattr, test): - currval = getattr(self, selfattr) - if currval is None or not getattr(currval, test): - for residue in self.residues: - if residue.type != restype: - continue - if getattr(residue, test): - setattr(self, selfattr, residue) - break - return getattr(self, selfattr) - - @property - def c_terminal(self): - return self._get_chain_end('protein', '_c_terminal', 'is_c_terminal') - - @property - def n_terminal(self): - return self._get_chain_end('protein', '_n_terminal', 'is_n_terminal') - - @property - def fiveprime_end(self): - return self._get_chain_end('dna', '_5p_end', 'is_5prime_end') - - @property - def threeprime_end(self): - return self._get_chain_end('dna', '_3p_end', 'is_3prime_end') - - - def assign_biopolymer_bonds(self): - """Connect bonds between residues in this chain. - - See Also: - :ref:`moldesign.Residue.assign_template_bonds` - - Raises: - ValueError: if ``residue.resname`` is not in bioresidue templates - KeyError: if an atom in this residue is not recognized """ - residues = list(self) - residues.sort(key=lambda x: int(x.pdbindex)) - bond_graph = {} - for ires in xrange(len(residues)-1): - r1 = residues[ires] - r2 = residues[ires+1] - - # don't assign bonds unless these are contiguous bioresidues - if r1.pdbindex + 1 != r2.pdbindex: - continue - restype = r1.type - if r2.type != restype: - continue - - # Create the bonds - if restype == 'protein': - bond_graph[r1['C']] = {r2['N']: 1} - bond_graph[r2['N']] = {r1['C']: 1} - elif restype == 'dna': - bond_graph[r1["O3'"]] = {r2['P']: 1} - bond_graph[r2['P']] = {r1["O3'"]: 1} - elif restype == 'rna': - raise NotImplementedError('RNA not yet implemented') - - # copy bonds into the right structure (do this last to avoid mangling the graph) - for atom in bond_graph: - atom.bond_graph.update(bond_graph[atom]) - - @property - def sequence(self): - """str: this chain's residue sequence with one-letter residue codes - """ - missing = '.' # don't do this - outputs = [] - last_idx = None - for res in sorted(self, key=lambda x: x.pdbindex): - if res.type not in ('protein', 'dna', 'rna'): continue - if last_idx is not None: - num_missing = res.pdbindex - last_idx - 1 - if num_missing > 0: - outputs.append(missing * (res.pdbindex - last_idx - 1)) - if res.code != '?': - outputs.append(res.code) - else: - if len(outputs) > 0 and outputs[-1][-1] != ',': - outputs.append(',') - outputs.append(res.pdbname + ',') - last_idx = res.pdbindex - return ''.join(outputs) - - def __str__(self): - return 'Chain %s' % self.name From 1ff619dacbd7682b23251d1a03a95ba1fd2adcce Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Mon, 15 Aug 2016 14:17:54 -0700 Subject: [PATCH 17/64] Give Residue and Chain their own source files --- moldesign/molecules/chain.py | 252 +++++++++++++++++++++++ moldesign/molecules/residue.py | 356 +++++++++++++++++++++++++++++++++ 2 files changed, 608 insertions(+) create mode 100644 moldesign/molecules/chain.py create mode 100644 moldesign/molecules/residue.py diff --git a/moldesign/molecules/chain.py b/moldesign/molecules/chain.py new file mode 100644 index 0000000..d471a52 --- /dev/null +++ b/moldesign/molecules/chain.py @@ -0,0 +1,252 @@ +# Copyright 2016 Autodesk Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import collections + +import moldesign as mdt +from moldesign import utils, data + +from . import Entity, toplevel + + +@toplevel +class Chain(Entity): + """ Biomolecular chain class - its children are almost always residues. + + Attributes: + parent (mdt.Molecule): the molecule this residue belongs to + chain (Chain): the chain this residue belongs to + """ + @utils.args_from(Entity) + def __init__(self, pdbname=None, **kwargs): + super(Chain, self).__init__(pdbname=pdbname, **kwargs) + if self.name is None: + self.name = self.pdbname + if self.pdbindex is not None: + self.pdbindex = self.pdbname + self._type = None + + self._5p_end = self._3p_end = self._n_terminal = self._c_terminal = None + + @property + def type(self): + """ str: the type of chain - protein, DNA, solvent, etc. + + This field returns the type of chain, classified by the following rules: + 1) If the chain contains only one type of residue, it is given that classification + (so a chain containing only ions has type "ion" + 2) If the chain contains a biopolymer + ligands and solvent, it is classified as a + biopolymer (i.e. 'protein', 'dna', or 'rna'). This is the most common case with .pdb + files from the PDB. + 3) If the chain contains multiple biopolymer types, it will be given a hybrid classification + (e.g. 'dna/rna', 'protein/dna') - this is rare! + 4) If it contains multiple kinds of non-biopolymer residues, it will be called "solvent" + (if all non-bio residues are water/solvent/ion) or given a hybrid name as in 3) + """ + if self._type is None: + + counts = collections.Counter(x.type for x in self.residues) + unique_types = sum(bool(v) for v in counts.itervalues()) + if unique_types == 1: + if self.num_residues == 1: + self._type = data.CHAIN_MONOMER_NAMES[self.residues[0].type] + else: + self._type = self.residues[0].type + + else: + polymer_types = sum(bool(counts[t]) for t in data.BIOPOLYMER_TYPES) + if polymer_types == 1: # the most common case - a polymer + solvent/ligands + for residue in self.residues: + if residue.type in data.BIOPOLYMER_TYPES: break + else: + assert False, "No biopolymer found but polymer_types==1" + self._type = residue.type + + elif polymer_types > 1: # for rare cases, e.g. "DNA/RNA/PROTEIN" + self._type = '/'.join(k for k in data.BIOPOLYMER_TYPES if counts[k]) + elif polymer_types == 0: + if counts['unknown'] > 0: # some molecule + solvent + self._type = '/'.join(k for k in counts if counts[k]) + else: # just solvent + self._type = 'solvent' + return self._type + + @property + def polymer_residues(self): + for res in self.residues: + if res.type in ('dna', 'protein'): + yield res + + @property + def solvent_residues(self): + for res in self.residues: + if res.type in ('water', 'solvent', 'ion'): + yield res + + @property + def unclassified_residues(self): + for res in self.residues: + if res.type == 'unknown': + yield res + + def get_ligand(self): + """ Return a (single) ligand if it exists; raises ValueError if there's not exactly one + + This is a utility routine to get a single ligand from a chain. If there's exactly one + residue, it is returned. If not, ValueError is raised - use + :meth:`Chain.unclassified_residues` to get an iterator over all unclassified residues. + + Returns: + moldesign.Residue: ligand residue + + Raises: + ValueError: if the chain does not contain exactly one unclassifiable residue + """ + iterator = self.unclassified_residues + try: + ligand = iterator.next() + except StopIteration: + raise ValueError('This chain does not appear to contain any ligands') + + try: + nextligand = iterator.next() + except StopIteration: + return ligand + else: + raise ValueError('Multiple ligands detected. Use `chain.unclassified_residues` to ' + 'iterate over them') + + + def to_json(self): + js = mdt.chemjson.jsonify(self, 'index name pdbindex'.split()) + js['residues'] = [res.index for res in self.residues] + return js + + def copy(self): + newatoms = super(Chain, self).copy() + return newatoms[0].chain + copy.__doc__ = Entity.copy.__doc__ + + @property + def num_residues(self): + return len(self) + + nresidues = numresidues = num_residues + + @property + def residues(self): + """Chain: synonym for 'self' to enhance readability, + e.g. ``molecule.chains['A'].residue[123]``""" + return self + + def add(self, residue, **kwargs): + if residue.chain is None: + residue.chain = self + else: + assert residue.chain is self, "Residue is not a member of this chain" + + return super(Chain, self).add(residue, **kwargs) + + def _get_chain_end(self, restype, selfattr, test): + currval = getattr(self, selfattr) + if currval is None or not getattr(currval, test): + for residue in self.residues: + if residue.type != restype: + continue + if getattr(residue, test): + setattr(self, selfattr, residue) + break + return getattr(self, selfattr) + + @property + def c_terminal(self): + """moldesign.Residue: The chain's C-terminus (or ``None`` if it does not exist)""" + return self._get_chain_end('protein', '_c_terminal', 'is_c_terminal') + + @property + def n_terminal(self): + """moldesign.Residue: The chain's N-terminus (or ``None`` if it does not exist)""" + return self._get_chain_end('protein', '_n_terminal', 'is_n_terminal') + + @property + def fiveprime_end(self): + """moldesign.Residue: The chain's 5' base (or ``None`` if it does not exist)""" + return self._get_chain_end('dna', '_5p_end', 'is_5prime_end') + + @property + def threeprime_end(self): + """moldesign.Residue: The chain's 3' base (or ``None`` if it does not exist)""" + return self._get_chain_end('dna', '_3p_end', 'is_3prime_end') + + def assign_biopolymer_bonds(self): + """Connect bonds between residues in this chain. + + See Also: + :ref:`moldesign.Residue.assign_template_bonds` + + Raises: + ValueError: if ``residue.resname`` is not in bioresidue templates + KeyError: if an atom in this residue is not recognized """ + residues = list(self) + residues.sort(key=lambda x: int(x.pdbindex)) + bond_graph = {} + for ires in xrange(len(residues)-1): + r1 = residues[ires] + r2 = residues[ires+1] + + # don't assign bonds unless these are contiguous bioresidues + if r1.pdbindex + 1 != r2.pdbindex: + continue + restype = r1.type + if r2.type != restype: + continue + + # Create the bonds + if restype == 'protein': + bond_graph[r1['C']] = {r2['N']: 1} + bond_graph[r2['N']] = {r1['C']: 1} + elif restype == 'dna': + bond_graph[r1["O3'"]] = {r2['P']: 1} + bond_graph[r2['P']] = {r1["O3'"]: 1} + elif restype == 'rna': + raise NotImplementedError('RNA not yet implemented') + + # copy bonds into the right structure (do this last to avoid mangling the graph) + for atom in bond_graph: + atom.bond_graph.update(bond_graph[atom]) + + @property + def sequence(self): + """str: this chain's residue sequence with one-letter residue codes + """ + missing = '.' # don't do this + outputs = [] + last_idx = None + for res in sorted(self, key=lambda x: x.pdbindex): + if res.type not in ('protein', 'dna', 'rna'): continue + if last_idx is not None: + num_missing = res.pdbindex - last_idx - 1 + if num_missing > 0: + outputs.append(missing * (res.pdbindex - last_idx - 1)) + if res.code != '?': + outputs.append(res.code) + else: + if len(outputs) > 0 and outputs[-1][-1] != ',': + outputs.append(',') + outputs.append(res.pdbname + ',') + last_idx = res.pdbindex + return ''.join(outputs) + + def __str__(self): + return 'Chain %s' % self.name diff --git a/moldesign/molecules/residue.py b/moldesign/molecules/residue.py new file mode 100644 index 0000000..a74e20b --- /dev/null +++ b/moldesign/molecules/residue.py @@ -0,0 +1,356 @@ +# Copyright 2016 Autodesk Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +import moldesign as mdt +from moldesign import utils, data + +from . import Entity, AtomList, toplevel + +@toplevel +class Residue(Entity): + """ A biomolecular residue - most often an amino acid, a nucleic base, or a solvent + molecule. In PDB structures, also often refers to non-biochemical molecules. + + Its children are almost always residues. + + Attributes: + parent (mdt.Molecule): the molecule this residue belongs to + chain (Chain): the chain this residue belongs to + """ + + def copy(self): + newatoms = super(Residue, self).copy() + return newatoms[0].residue + copy.__doc__ = Entity.copy.__doc__ + + def to_json(self): + js = mdt.chemjson.jsonify(self, 'index resname name pdbindex'.split()) + js['chain'] = self.chain.index + js['atoms'] = [atom.index for atom in self.atoms] + return js + + @utils.args_from(Entity) + def __init__(self, **kwargs): + """ Initialization + Args: + **kwargs (): + """ + self.chain = kwargs.get('chain', None) + super(Residue, self).__init__(**kwargs) + if self.index is None and self.molecule is not None: + self.index = self.molecule.residues.index(self) + self.chainindex = None + self._backbone = None + self._sidechain = None + self._template_name = None + if self.name is None: self.name = self.pdbname + str(self.pdbindex) + + def add(self, atom, key=None): + """Deals with atom name clashes within a residue - common for small molecules""" + if atom.residue is not None: + assert atom.residue is self, 'Atom already assigned to a residue' + atom.residue = self + if atom.chain is None: + atom.chain = self.chain + else: + assert atom.chain == self.chain, "Atom's chain does not match residue's chain" + + if key is not None or atom.name not in self: + return super(Residue, self).add(atom, key=key) + else: + return super(Residue, self).add(atom, key='%s%s' % (atom.name, len(self))) + add.__doc__ = Entity.__doc__ + + @property + def is_n_terminal(self): + """bool: this is the last residue in a peptide + + Raises: + ValueError: if this residue is not an amino acid + """ + if self.type != 'protein': + raise ValueError('%s is not a recognized peptide monomer' % self) + return self._is_starting_residue + + @property + def is_c_terminal(self): + """bool: this is the first residue in a peptide + + Raises: + ValueError: if this residue is not an amino acid + """ + if self.type != 'protein': + raise ValueError('%s is not a recognized peptide monomer' % self) + return self._is_ending_residue + + @property + def is_5prime_end(self): + """bool: this is the first base in a strand + + Raises: + ValueError: if this residue is not a DNA base + """ + if self.type != 'dna': + raise ValueError('%s is not a recognized nucleic acid monomer' % self) + return self._is_starting_residue + + @property + def is_3prime_end(self): + """bool: this is the last base in a strand + + Raises: + ValueError: if this residue is not a DNA base + """ + if self.type != 'dna': + raise ValueError('%s is not a recognized nucleic acid monomer' % self) + return self._is_ending_residue + + @property + def is_monomer(self): + """bool: this residue is not part of a biopolymer + """ + return self._is_ending_residue and self._is_starting_residue + + @property + def _is_ending_residue(self): + """bool: this is the last residue in a polymer""" + try: + nextres = self.next_residue + except StopIteration: + return True + else: + return False + + @property + def _is_starting_residue(self): + """bool: this is the first residue in a polymer""" + try: + prevres = self.prev_residue + except StopIteration: + return True + else: + return False + + def assign_template_bonds(self): + """Assign bonds from bioresidue templates. + + Only assigns bonds that are internal to this residue (does not connect different residues). + The topologies here assume pH7.4 and may need to be corrected for other pHs + + See Also: + :ref:`moldesign.Chain.assign_biopolymer_bonds` + + Raises: + ValueError: if ``residue.resname`` is not in bioresidue templates + KeyError: if an atom in this residue is not recognized """ + try: + resname = self.resname + if self.type == 'protein': + if self.is_n_terminal: + resname = self.resname + '_LSN3' # the protonated form (with NH3+ on the end) + elif self.is_c_terminal: + resname = self.resname + '_LEO2H' # deprotonated form (COO-) + elif self.is_monomer: + resname = self.resname + '_LFZW' # free zwitterion form + + bonds_by_name = data.RESIDUE_BONDS[resname] + self._template_name = resname + except KeyError: + if len(self) == 1: + print 'INFO: no bonds assigned to residue %s' % self + return + else: + raise ValueError("No bonding template for residue '%s'" % resname) + + # intra-residue bonds + bond_graph = {atom: {} for atom in self} + for atom in self: + for nbrname, order in bonds_by_name.get(atom.name, {}).iteritems(): + try: + nbr = self[nbrname] + except KeyError: # missing atom in this structure is normal (often hydrogen) + pass + else: + bond_graph[atom][nbr] = bond_graph[nbr][atom] = order + + # copy bonds into the right structure (do this last to avoid mangling the graph) + for atom in bond_graph: + atom.bond_graph.update(bond_graph[atom]) + + @property + def next_residue(self): + """Residue: + The next residue in the chain (in the C-direction for proteins, 3' + direction for nucleic acids) + + Raises: + NotImplementedError: If we don't know how to deal with this type of biopolymer + StopIteration: If there isn't a next residue (i.e. it's a 3'- or C-terminus) + """ + if self.chain.type == 'protein': + return self._get_neighbor('C', 'C-terminus') + elif self.chain.type == 'dna': + return self._get_neighbor("O3'", "3' end") + else: + raise NotImplementedError('We only deal with dna and amino acids right now') + + @property + def prev_residue(self): + """Residue: The next residue in the chain (in the N-direction for proteins, 5' direction for + nucleic acids) + + Raises: + NotImplementedError: If we don't know how to deal with this type of biopolymer + StopIteration: If there isn't a previous residue (i.e. it's a 5'- or N-terminus) + """ + if self.chain.type == 'protein': + return self._get_neighbor('N', 'N-terminus') + elif self.chain.type == 'dna': + return self._get_neighbor("P", "5' end") + else: + raise NotImplementedError('We only deal with dna and amino acids right now') + + def _get_neighbor(self, atomname, name): + """Return the first residue found that's bound to the passed atom name + """ + conn_atom = self[atomname] + for nbr in conn_atom.bond_graph: + if nbr.residue is not self: + return nbr.residue + else: + raise StopIteration('%s reached' % name) + + @property + def resname(self): + """str: Synonym for pdbname""" + return self.pdbname + + @resname.setter + def resname(self, val): + self.pdbname = val + + @property + def type(self): + """str: Classification of the residue (protein, solvent, dna, water, unknown)""" + return data.RESIDUE_TYPES.get(self.resname, 'unknown') + + @property + def code(self): + """str: one-letter amino acid code or two letter nucleic acid code, or '?' otherwise""" + return data.RESIDUE_ONE_LETTER.get(self.pdbname, '?') + + @property + def atomnames(self): + """Residue: synonym for ```self``` for for the sake of readability: + ```molecule.chains['A'].residues[123].atomnames['CA']``` + """ + return self + + @property + def backbone(self): + """ AtomList: all backbone atoms for nucleic and protein residues + (indentified using PDB names); returns None for other residue types + """ + if self._backbone is None: + if self.type not in data.BACKBONES: + return None + self._backbone = AtomList() + for name in data.BACKBONES[self.type]: + try: self._backbone.append(self[name]) + except KeyError: pass + return self._backbone + + @property + def sidechain(self): + """ AtomList: all sidechain atoms for nucleic and protein residues + (defined as non-backbone atoms); returns None for other residue types + """ + if self._sidechain is None: + if self.backbone is None: + return None + bb = set(self.backbone) + self._sidechain = [atom for atom in self if atom not in bb] + return self._sidechain + + @property + def is_standard_residue(self): + """ bool: this residue is a "standard residue" for the purposes of a PDB entry. + + In PDB files, this will be stored using 'ATOM' if this is a standard residue + and 'HETATM' records if not. + + Note: + We currently define "standard" residues as those whose 3 letter residue code appears in + the ``moldesign.data.RESIDUE_DESCRIPTIONS`` dictionary. Although this seems to work + well, we'd welcome a PR with a less hacky method. + + References: + PDB format guide: http://www.wwpdb.org/documentation/file-format + """ + return self.resname in mdt.data.RESIDUE_DESCRIPTIONS + + def __str__(self): + return 'Residue %s (index %d, chain %s)' % (self.name, self.index, + self.chain.name) + + def _repr_markdown_(self): + return self.markdown_summary() + + def markdown_summary(self): + """ Markdown-formatted information about this residue + + Returns: + str: markdown-formatted string + """ + if self.molecule is None: + lines = ["

    Residue %s

    " % self.name] + else: + lines = ["

    Residue %s (index %d)

    " % (self.name, self.index)] + + if self.type == 'protein': + lines.append('**Residue codes**: %s / %s' % (self.resname, self.code)) + else: + lines.append("**Residue code**: %s" % self.resname) + lines.append('**Type**: %s' % self.type) + if self.resname in data.RESIDUE_DESCRIPTIONS: + lines.append('**Description**: %s' % data.RESIDUE_DESCRIPTIONS[self.resname]) + + lines.append('**

    Chain:** %s' % self.chain.name) + + lines.append('**Sequence number**: %d' % self.pdbindex) + + terminus = None + if self.type == 'dna': + if self.is_3prime_end: + terminus = "3' end" + elif self.is_5prime_end: + terminus = "5' end" + elif self.type == 'protein': + if self.is_n_terminal: + terminus = 'N-terminus' + elif self.is_c_terminal: + terminus = 'C-terminus' + if terminus is not None: + lines.append('**Terminal residue**: %s of chain %s' % (terminus, self.chain.name)) + + if self.molecule is not None: + lines.append("**Molecule**: %s" % self.molecule.name) + + lines.append("**

    Number of atoms**: %s" % self.num_atoms) + if self.backbone: + lines.append("**Backbone atoms:** %s" % ', '.join(x.name for x in self.backbone)) + lines.append("**Sidechain atoms:** %s" % ', '.join(x.name for x in self.sidechain)) + else: + lines.append("**Atom:** %s" % ', '.join(x.name for x in self.atoms)) + + return '
    '.join(lines) \ No newline at end of file From 4abe190d7188fa865452ae1e7971c8cfa798a289 Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Mon, 15 Aug 2016 14:36:55 -0700 Subject: [PATCH 18/64] Workaround for #74 - Added a PDB helper that will insert TER records at the appropriate spots: moldesign.helpers.pdb.insert_ter_records - We may want to use this by default in the future - for now, we just use it to prepare the PDB file for tleap --- moldesign/helpers/pdb.py | 68 ++++++++++++++++++++++++++++++ moldesign/interfaces/ambertools.py | 3 +- 2 files changed, 69 insertions(+), 2 deletions(-) diff --git a/moldesign/helpers/pdb.py b/moldesign/helpers/pdb.py index e4b114e..1773c62 100644 --- a/moldesign/helpers/pdb.py +++ b/moldesign/helpers/pdb.py @@ -17,12 +17,80 @@ routines in this module read and write data that's not necessarily parsed by other implementations. """ import collections +from cStringIO import StringIO import numpy as np BioAssembly = collections.namedtuple('BioAssembly', 'desc chains transforms') +def insert_ter_records(mol, pdbfile): + """ Inserts TER records to indicate the end of the biopolymeric part of a chain + + Many common PDB writers - including OpenBabel - don't insert TER records. This can + cause a problem for situations such as forcefield assignment. This routine is one + solution to that problem. + + What it does: + This routine inserts 'TER' records + 1) after any protein residue not bound to the next residue via backbone peptide bond, and + 2) after any DNA residue not bound to the next residue via a backbone phosphate bond + + In the input PDB file, the ATOM records be formatted with the proper columns (see + http://www.wwpdb.org/documentation/file-format-content/format33/sect9.html#ATOM) and + the chain names and residue numbers must match ``chain.pdbname`` and ``residue.pdbindex``, + respectively. + + Args: + mol (moldesign.Molecule): the MDT version of the molecule that pdbfile describes + pdbfile (TextIO OR str): pdb file (file-like or string) + + Returns: + cStringIO.StringIO OR str: copy of the pdb file with added TER records - it will be + returned as the same type passed (i.e., as a filelike buffer or as a string) + """ + + is_string = False + if isinstance(pdbfile, basestring): + pdbfile = StringIO(pdbfile) + is_string = True + + # First, identify where to insert records (if anywhere) + ter_residues = set() + for chain in mol.chains: + if chain.type == 'protein': + ter_residues.add((chain.pdbname, chain.c_terminal.pdbindex)) + elif chain.type == 'dna': + ter_residues.add((chain.pdbname, chain.threeprime_end.pdbindex)) + + # insert the records (if necessary) + newf = StringIO() + pdbfile.seek(0) + watchres = None + for line in pdbfile: + fields = line.split() + if fields and fields[0] in ('ATOM','HETATM'): # line is an atom record + res = (line[21], int(line[22:26].strip())) + if watchres: + if res != watchres: + print >> newf, 'TER' + watchres = None + if res in ter_residues: + watchres = res + + elif watchres is not None: # line is not an atom record + watchres = None + if line.strip() != 'TER': + print >> newf, 'TER' + + newf.write(line) + + newf.seek(0) + if is_string: + return newf.read() + else: + return newf + def warn_assemblies(mol, assemblies): """ Print a warning message if the PDB structure contains a biomolecular assembly """ diff --git a/moldesign/interfaces/ambertools.py b/moldesign/interfaces/ambertools.py index d855075..36ee9ce 100644 --- a/moldesign/interfaces/ambertools.py +++ b/moldesign/interfaces/ambertools.py @@ -118,7 +118,6 @@ def finish_job(job): return compute.run_job(job, _return_result=True, **kwargs) - @utils.kwargs_from(mdt.compute.run_job) def build_bdna(sequence, **kwargs): """ Uses Ambertools' Nucleic Acid Builder to build a 3D double-helix B-DNA structure. @@ -172,7 +171,7 @@ def run_tleap(mol, forcefields=None, parameters=None, **kwargs): # Prepare input for tleap if forcefields is None: forcefields = mdt.forcefields.ffdefaults.values() leapstr = ['source %s' % LEAPRCFILES[ff] for ff in forcefields] - inputs = {'input.pdb': mol.write(format='pdb')} + inputs = {'input.pdb': mdt.helpers.insert_ter_records(mol, mol.write(format='pdb'))} if parameters: if isinstance(parameters, ExtraAmberParameters): From 0f8e7bcef3cf9d559effc63db48315c71c3e13ba Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Mon, 15 Aug 2016 16:02:11 -0700 Subject: [PATCH 19/64] Add guess_histidine_states routine --- moldesign/tools/topology.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/moldesign/tools/topology.py b/moldesign/tools/topology.py index 3775f3e..cf43c3f 100644 --- a/moldesign/tools/topology.py +++ b/moldesign/tools/topology.py @@ -94,6 +94,7 @@ def assign_formal_charges(mol, ignore_nonzero=True): mol.charge += newcharge * u.q_e - atom.formal_charge atom.formal_charge = newcharge * u.q_e + @toplevel def clean_pdb(mol): """ Attempt to clean up a molecule from PDB format that may be missing data @@ -112,6 +113,33 @@ def clean_pdb(mol): return m +@toplevel +def guess_histidine_states(mol): + """ Attempt to assign protonation states to histidine residues. + + Note: + This function is highly unlikely to give accurate results! It is intended for convenience + when histidine states can easily be guessed from already-present hydrogens or when they are + judged to be relatively unimportant. + + This can be done simply by renaming HIS residues: + 1. If HE2 and HD1 are present, the residue is renamed to HIP + 2. If only HE2 is present, the residue is renamed to HIE + 3. Otherwise, the residue is renamed to HID (the most common form) + + Args: + mol (moldesign.Molecule): molecule to change (in place) + """ + for residue in mol.residues: + if residue.resname == 'HIS': + oldname = str(residue) + if 'HE2' in residue and 'HD1' in residue: + residue.resname = 'HIP' + elif 'HE2' in residue: + residue.resname = 'HIE' + else: + residue.resname = 'HID' + print 'Renaming %s from HIS to %s' % (oldname, residue.resname) From 1ded00d16890c919a3e7aa6f5777ab92e97230d1 Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Tue, 16 Aug 2016 10:58:10 -0700 Subject: [PATCH 20/64] API and circular import cleanup - Add read_amber back to top-level API - Remove the accidentally deleted `GeometryViewer.show_unbonded` - Add `display` keyword to `Trajectory.draw` - Rename `clean_pdb` to `add_missing_data` - Numerous import cleanups (easiest way to avoid circular imports is to only import top-level `moldesign` unless necessary for inheritance or docstring/call signature manipulation) --- moldesign/HISTORY.rst | 12 +++++++----- moldesign/__init__.py | 13 ++++++++----- moldesign/fileio.py | 3 ++- moldesign/interfaces/ambertools.py | 4 ++-- moldesign/molecules/trajectory.py | 12 ++++++++---- moldesign/tools/README.md | 4 +++- moldesign/tools/topology.py | 8 ++++++-- moldesign/viewer/viewer2d.py | 4 ++-- moldesign/viewer/viewer3d.py | 4 ++++ moldesign/widgets/geombuilder.py | 22 ++++++++++------------ moldesign/widgets/symmetry.py | 7 ++++--- moldesign/widgets/trajectory.py | 11 +++++++++-- 12 files changed, 65 insertions(+), 39 deletions(-) diff --git a/moldesign/HISTORY.rst b/moldesign/HISTORY.rst index f2d6ffc..d19e653 100644 --- a/moldesign/HISTORY.rst +++ b/moldesign/HISTORY.rst @@ -4,17 +4,19 @@ NEW MODELING FEATURES - GAFF parameterizer for small molecules -- ``params = mdt.parameterize(mol)`` - AM1-BCC and Gasteiger partial charge calculators: ``mdt.calc_am1_bcc_charges`` and ``mdt.calc_gasteiger_charges`` - - Add biomolecular assembly support for mmCIF files - - #72 - Add ``moldesign.guess_formal_charges`` and ``moldesign.clean_pdb`` + - Add PDB database and biomolecular assembly support for mmCIF files + - #72 - Add ``moldesign.guess_formal_charges`` and ``moldesign.add_missing_data`` CHANGES - - Create changelog and version check to the ``mdt.about()`` (aka mdt.configure) widget + - Add Example 4 on MD with a small molecule ligand + - Create changelog and version check to the ``mdt.about()`` (aka ``mdt.configure``) widget - Change moldesign.tools and moldesign.helpers modules into more rationally organized subpackages - - (WIP) ``mdt.set_dihedral`` can be called with two atoms in the same way as ``mdt.dihedral`` + - ``mdt.set_dihedral`` can be called with two atoms in the same way as ``mdt.dihedral`` BUGFIXES - #61 - fixed a KeyError when parsing PDBs with metal centers or ions - - #74 (WIP) - Output PDB files with correct TER records + - #74 - Add function to create PDB files with correct TER records (used for TLeap input) + - Better handling of chains with non-standard residues 0.7.2 - July 26, 2016 diff --git a/moldesign/__init__.py b/moldesign/__init__.py index 9e4044c..1cfa0ac 100644 --- a/moldesign/__init__.py +++ b/moldesign/__init__.py @@ -22,7 +22,13 @@ from . import data PACKAGEPATH = data.PACKAGEPATH -# Import all subpackages / submodules +# Base subpackages - import these first +from . import utils +from . import units +from . import uibase +from . import widgets + +# Functional subpackages from . import compute from . import fileio from . import exceptions @@ -40,11 +46,8 @@ from . import orbitals from . import molecules from . import tools -from . import uibase -from . import units -from . import utils from . import viewer -from . import widgets + # Populate the top-level namespace (imports everything from each .__all__ variable) from .fileio import * diff --git a/moldesign/fileio.py b/moldesign/fileio.py index ff09b3b..e954857 100644 --- a/moldesign/fileio.py +++ b/moldesign/fileio.py @@ -20,6 +20,7 @@ from moldesign.interfaces import biopython_interface import moldesign.interfaces.openbabel as openbabel_interface +from moldesign.interfaces.openmm import amber_to_mol as read_amber from moldesign.helpers import pdb from moldesign import chemjson @@ -27,7 +28,7 @@ def exports(o, name=None): __all__.append(o.__name__) return o -__all__ = ['from_smiles'] +__all__ = ['from_smiles', 'read_amber'] from_smiles = openbabel_interface.from_smiles diff --git a/moldesign/interfaces/ambertools.py b/moldesign/interfaces/ambertools.py index 36ee9ce..874cbc0 100644 --- a/moldesign/interfaces/ambertools.py +++ b/moldesign/interfaces/ambertools.py @@ -161,7 +161,6 @@ def run_tleap(mol, forcefields=None, parameters=None, **kwargs): (see AmberTools manual for descriptions) parameters (List[ExtraAmberParameters]): (optional) list of amber parameters for non-standard residues - **kwargs: keyword arguments to :meth:`compute.run_job` References: @@ -187,6 +186,7 @@ def run_tleap(mol, forcefields=None, parameters=None, **kwargs): leapstr.append('mol = loadpdb input.pdb\n' "check mol\n" "saveamberparm mol output.prmtop output.inpcrd\n" + "savepdb mol output.pdb\n" "quit\n") inputs['input.leap'] = '\n'.join(leapstr) @@ -199,7 +199,7 @@ def run_tleap(mol, forcefields=None, parameters=None, **kwargs): return compute.run_job(job, **kwargs) -@mdt.utils.args_from(run_tleap) +@utils.args_from(run_tleap) def assign_forcefield(mol, **kwargs): """ see run_tleap docstring """ from moldesign.widgets.parameterization import ParameterizationDisplay diff --git a/moldesign/molecules/trajectory.py b/moldesign/molecules/trajectory.py index 9f231ce..6066d3e 100644 --- a/moldesign/molecules/trajectory.py +++ b/moldesign/molecules/trajectory.py @@ -164,10 +164,14 @@ def __len__(self): """overrides len(trajectory) to return number of frames""" return len(self.frames) - def draw3d(self): - """TrajectoryViewer: create a trajectory visualization""" - from moldesign import widgets - self._viz = widgets.trajectory.TrajectoryViewer(self) + @utils.kwargs_from(mdt.widgets.trajectory.TrajectoryViewer) + def draw3d(self, **kwargs): + """TrajectoryViewer: create a trajectory visualization + + Args: + **kwargs (dict): kwargs for :class:`moldesign.widgets.trajectory.TrajectoryViewer` + """ + self._viz = mdt.widgets.trajectory.TrajectoryViewer(self, **kwargs) return self._viz draw = draw3d # synonym for backwards compatibility diff --git a/moldesign/tools/README.md b/moldesign/tools/README.md index 998b84e..877d251 100644 --- a/moldesign/tools/README.md +++ b/moldesign/tools/README.md @@ -2,4 +2,6 @@ The `moldesign.tools` subpackage collects functions for manipulating -and building molecules \ No newline at end of file +and building molecules. These are public functions intended for +MDT users (as opposed to the `moldesign.helpers` subpackage, which +contains internal routines). \ No newline at end of file diff --git a/moldesign/tools/topology.py b/moldesign/tools/topology.py index cf43c3f..44ffa57 100644 --- a/moldesign/tools/topology.py +++ b/moldesign/tools/topology.py @@ -96,12 +96,16 @@ def assign_formal_charges(mol, ignore_nonzero=True): @toplevel -def clean_pdb(mol): - """ Attempt to clean up a molecule from PDB format that may be missing data +def add_missing_data(mol): + """ Add missing hydrogens, bond orders, and formal charges to a structure (often from the PDB) Specifically, this is a convenience function that runs: ``mdt.guess_bond_orders``, ``mdt.add_hydrogen``, and ``mdt.assign_formal_charges`` + Note: + This does NOT add missing residues to biochemical structures. This functionality will be + available as :meth:`moldesign.add_missing_residues` + Args: mol (moldesign.Molecule): molecule to clean diff --git a/moldesign/viewer/viewer2d.py b/moldesign/viewer/viewer2d.py index 231cf01..2f7970e 100644 --- a/moldesign/viewer/viewer2d.py +++ b/moldesign/viewer/viewer2d.py @@ -17,9 +17,9 @@ from nbmolviz.widget2d import MolViz2DBaseWidget +import moldesign as mdt from moldesign import utils import moldesign.units as u -from moldesign.molecules import AtomList from . import toplevel, ColorMixin @@ -51,7 +51,7 @@ def __init__(self, mol, try: self.atoms = mol.atoms except AttributeError: - self.atoms = AtomList(mol) + self.atoms = mdt.AtomList(mol) self.mol = self.atoms else: self.mol = mol diff --git a/moldesign/viewer/viewer3d.py b/moldesign/viewer/viewer3d.py index 5fa7771..769ebe2 100644 --- a/moldesign/viewer/viewer3d.py +++ b/moldesign/viewer/viewer3d.py @@ -121,6 +121,10 @@ def autostyle(self, render=True): if render: self.render() + def show_unbonded(self, radius=0.5): + lone = [atom for atom in self.mol.atoms if atom.num_bonds == 0] + if lone: self.vdw(atoms=lone, render=False, radius=radius) + @staticmethod def _atoms_to_json(atomlist): if hasattr(atomlist, 'iteratoms'): diff --git a/moldesign/widgets/geombuilder.py b/moldesign/widgets/geombuilder.py index 052977a..6b746f3 100644 --- a/moldesign/widgets/geombuilder.py +++ b/moldesign/widgets/geombuilder.py @@ -13,13 +13,11 @@ # limitations under the License. import ipywidgets as ipy -from moldesign.geom import set_angle, set_dihedral, set_distance -import moldesign.molecules.bonds +import moldesign as mdt +from moldesign import utils from moldesign.viewer import BondClicker from moldesign import units as u -from moldesign import geom, utils - from moldesign.uibase import ViewerToolBase, ReadoutFloatSlider def exports(o): @@ -107,21 +105,21 @@ def set_distance(self, *args): sel = self._selection assert sel.type == 'bond' dist_in_angstrom = self.length_slider.value - set_distance(sel.a1, sel.a2, dist_in_angstrom*u.angstrom, adjustmol=self.adjust_button.value) + mdt.set_distance(sel.a1, sel.a2, dist_in_angstrom*u.angstrom, adjustmol=self.adjust_button.value) self.viewer.set_positions() def set_angle(self, *args): sel = self._selection assert sel.type == 'bond' angle = self.angle_slider.value - set_angle(sel.a1, sel.a2, sel.nbr_a2, angle*u.pi/180.0, adjustmol=self.adjust_button.value) + mdt.set_angle(sel.a1, sel.a2, sel.nbr_a2, angle*u.pi/180.0, adjustmol=self.adjust_button.value) self.viewer.set_positions() def set_dihedral(self, *args): sel = self._selection assert sel.type == 'bond' angle = self.dihedral_slider.value - set_dihedral(sel.nbr_a1, sel.a1, sel.a2, sel.nbr_a2, angle*u.pi/180.0, + mdt.set_dihedral(sel.nbr_a1, sel.a1, sel.a2, sel.nbr_a2, angle*u.pi/180.0, adjustmol=self.adjust_button.value) self.viewer.set_positions() @@ -152,7 +150,7 @@ def atom_click(self, atom): return self.clear_selection() elif atom in sel.atom.bond_graph: # select the bond - return self.bond_click(moldesign.molecules.bonds.Bond(sel.atom, atom)) # turn this into a bond selection + return self.bond_click(mdt.Bond(sel.atom, atom)) # turn this into a bond selection else: # select a new atom self.clear_selection(render=False) sel = self._selection @@ -207,7 +205,7 @@ def _set_tool_state(self): # Bond angle if sel.nbr_a2: - self.angle_slider.value = geom.angle(sel.a1, sel.a2, sel.nbr_a2).value_in(u.degrees) + self.angle_slider.value = mdt.angle(sel.a1, sel.a2, sel.nbr_a2).value_in(u.degrees) # self.angle_slider.observe(self.set_angle, 'value') self.angle_slider.disabled = False self.angle_slider.description = 'Bond angle {a1.name}' \ @@ -222,7 +220,7 @@ def _set_tool_state(self): # Dihedral twist if sel.nbr_a2 and sel.nbr_a1: - self.dihedral_slider.value = geom.dihedral(sel.nbr_a1, sel.a1, sel.a2, sel.nbr_a2).value_in(u.degrees) + self.dihedral_slider.value = mdt.dihedral(sel.nbr_a1, sel.a1, sel.a2, sel.nbr_a2).value_in(u.degrees) # self.dihedral_slider.observe(self.set_dihedral, 'value') self.dihedral_slider.disabled = False self.dihedral_slider.description = 'Dihedral angle {a4.name}' \ @@ -304,12 +302,12 @@ def _redraw_selection(self): self._highlight_atoms([sel.a1, sel.a2], render=False) if sel.nbr_a1 is not None: - nmdtond = moldesign.molecules.bonds.Bond(sel.a1, sel.nbr_a1) + nmdtond = mdt.Bond(sel.a1, sel.nbr_a1) self._highlight_atoms([sel.nbr_a1], color=self.NBR1HIGHLIGHT, render=False) self.viewer.set_bond_color(self.NBR1HIGHLIGHT, nmdtond, render=False) self._highlighted_bonds.append(nmdtond) if sel.nbr_a2 is not None: - nmdtond = moldesign.molecules.bonds.Bond(sel.a2, sel.nbr_a2) + nmdtond = mdt.Bond(sel.a2, sel.nbr_a2) self._highlight_atoms([sel.nbr_a2], color=self.NBR2HIGHLIGHT, render=False) self.viewer.set_bond_color(self.NBR2HIGHLIGHT, nmdtond, render=False) self._highlighted_bonds.append(nmdtond) diff --git a/moldesign/widgets/symmetry.py b/moldesign/widgets/symmetry.py index 9c99687..c5775aa 100644 --- a/moldesign/widgets/symmetry.py +++ b/moldesign/widgets/symmetry.py @@ -16,8 +16,8 @@ import ipywidgets as ipy import numpy as np +import moldesign as mdt from moldesign import units as u -from moldesign.geom.symmetry import get_symmetry def exports(o): @@ -65,12 +65,13 @@ def __init__(self, mol): ipy.HBox([self.tolerance_chooser, self.recalculate_button]), self.tolerance_descrip], width=325) + + self.symmetry = None self.coords_changed() self.hbox = ipy.HBox([ipy.VBox([self.viewer, self.showing]), self.symm_pane]) super(Symmetrizer, self).__init__([self.hbox]) - def reset_coords(self, *args): self.mol.positions = self.original_coords self.viewer.append_frame(positions=self.original_coords) @@ -81,7 +82,7 @@ def coords_changed(self, *args): self.symm_selector.options = {} self.description.value = 'Finding symmetries ...' self.tolerance = self.tolerance_chooser.value * u.angstrom - self.symmetry = get_symmetry(self.mol, tolerance=self.tolerance) + self.symmetry = mdt.geom.get_symmetry(self.mol, tolerance=self.tolerance) options = collections.OrderedDict() for elem in self.symmetry.elems: if elem.max_diff.magnitude != 0.0: diff --git a/moldesign/widgets/trajectory.py b/moldesign/widgets/trajectory.py index 4a68d54..b8c6e66 100644 --- a/moldesign/widgets/trajectory.py +++ b/moldesign/widgets/trajectory.py @@ -25,9 +25,15 @@ class TrajectoryViewer(selector.SelectionGroup): """ 3D representation, with animation controls, for a trajectory. Users will typically instantiate this using ``trajectory.draw()`` + + Args: + display (bool): immediately display this to the notebook (default: False) + **kwargs (dict): keyword arguments for :class:`ipywidgets.Box` """ - def __init__(self, trajectory, **kwargs): + def __init__(self, trajectory, display=False, **kwargs): + from IPython.display import display + self.default_fps = 10 self.traj = trajectory self.pane = ipy.VBox() @@ -41,6 +47,8 @@ def __init__(self, trajectory, **kwargs): self.pane.children = [self.view_container, self.controls] super(TrajectoryViewer, self).__init__([self.pane, AtomInspector()], **kwargs) self.update_selections('initialization', {'framenum': 0}) + if display: + display(self) def make_viewer(self): viewer = self.traj._tempmol.draw3d(style='licorice') @@ -88,7 +96,6 @@ def make_viewer(self): return viewframe.viewer, viewframe - class FrameInspector(ipy.HTML, selector.Selector): def __init__(self, traj, **kwargs): self.traj = traj From 6ab7d371620eda97cb8f12fbf9d6a6dc07f11323 Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Tue, 16 Aug 2016 11:33:50 -0700 Subject: [PATCH 21/64] Implement #39. This includes several changes: - biopython now automatically assigns chain IDs if not present - openbabel will print PDB files even if atom serial numbers not present - job status widgets are automatically updated when cell execution is complete --- .../Example 1. Build and simulate DNA.ipynb | 20 +- .... HIV Protease bound to an inhibitor.ipynb | 507 ++++-------------- moldesign/interfaces/biopython_interface.py | 4 + moldesign/interfaces/openbabel.py | 7 +- moldesign/uibase/logwidget.py | 10 +- moldesign/widgets/trajectory.py | 6 +- 6 files changed, 124 insertions(+), 430 deletions(-) diff --git a/moldesign/_notebooks/Example 1. Build and simulate DNA.ipynb b/moldesign/_notebooks/Example 1. Build and simulate DNA.ipynb index 45ec0b8..8b69497 100644 --- a/moldesign/_notebooks/Example 1. Build and simulate DNA.ipynb +++ b/moldesign/_notebooks/Example 1. Build and simulate DNA.ipynb @@ -136,7 +136,10 @@ }, "outputs": [], "source": [ - "rs.selected_residues" + "rs.selected_residues\n", + "\n", + "if len(rs.selected_atoms) == 0:\n", + " raise ValueError(\"You didn't click on anything!\")" ] }, { @@ -151,11 +154,7 @@ " print 'Constraining position for residue %s' % residue\n", " \n", " for atom in residue.atoms:\n", - " mol.constrain_atom(atom)\n", - " \n", - " \n", - "if len(rs.selected_atoms) == 0:\n", - " raise ValueError(\"You didn't click on anything!\")" + " mol.constrain_atom(atom)" ] }, { @@ -328,6 +327,15 @@ "interact_manual(plot_rmsd)\n", "rs" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/moldesign/_notebooks/Example 4. HIV Protease bound to an inhibitor.ipynb b/moldesign/_notebooks/Example 4. HIV Protease bound to an inhibitor.ipynb index 956f9c8..8c65bf1 100644 --- a/moldesign/_notebooks/Example 4. HIV Protease bound to an inhibitor.ipynb +++ b/moldesign/_notebooks/Example 4. HIV Protease bound to an inhibitor.ipynb @@ -9,7 +9,7 @@ "![Molecular Design Toolkit](img/Top.png)\n", "
    \n", "\n", - "

    Example 3: The Dynamics of HIV Protease bound to a small molecule

    \n", + "

    Example 4: The Dynamics of HIV Protease bound to a small molecule

    \n", "\n", "This notebook prepares a co-crystallized protein / small molecule ligand structure from [the PDB database](http://www.rcsb.org/pdb/home/home.do) and prepares it for molecular dynamics simulation. \n", "\n", @@ -34,108 +34,35 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "## I. The crystal structure\n", - "\n", - "First, we'll download and investigate the [3AID crystal structure](http://www.rcsb.org/pdb/explore.do?structureId=3aid).\n", - "\n", - "### A. Download and visualize" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "mol = mdt.from_pdb('3AID')\n", - "mol" + "Contents\n", + "=======\n", + "---\n", + " - [I. The crystal structure](#I.-The-crystal-structure)\n", + " - [A. Download and visualize](#A.-Download-and-visualize)\n", + " - [B. Try assigning a forcefield](#B.-Try-assigning-a-forcefield)\n", + " - [II. Parameterizing a small molecule](#II.-Parameterizing-a-small-molecule)\n", + " - [A. Isolate the ligand](#A.-Isolate-the-ligand)\n", + " - [B. Assign bond orders and hydrogens](#B.-Assign-bond-orders-and-hydrogens)\n", + " - [C. Generate forcefield parameters](#C.-Generate-forcefield-parameters)\n", + " - [III. Prepping the protein](#III.-Prepping-the-protein)\n", + " - [A. Strip waters](#A.-Strip-waters)\n", + " - [B. Histidine](#B.-Histidine)\n", + " - [IV. Prep for dynamics](#IV.-Prep-for-dynamics)\n", + " - [A. Assign the forcefield](#A.-Assign-the-forcefield)\n", + " - [B. Attach and configure simulation methods](#B.-Attach-and-configure-simulation-methods)\n", + " - [D. Equilibrate the protein](#D.-Equilibrate-the-protein)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### B. Try assigning a forcefield" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This structure is not ready for MD - this command will raise a `ParameterizationError` Exception. After running this calculation, click on the **Errors/Warnings** tab to see why." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "newmol = mdt.assign_forcefield(mol)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You should see 3 errors: \n", - " * The residue name `ARQ` not recognized\n", - " * Atom `HD1` in residue `HIS69`, chain `A` was not recognized\n", - " * Atom `HD1` in residue `HIS69`, chain `B` was not recognized\n", - " \n", - "(There's also a warning about bond distances, but these can be generally be fixed with an energy minimization before running dynamics)\n", "\n", - "We'll deal with the histidine residues first." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## II. Prepping the protein\n", - "\n", - "### A. Assign histidine's protonation\n", - "Histidine is notoriously tricky, because it exists in no less than three different protonation states at biological pH (7.4) - the \"delta-protonated\" form, referred to with residue name `HID`; the \"epsilon-protonated\" form aka `HIE`; and the doubly-protonated form `HIP`, which has a +1 charge. These are drawn below." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "hid = mdt.from_smiles('O=C(O)[C@@H](N)Cc1c[nH]cn1')\n", - "hid.draw3d()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "hie = mdt.from_smiles('O=C(O)[C@@H](N)Cc1cnc[nH]1')\n", - "hie.draw3d()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Crystallographers usually can't resolve hydrogen positions, and so can't tell you which form of histidine you have. PDB files thus refer to histidine as `HIS`, which leaves the protonation state ambiguous. In general, picking the right protontation is both extremely important and extremely difficult.\n", + "## I. The crystal structure\n", "\n", - "We're in luck for this simulation, however - the histidines are located on the surface of the protein, quite far from the drug binding site, and so their state is not likely to be important for a drug binding calculation. Further, the presence of the `HD1` atoms in the crystal structure indicates that we should probably go ahead and change our `HIS` residues to `HID`.\n", + "First, we'll download and investigate the [3AID crystal structure](http://www.rcsb.org/pdb/explore.do?structureId=3aid).\n", "\n", - "The fix is easy - just change the name. We'll rerun the paramterization to confirm that the histidine errors disappeared (although the small molecule errors remain)." + "### A. Download and visualize" ] }, { @@ -146,10 +73,8 @@ }, "outputs": [], "source": [ - "for residue in mol.residues:\n", - " if residue.resname == 'HIS':\n", - " residue.resname = 'HID'\n", - " print 'I changed %s in chain %s to HID' % (residue.name, residue.chain.name)" + "protease = mdt.from_pdb('3AID')\n", + "protease" ] }, { @@ -160,46 +85,21 @@ }, "outputs": [], "source": [ - "md_ready_molecule = mdt.assign_forcefield(mol)" + "protease.draw()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### B. Remove the ligand\n", - "The following cell creates a new ``Molecule`` with only the protein - no solvent or bound ligand." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "receptor_structure = mdt.Molecule([atom for atom in mol.atoms if atom.residue.type == 'protein'])\n", - "receptor = mdt.assign_forcefield(receptor_structure)" + "### B. Try assigning a forcefield" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### C. Prep for dynamics" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "receptor.set_energy_model(mdt.models.OpenMMPotential, implicit_solvent='obc', cutoff=8.0*u.angstrom)\n", - "receptor.set_integrator(mdt.integrators.OpenMMLangevin, timestep=2.0*u.fs)" + "This structure is not ready for MD - this command will raise a `ParameterizationError` Exception. After running this calculation, click on the **Errors/Warnings** tab to see why." ] }, { @@ -210,90 +110,31 @@ }, "outputs": [], "source": [ - "receptor.configure_methods()" + "newmol = mdt.assign_forcefield(protease)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### D. Equilibrate the protein\n", - "The next series of cells first minimize the crystal structure to remove clashes, then heats the system to 300K." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "mintraj = receptor.minimize()\n", - "mintraj.draw()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "scrolled": true - }, - "outputs": [], - "source": [ - "# Restrain the peptide backbone:\n", - "for residue in receptor.residues:\n", - " for atom in residue.backbone:\n", - " receptor.constrain_atom(atom)\n", - "print 'Constrained %d atoms' % len(receptor.constraints)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "scrolled": false - }, - "outputs": [], - "source": [ - "warmup = receptor.run(20.0*u.ps)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "receptor.clear_constraints()\n", - "receptor.integrator.params.frame_interval=0.1*u.ps\n", - "equil = receptor.run(5.0*u.ps)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "fulltraj = mintraj + warmup + equil\n", - "fulltraj.draw()" + "You should see 3 errors: \n", + " 1. The residue name `ARQ` not recognized\n", + " 1. Atom `HD1` in residue `HIS69`, chain `A` was not recognized\n", + " 1. Atom `HD1` in residue `HIS69`, chain `B` was not recognized\n", + " \n", + "(There's also a warning about bond distances, but these can be generally be fixed with an energy minimization before running dynamics)\n", + "\n", + "We'll start by tackling the small molecule \"ARQ\"." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## III. Parameterizing a small molecule\n", + "## II. Parameterizing a small molecule\n", "We'll use the GAFF (generalized Amber force field) to create force field parameters for the small ligand.\n", "\n", - "### A. Isolate the small molecule\n", + "### A. Isolate the ligand\n", "Click on the ligand to select it, then we'll use that selection to create a new molecule." ] }, @@ -305,7 +146,7 @@ }, "outputs": [], "source": [ - "sel = mdt.widgets.ResidueSelector(mol)\n", + "sel = mdt.widgets.ResidueSelector(protease)\n", "sel" ] }, @@ -318,7 +159,7 @@ "outputs": [], "source": [ "drugres = mdt.Molecule(sel.selected_residues[0])\n", - "drugres.draw2d()" + "drugres.draw2d(width=700)" ] }, { @@ -326,7 +167,7 @@ "metadata": {}, "source": [ "### B. Assign bond orders and hydrogens\n", - "The crystal structure doesn't provide indicate bond orders or hydrogens, but we can add those:" + "A PDB file provides only limited information crystal structure doesn't provide indicate bond orders, hydrogen locations, or formal charges, but we can add those with the the `clean_pdb` tool:" ] }, { @@ -337,8 +178,8 @@ }, "outputs": [], "source": [ - "drugmol = mdt.add_hydrogen(mdt.guess_bond_orders((drugres)))\n", - "drugmol.draw2d(width=500)" + "drugmol = mdt.add_missing_data(drugres)\n", + "drugmol.draw(width=500)" ] }, { @@ -353,104 +194,14 @@ ] }, { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "drugmol.draw()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "pbmol = mdt.interfaces.openbabel.mol_to_pybel(mol)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "import openbabel as ob" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "pbmol.OBMol.AutomaticPartialCharge()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "pbmol.OBMol.AutomaticFormalCharge()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "pbmol.OBMol.SetTotalCharge(1)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "pbmol.OBMol.BeginModify()\n", - "pbmol.OBMol.SetTotalCharge(1)\n", - "pbmol.OBMol.EndModify()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "ob" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "cell_type": "markdown", + "metadata": {}, "source": [ - "import rdkit" + "### C. Generate forcefield parameters\n", + "\n", + "We'll next generate forcefield parameters using this ready-to-simulate structure.\n", + "\n", + "**NOTE**: for computational speed, we use the `gasteiger` charge model. This is not advisable for production work! `am1-bcc` or `esp` are far likelier to produce sensible results." ] }, { @@ -461,18 +212,20 @@ }, "outputs": [], "source": [ - "a.formalcharge, a.type" + "drug_parameters = mdt.parameterize(drugmol, charges='gasteiger')" ] }, { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "cell_type": "markdown", + "metadata": {}, "source": [ - "pbmol.charge = 1" + "## III. Prepping the protein\n", + "\n", + "Section II. dealt with getting forcefield parameters for an unknown small molecule. Next, we'll prep the other part of the structure.\n", + "\n", + "### A. Strip waters\n", + "\n", + "Waters in crystal structures are usually stripped from a simulation as artifacts of the crystallization process. Here, we'll remove the waters from the protein structure." ] }, { @@ -483,19 +236,17 @@ }, "outputs": [], "source": [ - "for atom in pbmol.atoms:\n", - " print atom.OBAtom.GetType()" + "dehydrated = mdt.Molecule([atom for atom in protease.atoms if atom.residue.type != 'water'])" ] }, { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], + "cell_type": "markdown", + "metadata": {}, "source": [ - "a = pbmol.atoms[4]" + "### B. Histidine\n", + "Histidine is notoriously tricky, because it exists in no less than three different protonation states at biological pH (7.4) - the \"delta-protonated\" form, referred to with residue name `HID`; the \"epsilon-protonated\" form aka `HIE`; and the doubly-protonated form `HIP`, which has a +1 charge. Unfortunately, crystallography isn't usually able to resolve the difference between these three.\n", + "\n", + "Luckily, these histidines are pretty far from the ligand binding site, so their protonation is unlikely to affect the dynamics. We'll therefore use the `guess_histidine_states` function to assign a reasonable starting guess." ] }, { @@ -506,28 +257,19 @@ }, "outputs": [], "source": [ - "for atom in pbmol.atoms:\n", - " if atom.formalcharge != 0:\n", - " print atom\n", - " break\n", - "else:\n", - " print 'no'" + "mdt.guess_histidine_states(dehydrated)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### C. Assign partial charges and a GAFF forcefield" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To assign force field parameters to this molecule, each atom will need 1) a GAFF atom type, and 2) a partial charge.\n", + "## IV. Prep for dynamics\n", + "\n", + "With these problems fixed, we can succesfully assigne a forcefield and set up the simulation.\n", "\n", - "For the charges, we'll use the fast (but not particularly accurate) AM1-BCC method to compute partial charges for the atoms." + "### A. Assign the forcefield\n", + "Now that we have parameters for the drug and have dealt with histidine, the forcefield assignment will succeed:" ] }, { @@ -538,18 +280,16 @@ }, "outputs": [], "source": [ - "drugmol.charge" + "sim_mol = mdt.assign_forcefield(dehydrated, parameters=drug_parameters)" ] }, { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], + "cell_type": "markdown", + "metadata": {}, "source": [ - "result = drugmol.get_gaff_parameters(charge='am1-bcc', )" + "### B. Attach and configure simulation methods\n", + "\n", + "Armed with the forcefield parameters, we can connect an energy model to compute energies and forces, and an integrator to create trajectories:" ] }, { @@ -560,38 +300,17 @@ }, "outputs": [], "source": [ - "print drugmol.write(format='pdb')" + "sim_mol.set_energy_model(mdt.models.OpenMMPotential, implicit_solvent='obc', cutoff=8.0*u.angstrom)\n", + "sim_mol.set_integrator(mdt.integrators.OpenMMLangevin, timestep=2.0*u.fs)\n", + "sim_mol.configure_methods()" ] }, { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "mol = bb.from_smiles('C1=CCNOC1')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], + "cell_type": "markdown", + "metadata": {}, "source": [ - "#include commands as file ... stdout, stderr in main display" + "### D. Equilibrate the protein\n", + "The next series of cells first minimize the crystal structure to remove clashes, then heats the system to 300K." ] }, { @@ -602,46 +321,8 @@ }, "outputs": [], "source": [ - "reload(bb.interfaces.ambertools)\n", - "bb.interfaces.ambertools.am1_bcc_charges(mol)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "mol = mdt.from_name('bipyridine')" + "mintraj = sim_mol.minimize()\n", + "mintraj.draw()" ] }, { @@ -652,7 +333,7 @@ }, "outputs": [], "source": [ - "mol.draw(height=300, width=300, show_2dhydrogens=True)" + "traj = sim_mol.run(40*u.ps)" ] }, { @@ -663,17 +344,9 @@ }, "outputs": [], "source": [ - "mdt.widgets.Symmetrizer(mdt.from_smiles('CC'))" + "viewer = traj.draw(display=True)\n", + "viewer.autostyle()" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] } ], "metadata": { diff --git a/moldesign/interfaces/biopython_interface.py b/moldesign/interfaces/biopython_interface.py index cb61422..0e99987 100644 --- a/moldesign/interfaces/biopython_interface.py +++ b/moldesign/interfaces/biopython_interface.py @@ -13,6 +13,7 @@ # limitations under the License. import itertools +import string import Bio.PDB import Bio.PDB.MMCIF2Dict @@ -85,9 +86,12 @@ def biopy_to_mol(struc): """ # TODO: assign bonds using 1) CONECT records, 2) residue templates, 3) distance newatoms = [] + backup_chain_names = list(string.ascii_uppercase) for chain in struc.get_chains(): tmp, pdbidx, pdbid = chain.get_full_id() + if not pdbid.strip(): + pdbid = backup_chain_names.pop() newchain = mdt.Chain(pdbname=pdbid.strip()) for residue in chain.get_residues(): diff --git a/moldesign/interfaces/openbabel.py b/moldesign/interfaces/openbabel.py index 42e4f02..83061c9 100644 --- a/moldesign/interfaces/openbabel.py +++ b/moldesign/interfaces/openbabel.py @@ -207,7 +207,8 @@ def mol_to_pybel(mdtmol): obres.AddAtom(obatom) obres.SetHetAtom(obatom, not atom.residue.is_standard_residue) obres.SetAtomID(obatom, atom.name) - obres.SetSerialNum(obatom, atom.pdbindex) + obres.SetSerialNum(obatom, + mdt.utils.if_not_none(atom.pdbindex, atom.index+1)) for atom in mdtmol.bond_graph: a1 = atommap[atom] @@ -276,7 +277,7 @@ def pybel_to_mol(pbmol, atom_names=True, **kwargs): if chain_id_num not in newchains: # create new chain - if not mdt.utils.is_printable(chain_id.strip()): + if not mdt.utils.is_printable(chain_id.strip()) or not chain_id.strip(): chain_id = backup_chain_names.pop() print 'WARNING: assigned name %s to unnamed chain object @ %s' % ( chain_id, hex(chain_id_num)) @@ -289,7 +290,7 @@ def pybel_to_mol(pbmol, atom_names=True, **kwargs): # Create new residue pdb_idx = obres.GetNum() res = mdt.Residue(pdbname=resname, - pdbindex=pdb_idx) + pdbindex=pdb_idx) newresidues[residx] = res chn.add(res) res.chain = chn diff --git a/moldesign/uibase/logwidget.py b/moldesign/uibase/logwidget.py index 4994c57..09cbafb 100644 --- a/moldesign/uibase/logwidget.py +++ b/moldesign/uibase/logwidget.py @@ -204,7 +204,15 @@ def _capture_logging_displays(display=False, **kwargs): def _finalize_logging_displays(display=True, **kwargs): - pass + import pyccc.ui + global _current_tabs + + if not _current_tabs: return + + for display in _current_tabs.children: + if isinstance(display, pyccc.ui.JobStatusDisplay): + display.update() + # FOR NOW, *always* enable the logging widgets enable_logging_widgets(True) diff --git a/moldesign/widgets/trajectory.py b/moldesign/widgets/trajectory.py index b8c6e66..67c0e0c 100644 --- a/moldesign/widgets/trajectory.py +++ b/moldesign/widgets/trajectory.py @@ -32,7 +32,7 @@ class TrajectoryViewer(selector.SelectionGroup): """ def __init__(self, trajectory, display=False, **kwargs): - from IPython.display import display + from IPython.display import display as displaynow self.default_fps = 10 self.traj = trajectory @@ -41,14 +41,14 @@ def __init__(self, trajectory, display=False, **kwargs): self.viewer, self.view_container = self.make_viewer() for frame in self.traj.frames[1:]: self.viewer.append_frame(positions=frame.positions, - wfn=frame.get('wfn',None), + wfn=frame.get('wfn', None), render=False) self.make_controls() self.pane.children = [self.view_container, self.controls] super(TrajectoryViewer, self).__init__([self.pane, AtomInspector()], **kwargs) self.update_selections('initialization', {'framenum': 0}) if display: - display(self) + displaynow(self) def make_viewer(self): viewer = self.traj._tempmol.draw3d(style='licorice') From 01dbb3a06866263acdee1710e84895ebe1f6fa6f Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Tue, 16 Aug 2016 19:28:03 -0700 Subject: [PATCH 22/64] Expand test coverage and fix some bugs the tests exposed --- moldesign/_tests/data/3aid.cif | 3108 ++++++++++++++++++++ moldesign/_tests/data/3aid.pdb | 2354 +++++++++++++++ moldesign/_tests/test_distributed.py | 12 - moldesign/_tests/test_io.py | 11 +- moldesign/_tests/test_math.py | 1 + moldesign/_tests/test_openmm.py | 31 - moldesign/_tests/test_primary_structure.py | 134 + moldesign/_tests/test_tools.py | 61 +- moldesign/fileio.py | 3 +- moldesign/models/base.py | 4 +- moldesign/molecules/chain.py | 3 +- moldesign/molecules/residue.py | 5 + 12 files changed, 5670 insertions(+), 57 deletions(-) create mode 100644 moldesign/_tests/data/3aid.cif create mode 100644 moldesign/_tests/data/3aid.pdb delete mode 100644 moldesign/_tests/test_distributed.py delete mode 100644 moldesign/_tests/test_openmm.py create mode 100644 moldesign/_tests/test_primary_structure.py diff --git a/moldesign/_tests/data/3aid.cif b/moldesign/_tests/data/3aid.cif new file mode 100644 index 0000000..9ffb439 --- /dev/null +++ b/moldesign/_tests/data/3aid.cif @@ -0,0 +1,3108 @@ +data_3AID +# +_entry.id 3AID +# +_audit_conform.dict_name mmcif_pdbx.dic +_audit_conform.dict_version 4.007 +_audit_conform.dict_location http://mmcif.pdb.org/dictionaries/ascii/mmcif_pdbx.dic +# +_database_2.database_id PDB +_database_2.database_code 3AID +# +loop_ +_database_PDB_rev.num +_database_PDB_rev.date +_database_PDB_rev.date_original +_database_PDB_rev.status +_database_PDB_rev.replaces +_database_PDB_rev.mod_type +1 1997-09-17 1997-05-15 ? 3AID 0 +2 2003-04-01 ? ? 3AID 1 +3 2009-02-24 ? ? 3AID 1 +# +loop_ +_database_PDB_rev_record.rev_num +_database_PDB_rev_record.type +_database_PDB_rev_record.details +2 JRNL ? +3 VERSN ? +# +_pdbx_database_status.status_code REL +_pdbx_database_status.entry_id 3AID +_pdbx_database_status.deposit_site ? +_pdbx_database_status.process_site ? +_pdbx_database_status.SG_entry . +# +loop_ +_audit_author.name +_audit_author.pdbx_ordinal +'Rutenber, E.E.' 1 +'Stroud, R.M.' 2 +# +_citation.id primary +_citation.title +;A new class of HIV-1 protease inhibitor: the crystallographic structure, inhibition and chemical synthesis of an aminimide peptide isostere. +; +_citation.journal_abbrev Bioorg.Med.Chem. +_citation.journal_volume 4 +_citation.page_first 1545 +_citation.page_last 1558 +_citation.year 1996 +_citation.journal_id_ASTM BMECEP +_citation.country UK +_citation.journal_id_ISSN 0968-0896 +_citation.journal_id_CSD 1200 +_citation.book_publisher ? +_citation.pdbx_database_id_PubMed 8894111 +_citation.pdbx_database_id_DOI '10.1016/0968-0896(96)00147-2' +# +loop_ +_citation_author.citation_id +_citation_author.name +_citation_author.ordinal +primary 'Rutenber, E.E.' 1 +primary 'McPhee, F.' 2 +primary 'Kaplan, A.P.' 3 +primary 'Gallion, S.L.' 4 +primary 'Hogan Jr., J.C.' 5 +primary 'Craik, C.S.' 6 +primary 'Stroud, R.M.' 7 +# +_cell.entry_id 3AID +_cell.length_a 53.100 +_cell.length_b 61.000 +_cell.length_c 63.200 +_cell.angle_alpha 90.00 +_cell.angle_beta 90.00 +_cell.angle_gamma 90.00 +_cell.Z_PDB 8 +_cell.pdbx_unique_axis ? +# +_symmetry.entry_id 3AID +_symmetry.space_group_name_H-M 'P 21 21 21' +_symmetry.pdbx_full_space_group_name_H-M ? +_symmetry.cell_setting ? +_symmetry.Int_Tables_number ? +# +loop_ +_entity.id +_entity.type +_entity.src_method +_entity.pdbx_description +_entity.formula_weight +_entity.pdbx_number_of_molecules +_entity.details +_entity.pdbx_mutation +_entity.pdbx_fragment +_entity.pdbx_ec +1 polymer man 'HUMAN IMMUNODEFICIENCY VIRUS PROTEASE' 10801.857 2 +? Q7K ? 3.4.23.16 +2 non-polymer syn 'BENZOYLAMINO-BENZYL-METHYL-[2-HYDROXY-3-[1-METHYL-ETHYL-OXY-N-FORMAMIDYL]-4-PHENYL-BUTYL]-AMMONIUM' 504.648 1 +? ? ? ? +3 water nat water 18.015 8 +? ? ? ? +# +loop_ +_entity_keywords.entity_id +_entity_keywords.text +1 ? +2 ? +3 ? +# +loop_ +_entity_name_com.entity_id +_entity_name_com.name +1 'HIV PROTEASE, HIV PR' +2 ? +3 ? +# +_entity_poly.entity_id 1 +_entity_poly.type 'polypeptide(L)' +_entity_poly.nstd_linkage no +_entity_poly.nstd_monomer no +_entity_poly.pdbx_seq_one_letter_code +;PQITLWKRPLVTIRIGGQLKEALLDTGADDTVLEEMNLPGKWKPKMIGGIGGFIKVRQYDQIPVEICGHKAIGTVLVGPT +PVNIIGRNLLTQIGCTLNF +; +_entity_poly.pdbx_seq_one_letter_code_can +;PQITLWKRPLVTIRIGGQLKEALLDTGADDTVLEEMNLPGKWKPKMIGGIGGFIKVRQYDQIPVEICGHKAIGTVLVGPT +PVNIIGRNLLTQIGCTLNF +; +_entity_poly.pdbx_strand_id A,B +# +loop_ +_entity_poly_seq.entity_id +_entity_poly_seq.num +_entity_poly_seq.mon_id +_entity_poly_seq.hetero +1 1 PRO n +1 2 GLN n +1 3 ILE n +1 4 THR n +1 5 LEU n +1 6 TRP n +1 7 LYS n +1 8 ARG n +1 9 PRO n +1 10 LEU n +1 11 VAL n +1 12 THR n +1 13 ILE n +1 14 ARG n +1 15 ILE n +1 16 GLY n +1 17 GLY n +1 18 GLN n +1 19 LEU n +1 20 LYS n +1 21 GLU n +1 22 ALA n +1 23 LEU n +1 24 LEU n +1 25 ASP n +1 26 THR n +1 27 GLY n +1 28 ALA n +1 29 ASP n +1 30 ASP n +1 31 THR n +1 32 VAL n +1 33 LEU n +1 34 GLU n +1 35 GLU n +1 36 MET n +1 37 ASN n +1 38 LEU n +1 39 PRO n +1 40 GLY n +1 41 LYS n +1 42 TRP n +1 43 LYS n +1 44 PRO n +1 45 LYS n +1 46 MET n +1 47 ILE n +1 48 GLY n +1 49 GLY n +1 50 ILE n +1 51 GLY n +1 52 GLY n +1 53 PHE n +1 54 ILE n +1 55 LYS n +1 56 VAL n +1 57 ARG n +1 58 GLN n +1 59 TYR n +1 60 ASP n +1 61 GLN n +1 62 ILE n +1 63 PRO n +1 64 VAL n +1 65 GLU n +1 66 ILE n +1 67 CYS n +1 68 GLY n +1 69 HIS n +1 70 LYS n +1 71 ALA n +1 72 ILE n +1 73 GLY n +1 74 THR n +1 75 VAL n +1 76 LEU n +1 77 VAL n +1 78 GLY n +1 79 PRO n +1 80 THR n +1 81 PRO n +1 82 VAL n +1 83 ASN n +1 84 ILE n +1 85 ILE n +1 86 GLY n +1 87 ARG n +1 88 ASN n +1 89 LEU n +1 90 LEU n +1 91 THR n +1 92 GLN n +1 93 ILE n +1 94 GLY n +1 95 CYS n +1 96 THR n +1 97 LEU n +1 98 ASN n +1 99 PHE n +# +_entity_src_gen.entity_id 1 +_entity_src_gen.gene_src_common_name ? +_entity_src_gen.gene_src_genus Lentivirus +_entity_src_gen.pdbx_gene_src_gene ? +_entity_src_gen.gene_src_species ? +_entity_src_gen.gene_src_strain ? +_entity_src_gen.gene_src_tissue ? +_entity_src_gen.gene_src_tissue_fraction ? +_entity_src_gen.gene_src_details ? +_entity_src_gen.pdbx_gene_src_fragment ? +_entity_src_gen.pdbx_gene_src_scientific_name 'Human immunodeficiency virus 1' +_entity_src_gen.pdbx_gene_src_ncbi_taxonomy_id 11676 +_entity_src_gen.pdbx_gene_src_variant 'SF1 ISOLATE' +_entity_src_gen.pdbx_gene_src_cell_line ? +_entity_src_gen.pdbx_gene_src_atcc ? +_entity_src_gen.pdbx_gene_src_organ ? +_entity_src_gen.pdbx_gene_src_organelle ? +_entity_src_gen.pdbx_gene_src_cell ? +_entity_src_gen.pdbx_gene_src_cellular_location ? +_entity_src_gen.host_org_common_name ? +_entity_src_gen.pdbx_host_org_scientific_name 'Escherichia coli' +_entity_src_gen.pdbx_host_org_ncbi_taxonomy_id 562 +_entity_src_gen.host_org_genus Escherichia +_entity_src_gen.pdbx_host_org_gene ? +_entity_src_gen.pdbx_host_org_organ ? +_entity_src_gen.host_org_species ? +_entity_src_gen.pdbx_host_org_tissue ? +_entity_src_gen.pdbx_host_org_tissue_fraction ? +_entity_src_gen.pdbx_host_org_strain ? +_entity_src_gen.pdbx_host_org_variant ? +_entity_src_gen.pdbx_host_org_cell_line ? +_entity_src_gen.pdbx_host_org_atcc ? +_entity_src_gen.pdbx_host_org_culture_collection ? +_entity_src_gen.pdbx_host_org_cell ? +_entity_src_gen.pdbx_host_org_organelle ? +_entity_src_gen.pdbx_host_org_cellular_location ? +_entity_src_gen.pdbx_host_org_vector_type ? +_entity_src_gen.pdbx_host_org_vector ? +_entity_src_gen.plasmid_name ? +_entity_src_gen.plasmid_details ? +_entity_src_gen.pdbx_description ? +# +_struct_ref.id 1 +_struct_ref.db_name UNP +_struct_ref.db_code POL_HV1A2 +_struct_ref.entity_id 1 +_struct_ref.pdbx_db_accession P03369 +_struct_ref.pdbx_align_begin 1 +_struct_ref.pdbx_seq_one_letter_code +;FFREDLAFLQGKAREFSSEQTRANSPTRRELQVWGGENNSLSEAGADRQGTVSFNFPQITLWQRPLVTIRIGGQLKEALL +DTGADDTVLEEMNLPGKWKPKMIGGIGGFIKVRQYDQIPVEICGHKAIGTVLVGPTPVNIIGRNLLTQIGCTLNFPISPI +ETVPVKLKPGMDGPKVKQWPLTEEKIKALVEICTEMEKEGKISKIGPENPYNTPVFAIKKKDSTKWRKLVDFRELNKRTQ +DFWEVQLGIPHPAGLKKKKSVTVLDVGDAYFSVPLDKDFRKYTAFTIPSINNETPGIRYQYNVLPQGWKGSPAIFQSSMT +KILEPFRKQNPDIVIYQYMDDLYVGSDLEIGQHRTKIEELRQHLLRWGFTTPDKKHQKEPPFLWMGYELHPDKWTVQPIM +LPEKDSWTVNDIQKLVGKLNWASQIYAGIKVKQLCKLLRGTKALTEVIPLTEEAELELAENREILKEPVHEVYYDPSKDL +VAEIQKQGQGQWTYQIYQEPFKNLKTGKYARMRGAHTNDVKQLTEAVQKVSTESIVIWGKIPKFKLPIQKETWEAWWMEY +WQATWIPEWEFVNTPPLVKLWYQLEKEPIVGAETFYVDGAANRETKLGKAGYVTDRGRQKVVSIADTTNQKTELQAIHLA +LQDSGLEVNIVTDSQYALGIIQAQPDKSESELVSQIIEQLIKKEKVYLAWVPAHKGIGGNEQVDKLVSAGIRKVLFLNGI +DKAQEEHEKYHSNWRAMASDFNLPPVVAKEIVASCDKCQLKGEAMHGQVDCSPGIWQLDCTHLEGKIILVAVHVASGYIE +AEVIPAETGQETAYFLLKLAGRWPVKTIHTDNGSNFTSTTVKAACWWAGIKQEFGIPYNPQSQGVVESMNNELKKIIGQV +RDQAEHLKTAVQMAVFIHNFKRKGGIGGYSAGERIVDIIATDIQTKELQKQITKIQNFRVYYRDNKDPLWKGPAKLLWKG +EGAVVIQDNSDIKVVPRRKAKIIRDYGKQMAGDDCVASRQDED +; +_struct_ref.biol_id . +# +loop_ +_struct_ref_seq.align_id +_struct_ref_seq.ref_id +_struct_ref_seq.pdbx_PDB_id_code +_struct_ref_seq.pdbx_strand_id +_struct_ref_seq.seq_align_beg +_struct_ref_seq.pdbx_seq_align_beg_ins_code +_struct_ref_seq.seq_align_end +_struct_ref_seq.pdbx_seq_align_end_ins_code +_struct_ref_seq.pdbx_db_accession +_struct_ref_seq.db_align_beg +_struct_ref_seq.pdbx_db_align_beg_ins_code +_struct_ref_seq.db_align_end +_struct_ref_seq.pdbx_db_align_end_ins_code +_struct_ref_seq.pdbx_auth_seq_align_beg +_struct_ref_seq.pdbx_auth_seq_align_end +1 1 3AID A 1 ? 99 ? P03369 57 ? 155 ? 1 99 +2 1 3AID B 1 ? 99 ? P03369 57 ? 155 ? 1 99 +# +loop_ +_struct_ref_seq_dif.align_id +_struct_ref_seq_dif.pdbx_pdb_id_code +_struct_ref_seq_dif.mon_id +_struct_ref_seq_dif.pdbx_pdb_strand_id +_struct_ref_seq_dif.seq_num +_struct_ref_seq_dif.pdbx_pdb_ins_code +_struct_ref_seq_dif.pdbx_seq_db_name +_struct_ref_seq_dif.pdbx_seq_db_accession_code +_struct_ref_seq_dif.db_mon_id +_struct_ref_seq_dif.pdbx_seq_db_seq_num +_struct_ref_seq_dif.details +_struct_ref_seq_dif.pdbx_auth_seq_num +_struct_ref_seq_dif.pdbx_ordinal +1 3AID LYS A 7 ? UNP P03369 GLN 63 ENGINEERED 7 1 +2 3AID LYS B 7 ? UNP P03369 GLN 63 ENGINEERED 7 2 +# +loop_ +_chem_comp.id +_chem_comp.type +_chem_comp.mon_nstd_flag +_chem_comp.name +_chem_comp.pdbx_synonyms +_chem_comp.formula +_chem_comp.formula_weight +PRO 'L-peptide linking' y PROLINE ? +'C5 H9 N O2' 115.132 +GLN 'L-peptide linking' y GLUTAMINE ? +'C5 H10 N2 O3' 146.146 +ILE 'L-peptide linking' y ISOLEUCINE ? +'C6 H13 N O2' 131.174 +THR 'L-peptide linking' y THREONINE ? +'C4 H9 N O3' 119.120 +LEU 'L-peptide linking' y LEUCINE ? +'C6 H13 N O2' 131.174 +TRP 'L-peptide linking' y TRYPTOPHAN ? +'C11 H12 N2 O2' 204.228 +LYS 'L-peptide linking' y LYSINE ? +'C6 H15 N2 O2 1' 147.197 +ARG 'L-peptide linking' y ARGININE ? +'C6 H15 N4 O2 1' 175.210 +VAL 'L-peptide linking' y VALINE ? +'C5 H11 N O2' 117.147 +GLY 'PEPTIDE LINKING' y GLYCINE ? +'C2 H5 N O2' 75.067 +GLU 'L-peptide linking' y 'GLUTAMIC ACID' ? +'C5 H9 N O4' 147.130 +ALA 'L-peptide linking' y ALANINE ? +'C3 H7 N O2' 89.094 +ASP 'L-peptide linking' y 'ASPARTIC ACID' ? +'C4 H7 N O4' 133.104 +MET 'L-peptide linking' y METHIONINE ? +'C5 H11 N O2 S' 149.207 +ASN 'L-peptide linking' y ASPARAGINE ? +'C4 H8 N2 O3' 132.119 +PHE 'L-peptide linking' y PHENYLALANINE ? +'C9 H11 N O2' 165.191 +TYR 'L-peptide linking' y TYROSINE ? +'C9 H11 N O3' 181.191 +CYS 'L-peptide linking' y CYSTEINE ? +'C3 H7 N O2 S' 121.154 +HIS 'L-peptide linking' y HISTIDINE ? +'C6 H10 N3 O2 1' 156.164 +ARQ NON-POLYMER . 'BENZOYLAMINO-BENZYL-METHYL-[2-HYDROXY-3-[1-METHYL-ETHYL-OXY-N-FORMAMIDYL]-4-PHENYL-BUTYL]-AMMONIUM' ? +'C30 H38 N3 O4 1' 504.648 +HOH NON-POLYMER . WATER ? +'H2 O' 18.015 +# +_exptl.entry_id 3AID +_exptl.method 'X-RAY DIFFRACTION' +_exptl.crystals_number 1 +# +_exptl_crystal.id 1 +_exptl_crystal.density_meas ? +_exptl_crystal.density_Matthews 2.37 +_exptl_crystal.density_percent_sol 48.04 +_exptl_crystal.description ? +# +_exptl_crystal_grow.crystal_id 1 +_exptl_crystal_grow.method ? +_exptl_crystal_grow.temp ? +_exptl_crystal_grow.temp_details ? +_exptl_crystal_grow.pH 5.4 +_exptl_crystal_grow.pdbx_pH_range ? +_exptl_crystal_grow.pdbx_details 'pH 5.4' +# +_diffrn.id 1 +_diffrn.ambient_temp 287 +_diffrn.ambient_temp_details ? +_diffrn.crystal_id 1 +# +_diffrn_detector.diffrn_id 1 +_diffrn_detector.detector 'AREA DETECTOR' +_diffrn_detector.type SIEMENS +_diffrn_detector.pdbx_collection_date 1995-01 +_diffrn_detector.details ? +# +_diffrn_radiation.diffrn_id 1 +_diffrn_radiation.wavelength_id 1 +_diffrn_radiation.pdbx_monochromatic_or_laue_m_l M +_diffrn_radiation.monochromator 'GRAPHITE(002)' +_diffrn_radiation.pdbx_diffrn_protocol ? +_diffrn_radiation.pdbx_scattering_type x-ray +# +_diffrn_radiation_wavelength.id 1 +_diffrn_radiation_wavelength.wavelength 1.5418 +_diffrn_radiation_wavelength.wt 1.0 +# +_diffrn_source.diffrn_id 1 +_diffrn_source.source 'ROTATING ANODE' +_diffrn_source.type 'RIGAKU RUH3R' +_diffrn_source.pdbx_synchrotron_site ? +_diffrn_source.pdbx_synchrotron_beamline ? +_diffrn_source.pdbx_wavelength 1.5418 +_diffrn_source.pdbx_wavelength_list ? +# +_reflns.entry_id 3AID +_reflns.observed_criterion_sigma_I 0.0 +_reflns.observed_criterion_sigma_F ? +_reflns.d_resolution_low 100. +_reflns.d_resolution_high 2.5 +_reflns.number_obs 14215 +_reflns.number_all ? +_reflns.percent_possible_obs 87. +_reflns.pdbx_Rmerge_I_obs 0.0810000 +_reflns.pdbx_Rsym_value 0.0810000 +_reflns.pdbx_netI_over_sigmaI ? +_reflns.B_iso_Wilson_estimate ? +_reflns.pdbx_redundancy 2.2 +_reflns.pdbx_ordinal 1 +_reflns.pdbx_diffrn_id 1 +# +_computing.entry_id 3AID +_computing.pdbx_data_reduction_ii SIEMENS +_computing.pdbx_data_reduction_ds SIEMENS +_computing.data_collection ? +_computing.structure_solution 'X-PLOR 2.0' +_computing.structure_refinement 'X-PLOR 2.0' +_computing.pdbx_structure_refinement_method ? +# +_refine.entry_id 3AID +_refine.ls_number_reflns_obs 6864 +_refine.ls_number_reflns_all ? +_refine.pdbx_ls_sigma_I ? +_refine.pdbx_ls_sigma_F 0.0 +_refine.pdbx_data_cutoff_high_absF ? +_refine.pdbx_data_cutoff_low_absF ? +_refine.pdbx_data_cutoff_high_rms_absF ? +_refine.ls_d_res_low 7.0 +_refine.ls_d_res_high 2.5 +_refine.ls_percent_reflns_obs 88. +_refine.ls_R_factor_obs 0.1800000 +_refine.ls_R_factor_all ? +_refine.ls_R_factor_R_work 0.1800000 +_refine.ls_R_factor_R_free ? +_refine.ls_R_factor_R_free_error ? +_refine.ls_R_factor_R_free_error_details ? +_refine.ls_percent_reflns_R_free ? +_refine.ls_number_reflns_R_free ? +_refine.ls_number_parameters ? +_refine.ls_number_restraints ? +_refine.occupancy_min ? +_refine.occupancy_max ? +_refine.B_iso_mean ? +_refine.aniso_B[1][1] ? +_refine.aniso_B[2][2] ? +_refine.aniso_B[3][3] ? +_refine.aniso_B[1][2] ? +_refine.aniso_B[1][3] ? +_refine.aniso_B[2][3] ? +_refine.solvent_model_details ? +_refine.solvent_model_param_ksol ? +_refine.solvent_model_param_bsol ? +_refine.pdbx_ls_cross_valid_method ? +_refine.details ? +_refine.pdbx_starting_model 'PDB ENTRY 3HVP' +_refine.pdbx_method_to_determine_struct 'MOLECULAR REPLACEMENT' +_refine.pdbx_isotropic_thermal_model ? +_refine.pdbx_stereochemistry_target_values ? +_refine.pdbx_stereochem_target_val_spec_case ? +_refine.pdbx_R_Free_selection_details ? +_refine.pdbx_overall_ESU_R ? +_refine.pdbx_overall_ESU_R_Free ? +_refine.overall_SU_ML ? +_refine.overall_SU_B ? +_refine.pdbx_refine_id 'X-RAY DIFFRACTION' +_refine.pdbx_diffrn_id 1 +# +_refine_hist.pdbx_refine_id 'X-RAY DIFFRACTION' +_refine_hist.cycle_id LAST +_refine_hist.pdbx_number_atoms_protein 1516 +_refine_hist.pdbx_number_atoms_nucleic_acid 0 +_refine_hist.pdbx_number_atoms_ligand 37 +_refine_hist.number_atoms_solvent 8 +_refine_hist.number_atoms_total 1561 +_refine_hist.d_res_high 2.5 +_refine_hist.d_res_low 7.0 +# +loop_ +_refine_ls_restr.type +_refine_ls_restr.dev_ideal +_refine_ls_restr.dev_ideal_target +_refine_ls_restr.weight +_refine_ls_restr.number +_refine_ls_restr.pdbx_refine_id +x_bond_d 0.021 ? ? ? 'X-RAY DIFFRACTION' +x_bond_d_na ? ? ? ? 'X-RAY DIFFRACTION' +x_bond_d_prot ? ? ? ? 'X-RAY DIFFRACTION' +x_angle_d ? ? ? ? 'X-RAY DIFFRACTION' +x_angle_d_na ? ? ? ? 'X-RAY DIFFRACTION' +x_angle_d_prot ? ? ? ? 'X-RAY DIFFRACTION' +x_angle_deg 3.50 ? ? ? 'X-RAY DIFFRACTION' +x_angle_deg_na ? ? ? ? 'X-RAY DIFFRACTION' +x_angle_deg_prot ? ? ? ? 'X-RAY DIFFRACTION' +x_dihedral_angle_d 30.1 ? ? ? 'X-RAY DIFFRACTION' +x_dihedral_angle_d_na ? ? ? ? 'X-RAY DIFFRACTION' +x_dihedral_angle_d_prot ? ? ? ? 'X-RAY DIFFRACTION' +x_improper_angle_d 16.4 ? ? ? 'X-RAY DIFFRACTION' +x_improper_angle_d_na ? ? ? ? 'X-RAY DIFFRACTION' +x_improper_angle_d_prot ? ? ? ? 'X-RAY DIFFRACTION' +x_mcbond_it ? ? ? ? 'X-RAY DIFFRACTION' +x_mcangle_it ? ? ? ? 'X-RAY DIFFRACTION' +x_scbond_it ? ? ? ? 'X-RAY DIFFRACTION' +x_scangle_it ? ? ? ? 'X-RAY DIFFRACTION' +# +loop_ +_pdbx_xplor_file.serial_no +_pdbx_xplor_file.param_file +_pdbx_xplor_file.topol_file +_pdbx_xplor_file.pdbx_refine_id +1 PARAM19X.PRO TOPH19X.PRO 'X-RAY DIFFRACTION' +2 ? ? 'X-RAY DIFFRACTION' +# +_struct.entry_id 3AID +_struct.title +;A NEW CLASS OF HIV-1 PROTEASE INHIBITOR: THE CRYSTALLOGRAPHIC STRUCTURE, INHIBITION AND CHEMICAL SYNTHESIS OF AN AMINIMIDE PEPTIDE ISOSTERE +; +_struct.pdbx_descriptor +;HUMAN IMMUNODEFICIENCY VIRUS PROTEASE, BENZOYLAMINO-BENZYL-METHYL-[2-HYDROXY-3-[1-METHYL-ETHYL-OXY-N-FORMAMIDYL]-4-PHENYL-BUTYL]-AMMONIUM +; +_struct.pdbx_model_details ? +_struct.pdbx_CASP_flag ? +_struct.pdbx_model_type_details ? +# +_struct_keywords.entry_id 3AID +_struct_keywords.pdbx_keywords 'ASPARTYL PROTEASE' +_struct_keywords.text 'ASPARTYL PROTEASE, PROTEASE, HIV, PEPTIDE ISOSTERE INHIBITOR, DRUG DESIGN' +# +loop_ +_struct_asym.id +_struct_asym.pdbx_blank_PDB_chainid_flag +_struct_asym.pdbx_modified +_struct_asym.entity_id +_struct_asym.details +A N N 1 ? +B N N 1 ? +C N N 2 ? +D N N 3 ? +E N N 3 ? +# +_struct_biol.id 1 +# +loop_ +_struct_conf.conf_type_id +_struct_conf.id +_struct_conf.pdbx_PDB_helix_id +_struct_conf.beg_label_comp_id +_struct_conf.beg_label_asym_id +_struct_conf.beg_label_seq_id +_struct_conf.pdbx_beg_PDB_ins_code +_struct_conf.end_label_comp_id +_struct_conf.end_label_asym_id +_struct_conf.end_label_seq_id +_struct_conf.pdbx_end_PDB_ins_code +_struct_conf.beg_auth_comp_id +_struct_conf.beg_auth_asym_id +_struct_conf.beg_auth_seq_id +_struct_conf.end_auth_comp_id +_struct_conf.end_auth_asym_id +_struct_conf.end_auth_seq_id +_struct_conf.pdbx_PDB_helix_class +_struct_conf.details +_struct_conf.pdbx_PDB_helix_length +HELX_P HELX_P1 1 ARG A 87 ? LEU A 90 ? ARG A 87 LEU A 90 1 ? 4 +HELX_P HELX_P2 2 ARG B 87 ? LEU B 90 ? ARG B 87 LEU B 90 1 ? 4 +# +_struct_conf_type.id HELX_P +_struct_conf_type.criteria ? +_struct_conf_type.reference ? +# +loop_ +_struct_sheet.id +_struct_sheet.type +_struct_sheet.number_strands +_struct_sheet.details +A ? 4 ? +B ? 3 ? +C ? 2 ? +D ? 2 ? +E ? 3 ? +F ? 2 ? +# +loop_ +_struct_sheet_order.sheet_id +_struct_sheet_order.range_id_1 +_struct_sheet_order.range_id_2 +_struct_sheet_order.offset +_struct_sheet_order.sense +A 1 2 ? anti-parallel +A 2 3 ? anti-parallel +A 3 4 ? anti-parallel +B 1 2 ? anti-parallel +B 2 3 ? anti-parallel +C 1 2 ? anti-parallel +D 1 2 ? anti-parallel +E 1 2 ? anti-parallel +E 2 3 ? anti-parallel +F 1 2 ? anti-parallel +# +loop_ +_struct_sheet_range.sheet_id +_struct_sheet_range.id +_struct_sheet_range.beg_label_comp_id +_struct_sheet_range.beg_label_asym_id +_struct_sheet_range.beg_label_seq_id +_struct_sheet_range.pdbx_beg_PDB_ins_code +_struct_sheet_range.end_label_comp_id +_struct_sheet_range.end_label_asym_id +_struct_sheet_range.end_label_seq_id +_struct_sheet_range.pdbx_end_PDB_ins_code +_struct_sheet_range.symmetry +_struct_sheet_range.beg_auth_comp_id +_struct_sheet_range.beg_auth_asym_id +_struct_sheet_range.beg_auth_seq_id +_struct_sheet_range.end_auth_comp_id +_struct_sheet_range.end_auth_asym_id +_struct_sheet_range.end_auth_seq_id +A 1 GLN A 18 ? LEU A 23 ? ? GLN A 18 LEU A 23 +A 2 LEU A 10 ? ILE A 15 ? ? LEU A 10 ILE A 15 +A 3 ILE A 62 ? ILE A 66 ? ? ILE A 62 ILE A 66 +A 4 HIS A 69 ? GLY A 73 ? ? HIS A 69 GLY A 73 +B 1 LYS A 43 ? GLY A 49 ? ? LYS A 43 GLY A 49 +B 2 GLY A 52 ? TYR A 59 ? ? GLY A 52 TYR A 59 +B 3 VAL A 75 ? GLY A 78 ? ? VAL A 75 GLY A 78 +C 1 THR A 96 ? ASN A 98 ? ? THR A 96 ASN A 98 +C 2 THR B 96 ? ASN B 98 ? ? THR B 96 ASN B 98 +D 1 LEU B 10 ? ILE B 15 ? ? LEU B 10 ILE B 15 +D 2 GLN B 18 ? LEU B 23 ? ? GLN B 18 LEU B 23 +E 1 TRP B 42 ? GLY B 49 ? ? TRP B 42 GLY B 49 +E 2 GLY B 52 ? TYR B 59 ? ? GLY B 52 TYR B 59 +E 3 VAL B 75 ? GLY B 78 ? ? VAL B 75 GLY B 78 +F 1 ILE B 62 ? ILE B 66 ? ? ILE B 62 ILE B 66 +F 2 HIS B 69 ? GLY B 73 ? ? HIS B 69 GLY B 73 +# +loop_ +_pdbx_struct_sheet_hbond.sheet_id +_pdbx_struct_sheet_hbond.range_id_1 +_pdbx_struct_sheet_hbond.range_id_2 +_pdbx_struct_sheet_hbond.range_1_label_atom_id +_pdbx_struct_sheet_hbond.range_1_label_comp_id +_pdbx_struct_sheet_hbond.range_1_label_asym_id +_pdbx_struct_sheet_hbond.range_1_label_seq_id +_pdbx_struct_sheet_hbond.range_1_PDB_ins_code +_pdbx_struct_sheet_hbond.range_1_auth_atom_id +_pdbx_struct_sheet_hbond.range_1_auth_comp_id +_pdbx_struct_sheet_hbond.range_1_auth_asym_id +_pdbx_struct_sheet_hbond.range_1_auth_seq_id +_pdbx_struct_sheet_hbond.range_2_label_atom_id +_pdbx_struct_sheet_hbond.range_2_label_comp_id +_pdbx_struct_sheet_hbond.range_2_label_asym_id +_pdbx_struct_sheet_hbond.range_2_label_seq_id +_pdbx_struct_sheet_hbond.range_2_PDB_ins_code +_pdbx_struct_sheet_hbond.range_2_auth_atom_id +_pdbx_struct_sheet_hbond.range_2_auth_comp_id +_pdbx_struct_sheet_hbond.range_2_auth_asym_id +_pdbx_struct_sheet_hbond.range_2_auth_seq_id +A 1 2 O GLN A 18 ? O GLN A 18 N ILE A 15 ? N ILE A 15 +A 2 3 O ARG A 14 ? O ARG A 14 N GLU A 65 ? N GLU A 65 +A 3 4 O ILE A 62 ? O ILE A 62 N GLY A 73 ? N GLY A 73 +B 1 2 O LYS A 43 ? O LYS A 43 N GLN A 58 ? N GLN A 58 +B 2 3 O ARG A 57 ? O ARG A 57 N VAL A 77 ? N VAL A 77 +C 1 2 O THR A 96 ? O THR A 96 N ASN B 98 ? N ASN B 98 +D 1 2 O VAL B 11 ? O VAL B 11 N ALA B 22 ? N ALA B 22 +E 1 2 O LYS B 43 ? O LYS B 43 N GLN B 58 ? N GLN B 58 +E 2 3 O ARG B 57 ? O ARG B 57 N VAL B 77 ? N VAL B 77 +F 1 2 O ILE B 62 ? O ILE B 62 N GLY B 73 ? N GLY B 73 +# +_struct_site.id AC1 +_struct_site.details 'BINDING SITE FOR RESIDUE ARQ A 401' +_struct_site.pdbx_evidence_code SOFTWARE +# +loop_ +_struct_site_gen.id +_struct_site_gen.site_id +_struct_site_gen.pdbx_num_res +_struct_site_gen.label_comp_id +_struct_site_gen.label_asym_id +_struct_site_gen.label_seq_id +_struct_site_gen.pdbx_auth_ins_code +_struct_site_gen.auth_comp_id +_struct_site_gen.auth_asym_id +_struct_site_gen.auth_seq_id +_struct_site_gen.label_atom_id +_struct_site_gen.label_alt_id +_struct_site_gen.symmetry +_struct_site_gen.details +1 AC1 10 ASP A 25 ? ASP A 25 . . 1_555 ? +2 AC1 10 GLY A 27 ? GLY A 27 . . 1_555 ? +3 AC1 10 ALA A 28 ? ALA A 28 . . 1_555 ? +4 AC1 10 ILE A 50 ? ILE A 50 . . 1_555 ? +5 AC1 10 HOH D . ? HOH A 402 . . 1_555 ? +6 AC1 10 LEU B 23 ? LEU B 23 . . 1_555 ? +7 AC1 10 ASP B 25 ? ASP B 25 . . 1_555 ? +8 AC1 10 GLY B 27 ? GLY B 27 . . 1_555 ? +9 AC1 10 GLY B 49 ? GLY B 49 . . 1_555 ? +10 AC1 10 ILE B 50 ? ILE B 50 . . 1_555 ? +# +_database_PDB_matrix.entry_id 3AID +_database_PDB_matrix.origx[1][1] 1.000000 +_database_PDB_matrix.origx[1][2] 0.000000 +_database_PDB_matrix.origx[1][3] 0.000000 +_database_PDB_matrix.origx[2][1] 0.000000 +_database_PDB_matrix.origx[2][2] 1.000000 +_database_PDB_matrix.origx[2][3] 0.000000 +_database_PDB_matrix.origx[3][1] 0.000000 +_database_PDB_matrix.origx[3][2] 0.000000 +_database_PDB_matrix.origx[3][3] 1.000000 +_database_PDB_matrix.origx_vector[1] 0.00000 +_database_PDB_matrix.origx_vector[2] 0.00000 +_database_PDB_matrix.origx_vector[3] 0.00000 +# +_atom_sites.entry_id 3AID +_atom_sites.Cartn_transform_axes ? +_atom_sites.fract_transf_matrix[1][1] 0.018832 +_atom_sites.fract_transf_matrix[1][2] 0.000000 +_atom_sites.fract_transf_matrix[1][3] 0.000000 +_atom_sites.fract_transf_matrix[2][1] 0.000000 +_atom_sites.fract_transf_matrix[2][2] 0.016393 +_atom_sites.fract_transf_matrix[2][3] 0.000000 +_atom_sites.fract_transf_matrix[3][1] 0.000000 +_atom_sites.fract_transf_matrix[3][2] 0.000000 +_atom_sites.fract_transf_matrix[3][3] 0.015823 +_atom_sites.fract_transf_vector[1] 0.00000 +_atom_sites.fract_transf_vector[2] 0.00000 +_atom_sites.fract_transf_vector[3] 0.00000 +# +loop_ +_atom_type.symbol +N +C +O +H +S +# +loop_ +_atom_site.group_PDB +_atom_site.id +_atom_site.type_symbol +_atom_site.label_atom_id +_atom_site.label_alt_id +_atom_site.label_comp_id +_atom_site.label_asym_id +_atom_site.label_entity_id +_atom_site.label_seq_id +_atom_site.pdbx_PDB_ins_code +_atom_site.Cartn_x +_atom_site.Cartn_y +_atom_site.Cartn_z +_atom_site.occupancy +_atom_site.B_iso_or_equiv +_atom_site.Cartn_x_esd +_atom_site.Cartn_y_esd +_atom_site.Cartn_z_esd +_atom_site.occupancy_esd +_atom_site.B_iso_or_equiv_esd +_atom_site.pdbx_formal_charge +_atom_site.auth_seq_id +_atom_site.auth_comp_id +_atom_site.auth_asym_id +_atom_site.auth_atom_id +_atom_site.pdbx_PDB_model_num +ATOM 1 N N . PRO A 1 1 ? -2.555 9.253 34.411 1.00 30.60 ? ? ? ? ? ? 1 PRO A N 1 +ATOM 2 C CA . PRO A 1 1 ? -1.620 8.250 33.848 1.00 28.31 ? ? ? ? ? ? 1 PRO A CA 1 +ATOM 3 C C . PRO A 1 1 ? -0.108 8.328 33.944 1.00 23.58 ? ? ? ? ? ? 1 PRO A C 1 +ATOM 4 O O . PRO A 1 1 ? 0.501 8.910 33.067 1.00 29.57 ? ? ? ? ? ? 1 PRO A O 1 +ATOM 5 C CB . PRO A 1 1 ? -2.238 6.879 33.989 1.00 28.94 ? ? ? ? ? ? 1 PRO A CB 1 +ATOM 6 C CG . PRO A 1 1 ? -3.624 7.314 33.540 1.00 32.55 ? ? ? ? ? ? 1 PRO A CG 1 +ATOM 7 C CD . PRO A 1 1 ? -3.859 8.575 34.395 1.00 34.64 ? ? ? ? ? ? 1 PRO A CD 1 +ATOM 8 H H2 . PRO A 1 1 ? -2.308 9.752 35.280 0.00 0.00 ? ? ? ? ? ? 1 PRO A H2 1 +ATOM 9 H H3 . PRO A 1 1 ? -2.623 10.035 33.697 0.00 0.00 ? ? ? ? ? ? 1 PRO A H3 1 +ATOM 10 N N . GLN A 1 2 ? 0.519 7.674 34.926 1.00 20.68 ? ? ? ? ? ? 2 GLN A N 1 +ATOM 11 C CA . GLN A 1 2 ? 1.942 7.366 34.601 1.00 22.20 ? ? ? ? ? ? 2 GLN A CA 1 +ATOM 12 C C . GLN A 1 2 ? 2.286 5.899 34.319 1.00 22.20 ? ? ? ? ? ? 2 GLN A C 1 +ATOM 13 O O . GLN A 1 2 ? 2.239 5.053 35.212 1.00 24.91 ? ? ? ? ? ? 2 GLN A O 1 +ATOM 14 C CB . GLN A 1 2 ? 3.002 7.941 35.586 1.00 22.73 ? ? ? ? ? ? 2 GLN A CB 1 +ATOM 15 C CG . GLN A 1 2 ? 4.462 7.592 35.145 1.00 23.29 ? ? ? ? ? ? 2 GLN A CG 1 +ATOM 16 C CD . GLN A 1 2 ? 5.541 8.058 36.132 1.00 23.86 ? ? ? ? ? ? 2 GLN A CD 1 +ATOM 17 O OE1 . GLN A 1 2 ? 6.166 9.080 35.963 1.00 21.61 ? ? ? ? ? ? 2 GLN A OE1 1 +ATOM 18 N NE2 . GLN A 1 2 ? 5.815 7.280 37.164 1.00 21.66 ? ? ? ? ? ? 2 GLN A NE2 1 +ATOM 19 H H . GLN A 1 2 ? 0.038 7.260 35.695 1.00 15.00 ? ? ? ? ? ? 2 GLN A H 1 +ATOM 20 H HE21 . GLN A 1 2 ? 6.517 7.687 37.741 1.00 15.00 ? ? ? ? ? ? 2 GLN A HE21 1 +ATOM 21 H HE22 . GLN A 1 2 ? 5.386 6.401 37.335 1.00 15.00 ? ? ? ? ? ? 2 GLN A HE22 1 +ATOM 22 N N . ILE A 1 3 ? 2.606 5.658 33.030 1.00 18.27 ? ? ? ? ? ? 3 ILE A N 1 +ATOM 23 C CA . ILE A 1 3 ? 2.930 4.304 32.526 1.00 14.22 ? ? ? ? ? ? 3 ILE A CA 1 +ATOM 24 C C . ILE A 1 3 ? 4.436 4.069 32.273 1.00 15.16 ? ? ? ? ? ? 3 ILE A C 1 +ATOM 25 O O . ILE A 1 3 ? 5.020 4.591 31.332 1.00 20.12 ? ? ? ? ? ? 3 ILE A O 1 +ATOM 26 C CB . ILE A 1 3 ? 2.076 3.977 31.276 1.00 8.81 ? ? ? ? ? ? 3 ILE A CB 1 +ATOM 27 C CG1 . ILE A 1 3 ? 0.614 4.286 31.565 1.00 6.38 ? ? ? ? ? ? 3 ILE A CG1 1 +ATOM 28 C CG2 . ILE A 1 3 ? 2.170 2.509 30.873 1.00 3.08 ? ? ? ? ? ? 3 ILE A CG2 1 +ATOM 29 C CD1 . ILE A 1 3 ? -0.351 3.719 30.518 1.00 10.97 ? ? ? ? ? ? 3 ILE A CD1 1 +ATOM 30 H H . ILE A 1 3 ? 2.634 6.454 32.436 1.00 15.00 ? ? ? ? ? ? 3 ILE A H 1 +ATOM 31 N N . THR A 1 4 ? 5.050 3.270 33.166 1.00 10.39 ? ? ? ? ? ? 4 THR A N 1 +ATOM 32 C CA . THR A 1 4 ? 6.416 2.743 32.935 1.00 10.00 ? ? ? ? ? ? 4 THR A CA 1 +ATOM 33 C C . THR A 1 4 ? 6.599 1.452 32.068 1.00 11.66 ? ? ? ? ? ? 4 THR A C 1 +ATOM 34 O O . THR A 1 4 ? 5.793 0.527 32.112 1.00 15.69 ? ? ? ? ? ? 4 THR A O 1 +ATOM 35 C CB . THR A 1 4 ? 7.056 2.437 34.248 1.00 4.39 ? ? ? ? ? ? 4 THR A CB 1 +ATOM 36 O OG1 . THR A 1 4 ? 6.473 1.231 34.804 1.00 5.25 ? ? ? ? ? ? 4 THR A OG1 1 +ATOM 37 C CG2 . THR A 1 4 ? 6.920 3.635 35.165 1.00 2.00 ? ? ? ? ? ? 4 THR A CG2 1 +ATOM 38 H H . THR A 1 4 ? 4.492 2.965 33.935 1.00 15.00 ? ? ? ? ? ? 4 THR A H 1 +ATOM 39 H HG1 . THR A 1 4 ? 5.929 0.815 34.136 1.00 15.00 ? ? ? ? ? ? 4 THR A HG1 1 +ATOM 40 N N . LEU A 1 5 ? 7.715 1.398 31.321 1.00 8.84 ? ? ? ? ? ? 5 LEU A N 1 +ATOM 41 C CA . LEU A 1 5 ? 7.870 0.420 30.235 1.00 7.65 ? ? ? ? ? ? 5 LEU A CA 1 +ATOM 42 C C . LEU A 1 5 ? 8.606 -0.903 30.466 1.00 8.47 ? ? ? ? ? ? 5 LEU A C 1 +ATOM 43 O O . LEU A 1 5 ? 9.134 -1.511 29.545 1.00 9.06 ? ? ? ? ? ? 5 LEU A O 1 +ATOM 44 C CB . LEU A 1 5 ? 8.534 1.094 29.034 1.00 6.66 ? ? ? ? ? ? 5 LEU A CB 1 +ATOM 45 C CG . LEU A 1 5 ? 7.818 2.230 28.311 1.00 9.11 ? ? ? ? ? ? 5 LEU A CG 1 +ATOM 46 C CD1 . LEU A 1 5 ? 6.305 2.030 28.315 1.00 10.52 ? ? ? ? ? ? 5 LEU A CD1 1 +ATOM 47 C CD2 . LEU A 1 5 ? 8.236 3.611 28.775 1.00 10.50 ? ? ? ? ? ? 5 LEU A CD2 1 +ATOM 48 H H . LEU A 1 5 ? 8.405 2.109 31.468 1.00 15.00 ? ? ? ? ? ? 5 LEU A H 1 +ATOM 49 N N . TRP A 1 6 ? 8.646 -1.381 31.725 1.00 13.00 ? ? ? ? ? ? 6 TRP A N 1 +ATOM 50 C CA . TRP A 1 6 ? 9.213 -2.750 31.877 1.00 14.24 ? ? ? ? ? ? 6 TRP A CA 1 +ATOM 51 C C . TRP A 1 6 ? 8.280 -3.867 31.412 1.00 14.81 ? ? ? ? ? ? 6 TRP A C 1 +ATOM 52 O O . TRP A 1 6 ? 8.651 -5.001 31.168 1.00 16.96 ? ? ? ? ? ? 6 TRP A O 1 +ATOM 53 C CB . TRP A 1 6 ? 9.687 -3.124 33.289 1.00 14.28 ? ? ? ? ? ? 6 TRP A CB 1 +ATOM 54 C CG . TRP A 1 6 ? 10.074 -1.910 34.088 1.00 20.68 ? ? ? ? ? ? 6 TRP A CG 1 +ATOM 55 C CD1 . TRP A 1 6 ? 9.182 -1.145 34.863 1.00 27.93 ? ? ? ? ? ? 6 TRP A CD1 1 +ATOM 56 C CD2 . TRP A 1 6 ? 11.333 -1.208 34.201 1.00 21.72 ? ? ? ? ? ? 6 TRP A CD2 1 +ATOM 57 N NE1 . TRP A 1 6 ? 9.777 -0.041 35.406 1.00 26.52 ? ? ? ? ? ? 6 TRP A NE1 1 +ATOM 58 C CE2 . TRP A 1 6 ? 11.101 -0.027 35.017 1.00 22.61 ? ? ? ? ? ? 6 TRP A CE2 1 +ATOM 59 C CE3 . TRP A 1 6 ? 12.617 -1.473 33.714 1.00 16.16 ? ? ? ? ? ? 6 TRP A CE3 1 +ATOM 60 C CZ2 . TRP A 1 6 ? 12.128 0.887 35.290 1.00 20.31 ? ? ? ? ? ? 6 TRP A CZ2 1 +ATOM 61 C CZ3 . TRP A 1 6 ? 13.644 -0.553 34.018 1.00 17.45 ? ? ? ? ? ? 6 TRP A CZ3 1 +ATOM 62 C CH2 . TRP A 1 6 ? 13.406 0.616 34.778 1.00 18.71 ? ? ? ? ? ? 6 TRP A CH2 1 +ATOM 63 H H . TRP A 1 6 ? 8.228 -0.834 32.447 1.00 15.00 ? ? ? ? ? ? 6 TRP A H 1 +ATOM 64 H HE1 . TRP A 1 6 ? 9.317 0.632 35.960 1.00 15.00 ? ? ? ? ? ? 6 TRP A HE1 1 +ATOM 65 N N . LYS A 1 7 ? 7.017 -3.454 31.284 1.00 12.93 ? ? ? ? ? ? 7 LYS A N 1 +ATOM 66 C CA . LYS A 1 7 ? 5.990 -4.250 30.643 1.00 9.56 ? ? ? ? ? ? 7 LYS A CA 1 +ATOM 67 C C . LYS A 1 7 ? 5.420 -3.525 29.460 1.00 11.55 ? ? ? ? ? ? 7 LYS A C 1 +ATOM 68 O O . LYS A 1 7 ? 5.478 -2.299 29.399 1.00 12.41 ? ? ? ? ? ? 7 LYS A O 1 +ATOM 69 C CB . LYS A 1 7 ? 4.841 -4.432 31.607 1.00 18.71 ? ? ? ? ? ? 7 LYS A CB 1 +ATOM 70 C CG . LYS A 1 7 ? 5.137 -5.278 32.839 1.00 28.83 ? ? ? ? ? ? 7 LYS A CG 1 +ATOM 71 C CD . LYS A 1 7 ? 3.948 -5.219 33.795 1.00 36.81 ? ? ? ? ? ? 7 LYS A CD 1 +ATOM 72 C CE . LYS A 1 7 ? 4.209 -5.975 35.117 1.00 43.42 ? ? ? ? ? ? 7 LYS A CE 1 +ATOM 73 N NZ . LYS A 1 7 ? 3.160 -5.652 36.107 1.00 42.34 ? ? ? ? ? ? 7 LYS A NZ 1 +ATOM 74 H H . LYS A 1 7 ? 6.799 -2.518 31.545 1.00 15.00 ? ? ? ? ? ? 7 LYS A H 1 +ATOM 75 H HZ1 . LYS A 1 7 ? 2.887 -4.655 35.991 1.00 15.00 ? ? ? ? ? ? 7 LYS A HZ1 1 +ATOM 76 H HZ2 . LYS A 1 7 ? 2.331 -6.260 35.944 1.00 15.00 ? ? ? ? ? ? 7 LYS A HZ2 1 +ATOM 77 H HZ3 . LYS A 1 7 ? 3.527 -5.810 37.067 1.00 15.00 ? ? ? ? ? ? 7 LYS A HZ3 1 +ATOM 78 N N . ARG A 1 8 ? 4.801 -4.305 28.535 1.00 12.42 ? ? ? ? ? ? 8 ARG A N 1 +ATOM 79 C CA . ARG A 1 8 ? 4.091 -3.587 27.449 1.00 10.97 ? ? ? ? ? ? 8 ARG A CA 1 +ATOM 80 C C . ARG A 1 8 ? 3.003 -2.612 27.887 1.00 11.55 ? ? ? ? ? ? 8 ARG A C 1 +ATOM 81 O O . ARG A 1 8 ? 2.184 -2.938 28.746 1.00 13.27 ? ? ? ? ? ? 8 ARG A O 1 +ATOM 82 C CB . ARG A 1 8 ? 3.384 -4.517 26.488 1.00 9.39 ? ? ? ? ? ? 8 ARG A CB 1 +ATOM 83 C CG . ARG A 1 8 ? 4.144 -5.748 26.107 1.00 6.80 ? ? ? ? ? ? 8 ARG A CG 1 +ATOM 84 C CD . ARG A 1 8 ? 3.297 -6.581 25.184 1.00 12.73 ? ? ? ? ? ? 8 ARG A CD 1 +ATOM 85 N NE . ARG A 1 8 ? 4.151 -7.669 24.790 1.00 28.15 ? ? ? ? ? ? 8 ARG A NE 1 +ATOM 86 C CZ . ARG A 1 8 ? 4.343 -8.083 23.521 1.00 36.60 ? ? ? ? ? ? 8 ARG A CZ 1 +ATOM 87 N NH1 . ARG A 1 8 ? 3.598 -7.690 22.490 1.00 33.53 ? ? ? ? ? ? 8 ARG A NH1 1 +ATOM 88 N NH2 . ARG A 1 8 ? 5.334 -8.947 23.322 1.00 45.16 ? ? ? ? ? ? 8 ARG A NH2 1 +ATOM 89 H H . ARG A 1 8 ? 4.761 -5.287 28.694 1.00 15.00 ? ? ? ? ? ? 8 ARG A H 1 +ATOM 90 H HE . ARG A 1 8 ? 4.684 -8.129 25.500 1.00 15.00 ? ? ? ? ? ? 8 ARG A HE 1 +ATOM 91 H HH11 . ARG A 1 8 ? 2.832 -7.063 22.626 1.00 15.00 ? ? ? ? ? ? 8 ARG A HH11 1 +ATOM 92 H HH12 . ARG A 1 8 ? 3.812 -8.029 21.574 1.00 15.00 ? ? ? ? ? ? 8 ARG A HH12 1 +ATOM 93 H HH21 . ARG A 1 8 ? 5.883 -9.253 24.101 1.00 15.00 ? ? ? ? ? ? 8 ARG A HH21 1 +ATOM 94 H HH22 . ARG A 1 8 ? 5.536 -9.289 22.407 1.00 15.00 ? ? ? ? ? ? 8 ARG A HH22 1 +ATOM 95 N N . PRO A 1 9 ? 2.957 -1.418 27.265 1.00 10.22 ? ? ? ? ? ? 9 PRO A N 1 +ATOM 96 C CA . PRO A 1 9 ? 1.838 -0.522 27.644 1.00 9.31 ? ? ? ? ? ? 9 PRO A CA 1 +ATOM 97 C C . PRO A 1 9 ? 0.443 -0.973 27.113 1.00 9.47 ? ? ? ? ? ? 9 PRO A C 1 +ATOM 98 O O . PRO A 1 9 ? -0.016 -0.531 26.071 1.00 12.70 ? ? ? ? ? ? 9 PRO A O 1 +ATOM 99 C CB . PRO A 1 9 ? 2.350 0.830 27.118 1.00 7.49 ? ? ? ? ? ? 9 PRO A CB 1 +ATOM 100 C CG . PRO A 1 9 ? 3.309 0.489 25.949 1.00 10.39 ? ? ? ? ? ? 9 PRO A CG 1 +ATOM 101 C CD . PRO A 1 9 ? 3.886 -0.881 26.272 1.00 7.83 ? ? ? ? ? ? 9 PRO A CD 1 +ATOM 102 N N . LEU A 1 10 ? -0.222 -1.893 27.855 1.00 10.28 ? ? ? ? ? ? 10 LEU A N 1 +ATOM 103 C CA . LEU A 1 10 ? -1.555 -2.420 27.472 1.00 5.59 ? ? ? ? ? ? 10 LEU A CA 1 +ATOM 104 C C . LEU A 1 10 ? -2.725 -1.865 28.254 1.00 6.30 ? ? ? ? ? ? 10 LEU A C 1 +ATOM 105 O O . LEU A 1 10 ? -2.737 -1.938 29.472 1.00 9.79 ? ? ? ? ? ? 10 LEU A O 1 +ATOM 106 C CB . LEU A 1 10 ? -1.653 -3.892 27.745 1.00 2.00 ? ? ? ? ? ? 10 LEU A CB 1 +ATOM 107 C CG . LEU A 1 10 ? -1.056 -4.838 26.734 1.00 2.00 ? ? ? ? ? ? 10 LEU A CG 1 +ATOM 108 C CD1 . LEU A 1 10 ? -1.127 -6.225 27.327 1.00 2.00 ? ? ? ? ? ? 10 LEU A CD1 1 +ATOM 109 C CD2 . LEU A 1 10 ? -1.725 -4.792 25.361 1.00 2.00 ? ? ? ? ? ? 10 LEU A CD2 1 +ATOM 110 H H . LEU A 1 10 ? 0.241 -2.213 28.683 1.00 15.00 ? ? ? ? ? ? 10 LEU A H 1 +ATOM 111 N N . VAL A 1 11 ? -3.701 -1.304 27.534 1.00 8.40 ? ? ? ? ? ? 11 VAL A N 1 +ATOM 112 C CA . VAL A 1 11 ? -4.916 -0.688 28.141 1.00 13.91 ? ? ? ? ? ? 11 VAL A CA 1 +ATOM 113 C C . VAL A 1 11 ? -6.236 -1.349 27.788 1.00 13.86 ? ? ? ? ? ? 11 VAL A C 1 +ATOM 114 O O . VAL A 1 11 ? -6.351 -2.140 26.860 1.00 17.89 ? ? ? ? ? ? 11 VAL A O 1 +ATOM 115 C CB . VAL A 1 11 ? -5.114 0.850 27.856 1.00 12.10 ? ? ? ? ? ? 11 VAL A CB 1 +ATOM 116 C CG1 . VAL A 1 11 ? -4.279 1.777 28.747 1.00 7.44 ? ? ? ? ? ? 11 VAL A CG1 1 +ATOM 117 C CG2 . VAL A 1 11 ? -5.022 1.221 26.378 1.00 11.10 ? ? ? ? ? ? 11 VAL A CG2 1 +ATOM 118 H H . VAL A 1 11 ? -3.481 -1.176 26.579 1.00 15.00 ? ? ? ? ? ? 11 VAL A H 1 +ATOM 119 N N . THR A 1 12 ? -7.266 -0.967 28.535 1.00 10.31 ? ? ? ? ? ? 12 THR A N 1 +ATOM 120 C CA . THR A 1 12 ? -8.564 -1.409 28.023 1.00 10.43 ? ? ? ? ? ? 12 THR A CA 1 +ATOM 121 C C . THR A 1 12 ? -9.308 -0.344 27.224 1.00 11.24 ? ? ? ? ? ? 12 THR A C 1 +ATOM 122 O O . THR A 1 12 ? -9.366 0.823 27.604 1.00 10.44 ? ? ? ? ? ? 12 THR A O 1 +ATOM 123 C CB . THR A 1 12 ? -9.457 -1.922 29.145 1.00 12.18 ? ? ? ? ? ? 12 THR A CB 1 +ATOM 124 O OG1 . THR A 1 12 ? -8.702 -2.710 30.069 1.00 17.40 ? ? ? ? ? ? 12 THR A OG1 1 +ATOM 125 C CG2 . THR A 1 12 ? -10.631 -2.754 28.609 1.00 17.57 ? ? ? ? ? ? 12 THR A CG2 1 +ATOM 126 H H . THR A 1 12 ? -7.147 -0.445 29.378 1.00 15.00 ? ? ? ? ? ? 12 THR A H 1 +ATOM 127 H HG1 . THR A 1 12 ? -8.439 -3.503 29.623 1.00 15.00 ? ? ? ? ? ? 12 THR A HG1 1 +ATOM 128 N N . ILE A 1 13 ? -9.871 -0.754 26.084 1.00 9.17 ? ? ? ? ? ? 13 ILE A N 1 +ATOM 129 C CA . ILE A 1 13 ? -10.756 0.212 25.415 1.00 12.06 ? ? ? ? ? ? 13 ILE A CA 1 +ATOM 130 C C . ILE A 1 13 ? -12.234 -0.216 25.366 1.00 10.83 ? ? ? ? ? ? 13 ILE A C 1 +ATOM 131 O O . ILE A 1 13 ? -12.538 -1.399 25.368 1.00 9.79 ? ? ? ? ? ? 13 ILE A O 1 +ATOM 132 C CB . ILE A 1 13 ? -10.210 0.567 24.013 1.00 12.82 ? ? ? ? ? ? 13 ILE A CB 1 +ATOM 133 C CG1 . ILE A 1 13 ? -10.268 -0.673 23.102 1.00 13.26 ? ? ? ? ? ? 13 ILE A CG1 1 +ATOM 134 C CG2 . ILE A 1 13 ? -8.775 1.089 24.152 1.00 10.61 ? ? ? ? ? ? 13 ILE A CG2 1 +ATOM 135 C CD1 . ILE A 1 13 ? -9.741 -0.448 21.680 1.00 8.04 ? ? ? ? ? ? 13 ILE A CD1 1 +ATOM 136 H H . ILE A 1 13 ? -9.726 -1.672 25.742 1.00 15.00 ? ? ? ? ? ? 13 ILE A H 1 +ATOM 137 N N . ARG A 1 14 ? -13.131 0.779 25.310 1.00 11.30 ? ? ? ? ? ? 14 ARG A N 1 +ATOM 138 C CA . ARG A 1 14 ? -14.522 0.471 24.896 1.00 12.92 ? ? ? ? ? ? 14 ARG A CA 1 +ATOM 139 C C . ARG A 1 14 ? -15.041 1.080 23.583 1.00 10.44 ? ? ? ? ? ? 14 ARG A C 1 +ATOM 140 O O . ARG A 1 14 ? -15.093 2.293 23.409 1.00 7.41 ? ? ? ? ? ? 14 ARG A O 1 +ATOM 141 C CB . ARG A 1 14 ? -15.504 0.807 26.012 1.00 14.22 ? ? ? ? ? ? 14 ARG A CB 1 +ATOM 142 C CG . ARG A 1 14 ? -16.864 0.177 25.793 1.00 17.00 ? ? ? ? ? ? 14 ARG A CG 1 +ATOM 143 C CD . ARG A 1 14 ? -17.694 0.101 27.077 1.00 26.96 ? ? ? ? ? ? 14 ARG A CD 1 +ATOM 144 N NE . ARG A 1 14 ? -18.008 1.437 27.592 1.00 36.17 ? ? ? ? ? ? 14 ARG A NE 1 +ATOM 145 C CZ . ARG A 1 14 ? -19.298 1.876 27.717 1.00 37.70 ? ? ? ? ? ? 14 ARG A CZ 1 +ATOM 146 N NH1 . ARG A 1 14 ? -20.333 1.094 27.387 1.00 32.95 ? ? ? ? ? ? 14 ARG A NH1 1 +ATOM 147 N NH2 . ARG A 1 14 ? -19.525 3.107 28.183 1.00 36.64 ? ? ? ? ? ? 14 ARG A NH2 1 +ATOM 148 H H . ARG A 1 14 ? -12.790 1.708 25.451 1.00 15.00 ? ? ? ? ? ? 14 ARG A H 1 +ATOM 149 H HE . ARG A 1 14 ? -17.264 2.048 27.861 1.00 15.00 ? ? ? ? ? ? 14 ARG A HE 1 +ATOM 150 H HH11 . ARG A 1 14 ? -20.172 0.168 27.046 1.00 15.00 ? ? ? ? ? ? 14 ARG A HH11 1 +ATOM 151 H HH12 . ARG A 1 14 ? -21.270 1.431 27.484 1.00 15.00 ? ? ? ? ? ? 14 ARG A HH12 1 +ATOM 152 H HH21 . ARG A 1 14 ? -18.757 3.696 28.432 1.00 15.00 ? ? ? ? ? ? 14 ARG A HH21 1 +ATOM 153 H HH22 . ARG A 1 14 ? -20.463 3.436 28.281 1.00 15.00 ? ? ? ? ? ? 14 ARG A HH22 1 +ATOM 154 N N . ILE A 1 15 ? -15.430 0.176 22.675 1.00 12.87 ? ? ? ? ? ? 15 ILE A N 1 +ATOM 155 C CA . ILE A 1 15 ? -15.898 0.493 21.290 1.00 15.53 ? ? ? ? ? ? 15 ILE A CA 1 +ATOM 156 C C . ILE A 1 15 ? -17.205 -0.298 20.877 1.00 18.97 ? ? ? ? ? ? 15 ILE A C 1 +ATOM 157 O O . ILE A 1 15 ? -17.352 -1.513 21.048 1.00 18.58 ? ? ? ? ? ? 15 ILE A O 1 +ATOM 158 C CB . ILE A 1 15 ? -14.683 0.289 20.287 1.00 11.75 ? ? ? ? ? ? 15 ILE A CB 1 +ATOM 159 C CG1 . ILE A 1 15 ? -14.865 0.767 18.845 1.00 16.54 ? ? ? ? ? ? 15 ILE A CG1 1 +ATOM 160 C CG2 . ILE A 1 15 ? -14.203 -1.165 20.176 1.00 8.01 ? ? ? ? ? ? 15 ILE A CG2 1 +ATOM 161 C CD1 . ILE A 1 15 ? -13.597 0.580 17.968 1.00 8.82 ? ? ? ? ? ? 15 ILE A CD1 1 +ATOM 162 H H . ILE A 1 15 ? -15.304 -0.768 22.981 1.00 15.00 ? ? ? ? ? ? 15 ILE A H 1 +ATOM 163 N N . GLY A 1 16 ? -18.222 0.426 20.372 1.00 17.76 ? ? ? ? ? ? 16 GLY A N 1 +ATOM 164 C CA . GLY A 1 16 ? -19.516 -0.259 20.088 1.00 19.38 ? ? ? ? ? ? 16 GLY A CA 1 +ATOM 165 C C . GLY A 1 16 ? -20.301 -1.000 21.233 1.00 24.46 ? ? ? ? ? ? 16 GLY A C 1 +ATOM 166 O O . GLY A 1 16 ? -20.991 -1.996 21.018 1.00 24.31 ? ? ? ? ? ? 16 GLY A O 1 +ATOM 167 H H . GLY A 1 16 ? -18.033 1.383 20.158 1.00 15.00 ? ? ? ? ? ? 16 GLY A H 1 +ATOM 168 N N . GLY A 1 17 ? -20.087 -0.491 22.484 1.00 24.55 ? ? ? ? ? ? 17 GLY A N 1 +ATOM 169 C CA . GLY A 1 17 ? -20.430 -1.299 23.661 1.00 24.34 ? ? ? ? ? ? 17 GLY A CA 1 +ATOM 170 C C . GLY A 1 17 ? -19.445 -2.433 24.070 1.00 27.45 ? ? ? ? ? ? 17 GLY A C 1 +ATOM 171 O O . GLY A 1 17 ? -19.508 -2.983 25.156 1.00 29.91 ? ? ? ? ? ? 17 GLY A O 1 +ATOM 172 H H . GLY A 1 17 ? -19.559 0.351 22.553 1.00 15.00 ? ? ? ? ? ? 17 GLY A H 1 +ATOM 173 N N . GLN A 1 18 ? -18.495 -2.765 23.170 1.00 26.11 ? ? ? ? ? ? 18 GLN A N 1 +ATOM 174 C CA . GLN A 1 18 ? -17.478 -3.803 23.456 1.00 20.99 ? ? ? ? ? ? 18 GLN A CA 1 +ATOM 175 C C . GLN A 1 18 ? -16.203 -3.371 24.218 1.00 15.25 ? ? ? ? ? ? 18 GLN A C 1 +ATOM 176 O O . GLN A 1 18 ? -15.635 -2.312 23.997 1.00 11.39 ? ? ? ? ? ? 18 GLN A O 1 +ATOM 177 C CB . GLN A 1 18 ? -17.005 -4.489 22.166 1.00 23.80 ? ? ? ? ? ? 18 GLN A CB 1 +ATOM 178 C CG . GLN A 1 18 ? -18.029 -4.623 21.041 1.00 32.40 ? ? ? ? ? ? 18 GLN A CG 1 +ATOM 179 C CD . GLN A 1 18 ? -19.152 -5.530 21.478 1.00 38.02 ? ? ? ? ? ? 18 GLN A CD 1 +ATOM 180 O OE1 . GLN A 1 18 ? -18.938 -6.689 21.796 1.00 37.03 ? ? ? ? ? ? 18 GLN A OE1 1 +ATOM 181 N NE2 . GLN A 1 18 ? -20.364 -4.962 21.485 1.00 39.34 ? ? ? ? ? ? 18 GLN A NE2 1 +ATOM 182 H H . GLN A 1 18 ? -18.474 -2.254 22.318 1.00 15.00 ? ? ? ? ? ? 18 GLN A H 1 +ATOM 183 H HE21 . GLN A 1 18 ? -21.093 -5.567 21.790 1.00 15.00 ? ? ? ? ? ? 18 GLN A HE21 1 +ATOM 184 H HE22 . GLN A 1 18 ? -20.563 -4.026 21.197 1.00 15.00 ? ? ? ? ? ? 18 GLN A HE22 1 +ATOM 185 N N . LEU A 1 19 ? -15.782 -4.293 25.086 1.00 11.19 ? ? ? ? ? ? 19 LEU A N 1 +ATOM 186 C CA . LEU A 1 19 ? -14.556 -4.231 25.893 1.00 13.09 ? ? ? ? ? ? 19 LEU A CA 1 +ATOM 187 C C . LEU A 1 19 ? -13.336 -5.013 25.346 1.00 15.36 ? ? ? ? ? ? 19 LEU A C 1 +ATOM 188 O O . LEU A 1 19 ? -13.250 -6.240 25.418 1.00 17.95 ? ? ? ? ? ? 19 LEU A O 1 +ATOM 189 C CB . LEU A 1 19 ? -14.906 -4.687 27.338 1.00 11.59 ? ? ? ? ? ? 19 LEU A CB 1 +ATOM 190 C CG . LEU A 1 19 ? -14.624 -3.661 28.457 1.00 12.93 ? ? ? ? ? ? 19 LEU A CG 1 +ATOM 191 C CD1 . LEU A 1 19 ? -14.946 -2.235 28.030 1.00 11.72 ? ? ? ? ? ? 19 LEU A CD1 1 +ATOM 192 C CD2 . LEU A 1 19 ? -15.342 -3.985 29.758 1.00 11.09 ? ? ? ? ? ? 19 LEU A CD2 1 +ATOM 193 H H . LEU A 1 19 ? -16.371 -5.096 25.148 1.00 15.00 ? ? ? ? ? ? 19 LEU A H 1 +ATOM 194 N N . LYS A 1 20 ? -12.370 -4.247 24.790 1.00 14.09 ? ? ? ? ? ? 20 LYS A N 1 +ATOM 195 C CA . LYS A 1 20 ? -11.142 -4.882 24.258 1.00 14.64 ? ? ? ? ? ? 20 LYS A CA 1 +ATOM 196 C C . LYS A 1 20 ? -9.802 -4.451 24.908 1.00 14.53 ? ? ? ? ? ? 20 LYS A C 1 +ATOM 197 O O . LYS A 1 20 ? -9.642 -3.401 25.505 1.00 12.98 ? ? ? ? ? ? 20 LYS A O 1 +ATOM 198 C CB . LYS A 1 20 ? -11.043 -4.676 22.726 1.00 17.47 ? ? ? ? ? ? 20 LYS A CB 1 +ATOM 199 C CG . LYS A 1 20 ? -12.017 -5.389 21.788 1.00 19.14 ? ? ? ? ? ? 20 LYS A CG 1 +ATOM 200 C CD . LYS A 1 20 ? -11.772 -5.048 20.311 1.00 24.53 ? ? ? ? ? ? 20 LYS A CD 1 +ATOM 201 C CE . LYS A 1 20 ? -11.560 -6.280 19.383 1.00 29.82 ? ? ? ? ? ? 20 LYS A CE 1 +ATOM 202 N NZ . LYS A 1 20 ? -11.034 -5.893 18.044 1.00 29.67 ? ? ? ? ? ? 20 LYS A NZ 1 +ATOM 203 H H . LYS A 1 20 ? -12.518 -3.255 24.813 1.00 15.00 ? ? ? ? ? ? 20 LYS A H 1 +ATOM 204 H HZ1 . LYS A 1 20 ? -11.563 -5.071 17.687 1.00 15.00 ? ? ? ? ? ? 20 LYS A HZ1 1 +ATOM 205 H HZ2 . LYS A 1 20 ? -10.029 -5.641 18.136 1.00 15.00 ? ? ? ? ? ? 20 LYS A HZ2 1 +ATOM 206 H HZ3 . LYS A 1 20 ? -11.132 -6.685 17.378 1.00 15.00 ? ? ? ? ? ? 20 LYS A HZ3 1 +ATOM 207 N N . GLU A 1 21 ? -8.793 -5.297 24.735 1.00 17.16 ? ? ? ? ? ? 21 GLU A N 1 +ATOM 208 C CA . GLU A 1 21 ? -7.435 -4.835 25.101 1.00 19.20 ? ? ? ? ? ? 21 GLU A CA 1 +ATOM 209 C C . GLU A 1 21 ? -6.558 -4.227 23.984 1.00 16.65 ? ? ? ? ? ? 21 GLU A C 1 +ATOM 210 O O . GLU A 1 21 ? -6.418 -4.773 22.892 1.00 14.72 ? ? ? ? ? ? 21 GLU A O 1 +ATOM 211 C CB . GLU A 1 21 ? -6.673 -5.991 25.757 1.00 27.98 ? ? ? ? ? ? 21 GLU A CB 1 +ATOM 212 C CG . GLU A 1 21 ? -5.828 -5.575 26.971 1.00 36.72 ? ? ? ? ? ? 21 GLU A CG 1 +ATOM 213 C CD . GLU A 1 21 ? -6.619 -5.622 28.289 1.00 40.40 ? ? ? ? ? ? 21 GLU A CD 1 +ATOM 214 O OE1 . GLU A 1 21 ? -7.802 -5.261 28.334 1.00 40.04 ? ? ? ? ? ? 21 GLU A OE1 1 +ATOM 215 O OE2 . GLU A 1 21 ? -6.026 -6.027 29.287 1.00 43.31 ? ? ? ? ? ? 21 GLU A OE2 1 +ATOM 216 H H . GLU A 1 21 ? -8.967 -6.156 24.259 1.00 15.00 ? ? ? ? ? ? 21 GLU A H 1 +ATOM 217 N N . ALA A 1 22 ? -5.972 -3.066 24.276 1.00 14.75 ? ? ? ? ? ? 22 ALA A N 1 +ATOM 218 C CA . ALA A 1 22 ? -5.100 -2.434 23.260 1.00 11.83 ? ? ? ? ? ? 22 ALA A CA 1 +ATOM 219 C C . ALA A 1 22 ? -3.705 -1.932 23.759 1.00 9.55 ? ? ? ? ? ? 22 ALA A C 1 +ATOM 220 O O . ALA A 1 22 ? -3.453 -1.775 24.948 1.00 7.28 ? ? ? ? ? ? 22 ALA A O 1 +ATOM 221 C CB . ALA A 1 22 ? -5.865 -1.280 22.617 1.00 11.78 ? ? ? ? ? ? 22 ALA A CB 1 +ATOM 222 H H . ALA A 1 22 ? -6.107 -2.677 25.179 1.00 15.00 ? ? ? ? ? ? 22 ALA A H 1 +ATOM 223 N N . LEU A 1 23 ? -2.787 -1.711 22.805 1.00 5.96 ? ? ? ? ? ? 23 LEU A N 1 +ATOM 224 C CA . LEU A 1 23 ? -1.397 -1.289 23.114 1.00 4.12 ? ? ? ? ? ? 23 LEU A CA 1 +ATOM 225 C C . LEU A 1 23 ? -1.118 0.146 22.698 1.00 2.00 ? ? ? ? ? ? 23 LEU A C 1 +ATOM 226 O O . LEU A 1 23 ? -1.441 0.552 21.586 1.00 2.00 ? ? ? ? ? ? 23 LEU A O 1 +ATOM 227 C CB . LEU A 1 23 ? -0.438 -2.253 22.366 1.00 4.90 ? ? ? ? ? ? 23 LEU A CB 1 +ATOM 228 C CG . LEU A 1 23 ? 1.083 -2.186 22.476 1.00 2.00 ? ? ? ? ? ? 23 LEU A CG 1 +ATOM 229 C CD1 . LEU A 1 23 ? 1.571 -2.706 23.809 1.00 7.34 ? ? ? ? ? ? 23 LEU A CD1 1 +ATOM 230 C CD2 . LEU A 1 23 ? 1.744 -3.023 21.405 1.00 3.18 ? ? ? ? ? ? 23 LEU A CD2 1 +ATOM 231 H H . LEU A 1 23 ? -3.068 -1.872 21.862 1.00 15.00 ? ? ? ? ? ? 23 LEU A H 1 +ATOM 232 N N . LEU A 1 24 ? -0.537 0.896 23.624 1.00 2.00 ? ? ? ? ? ? 24 LEU A N 1 +ATOM 233 C CA . LEU A 1 24 ? -0.196 2.267 23.300 1.00 2.00 ? ? ? ? ? ? 24 LEU A CA 1 +ATOM 234 C C . LEU A 1 24 ? 1.124 2.367 22.612 1.00 3.88 ? ? ? ? ? ? 24 LEU A C 1 +ATOM 235 O O . LEU A 1 24 ? 2.176 2.052 23.152 1.00 6.52 ? ? ? ? ? ? 24 LEU A O 1 +ATOM 236 C CB . LEU A 1 24 ? -0.090 3.152 24.536 1.00 9.50 ? ? ? ? ? ? 24 LEU A CB 1 +ATOM 237 C CG . LEU A 1 24 ? -1.255 3.055 25.535 1.00 15.22 ? ? ? ? ? ? 24 LEU A CG 1 +ATOM 238 C CD1 . LEU A 1 24 ? -0.973 3.913 26.770 1.00 12.11 ? ? ? ? ? ? 24 LEU A CD1 1 +ATOM 239 C CD2 . LEU A 1 24 ? -2.622 3.353 24.899 1.00 12.26 ? ? ? ? ? ? 24 LEU A CD2 1 +ATOM 240 H H . LEU A 1 24 ? -0.281 0.454 24.486 1.00 15.00 ? ? ? ? ? ? 24 LEU A H 1 +ATOM 241 N N . ASP A 1 25 ? 1.038 2.790 21.357 1.00 7.69 ? ? ? ? ? ? 25 ASP A N 1 +ATOM 242 C CA . ASP A 1 25 ? 2.150 2.485 20.441 1.00 7.59 ? ? ? ? ? ? 25 ASP A CA 1 +ATOM 243 C C . ASP A 1 25 ? 2.638 3.731 19.715 1.00 7.44 ? ? ? ? ? ? 25 ASP A C 1 +ATOM 244 O O . ASP A 1 25 ? 2.305 3.987 18.574 1.00 8.42 ? ? ? ? ? ? 25 ASP A O 1 +ATOM 245 C CB . ASP A 1 25 ? 1.693 1.332 19.491 1.00 10.29 ? ? ? ? ? ? 25 ASP A CB 1 +ATOM 246 C CG . ASP A 1 25 ? 2.634 0.934 18.354 1.00 14.25 ? ? ? ? ? ? 25 ASP A CG 1 +ATOM 247 O OD1 . ASP A 1 25 ? 3.520 1.687 17.966 1.00 15.67 ? ? ? ? ? ? 25 ASP A OD1 1 +ATOM 248 O OD2 . ASP A 1 25 ? 2.465 -0.161 17.838 1.00 16.99 ? ? ? ? ? ? 25 ASP A OD2 1 +ATOM 249 H H . ASP A 1 25 ? 0.142 3.095 21.017 1.00 15.00 ? ? ? ? ? ? 25 ASP A H 1 +ATOM 250 N N . THR A 1 26 ? 3.487 4.495 20.404 1.00 5.41 ? ? ? ? ? ? 26 THR A N 1 +ATOM 251 C CA . THR A 1 26 ? 3.974 5.754 19.819 1.00 2.13 ? ? ? ? ? ? 26 THR A CA 1 +ATOM 252 C C . THR A 1 26 ? 4.681 5.739 18.455 1.00 2.64 ? ? ? ? ? ? 26 THR A C 1 +ATOM 253 O O . THR A 1 26 ? 4.739 6.713 17.725 1.00 4.71 ? ? ? ? ? ? 26 THR A O 1 +ATOM 254 C CB . THR A 1 26 ? 4.908 6.402 20.819 1.00 3.16 ? ? ? ? ? ? 26 THR A CB 1 +ATOM 255 O OG1 . THR A 1 26 ? 6.075 5.582 21.010 1.00 10.74 ? ? ? ? ? ? 26 THR A OG1 1 +ATOM 256 C CG2 . THR A 1 26 ? 4.172 6.524 22.144 1.00 6.50 ? ? ? ? ? ? 26 THR A CG2 1 +ATOM 257 H H . THR A 1 26 ? 3.761 4.193 21.320 1.00 15.00 ? ? ? ? ? ? 26 THR A H 1 +ATOM 258 H HG1 . THR A 1 26 ? 6.833 6.097 20.712 1.00 15.00 ? ? ? ? ? ? 26 THR A HG1 1 +ATOM 259 N N . GLY A 1 27 ? 5.240 4.582 18.101 1.00 3.99 ? ? ? ? ? ? 27 GLY A N 1 +ATOM 260 C CA . GLY A 1 27 ? 5.764 4.489 16.717 1.00 5.22 ? ? ? ? ? ? 27 GLY A CA 1 +ATOM 261 C C . GLY A 1 27 ? 4.807 4.080 15.556 1.00 4.61 ? ? ? ? ? ? 27 GLY A C 1 +ATOM 262 O O . GLY A 1 27 ? 5.169 3.927 14.399 1.00 3.35 ? ? ? ? ? ? 27 GLY A O 1 +ATOM 263 H H . GLY A 1 27 ? 5.207 3.817 18.736 1.00 15.00 ? ? ? ? ? ? 27 GLY A H 1 +ATOM 264 N N . ALA A 1 28 ? 3.519 3.982 15.911 1.00 6.91 ? ? ? ? ? ? 28 ALA A N 1 +ATOM 265 C CA . ALA A 1 28 ? 2.455 3.921 14.904 1.00 3.02 ? ? ? ? ? ? 28 ALA A CA 1 +ATOM 266 C C . ALA A 1 28 ? 1.731 5.256 14.687 1.00 3.42 ? ? ? ? ? ? 28 ALA A C 1 +ATOM 267 O O . ALA A 1 28 ? 1.156 5.870 15.572 1.00 3.02 ? ? ? ? ? ? 28 ALA A O 1 +ATOM 268 C CB . ALA A 1 28 ? 1.433 2.831 15.275 1.00 2.00 ? ? ? ? ? ? 28 ALA A CB 1 +ATOM 269 H H . ALA A 1 28 ? 3.297 4.070 16.878 1.00 15.00 ? ? ? ? ? ? 28 ALA A H 1 +ATOM 270 N N . ASP A 1 29 ? 1.735 5.695 13.417 1.00 3.92 ? ? ? ? ? ? 29 ASP A N 1 +ATOM 271 C CA . ASP A 1 29 ? 0.961 6.906 13.082 1.00 6.42 ? ? ? ? ? ? 29 ASP A CA 1 +ATOM 272 C C . ASP A 1 29 ? -0.564 6.870 13.321 1.00 6.90 ? ? ? ? ? ? 29 ASP A C 1 +ATOM 273 O O . ASP A 1 29 ? -1.237 7.831 13.680 1.00 7.18 ? ? ? ? ? ? 29 ASP A O 1 +ATOM 274 C CB . ASP A 1 29 ? 1.214 7.334 11.621 1.00 10.78 ? ? ? ? ? ? 29 ASP A CB 1 +ATOM 275 C CG . ASP A 1 29 ? 2.652 7.723 11.241 1.00 16.60 ? ? ? ? ? ? 29 ASP A CG 1 +ATOM 276 O OD1 . ASP A 1 29 ? 3.473 8.024 12.119 1.00 16.61 ? ? ? ? ? ? 29 ASP A OD1 1 +ATOM 277 O OD2 . ASP A 1 29 ? 2.937 7.729 10.035 1.00 19.82 ? ? ? ? ? ? 29 ASP A OD2 1 +ATOM 278 H H . ASP A 1 29 ? 2.329 5.189 12.788 1.00 15.00 ? ? ? ? ? ? 29 ASP A H 1 +ATOM 279 N N . ASP A 1 30 ? -1.060 5.654 13.068 1.00 10.14 ? ? ? ? ? ? 30 ASP A N 1 +ATOM 280 C CA . ASP A 1 30 ? -2.488 5.277 13.093 1.00 9.04 ? ? ? ? ? ? 30 ASP A CA 1 +ATOM 281 C C . ASP A 1 30 ? -2.819 4.094 14.037 1.00 10.66 ? ? ? ? ? ? 30 ASP A C 1 +ATOM 282 O O . ASP A 1 30 ? -1.961 3.353 14.529 1.00 10.32 ? ? ? ? ? ? 30 ASP A O 1 +ATOM 283 C CB . ASP A 1 30 ? -3.013 4.874 11.694 1.00 8.49 ? ? ? ? ? ? 30 ASP A CB 1 +ATOM 284 C CG . ASP A 1 30 ? -2.604 5.771 10.511 1.00 12.48 ? ? ? ? ? ? 30 ASP A CG 1 +ATOM 285 O OD1 . ASP A 1 30 ? -2.969 6.951 10.471 1.00 13.46 ? ? ? ? ? ? 30 ASP A OD1 1 +ATOM 286 O OD2 . ASP A 1 30 ? -1.929 5.277 9.606 1.00 14.26 ? ? ? ? ? ? 30 ASP A OD2 1 +ATOM 287 H H . ASP A 1 30 ? -0.378 4.955 12.866 1.00 15.00 ? ? ? ? ? ? 30 ASP A H 1 +ATOM 288 N N . THR A 1 31 ? -4.147 3.987 14.228 1.00 10.75 ? ? ? ? ? ? 31 THR A N 1 +ATOM 289 C CA . THR A 1 31 ? -4.846 3.005 15.081 1.00 8.58 ? ? ? ? ? ? 31 THR A CA 1 +ATOM 290 C C . THR A 1 31 ? -5.458 1.897 14.250 1.00 14.08 ? ? ? ? ? ? 31 THR A C 1 +ATOM 291 O O . THR A 1 31 ? -6.255 2.173 13.366 1.00 17.64 ? ? ? ? ? ? 31 THR A O 1 +ATOM 292 C CB . THR A 1 31 ? -5.964 3.748 15.851 1.00 8.52 ? ? ? ? ? ? 31 THR A CB 1 +ATOM 293 O OG1 . THR A 1 31 ? -5.386 4.814 16.619 1.00 5.59 ? ? ? ? ? ? 31 THR A OG1 1 +ATOM 294 C CG2 . THR A 1 31 ? -6.900 2.920 16.750 1.00 5.14 ? ? ? ? ? ? 31 THR A CG2 1 +ATOM 295 H H . THR A 1 31 ? -4.696 4.667 13.750 1.00 15.00 ? ? ? ? ? ? 31 THR A H 1 +ATOM 296 H HG1 . THR A 1 31 ? -5.542 5.620 16.140 1.00 15.00 ? ? ? ? ? ? 31 THR A HG1 1 +ATOM 297 N N . VAL A 1 32 ? -5.041 0.651 14.549 1.00 14.57 ? ? ? ? ? ? 32 VAL A N 1 +ATOM 298 C CA . VAL A 1 32 ? -5.394 -0.599 13.818 1.00 11.51 ? ? ? ? ? ? 32 VAL A CA 1 +ATOM 299 C C . VAL A 1 32 ? -5.834 -1.722 14.783 1.00 12.42 ? ? ? ? ? ? 32 VAL A C 1 +ATOM 300 O O . VAL A 1 32 ? -5.219 -2.060 15.809 1.00 9.55 ? ? ? ? ? ? 32 VAL A O 1 +ATOM 301 C CB . VAL A 1 32 ? -4.226 -1.172 12.961 1.00 11.77 ? ? ? ? ? ? 32 VAL A CB 1 +ATOM 302 C CG1 . VAL A 1 32 ? -4.659 -2.391 12.146 1.00 7.51 ? ? ? ? ? ? 32 VAL A CG1 1 +ATOM 303 C CG2 . VAL A 1 32 ? -3.615 -0.156 11.996 1.00 9.56 ? ? ? ? ? ? 32 VAL A CG2 1 +ATOM 304 H H . VAL A 1 32 ? -4.480 0.606 15.379 1.00 15.00 ? ? ? ? ? ? 32 VAL A H 1 +ATOM 305 N N . LEU A 1 33 ? -6.996 -2.262 14.399 1.00 8.46 ? ? ? ? ? ? 33 LEU A N 1 +ATOM 306 C CA . LEU A 1 33 ? -7.736 -3.086 15.361 1.00 6.71 ? ? ? ? ? ? 33 LEU A CA 1 +ATOM 307 C C . LEU A 1 33 ? -8.115 -4.411 14.697 1.00 5.60 ? ? ? ? ? ? 33 LEU A C 1 +ATOM 308 O O . LEU A 1 33 ? -8.200 -4.467 13.472 1.00 5.00 ? ? ? ? ? ? 33 LEU A O 1 +ATOM 309 C CB . LEU A 1 33 ? -8.939 -2.216 15.805 1.00 9.14 ? ? ? ? ? ? 33 LEU A CB 1 +ATOM 310 C CG . LEU A 1 33 ? -9.079 -1.598 17.233 1.00 11.97 ? ? ? ? ? ? 33 LEU A CG 1 +ATOM 311 C CD1 . LEU A 1 33 ? -7.885 -0.913 17.897 1.00 8.88 ? ? ? ? ? ? 33 LEU A CD1 1 +ATOM 312 C CD2 . LEU A 1 33 ? -10.185 -0.573 17.172 1.00 15.65 ? ? ? ? ? ? 33 LEU A CD2 1 +ATOM 313 H H . LEU A 1 33 ? -7.396 -1.982 13.525 1.00 15.00 ? ? ? ? ? ? 33 LEU A H 1 +ATOM 314 N N . GLU A 1 34 ? -8.299 -5.481 15.493 1.00 6.68 ? ? ? ? ? ? 34 GLU A N 1 +ATOM 315 C CA . GLU A 1 34 ? -8.591 -6.789 14.850 1.00 10.45 ? ? ? ? ? ? 34 GLU A CA 1 +ATOM 316 C C . GLU A 1 34 ? -9.937 -6.870 14.168 1.00 11.56 ? ? ? ? ? ? 34 GLU A C 1 +ATOM 317 O O . GLU A 1 34 ? -10.780 -6.017 14.371 1.00 13.54 ? ? ? ? ? ? 34 GLU A O 1 +ATOM 318 C CB . GLU A 1 34 ? -8.470 -7.969 15.820 1.00 14.09 ? ? ? ? ? ? 34 GLU A CB 1 +ATOM 319 C CG . GLU A 1 34 ? -7.056 -8.084 16.443 1.00 24.30 ? ? ? ? ? ? 34 GLU A CG 1 +ATOM 320 C CD . GLU A 1 34 ? -7.025 -8.905 17.749 1.00 33.54 ? ? ? ? ? ? 34 GLU A CD 1 +ATOM 321 O OE1 . GLU A 1 34 ? -8.068 -9.169 18.379 1.00 35.23 ? ? ? ? ? ? 34 GLU A OE1 1 +ATOM 322 O OE2 . GLU A 1 34 ? -5.919 -9.262 18.145 1.00 34.97 ? ? ? ? ? ? 34 GLU A OE2 1 +ATOM 323 H H . GLU A 1 34 ? -8.257 -5.324 16.478 1.00 15.00 ? ? ? ? ? ? 34 GLU A H 1 +ATOM 324 N N . GLU A 1 35 ? -10.144 -7.918 13.360 1.00 15.87 ? ? ? ? ? ? 35 GLU A N 1 +ATOM 325 C CA . GLU A 1 35 ? -11.484 -8.118 12.720 1.00 20.76 ? ? ? ? ? ? 35 GLU A CA 1 +ATOM 326 C C . GLU A 1 35 ? -12.751 -7.880 13.549 1.00 19.68 ? ? ? ? ? ? 35 GLU A C 1 +ATOM 327 O O . GLU A 1 35 ? -13.089 -8.704 14.391 1.00 23.35 ? ? ? ? ? ? 35 GLU A O 1 +ATOM 328 C CB . GLU A 1 35 ? -11.714 -9.549 12.214 1.00 20.31 ? ? ? ? ? ? 35 GLU A CB 1 +ATOM 329 C CG . GLU A 1 35 ? -11.549 -9.697 10.718 1.00 30.20 ? ? ? ? ? ? 35 GLU A CG 1 +ATOM 330 C CD . GLU A 1 35 ? -12.383 -8.701 9.949 1.00 39.71 ? ? ? ? ? ? 35 GLU A CD 1 +ATOM 331 O OE1 . GLU A 1 35 ? -13.609 -8.709 10.089 1.00 43.68 ? ? ? ? ? ? 35 GLU A OE1 1 +ATOM 332 O OE2 . GLU A 1 35 ? -11.784 -7.927 9.198 1.00 46.22 ? ? ? ? ? ? 35 GLU A OE2 1 +ATOM 333 H H . GLU A 1 35 ? -9.364 -8.507 13.177 1.00 15.00 ? ? ? ? ? ? 35 GLU A H 1 +ATOM 334 N N . MET A 1 36 ? -13.447 -6.776 13.230 1.00 13.95 ? ? ? ? ? ? 36 MET A N 1 +ATOM 335 C CA . MET A 1 36 ? -14.799 -6.605 13.769 1.00 10.73 ? ? ? ? ? ? 36 MET A CA 1 +ATOM 336 C C . MET A 1 36 ? -15.834 -5.918 12.828 1.00 13.63 ? ? ? ? ? ? 36 MET A C 1 +ATOM 337 O O . MET A 1 36 ? -15.547 -5.316 11.794 1.00 11.97 ? ? ? ? ? ? 36 MET A O 1 +ATOM 338 C CB . MET A 1 36 ? -14.754 -5.925 15.136 1.00 6.21 ? ? ? ? ? ? 36 MET A CB 1 +ATOM 339 C CG . MET A 1 36 ? -14.475 -4.427 14.916 1.00 14.27 ? ? ? ? ? ? 36 MET A CG 1 +ATOM 340 S SD . MET A 1 36 ? -14.218 -3.469 16.396 1.00 15.34 ? ? ? ? ? ? 36 MET A SD 1 +ATOM 341 C CE . MET A 1 36 ? -15.640 -3.903 17.405 1.00 13.96 ? ? ? ? ? ? 36 MET A CE 1 +ATOM 342 H H . MET A 1 36 ? -13.002 -6.089 12.656 1.00 15.00 ? ? ? ? ? ? 36 MET A H 1 +ATOM 343 N N . ASN A 1 37 ? -17.086 -6.053 13.291 1.00 11.98 ? ? ? ? ? ? 37 ASN A N 1 +ATOM 344 C CA . ASN A 1 37 ? -18.179 -5.371 12.623 1.00 13.42 ? ? ? ? ? ? 37 ASN A CA 1 +ATOM 345 C C . ASN A 1 37 ? -18.578 -4.047 13.255 1.00 16.43 ? ? ? ? ? ? 37 ASN A C 1 +ATOM 346 O O . ASN A 1 37 ? -19.012 -3.954 14.394 1.00 16.51 ? ? ? ? ? ? 37 ASN A O 1 +ATOM 347 C CB . ASN A 1 37 ? -19.375 -6.301 12.537 1.00 16.24 ? ? ? ? ? ? 37 ASN A CB 1 +ATOM 348 C CG . ASN A 1 37 ? -18.994 -7.301 11.471 1.00 23.68 ? ? ? ? ? ? 37 ASN A CG 1 +ATOM 349 O OD1 . ASN A 1 37 ? -18.624 -6.954 10.357 1.00 32.36 ? ? ? ? ? ? 37 ASN A OD1 1 +ATOM 350 N ND2 . ASN A 1 37 ? -19.029 -8.579 11.848 1.00 18.92 ? ? ? ? ? ? 37 ASN A ND2 1 +ATOM 351 H H . ASN A 1 37 ? -17.210 -6.545 14.147 1.00 15.00 ? ? ? ? ? ? 37 ASN A H 1 +ATOM 352 H HD21 . ASN A 1 37 ? -18.634 -9.172 11.152 1.00 15.00 ? ? ? ? ? ? 37 ASN A HD21 1 +ATOM 353 H HD22 . ASN A 1 37 ? -19.424 -8.895 12.704 1.00 15.00 ? ? ? ? ? ? 37 ASN A HD22 1 +ATOM 354 N N . LEU A 1 38 ? -18.379 -3.018 12.440 1.00 16.56 ? ? ? ? ? ? 38 LEU A N 1 +ATOM 355 C CA . LEU A 1 38 ? -18.704 -1.681 12.902 1.00 15.78 ? ? ? ? ? ? 38 LEU A CA 1 +ATOM 356 C C . LEU A 1 38 ? -19.693 -1.009 11.938 1.00 19.85 ? ? ? ? ? ? 38 LEU A C 1 +ATOM 357 O O . LEU A 1 38 ? -19.680 -1.251 10.724 1.00 20.78 ? ? ? ? ? ? 38 LEU A O 1 +ATOM 358 C CB . LEU A 1 38 ? -17.348 -0.970 13.021 1.00 14.49 ? ? ? ? ? ? 38 LEU A CB 1 +ATOM 359 C CG . LEU A 1 38 ? -16.858 -0.246 14.307 1.00 8.64 ? ? ? ? ? ? 38 LEU A CG 1 +ATOM 360 C CD1 . LEU A 1 38 ? -17.074 -0.915 15.666 1.00 5.75 ? ? ? ? ? ? 38 LEU A CD1 1 +ATOM 361 C CD2 . LEU A 1 38 ? -15.366 -0.009 14.154 1.00 5.18 ? ? ? ? ? ? 38 LEU A CD2 1 +ATOM 362 H H . LEU A 1 38 ? -17.966 -3.206 11.549 1.00 15.00 ? ? ? ? ? ? 38 LEU A H 1 +ATOM 363 N N . PRO A 1 39 ? -20.594 -0.180 12.534 1.00 22.42 ? ? ? ? ? ? 39 PRO A N 1 +ATOM 364 C CA . PRO A 1 39 ? -21.611 0.588 11.771 1.00 26.77 ? ? ? ? ? ? 39 PRO A CA 1 +ATOM 365 C C . PRO A 1 39 ? -21.130 1.539 10.665 1.00 29.54 ? ? ? ? ? ? 39 PRO A C 1 +ATOM 366 O O . PRO A 1 39 ? -20.396 2.503 10.868 1.00 29.99 ? ? ? ? ? ? 39 PRO A O 1 +ATOM 367 C CB . PRO A 1 39 ? -22.332 1.421 12.823 1.00 24.85 ? ? ? ? ? ? 39 PRO A CB 1 +ATOM 368 C CG . PRO A 1 39 ? -22.072 0.681 14.122 1.00 28.76 ? ? ? ? ? ? 39 PRO A CG 1 +ATOM 369 C CD . PRO A 1 39 ? -20.699 0.052 13.959 1.00 21.86 ? ? ? ? ? ? 39 PRO A CD 1 +ATOM 370 N N . GLY A 1 40 ? -21.657 1.274 9.478 1.00 28.51 ? ? ? ? ? ? 40 GLY A N 1 +ATOM 371 C CA . GLY A 1 40 ? -21.516 2.378 8.526 1.00 28.87 ? ? ? ? ? ? 40 GLY A CA 1 +ATOM 372 C C . GLY A 1 40 ? -20.618 2.162 7.311 1.00 30.87 ? ? ? ? ? ? 40 GLY A C 1 +ATOM 373 O O . GLY A 1 40 ? -20.231 1.070 6.911 1.00 29.78 ? ? ? ? ? ? 40 GLY A O 1 +ATOM 374 H H . GLY A 1 40 ? -22.057 0.383 9.286 1.00 15.00 ? ? ? ? ? ? 40 GLY A H 1 +ATOM 375 N N . LYS A 1 41 ? -20.343 3.293 6.680 1.00 33.12 ? ? ? ? ? ? 41 LYS A N 1 +ATOM 376 C CA . LYS A 1 41 ? -19.625 3.137 5.415 1.00 37.91 ? ? ? ? ? ? 41 LYS A CA 1 +ATOM 377 C C . LYS A 1 41 ? -18.101 3.232 5.504 1.00 38.30 ? ? ? ? ? ? 41 LYS A C 1 +ATOM 378 O O . LYS A 1 41 ? -17.526 4.054 6.207 1.00 42.40 ? ? ? ? ? ? 41 LYS A O 1 +ATOM 379 C CB . LYS A 1 41 ? -20.195 4.083 4.341 1.00 41.89 ? ? ? ? ? ? 41 LYS A CB 1 +ATOM 380 C CG . LYS A 1 41 ? -21.035 3.347 3.297 1.00 42.36 ? ? ? ? ? ? 41 LYS A CG 1 +ATOM 381 C CD . LYS A 1 41 ? -20.669 3.854 1.902 1.00 48.74 ? ? ? ? ? ? 41 LYS A CD 1 +ATOM 382 C CE . LYS A 1 41 ? -21.210 3.011 0.734 1.00 51.48 ? ? ? ? ? ? 41 LYS A CE 1 +ATOM 383 N NZ . LYS A 1 41 ? -20.639 3.508 -0.530 1.00 50.33 ? ? ? ? ? ? 41 LYS A NZ 1 +ATOM 384 H H . LYS A 1 41 ? -20.527 4.159 7.137 1.00 15.00 ? ? ? ? ? ? 41 LYS A H 1 +ATOM 385 H HZ1 . LYS A 1 41 ? -20.796 4.534 -0.598 1.00 15.00 ? ? ? ? ? ? 41 LYS A HZ1 1 +ATOM 386 H HZ2 . LYS A 1 41 ? -19.617 3.316 -0.550 1.00 15.00 ? ? ? ? ? ? 41 LYS A HZ2 1 +ATOM 387 H HZ3 . LYS A 1 41 ? -21.094 3.036 -1.338 1.00 15.00 ? ? ? ? ? ? 41 LYS A HZ3 1 +ATOM 388 N N . TRP A 1 42 ? -17.466 2.327 4.774 1.00 34.90 ? ? ? ? ? ? 42 TRP A N 1 +ATOM 389 C CA . TRP A 1 42 ? -16.020 2.225 4.935 1.00 30.92 ? ? ? ? ? ? 42 TRP A CA 1 +ATOM 390 C C . TRP A 1 42 ? -15.259 2.241 3.615 1.00 33.72 ? ? ? ? ? ? 42 TRP A C 1 +ATOM 391 O O . TRP A 1 42 ? -15.677 1.739 2.572 1.00 35.04 ? ? ? ? ? ? 42 TRP A O 1 +ATOM 392 C CB . TRP A 1 42 ? -15.640 0.985 5.734 1.00 24.59 ? ? ? ? ? ? 42 TRP A CB 1 +ATOM 393 C CG . TRP A 1 42 ? -16.258 -0.178 5.014 1.00 26.07 ? ? ? ? ? ? 42 TRP A CG 1 +ATOM 394 C CD1 . TRP A 1 42 ? -17.588 -0.603 5.142 1.00 27.36 ? ? ? ? ? ? 42 TRP A CD1 1 +ATOM 395 C CD2 . TRP A 1 42 ? -15.682 -1.014 3.985 1.00 28.61 ? ? ? ? ? ? 42 TRP A CD2 1 +ATOM 396 N NE1 . TRP A 1 42 ? -17.863 -1.611 4.282 1.00 31.74 ? ? ? ? ? ? 42 TRP A NE1 1 +ATOM 397 C CE2 . TRP A 1 42 ? -16.714 -1.914 3.550 1.00 31.16 ? ? ? ? ? ? 42 TRP A CE2 1 +ATOM 398 C CE3 . TRP A 1 42 ? -14.401 -1.100 3.396 1.00 28.02 ? ? ? ? ? ? 42 TRP A CE3 1 +ATOM 399 C CZ2 . TRP A 1 42 ? -16.443 -2.867 2.537 1.00 24.44 ? ? ? ? ? ? 42 TRP A CZ2 1 +ATOM 400 C CZ3 . TRP A 1 42 ? -14.145 -2.056 2.386 1.00 22.00 ? ? ? ? ? ? 42 TRP A CZ3 1 +ATOM 401 C CH2 . TRP A 1 42 ? -15.154 -2.938 1.967 1.00 21.98 ? ? ? ? ? ? 42 TRP A CH2 1 +ATOM 402 H H . TRP A 1 42 ? -17.981 1.727 4.167 1.00 15.00 ? ? ? ? ? ? 42 TRP A H 1 +ATOM 403 H HE1 . TRP A 1 42 ? -18.729 -2.063 4.206 1.00 15.00 ? ? ? ? ? ? 42 TRP A HE1 1 +ATOM 404 N N . LYS A 1 43 ? -14.085 2.847 3.741 1.00 32.75 ? ? ? ? ? ? 43 LYS A N 1 +ATOM 405 C CA . LYS A 1 43 ? -13.177 2.907 2.604 1.00 30.62 ? ? ? ? ? ? 43 LYS A CA 1 +ATOM 406 C C . LYS A 1 43 ? -12.023 1.867 2.694 1.00 27.14 ? ? ? ? ? ? 43 LYS A C 1 +ATOM 407 O O . LYS A 1 43 ? -11.369 1.726 3.716 1.00 22.53 ? ? ? ? ? ? 43 LYS A O 1 +ATOM 408 C CB . LYS A 1 43 ? -12.716 4.372 2.591 1.00 33.09 ? ? ? ? ? ? 43 LYS A CB 1 +ATOM 409 C CG . LYS A 1 43 ? -11.786 4.732 1.446 1.00 41.34 ? ? ? ? ? ? 43 LYS A CG 1 +ATOM 410 C CD . LYS A 1 43 ? -10.974 5.998 1.713 1.00 49.18 ? ? ? ? ? ? 43 LYS A CD 1 +ATOM 411 C CE . LYS A 1 43 ? -9.514 5.868 1.216 1.00 54.01 ? ? ? ? ? ? 43 LYS A CE 1 +ATOM 412 N NZ . LYS A 1 43 ? -8.786 4.797 1.932 1.00 50.64 ? ? ? ? ? ? 43 LYS A NZ 1 +ATOM 413 H H . LYS A 1 43 ? -13.846 3.198 4.649 1.00 15.00 ? ? ? ? ? ? 43 LYS A H 1 +ATOM 414 H HZ1 . LYS A 1 43 ? -8.763 5.005 2.951 1.00 15.00 ? ? ? ? ? ? 43 LYS A HZ1 1 +ATOM 415 H HZ2 . LYS A 1 43 ? -9.264 3.887 1.778 1.00 15.00 ? ? ? ? ? ? 43 LYS A HZ2 1 +ATOM 416 H HZ3 . LYS A 1 43 ? -7.812 4.735 1.574 1.00 15.00 ? ? ? ? ? ? 43 LYS A HZ3 1 +ATOM 417 N N . PRO A 1 44 ? -11.769 1.125 1.599 1.00 23.46 ? ? ? ? ? ? 44 PRO A N 1 +ATOM 418 C CA . PRO A 1 44 ? -10.508 0.364 1.498 1.00 23.08 ? ? ? ? ? ? 44 PRO A CA 1 +ATOM 419 C C . PRO A 1 44 ? -9.215 1.173 1.381 1.00 22.15 ? ? ? ? ? ? 44 PRO A C 1 +ATOM 420 O O . PRO A 1 44 ? -9.090 2.205 0.739 1.00 18.72 ? ? ? ? ? ? 44 PRO A O 1 +ATOM 421 C CB . PRO A 1 44 ? -10.712 -0.506 0.266 1.00 23.78 ? ? ? ? ? ? 44 PRO A CB 1 +ATOM 422 C CG . PRO A 1 44 ? -11.689 0.298 -0.581 1.00 24.22 ? ? ? ? ? ? 44 PRO A CG 1 +ATOM 423 C CD . PRO A 1 44 ? -12.609 0.980 0.436 1.00 23.63 ? ? ? ? ? ? 44 PRO A CD 1 +ATOM 424 N N . LYS A 1 45 ? -8.216 0.598 2.050 1.00 25.28 ? ? ? ? ? ? 45 LYS A N 1 +ATOM 425 C CA . LYS A 1 45 ? -6.884 1.223 2.149 1.00 23.40 ? ? ? ? ? ? 45 LYS A CA 1 +ATOM 426 C C . LYS A 1 45 ? -5.758 0.172 2.280 1.00 20.00 ? ? ? ? ? ? 45 LYS A C 1 +ATOM 427 O O . LYS A 1 45 ? -5.897 -0.785 3.026 1.00 20.10 ? ? ? ? ? ? 45 LYS A O 1 +ATOM 428 C CB . LYS A 1 45 ? -6.924 2.167 3.363 1.00 21.78 ? ? ? ? ? ? 45 LYS A CB 1 +ATOM 429 C CG . LYS A 1 45 ? -5.932 3.322 3.377 1.00 24.75 ? ? ? ? ? ? 45 LYS A CG 1 +ATOM 430 C CD . LYS A 1 45 ? -5.897 3.959 4.769 1.00 35.26 ? ? ? ? ? ? 45 LYS A CD 1 +ATOM 431 C CE . LYS A 1 45 ? -5.082 5.271 4.942 1.00 38.29 ? ? ? ? ? ? 45 LYS A CE 1 +ATOM 432 N NZ . LYS A 1 45 ? -5.054 5.680 6.371 1.00 38.89 ? ? ? ? ? ? 45 LYS A NZ 1 +ATOM 433 H H . LYS A 1 45 ? -8.468 -0.179 2.630 1.00 15.00 ? ? ? ? ? ? 45 LYS A H 1 +ATOM 434 H HZ1 . LYS A 1 45 ? -4.624 4.919 6.935 1.00 15.00 ? ? ? ? ? ? 45 LYS A HZ1 1 +ATOM 435 H HZ2 . LYS A 1 45 ? -4.492 6.549 6.476 1.00 15.00 ? ? ? ? ? ? 45 LYS A HZ2 1 +ATOM 436 H HZ3 . LYS A 1 45 ? -6.024 5.850 6.706 1.00 15.00 ? ? ? ? ? ? 45 LYS A HZ3 1 +ATOM 437 N N . MET A 1 46 ? -4.644 0.367 1.567 1.00 20.42 ? ? ? ? ? ? 46 MET A N 1 +ATOM 438 C CA . MET A 1 46 ? -3.404 -0.401 1.915 1.00 22.45 ? ? ? ? ? ? 46 MET A CA 1 +ATOM 439 C C . MET A 1 46 ? -2.345 0.337 2.775 1.00 22.01 ? ? ? ? ? ? 46 MET A C 1 +ATOM 440 O O . MET A 1 46 ? -1.871 1.427 2.447 1.00 22.84 ? ? ? ? ? ? 46 MET A O 1 +ATOM 441 C CB . MET A 1 46 ? -2.621 -0.857 0.685 1.00 21.43 ? ? ? ? ? ? 46 MET A CB 1 +ATOM 442 C CG . MET A 1 46 ? -3.433 -1.507 -0.429 1.00 26.00 ? ? ? ? ? ? 46 MET A CG 1 +ATOM 443 S SD . MET A 1 46 ? -3.572 -3.280 -0.248 1.00 33.71 ? ? ? ? ? ? 46 MET A SD 1 +ATOM 444 C CE . MET A 1 46 ? -1.806 -3.607 -0.201 1.00 33.67 ? ? ? ? ? ? 46 MET A CE 1 +ATOM 445 H H . MET A 1 46 ? -4.635 1.130 0.924 1.00 15.00 ? ? ? ? ? ? 46 MET A H 1 +ATOM 446 N N . ILE A 1 47 ? -1.967 -0.307 3.889 1.00 19.66 ? ? ? ? ? ? 47 ILE A N 1 +ATOM 447 C CA . ILE A 1 47 ? -0.898 0.272 4.742 1.00 13.85 ? ? ? ? ? ? 47 ILE A CA 1 +ATOM 448 C C . ILE A 1 47 ? 0.461 -0.453 4.862 1.00 10.43 ? ? ? ? ? ? 47 ILE A C 1 +ATOM 449 O O . ILE A 1 47 ? 0.579 -1.641 5.090 1.00 13.68 ? ? ? ? ? ? 47 ILE A O 1 +ATOM 450 C CB . ILE A 1 47 ? -1.466 0.587 6.123 1.00 13.67 ? ? ? ? ? ? 47 ILE A CB 1 +ATOM 451 C CG1 . ILE A 1 47 ? -1.712 -0.683 6.942 1.00 10.96 ? ? ? ? ? ? 47 ILE A CG1 1 +ATOM 452 C CG2 . ILE A 1 47 ? -2.734 1.446 5.944 1.00 9.75 ? ? ? ? ? ? 47 ILE A CG2 1 +ATOM 453 C CD1 . ILE A 1 47 ? -1.279 -0.564 8.399 1.00 9.43 ? ? ? ? ? ? 47 ILE A CD1 1 +ATOM 454 H H . ILE A 1 47 ? -2.401 -1.189 4.069 1.00 15.00 ? ? ? ? ? ? 47 ILE A H 1 +ATOM 455 N N . GLY A 1 48 ? 1.541 0.287 4.685 1.00 12.48 ? ? ? ? ? ? 48 GLY A N 1 +ATOM 456 C CA . GLY A 1 48 ? 2.810 -0.455 4.774 1.00 10.79 ? ? ? ? ? ? 48 GLY A CA 1 +ATOM 457 C C . GLY A 1 48 ? 3.501 -0.450 6.124 1.00 8.62 ? ? ? ? ? ? 48 GLY A C 1 +ATOM 458 O O . GLY A 1 48 ? 3.690 0.611 6.685 1.00 10.71 ? ? ? ? ? ? 48 GLY A O 1 +ATOM 459 H H . GLY A 1 48 ? 1.467 1.275 4.566 1.00 15.00 ? ? ? ? ? ? 48 GLY A H 1 +ATOM 460 N N . GLY A 1 49 ? 3.872 -1.638 6.630 1.00 9.15 ? ? ? ? ? ? 49 GLY A N 1 +ATOM 461 C CA . GLY A 1 49 ? 4.667 -1.717 7.878 1.00 8.64 ? ? ? ? ? ? 49 GLY A CA 1 +ATOM 462 C C . GLY A 1 49 ? 6.032 -2.371 7.671 1.00 13.08 ? ? ? ? ? ? 49 GLY A C 1 +ATOM 463 O O . GLY A 1 49 ? 6.401 -2.675 6.548 1.00 11.27 ? ? ? ? ? ? 49 GLY A O 1 +ATOM 464 H H . GLY A 1 49 ? 3.656 -2.448 6.091 1.00 15.00 ? ? ? ? ? ? 49 GLY A H 1 +ATOM 465 N N . ILE A 1 50 ? 6.824 -2.604 8.737 1.00 16.21 ? ? ? ? ? ? 50 ILE A N 1 +ATOM 466 C CA . ILE A 1 50 ? 8.168 -3.023 8.290 1.00 18.38 ? ? ? ? ? ? 50 ILE A CA 1 +ATOM 467 C C . ILE A 1 50 ? 8.324 -4.364 7.545 1.00 19.29 ? ? ? ? ? ? 50 ILE A C 1 +ATOM 468 O O . ILE A 1 50 ? 9.159 -4.511 6.670 1.00 21.57 ? ? ? ? ? ? 50 ILE A O 1 +ATOM 469 C CB . ILE A 1 50 ? 9.340 -2.791 9.305 1.00 19.61 ? ? ? ? ? ? 50 ILE A CB 1 +ATOM 470 C CG1 . ILE A 1 50 ? 9.950 -4.057 9.888 1.00 21.42 ? ? ? ? ? ? 50 ILE A CG1 1 +ATOM 471 C CG2 . ILE A 1 50 ? 9.056 -1.788 10.438 1.00 13.44 ? ? ? ? ? ? 50 ILE A CG2 1 +ATOM 472 C CD1 . ILE A 1 50 ? 11.321 -3.759 10.485 1.00 27.01 ? ? ? ? ? ? 50 ILE A CD1 1 +ATOM 473 H H . ILE A 1 50 ? 6.487 -2.493 9.676 1.00 15.00 ? ? ? ? ? ? 50 ILE A H 1 +ATOM 474 N N . GLY A 1 51 ? 7.463 -5.341 7.897 1.00 19.71 ? ? ? ? ? ? 51 GLY A N 1 +ATOM 475 C CA . GLY A 1 51 ? 7.553 -6.613 7.154 1.00 14.98 ? ? ? ? ? ? 51 GLY A CA 1 +ATOM 476 C C . GLY A 1 51 ? 6.710 -6.733 5.871 1.00 14.89 ? ? ? ? ? ? 51 GLY A C 1 +ATOM 477 O O . GLY A 1 51 ? 6.612 -7.796 5.302 1.00 15.83 ? ? ? ? ? ? 51 GLY A O 1 +ATOM 478 H H . GLY A 1 51 ? 6.725 -5.156 8.547 1.00 15.00 ? ? ? ? ? ? 51 GLY A H 1 +ATOM 479 N N . GLY A 1 52 ? 6.075 -5.619 5.421 1.00 18.52 ? ? ? ? ? ? 52 GLY A N 1 +ATOM 480 C CA . GLY A 1 52 ? 5.285 -5.622 4.169 1.00 13.59 ? ? ? ? ? ? 52 GLY A CA 1 +ATOM 481 C C . GLY A 1 52 ? 3.992 -4.783 4.145 1.00 13.84 ? ? ? ? ? ? 52 GLY A C 1 +ATOM 482 O O . GLY A 1 52 ? 3.774 -3.944 5.001 1.00 14.07 ? ? ? ? ? ? 52 GLY A O 1 +ATOM 483 H H . GLY A 1 52 ? 6.253 -4.766 5.912 1.00 15.00 ? ? ? ? ? ? 52 GLY A H 1 +ATOM 484 N N . PHE A 1 53 ? 3.129 -5.045 3.137 1.00 15.75 ? ? ? ? ? ? 53 PHE A N 1 +ATOM 485 C CA . PHE A 1 53 ? 1.825 -4.369 2.984 1.00 17.32 ? ? ? ? ? ? 53 PHE A CA 1 +ATOM 486 C C . PHE A 1 53 ? 0.629 -5.087 3.565 1.00 23.07 ? ? ? ? ? ? 53 PHE A C 1 +ATOM 487 O O . PHE A 1 53 ? 0.349 -6.209 3.169 1.00 29.18 ? ? ? ? ? ? 53 PHE A O 1 +ATOM 488 C CB . PHE A 1 53 ? 1.380 -4.225 1.535 1.00 15.75 ? ? ? ? ? ? 53 PHE A CB 1 +ATOM 489 C CG . PHE A 1 53 ? 1.930 -2.972 0.914 1.00 17.91 ? ? ? ? ? ? 53 PHE A CG 1 +ATOM 490 C CD1 . PHE A 1 53 ? 1.601 -1.710 1.440 1.00 23.67 ? ? ? ? ? ? 53 PHE A CD1 1 +ATOM 491 C CD2 . PHE A 1 53 ? 2.811 -3.091 -0.166 1.00 21.23 ? ? ? ? ? ? 53 PHE A CD2 1 +ATOM 492 C CE1 . PHE A 1 53 ? 2.265 -0.559 0.964 1.00 25.07 ? ? ? ? ? ? 53 PHE A CE1 1 +ATOM 493 C CE2 . PHE A 1 53 ? 3.469 -1.951 -0.659 1.00 24.15 ? ? ? ? ? ? 53 PHE A CE2 1 +ATOM 494 C CZ . PHE A 1 53 ? 3.232 -0.704 -0.047 1.00 26.52 ? ? ? ? ? ? 53 PHE A CZ 1 +ATOM 495 H H . PHE A 1 53 ? 3.394 -5.798 2.536 1.00 15.00 ? ? ? ? ? ? 53 PHE A H 1 +ATOM 496 N N . ILE A 1 54 ? -0.129 -4.404 4.444 1.00 22.84 ? ? ? ? ? ? 54 ILE A N 1 +ATOM 497 C CA . ILE A 1 54 ? -1.485 -4.944 4.682 1.00 19.56 ? ? ? ? ? ? 54 ILE A CA 1 +ATOM 498 C C . ILE A 1 54 ? -2.705 -4.183 4.103 1.00 20.37 ? ? ? ? ? ? 54 ILE A C 1 +ATOM 499 O O . ILE A 1 54 ? -2.698 -3.007 3.755 1.00 21.02 ? ? ? ? ? ? 54 ILE A O 1 +ATOM 500 C CB . ILE A 1 54 ? -1.731 -5.333 6.163 1.00 18.04 ? ? ? ? ? ? 54 ILE A CB 1 +ATOM 501 C CG1 . ILE A 1 54 ? -1.860 -4.152 7.112 1.00 14.47 ? ? ? ? ? ? 54 ILE A CG1 1 +ATOM 502 C CG2 . ILE A 1 54 ? -0.682 -6.319 6.686 1.00 12.60 ? ? ? ? ? ? 54 ILE A CG2 1 +ATOM 503 C CD1 . ILE A 1 54 ? -2.069 -4.596 8.565 1.00 17.81 ? ? ? ? ? ? 54 ILE A CD1 1 +ATOM 504 H H . ILE A 1 54 ? 0.185 -3.510 4.767 1.00 15.00 ? ? ? ? ? ? 54 ILE A H 1 +ATOM 505 N N . LYS A 1 55 ? -3.800 -4.939 4.016 1.00 19.34 ? ? ? ? ? ? 55 LYS A N 1 +ATOM 506 C CA . LYS A 1 55 ? -5.043 -4.305 3.566 1.00 18.48 ? ? ? ? ? ? 55 LYS A CA 1 +ATOM 507 C C . LYS A 1 55 ? -6.107 -4.126 4.665 1.00 17.27 ? ? ? ? ? ? 55 LYS A C 1 +ATOM 508 O O . LYS A 1 55 ? -6.276 -4.956 5.550 1.00 14.14 ? ? ? ? ? ? 55 LYS A O 1 +ATOM 509 C CB . LYS A 1 55 ? -5.582 -5.052 2.347 1.00 22.23 ? ? ? ? ? ? 55 LYS A CB 1 +ATOM 510 C CG . LYS A 1 55 ? -6.899 -4.551 1.755 1.00 33.21 ? ? ? ? ? ? 55 LYS A CG 1 +ATOM 511 C CD . LYS A 1 55 ? -7.404 -5.499 0.663 1.00 43.72 ? ? ? ? ? ? 55 LYS A CD 1 +ATOM 512 C CE . LYS A 1 55 ? -8.898 -5.297 0.373 1.00 50.72 ? ? ? ? ? ? 55 LYS A CE 1 +ATOM 513 N NZ . LYS A 1 55 ? -9.336 -6.204 -0.702 1.00 52.98 ? ? ? ? ? ? 55 LYS A NZ 1 +ATOM 514 H H . LYS A 1 55 ? -3.763 -5.884 4.331 1.00 15.00 ? ? ? ? ? ? 55 LYS A H 1 +ATOM 515 H HZ1 . LYS A 1 55 ? -9.059 -7.180 -0.474 1.00 15.00 ? ? ? ? ? ? 55 LYS A HZ1 1 +ATOM 516 H HZ2 . LYS A 1 55 ? -10.370 -6.152 -0.805 1.00 15.00 ? ? ? ? ? ? 55 LYS A HZ2 1 +ATOM 517 H HZ3 . LYS A 1 55 ? -8.888 -5.919 -1.596 1.00 15.00 ? ? ? ? ? ? 55 LYS A HZ3 1 +ATOM 518 N N . VAL A 1 56 ? -6.764 -2.942 4.573 1.00 18.67 ? ? ? ? ? ? 56 VAL A N 1 +ATOM 519 C CA . VAL A 1 56 ? -7.550 -2.360 5.673 1.00 12.05 ? ? ? ? ? ? 56 VAL A CA 1 +ATOM 520 C C . VAL A 1 56 ? -8.917 -1.786 5.308 1.00 8.82 ? ? ? ? ? ? 56 VAL A C 1 +ATOM 521 O O . VAL A 1 56 ? -9.168 -1.353 4.196 1.00 11.63 ? ? ? ? ? ? 56 VAL A O 1 +ATOM 522 C CB . VAL A 1 56 ? -6.603 -1.392 6.391 1.00 7.83 ? ? ? ? ? ? 56 VAL A CB 1 +ATOM 523 C CG1 . VAL A 1 56 ? -6.834 0.091 6.224 1.00 2.00 ? ? ? ? ? ? 56 VAL A CG1 1 +ATOM 524 C CG2 . VAL A 1 56 ? -6.395 -1.903 7.799 1.00 6.80 ? ? ? ? ? ? 56 VAL A CG2 1 +ATOM 525 H H . VAL A 1 56 ? -6.551 -2.385 3.770 1.00 15.00 ? ? ? ? ? ? 56 VAL A H 1 +ATOM 526 N N . ARG A 1 57 ? -9.815 -1.814 6.286 1.00 10.78 ? ? ? ? ? ? 57 ARG A N 1 +ATOM 527 C CA . ARG A 1 57 ? -11.066 -1.048 6.164 1.00 8.48 ? ? ? ? ? ? 57 ARG A CA 1 +ATOM 528 C C . ARG A 1 57 ? -11.091 0.197 7.039 1.00 8.76 ? ? ? ? ? ? 57 ARG A C 1 +ATOM 529 O O . ARG A 1 57 ? -11.111 0.145 8.266 1.00 8.67 ? ? ? ? ? ? 57 ARG A O 1 +ATOM 530 C CB . ARG A 1 57 ? -12.279 -1.893 6.531 1.00 7.92 ? ? ? ? ? ? 57 ARG A CB 1 +ATOM 531 C CG . ARG A 1 57 ? -12.585 -3.018 5.549 1.00 9.23 ? ? ? ? ? ? 57 ARG A CG 1 +ATOM 532 C CD . ARG A 1 57 ? -13.825 -3.819 5.947 1.00 12.88 ? ? ? ? ? ? 57 ARG A CD 1 +ATOM 533 N NE . ARG A 1 57 ? -13.522 -4.972 6.797 1.00 19.41 ? ? ? ? ? ? 57 ARG A NE 1 +ATOM 534 C CZ . ARG A 1 57 ? -14.057 -5.084 8.049 1.00 28.57 ? ? ? ? ? ? 57 ARG A CZ 1 +ATOM 535 N NH1 . ARG A 1 57 ? -14.670 -4.055 8.653 1.00 29.23 ? ? ? ? ? ? 57 ARG A NH1 1 +ATOM 536 N NH2 . ARG A 1 57 ? -14.002 -6.251 8.702 1.00 25.99 ? ? ? ? ? ? 57 ARG A NH2 1 +ATOM 537 H H . ARG A 1 57 ? -9.580 -2.337 7.110 1.00 15.00 ? ? ? ? ? ? 57 ARG A H 1 +ATOM 538 H HE . ARG A 1 57 ? -13.012 -5.747 6.424 1.00 15.00 ? ? ? ? ? ? 57 ARG A HE 1 +ATOM 539 H HH11 . ARG A 1 57 ? -14.734 -3.165 8.198 1.00 15.00 ? ? ? ? ? ? 57 ARG A HH11 1 +ATOM 540 H HH12 . ARG A 1 57 ? -15.067 -4.176 9.562 1.00 15.00 ? ? ? ? ? ? 57 ARG A HH12 1 +ATOM 541 H HH21 . ARG A 1 57 ? -13.559 -7.042 8.279 1.00 15.00 ? ? ? ? ? ? 57 ARG A HH21 1 +ATOM 542 H HH22 . ARG A 1 57 ? -14.403 -6.332 9.613 1.00 15.00 ? ? ? ? ? ? 57 ARG A HH22 1 +ATOM 543 N N . GLN A 1 58 ? -11.083 1.339 6.349 1.00 9.36 ? ? ? ? ? ? 58 GLN A N 1 +ATOM 544 C CA . GLN A 1 58 ? -11.207 2.635 7.013 1.00 7.13 ? ? ? ? ? ? 58 GLN A CA 1 +ATOM 545 C C . GLN A 1 58 ? -12.595 3.074 7.512 1.00 7.78 ? ? ? ? ? ? 58 GLN A C 1 +ATOM 546 O O . GLN A 1 58 ? -13.454 3.367 6.691 1.00 9.82 ? ? ? ? ? ? 58 GLN A O 1 +ATOM 547 C CB . GLN A 1 58 ? -10.584 3.683 6.087 1.00 9.03 ? ? ? ? ? ? 58 GLN A CB 1 +ATOM 548 C CG . GLN A 1 58 ? -10.344 5.049 6.766 1.00 15.66 ? ? ? ? ? ? 58 GLN A CG 1 +ATOM 549 C CD . GLN A 1 58 ? -9.510 5.977 5.891 1.00 16.91 ? ? ? ? ? ? 58 GLN A CD 1 +ATOM 550 O OE1 . GLN A 1 58 ? -9.023 5.669 4.822 1.00 22.25 ? ? ? ? ? ? 58 GLN A OE1 1 +ATOM 551 N NE2 . GLN A 1 58 ? -9.320 7.175 6.380 1.00 13.90 ? ? ? ? ? ? 58 GLN A NE2 1 +ATOM 552 H H . GLN A 1 58 ? -10.980 1.249 5.365 1.00 15.00 ? ? ? ? ? ? 58 GLN A H 1 +ATOM 553 H HE21 . GLN A 1 58 ? -8.751 7.678 5.735 1.00 15.00 ? ? ? ? ? ? 58 GLN A HE21 1 +ATOM 554 H HE22 . GLN A 1 58 ? -9.668 7.526 7.238 1.00 15.00 ? ? ? ? ? ? 58 GLN A HE22 1 +ATOM 555 N N . TYR A 1 59 ? -12.765 3.179 8.860 1.00 4.58 ? ? ? ? ? ? 59 TYR A N 1 +ATOM 556 C CA . TYR A 1 59 ? -13.942 3.885 9.422 1.00 5.07 ? ? ? ? ? ? 59 TYR A CA 1 +ATOM 557 C C . TYR A 1 59 ? -13.682 5.245 10.081 1.00 7.84 ? ? ? ? ? ? 59 TYR A C 1 +ATOM 558 O O . TYR A 1 59 ? -12.843 5.379 10.961 1.00 10.41 ? ? ? ? ? ? 59 TYR A O 1 +ATOM 559 C CB . TYR A 1 59 ? -14.720 3.072 10.477 1.00 5.28 ? ? ? ? ? ? 59 TYR A CB 1 +ATOM 560 C CG . TYR A 1 59 ? -15.178 1.717 9.985 1.00 7.61 ? ? ? ? ? ? 59 TYR A CG 1 +ATOM 561 C CD1 . TYR A 1 59 ? -16.429 1.595 9.367 1.00 7.43 ? ? ? ? ? ? 59 TYR A CD1 1 +ATOM 562 C CD2 . TYR A 1 59 ? -14.333 0.601 10.167 1.00 15.35 ? ? ? ? ? ? 59 TYR A CD2 1 +ATOM 563 C CE1 . TYR A 1 59 ? -16.870 0.332 8.951 1.00 10.12 ? ? ? ? ? ? 59 TYR A CE1 1 +ATOM 564 C CE2 . TYR A 1 59 ? -14.755 -0.666 9.736 1.00 16.82 ? ? ? ? ? ? 59 TYR A CE2 1 +ATOM 565 C CZ . TYR A 1 59 ? -16.046 -0.793 9.181 1.00 16.20 ? ? ? ? ? ? 59 TYR A CZ 1 +ATOM 566 O OH . TYR A 1 59 ? -16.537 -2.052 8.909 1.00 15.62 ? ? ? ? ? ? 59 TYR A OH 1 +ATOM 567 H H . TYR A 1 59 ? -12.060 2.784 9.452 1.00 15.00 ? ? ? ? ? ? 59 TYR A H 1 +ATOM 568 H HH . TYR A 1 59 ? -17.463 -1.979 8.709 1.00 15.00 ? ? ? ? ? ? 59 TYR A HH 1 +ATOM 569 N N . ASP A 1 60 ? -14.420 6.280 9.634 1.00 8.33 ? ? ? ? ? ? 60 ASP A N 1 +ATOM 570 C CA . ASP A 1 60 ? -14.201 7.632 10.191 1.00 8.94 ? ? ? ? ? ? 60 ASP A CA 1 +ATOM 571 C C . ASP A 1 60 ? -15.146 8.076 11.297 1.00 12.12 ? ? ? ? ? ? 60 ASP A C 1 +ATOM 572 O O . ASP A 1 60 ? -16.218 7.526 11.443 1.00 12.98 ? ? ? ? ? ? 60 ASP A O 1 +ATOM 573 C CB . ASP A 1 60 ? -14.214 8.715 9.106 1.00 7.49 ? ? ? ? ? ? 60 ASP A CB 1 +ATOM 574 C CG . ASP A 1 60 ? -13.268 8.367 7.959 1.00 11.05 ? ? ? ? ? ? 60 ASP A CG 1 +ATOM 575 O OD1 . ASP A 1 60 ? -12.124 7.999 8.231 1.00 19.89 ? ? ? ? ? ? 60 ASP A OD1 1 +ATOM 576 O OD2 . ASP A 1 60 ? -13.668 8.458 6.796 1.00 11.72 ? ? ? ? ? ? 60 ASP A OD2 1 +ATOM 577 H H . ASP A 1 60 ? -15.187 6.059 9.035 1.00 15.00 ? ? ? ? ? ? 60 ASP A H 1 +ATOM 578 N N . GLN A 1 61 ? -14.742 9.086 12.089 1.00 13.98 ? ? ? ? ? ? 61 GLN A N 1 +ATOM 579 C CA . GLN A 1 61 ? -15.664 9.514 13.179 1.00 16.08 ? ? ? ? ? ? 61 GLN A CA 1 +ATOM 580 C C . GLN A 1 61 ? -16.363 8.514 14.188 1.00 14.69 ? ? ? ? ? ? 61 GLN A C 1 +ATOM 581 O O . GLN A 1 61 ? -17.532 8.604 14.552 1.00 13.55 ? ? ? ? ? ? 61 GLN A O 1 +ATOM 582 C CB . GLN A 1 61 ? -16.653 10.548 12.637 1.00 19.49 ? ? ? ? ? ? 61 GLN A CB 1 +ATOM 583 C CG . GLN A 1 61 ? -16.031 11.796 11.980 1.00 30.71 ? ? ? ? ? ? 61 GLN A CG 1 +ATOM 584 C CD . GLN A 1 61 ? -15.203 12.627 12.959 1.00 36.70 ? ? ? ? ? ? 61 GLN A CD 1 +ATOM 585 O OE1 . GLN A 1 61 ? -15.341 12.589 14.170 1.00 40.08 ? ? ? ? ? ? 61 GLN A OE1 1 +ATOM 586 N NE2 . GLN A 1 61 ? -14.260 13.384 12.397 1.00 36.53 ? ? ? ? ? ? 61 GLN A NE2 1 +ATOM 587 H H . GLN A 1 61 ? -13.853 9.505 11.941 1.00 15.00 ? ? ? ? ? ? 61 GLN A H 1 +ATOM 588 H HE21 . GLN A 1 61 ? -13.744 13.870 13.098 1.00 15.00 ? ? ? ? ? ? 61 GLN A HE21 1 +ATOM 589 H HE22 . GLN A 1 61 ? -14.115 13.472 11.420 1.00 15.00 ? ? ? ? ? ? 61 GLN A HE22 1 +ATOM 590 N N . ILE A 1 62 ? -15.544 7.560 14.664 1.00 10.58 ? ? ? ? ? ? 62 ILE A N 1 +ATOM 591 C CA . ILE A 1 62 ? -15.963 6.587 15.673 1.00 8.91 ? ? ? ? ? ? 62 ILE A CA 1 +ATOM 592 C C . ILE A 1 62 ? -15.545 6.958 17.114 1.00 12.94 ? ? ? ? ? ? 62 ILE A C 1 +ATOM 593 O O . ILE A 1 62 ? -14.431 7.393 17.403 1.00 10.33 ? ? ? ? ? ? 62 ILE A O 1 +ATOM 594 C CB . ILE A 1 62 ? -15.376 5.225 15.295 1.00 4.78 ? ? ? ? ? ? 62 ILE A CB 1 +ATOM 595 C CG1 . ILE A 1 62 ? -15.670 4.782 13.852 1.00 5.50 ? ? ? ? ? ? 62 ILE A CG1 1 +ATOM 596 C CG2 . ILE A 1 62 ? -15.760 4.140 16.303 1.00 2.00 ? ? ? ? ? ? 62 ILE A CG2 1 +ATOM 597 C CD1 . ILE A 1 62 ? -17.080 4.296 13.470 1.00 6.02 ? ? ? ? ? ? 62 ILE A CD1 1 +ATOM 598 H H . ILE A 1 62 ? -14.604 7.557 14.327 1.00 15.00 ? ? ? ? ? ? 62 ILE A H 1 +ATOM 599 N N . PRO A 1 63 ? -16.523 6.806 18.041 1.00 14.35 ? ? ? ? ? ? 63 PRO A N 1 +ATOM 600 C CA . PRO A 1 63 ? -16.248 7.063 19.462 1.00 11.42 ? ? ? ? ? ? 63 PRO A CA 1 +ATOM 601 C C . PRO A 1 63 ? -15.550 5.916 20.180 1.00 13.82 ? ? ? ? ? ? 63 PRO A C 1 +ATOM 602 O O . PRO A 1 63 ? -16.004 4.771 20.218 1.00 13.36 ? ? ? ? ? ? 63 PRO A O 1 +ATOM 603 C CB . PRO A 1 63 ? -17.636 7.378 20.025 1.00 7.57 ? ? ? ? ? ? 63 PRO A CB 1 +ATOM 604 C CG . PRO A 1 63 ? -18.554 7.567 18.809 1.00 9.23 ? ? ? ? ? ? 63 PRO A CG 1 +ATOM 605 C CD . PRO A 1 63 ? -17.942 6.610 17.786 1.00 14.61 ? ? ? ? ? ? 63 PRO A CD 1 +ATOM 606 N N . VAL A 1 64 ? -14.379 6.277 20.750 1.00 12.69 ? ? ? ? ? ? 64 VAL A N 1 +ATOM 607 C CA . VAL A 1 64 ? -13.736 5.312 21.632 1.00 9.70 ? ? ? ? ? ? 64 VAL A CA 1 +ATOM 608 C C . VAL A 1 64 ? -13.381 5.801 23.031 1.00 8.20 ? ? ? ? ? ? 64 VAL A C 1 +ATOM 609 O O . VAL A 1 64 ? -13.052 6.949 23.305 1.00 8.01 ? ? ? ? ? ? 64 VAL A O 1 +ATOM 610 C CB . VAL A 1 64 ? -12.654 4.392 20.936 1.00 9.79 ? ? ? ? ? ? 64 VAL A CB 1 +ATOM 611 C CG1 . VAL A 1 64 ? -12.700 4.364 19.396 1.00 2.00 ? ? ? ? ? ? 64 VAL A CG1 1 +ATOM 612 C CG2 . VAL A 1 64 ? -11.241 4.495 21.474 1.00 12.10 ? ? ? ? ? ? 64 VAL A CG2 1 +ATOM 613 H H . VAL A 1 64 ? -14.000 7.170 20.528 1.00 15.00 ? ? ? ? ? ? 64 VAL A H 1 +ATOM 614 N N . GLU A 1 65 ? -13.505 4.868 23.955 1.00 7.36 ? ? ? ? ? ? 65 GLU A N 1 +ATOM 615 C CA . GLU A 1 65 ? -12.972 5.193 25.262 1.00 8.29 ? ? ? ? ? ? 65 GLU A CA 1 +ATOM 616 C C . GLU A 1 65 ? -11.712 4.464 25.650 1.00 8.72 ? ? ? ? ? ? 65 GLU A C 1 +ATOM 617 O O . GLU A 1 65 ? -11.632 3.239 25.692 1.00 7.20 ? ? ? ? ? ? 65 GLU A O 1 +ATOM 618 C CB . GLU A 1 65 ? -14.009 4.958 26.331 1.00 16.21 ? ? ? ? ? ? 65 GLU A CB 1 +ATOM 619 C CG . GLU A 1 65 ? -15.173 5.917 26.227 1.00 28.95 ? ? ? ? ? ? 65 GLU A CG 1 +ATOM 620 C CD . GLU A 1 65 ? -16.036 5.762 27.457 1.00 42.00 ? ? ? ? ? ? 65 GLU A CD 1 +ATOM 621 O OE1 . GLU A 1 65 ? -15.655 6.281 28.515 1.00 41.15 ? ? ? ? ? ? 65 GLU A OE1 1 +ATOM 622 O OE2 . GLU A 1 65 ? -17.086 5.118 27.336 1.00 47.92 ? ? ? ? ? ? 65 GLU A OE2 1 +ATOM 623 H H . GLU A 1 65 ? -13.913 3.986 23.705 1.00 15.00 ? ? ? ? ? ? 65 GLU A H 1 +ATOM 624 N N . ILE A 1 66 ? -10.718 5.287 25.964 1.00 12.31 ? ? ? ? ? ? 66 ILE A N 1 +ATOM 625 C CA . ILE A 1 66 ? -9.424 4.746 26.428 1.00 15.55 ? ? ? ? ? ? 66 ILE A CA 1 +ATOM 626 C C . ILE A 1 66 ? -9.134 5.185 27.859 1.00 17.26 ? ? ? ? ? ? 66 ILE A C 1 +ATOM 627 O O . ILE A 1 66 ? -8.955 6.366 28.160 1.00 14.67 ? ? ? ? ? ? 66 ILE A O 1 +ATOM 628 C CB . ILE A 1 66 ? -8.240 5.161 25.497 1.00 14.67 ? ? ? ? ? ? 66 ILE A CB 1 +ATOM 629 C CG1 . ILE A 1 66 ? -8.601 5.198 24.012 1.00 14.16 ? ? ? ? ? ? 66 ILE A CG1 1 +ATOM 630 C CG2 . ILE A 1 66 ? -7.004 4.253 25.635 1.00 12.13 ? ? ? ? ? ? 66 ILE A CG2 1 +ATOM 631 C CD1 . ILE A 1 66 ? -7.499 5.896 23.204 1.00 12.50 ? ? ? ? ? ? 66 ILE A CD1 1 +ATOM 632 H H . ILE A 1 66 ? -10.882 6.267 25.831 1.00 15.00 ? ? ? ? ? ? 66 ILE A H 1 +ATOM 633 N N . CYS A 1 67 ? -9.142 4.196 28.776 1.00 20.80 ? ? ? ? ? ? 67 CYS A N 1 +ATOM 634 C CA . CYS A 1 67 ? -8.903 4.595 30.199 1.00 24.96 ? ? ? ? ? ? 67 CYS A CA 1 +ATOM 635 C C . CYS A 1 67 ? -9.762 5.707 30.862 1.00 25.05 ? ? ? ? ? ? 67 CYS A C 1 +ATOM 636 O O . CYS A 1 67 ? -9.280 6.561 31.606 1.00 25.64 ? ? ? ? ? ? 67 CYS A O 1 +ATOM 637 C CB . CYS A 1 67 ? -7.455 5.015 30.442 1.00 24.85 ? ? ? ? ? ? 67 CYS A CB 1 +ATOM 638 S SG . CYS A 1 67 ? -6.469 3.587 30.789 1.00 34.14 ? ? ? ? ? ? 67 CYS A SG 1 +ATOM 639 H H . CYS A 1 67 ? -9.210 3.247 28.455 1.00 15.00 ? ? ? ? ? ? 67 CYS A H 1 +ATOM 640 N N . GLY A 1 68 ? -11.058 5.710 30.508 1.00 22.38 ? ? ? ? ? ? 68 GLY A N 1 +ATOM 641 C CA . GLY A 1 68 ? -11.856 6.851 30.987 1.00 23.78 ? ? ? ? ? ? 68 GLY A CA 1 +ATOM 642 C C . GLY A 1 68 ? -11.771 8.182 30.210 1.00 25.98 ? ? ? ? ? ? 68 GLY A C 1 +ATOM 643 O O . GLY A 1 68 ? -12.465 9.153 30.491 1.00 30.44 ? ? ? ? ? ? 68 GLY A O 1 +ATOM 644 H H . GLY A 1 68 ? -11.411 5.002 29.905 1.00 15.00 ? ? ? ? ? ? 68 GLY A H 1 +ATOM 645 N N . HIS A 1 69 ? -10.906 8.176 29.182 1.00 22.38 ? ? ? ? ? ? 69 HIS A N 1 +ATOM 646 C CA . HIS A 1 69 ? -10.885 9.341 28.308 1.00 19.25 ? ? ? ? ? ? 69 HIS A CA 1 +ATOM 647 C C . HIS A 1 69 ? -11.555 9.024 27.002 1.00 19.72 ? ? ? ? ? ? 69 HIS A C 1 +ATOM 648 O O . HIS A 1 69 ? -11.320 7.998 26.375 1.00 21.73 ? ? ? ? ? ? 69 HIS A O 1 +ATOM 649 C CB . HIS A 1 69 ? -9.464 9.853 28.056 1.00 20.58 ? ? ? ? ? ? 69 HIS A CB 1 +ATOM 650 C CG . HIS A 1 69 ? -8.777 10.135 29.370 1.00 24.61 ? ? ? ? ? ? 69 HIS A CG 1 +ATOM 651 N ND1 . HIS A 1 69 ? -8.210 9.190 30.156 1.00 27.85 ? ? ? ? ? ? 69 HIS A ND1 1 +ATOM 652 C CD2 . HIS A 1 69 ? -8.662 11.363 30.018 1.00 25.43 ? ? ? ? ? ? 69 HIS A CD2 1 +ATOM 653 C CE1 . HIS A 1 69 ? -7.748 9.797 31.284 1.00 24.14 ? ? ? ? ? ? 69 HIS A CE1 1 +ATOM 654 N NE2 . HIS A 1 69 ? -8.034 11.130 31.196 1.00 22.87 ? ? ? ? ? ? 69 HIS A NE2 1 +ATOM 655 H H . HIS A 1 69 ? -10.316 7.394 29.003 1.00 15.00 ? ? ? ? ? ? 69 HIS A H 1 +ATOM 656 H HD1 . HIS A 1 69 ? -8.149 8.233 29.977 1.00 15.00 ? ? ? ? ? ? 69 HIS A HD1 1 +ATOM 657 N N . LYS A 1 70 ? -12.450 9.933 26.649 1.00 19.65 ? ? ? ? ? ? 70 LYS A N 1 +ATOM 658 C CA . LYS A 1 70 ? -13.221 9.826 25.406 1.00 17.22 ? ? ? ? ? ? 70 LYS A CA 1 +ATOM 659 C C . LYS A 1 70 ? -12.507 10.406 24.163 1.00 15.83 ? ? ? ? ? ? 70 LYS A C 1 +ATOM 660 O O . LYS A 1 70 ? -11.947 11.489 24.204 1.00 15.38 ? ? ? ? ? ? 70 LYS A O 1 +ATOM 661 C CB . LYS A 1 70 ? -14.508 10.605 25.650 1.00 20.19 ? ? ? ? ? ? 70 LYS A CB 1 +ATOM 662 C CG . LYS A 1 70 ? -15.789 9.845 25.956 1.00 30.72 ? ? ? ? ? ? 70 LYS A CG 1 +ATOM 663 C CD . LYS A 1 70 ? -16.197 9.005 24.735 1.00 39.08 ? ? ? ? ? ? 70 LYS A CD 1 +ATOM 664 C CE . LYS A 1 70 ? -16.223 9.752 23.395 1.00 39.55 ? ? ? ? ? ? 70 LYS A CE 1 +ATOM 665 N NZ . LYS A 1 70 ? -15.774 8.786 22.393 1.00 38.04 ? ? ? ? ? ? 70 LYS A NZ 1 +ATOM 666 H H . LYS A 1 70 ? -12.475 10.764 27.198 1.00 15.00 ? ? ? ? ? ? 70 LYS A H 1 +ATOM 667 H HZ1 . LYS A 1 70 ? -14.814 8.468 22.636 1.00 15.00 ? ? ? ? ? ? 70 LYS A HZ1 1 +ATOM 668 H HZ2 . LYS A 1 70 ? -16.418 7.970 22.384 1.00 15.00 ? ? ? ? ? ? 70 LYS A HZ2 1 +ATOM 669 H HZ3 . LYS A 1 70 ? -15.765 9.237 21.456 1.00 15.00 ? ? ? ? ? ? 70 LYS A HZ3 1 +ATOM 670 N N . ALA A 1 71 ? -12.581 9.669 23.053 1.00 14.11 ? ? ? ? ? ? 71 ALA A N 1 +ATOM 671 C CA . ALA A 1 71 ? -12.049 10.164 21.785 1.00 9.65 ? ? ? ? ? ? 71 ALA A CA 1 +ATOM 672 C C . ALA A 1 71 ? -12.950 9.871 20.542 1.00 14.05 ? ? ? ? ? ? 71 ALA A C 1 +ATOM 673 O O . ALA A 1 71 ? -13.774 8.960 20.525 1.00 17.33 ? ? ? ? ? ? 71 ALA A O 1 +ATOM 674 C CB . ALA A 1 71 ? -10.691 9.503 21.588 1.00 13.01 ? ? ? ? ? ? 71 ALA A CB 1 +ATOM 675 H H . ALA A 1 71 ? -12.986 8.761 23.141 1.00 15.00 ? ? ? ? ? ? 71 ALA A H 1 +ATOM 676 N N . ILE A 1 72 ? -12.793 10.673 19.468 1.00 12.13 ? ? ? ? ? ? 72 ILE A N 1 +ATOM 677 C CA . ILE A 1 72 ? -13.614 10.476 18.259 1.00 7.59 ? ? ? ? ? ? 72 ILE A CA 1 +ATOM 678 C C . ILE A 1 72 ? -12.785 10.549 16.968 1.00 7.29 ? ? ? ? ? ? 72 ILE A C 1 +ATOM 679 O O . ILE A 1 72 ? -12.084 11.503 16.658 1.00 7.41 ? ? ? ? ? ? 72 ILE A O 1 +ATOM 680 C CB . ILE A 1 72 ? -14.848 11.451 18.212 1.00 7.82 ? ? ? ? ? ? 72 ILE A CB 1 +ATOM 681 C CG1 . ILE A 1 72 ? -15.644 11.511 19.533 1.00 6.92 ? ? ? ? ? ? 72 ILE A CG1 1 +ATOM 682 C CG2 . ILE A 1 72 ? -15.821 11.024 17.111 1.00 2.99 ? ? ? ? ? ? 72 ILE A CG2 1 +ATOM 683 C CD1 . ILE A 1 72 ? -16.810 12.505 19.598 1.00 7.31 ? ? ? ? ? ? 72 ILE A CD1 1 +ATOM 684 H H . ILE A 1 72 ? -12.094 11.391 19.558 1.00 15.00 ? ? ? ? ? ? 72 ILE A H 1 +ATOM 685 N N . GLY A 1 73 ? -12.812 9.459 16.216 1.00 6.85 ? ? ? ? ? ? 73 GLY A N 1 +ATOM 686 C CA . GLY A 1 73 ? -11.802 9.477 15.165 1.00 3.66 ? ? ? ? ? ? 73 GLY A CA 1 +ATOM 687 C C . GLY A 1 73 ? -11.808 8.290 14.226 1.00 5.70 ? ? ? ? ? ? 73 GLY A C 1 +ATOM 688 O O . GLY A 1 73 ? -12.670 7.431 14.296 1.00 5.13 ? ? ? ? ? ? 73 GLY A O 1 +ATOM 689 H H . GLY A 1 73 ? -13.337 8.653 16.494 1.00 15.00 ? ? ? ? ? ? 73 GLY A H 1 +ATOM 690 N N . THR A 1 74 ? -10.814 8.304 13.326 1.00 4.83 ? ? ? ? ? ? 74 THR A N 1 +ATOM 691 C CA . THR A 1 74 ? -10.557 7.175 12.406 1.00 6.42 ? ? ? ? ? ? 74 THR A CA 1 +ATOM 692 C C . THR A 1 74 ? -9.927 5.876 12.993 1.00 8.54 ? ? ? ? ? ? 74 THR A C 1 +ATOM 693 O O . THR A 1 74 ? -8.938 5.859 13.741 1.00 11.09 ? ? ? ? ? ? 74 THR A O 1 +ATOM 694 C CB . THR A 1 74 ? -9.720 7.753 11.231 1.00 9.90 ? ? ? ? ? ? 74 THR A CB 1 +ATOM 695 O OG1 . THR A 1 74 ? -10.423 8.883 10.688 1.00 6.69 ? ? ? ? ? ? 74 THR A OG1 1 +ATOM 696 C CG2 . THR A 1 74 ? -9.271 6.796 10.104 1.00 9.55 ? ? ? ? ? ? 74 THR A CG2 1 +ATOM 697 H H . THR A 1 74 ? -10.187 9.084 13.351 1.00 15.00 ? ? ? ? ? ? 74 THR A H 1 +ATOM 698 H HG1 . THR A 1 74 ? -11.146 8.537 10.185 1.00 15.00 ? ? ? ? ? ? 74 THR A HG1 1 +ATOM 699 N N . VAL A 1 75 ? -10.581 4.751 12.619 1.00 7.45 ? ? ? ? ? ? 75 VAL A N 1 +ATOM 700 C CA . VAL A 1 75 ? -10.064 3.424 12.999 1.00 3.64 ? ? ? ? ? ? 75 VAL A CA 1 +ATOM 701 C C . VAL A 1 75 ? -10.002 2.529 11.798 1.00 5.50 ? ? ? ? ? ? 75 VAL A C 1 +ATOM 702 O O . VAL A 1 75 ? -10.908 2.484 10.966 1.00 6.60 ? ? ? ? ? ? 75 VAL A O 1 +ATOM 703 C CB . VAL A 1 75 ? -10.751 2.669 14.181 1.00 2.00 ? ? ? ? ? ? 75 VAL A CB 1 +ATOM 704 C CG1 . VAL A 1 75 ? -10.913 3.535 15.429 1.00 2.24 ? ? ? ? ? ? 75 VAL A CG1 1 +ATOM 705 C CG2 . VAL A 1 75 ? -12.074 2.028 13.818 1.00 2.67 ? ? ? ? ? ? 75 VAL A CG2 1 +ATOM 706 H H . VAL A 1 75 ? -11.433 4.856 12.105 1.00 15.00 ? ? ? ? ? ? 75 VAL A H 1 +ATOM 707 N N . LEU A 1 76 ? -8.827 1.882 11.712 1.00 7.70 ? ? ? ? ? ? 76 LEU A N 1 +ATOM 708 C CA . LEU A 1 76 ? -8.560 0.993 10.582 1.00 9.14 ? ? ? ? ? ? 76 LEU A CA 1 +ATOM 709 C C . LEU A 1 76 ? -8.758 -0.411 11.091 1.00 8.24 ? ? ? ? ? ? 76 LEU A C 1 +ATOM 710 O O . LEU A 1 76 ? -8.180 -0.689 12.133 1.00 8.98 ? ? ? ? ? ? 76 LEU A O 1 +ATOM 711 C CB . LEU A 1 76 ? -7.096 1.080 10.170 1.00 10.74 ? ? ? ? ? ? 76 LEU A CB 1 +ATOM 712 C CG . LEU A 1 76 ? -6.554 2.116 9.182 1.00 10.68 ? ? ? ? ? ? 76 LEU A CG 1 +ATOM 713 C CD1 . LEU A 1 76 ? -7.371 3.382 9.044 1.00 7.60 ? ? ? ? ? ? 76 LEU A CD1 1 +ATOM 714 C CD2 . LEU A 1 76 ? -5.065 2.380 9.472 1.00 4.59 ? ? ? ? ? ? 76 LEU A CD2 1 +ATOM 715 H H . LEU A 1 76 ? -8.164 1.978 12.458 1.00 15.00 ? ? ? ? ? ? 76 LEU A H 1 +ATOM 716 N N . VAL A 1 77 ? -9.556 -1.241 10.379 1.00 5.51 ? ? ? ? ? ? 77 VAL A N 1 +ATOM 717 C CA . VAL A 1 77 ? -9.612 -2.615 10.873 1.00 7.56 ? ? ? ? ? ? 77 VAL A CA 1 +ATOM 718 C C . VAL A 1 77 ? -9.067 -3.627 9.884 1.00 11.19 ? ? ? ? ? ? 77 VAL A C 1 +ATOM 719 O O . VAL A 1 77 ? -9.292 -3.527 8.684 1.00 15.24 ? ? ? ? ? ? 77 VAL A O 1 +ATOM 720 C CB . VAL A 1 77 ? -10.965 -3.018 11.575 1.00 10.81 ? ? ? ? ? ? 77 VAL A CB 1 +ATOM 721 C CG1 . VAL A 1 77 ? -11.992 -1.869 11.789 1.00 6.89 ? ? ? ? ? ? 77 VAL A CG1 1 +ATOM 722 C CG2 . VAL A 1 77 ? -11.605 -4.314 11.072 1.00 6.45 ? ? ? ? ? ? 77 VAL A CG2 1 +ATOM 723 H H . VAL A 1 77 ? -10.102 -0.873 9.624 1.00 15.00 ? ? ? ? ? ? 77 VAL A H 1 +ATOM 724 N N . GLY A 1 78 ? -8.247 -4.550 10.439 1.00 14.31 ? ? ? ? ? ? 78 GLY A N 1 +ATOM 725 C CA . GLY A 1 78 ? -7.421 -5.459 9.606 1.00 11.38 ? ? ? ? ? ? 78 GLY A CA 1 +ATOM 726 C C . GLY A 1 78 ? -6.549 -6.491 10.338 1.00 10.04 ? ? ? ? ? ? 78 GLY A C 1 +ATOM 727 O O . GLY A 1 78 ? -6.689 -6.696 11.536 1.00 11.54 ? ? ? ? ? ? 78 GLY A O 1 +ATOM 728 H H . GLY A 1 78 ? -8.172 -4.530 11.440 1.00 15.00 ? ? ? ? ? ? 78 GLY A H 1 +ATOM 729 N N . PRO A 1 79 ? -5.657 -7.198 9.576 1.00 10.23 ? ? ? ? ? ? 79 PRO A N 1 +ATOM 730 C CA . PRO A 1 79 ? -4.843 -8.307 10.160 1.00 8.21 ? ? ? ? ? ? 79 PRO A CA 1 +ATOM 731 C C . PRO A 1 79 ? -3.582 -7.953 10.985 1.00 13.23 ? ? ? ? ? ? 79 PRO A C 1 +ATOM 732 O O . PRO A 1 79 ? -2.449 -8.222 10.618 1.00 21.44 ? ? ? ? ? ? 79 PRO A O 1 +ATOM 733 C CB . PRO A 1 79 ? -4.516 -9.134 8.905 1.00 4.37 ? ? ? ? ? ? 79 PRO A CB 1 +ATOM 734 C CG . PRO A 1 79 ? -4.472 -8.118 7.757 1.00 2.00 ? ? ? ? ? ? 79 PRO A CG 1 +ATOM 735 C CD . PRO A 1 79 ? -5.536 -7.089 8.115 1.00 3.01 ? ? ? ? ? ? 79 PRO A CD 1 +ATOM 736 N N . THR A 1 80 ? -3.793 -7.352 12.147 1.00 16.55 ? ? ? ? ? ? 80 THR A N 1 +ATOM 737 C CA . THR A 1 80 ? -2.668 -6.967 13.039 1.00 14.33 ? ? ? ? ? ? 80 THR A CA 1 +ATOM 738 C C . THR A 1 80 ? -2.414 -7.963 14.181 1.00 14.07 ? ? ? ? ? ? 80 THR A C 1 +ATOM 739 O O . THR A 1 80 ? -3.361 -8.591 14.627 1.00 14.05 ? ? ? ? ? ? 80 THR A O 1 +ATOM 740 C CB . THR A 1 80 ? -2.984 -5.585 13.630 1.00 10.44 ? ? ? ? ? ? 80 THR A CB 1 +ATOM 741 O OG1 . THR A 1 80 ? -2.027 -5.241 14.620 1.00 12.88 ? ? ? ? ? ? 80 THR A OG1 1 +ATOM 742 C CG2 . THR A 1 80 ? -4.388 -5.503 14.223 1.00 4.82 ? ? ? ? ? ? 80 THR A CG2 1 +ATOM 743 H H . THR A 1 80 ? -4.756 -7.257 12.405 1.00 15.00 ? ? ? ? ? ? 80 THR A H 1 +ATOM 744 H HG1 . THR A 1 80 ? -2.528 -4.947 15.384 1.00 15.00 ? ? ? ? ? ? 80 THR A HG1 1 +ATOM 745 N N . PRO A 1 81 ? -1.144 -8.155 14.681 1.00 14.95 ? ? ? ? ? ? 81 PRO A N 1 +ATOM 746 C CA . PRO A 1 81 ? -0.988 -9.139 15.784 1.00 12.96 ? ? ? ? ? ? 81 PRO A CA 1 +ATOM 747 C C . PRO A 1 81 ? -1.790 -8.850 17.053 1.00 12.83 ? ? ? ? ? ? 81 PRO A C 1 +ATOM 748 O O . PRO A 1 81 ? -2.404 -9.713 17.644 1.00 16.23 ? ? ? ? ? ? 81 PRO A O 1 +ATOM 749 C CB . PRO A 1 81 ? 0.521 -9.191 16.065 1.00 7.77 ? ? ? ? ? ? 81 PRO A CB 1 +ATOM 750 C CG . PRO A 1 81 ? 1.178 -8.551 14.848 1.00 7.13 ? ? ? ? ? ? 81 PRO A CG 1 +ATOM 751 C CD . PRO A 1 81 ? 0.139 -7.587 14.270 1.00 10.90 ? ? ? ? ? ? 81 PRO A CD 1 +ATOM 752 N N . VAL A 1 82 ? -1.736 -7.570 17.453 1.00 15.40 ? ? ? ? ? ? 82 VAL A N 1 +ATOM 753 C CA . VAL A 1 82 ? -2.440 -7.017 18.624 1.00 11.41 ? ? ? ? ? ? 82 VAL A CA 1 +ATOM 754 C C . VAL A 1 82 ? -3.373 -5.845 18.241 1.00 10.53 ? ? ? ? ? ? 82 VAL A C 1 +ATOM 755 O O . VAL A 1 82 ? -3.254 -5.294 17.142 1.00 9.57 ? ? ? ? ? ? 82 VAL A O 1 +ATOM 756 C CB . VAL A 1 82 ? -1.397 -6.519 19.651 1.00 9.70 ? ? ? ? ? ? 82 VAL A CB 1 +ATOM 757 C CG1 . VAL A 1 82 ? -0.766 -7.679 20.370 1.00 5.78 ? ? ? ? ? ? 82 VAL A CG1 1 +ATOM 758 C CG2 . VAL A 1 82 ? -0.333 -5.607 19.030 1.00 10.61 ? ? ? ? ? ? 82 VAL A CG2 1 +ATOM 759 H H . VAL A 1 82 ? -1.252 -6.961 16.826 1.00 15.00 ? ? ? ? ? ? 82 VAL A H 1 +ATOM 760 N N . ASN A 1 83 ? -4.242 -5.425 19.203 1.00 5.95 ? ? ? ? ? ? 83 ASN A N 1 +ATOM 761 C CA . ASN A 1 83 ? -4.800 -4.081 18.959 1.00 3.62 ? ? ? ? ? ? 83 ASN A CA 1 +ATOM 762 C C . ASN A 1 83 ? -3.849 -2.918 19.265 1.00 3.68 ? ? ? ? ? ? 83 ASN A C 1 +ATOM 763 O O . ASN A 1 83 ? -3.264 -2.850 20.340 1.00 6.21 ? ? ? ? ? ? 83 ASN A O 1 +ATOM 764 C CB . ASN A 1 83 ? -6.103 -3.838 19.728 1.00 8.40 ? ? ? ? ? ? 83 ASN A CB 1 +ATOM 765 C CG . ASN A 1 83 ? -7.265 -4.688 19.236 1.00 9.86 ? ? ? ? ? ? 83 ASN A CG 1 +ATOM 766 O OD1 . ASN A 1 83 ? -7.744 -4.560 18.129 1.00 15.78 ? ? ? ? ? ? 83 ASN A OD1 1 +ATOM 767 N ND2 . ASN A 1 83 ? -7.765 -5.557 20.102 1.00 6.89 ? ? ? ? ? ? 83 ASN A ND2 1 +ATOM 768 H H . ASN A 1 83 ? -4.312 -5.927 20.062 1.00 15.00 ? ? ? ? ? ? 83 ASN A H 1 +ATOM 769 H HD21 . ASN A 1 83 ? -8.526 -6.068 19.715 1.00 15.00 ? ? ? ? ? ? 83 ASN A HD21 1 +ATOM 770 H HD22 . ASN A 1 83 ? -7.387 -5.635 21.026 1.00 15.00 ? ? ? ? ? ? 83 ASN A HD22 1 +ATOM 771 N N . ILE A 1 84 ? -3.733 -2.018 18.281 1.00 4.44 ? ? ? ? ? ? 84 ILE A N 1 +ATOM 772 C CA . ILE A 1 84 ? -2.820 -0.844 18.286 1.00 6.23 ? ? ? ? ? ? 84 ILE A CA 1 +ATOM 773 C C . ILE A 1 84 ? -3.530 0.548 18.348 1.00 7.54 ? ? ? ? ? ? 84 ILE A C 1 +ATOM 774 O O . ILE A 1 84 ? -4.310 0.914 17.470 1.00 10.49 ? ? ? ? ? ? 84 ILE A O 1 +ATOM 775 C CB . ILE A 1 84 ? -1.917 -0.949 17.005 1.00 9.16 ? ? ? ? ? ? 84 ILE A CB 1 +ATOM 776 C CG1 . ILE A 1 84 ? -0.878 -2.065 17.074 1.00 9.46 ? ? ? ? ? ? 84 ILE A CG1 1 +ATOM 777 C CG2 . ILE A 1 84 ? -1.171 0.325 16.564 1.00 9.37 ? ? ? ? ? ? 84 ILE A CG2 1 +ATOM 778 C CD1 . ILE A 1 84 ? -0.214 -2.279 15.708 1.00 12.32 ? ? ? ? ? ? 84 ILE A CD1 1 +ATOM 779 H H . ILE A 1 84 ? -4.302 -2.187 17.474 1.00 15.00 ? ? ? ? ? ? 84 ILE A H 1 +ATOM 780 N N . ILE A 1 85 ? -3.203 1.329 19.399 1.00 6.08 ? ? ? ? ? ? 85 ILE A N 1 +ATOM 781 C CA . ILE A 1 85 ? -3.549 2.761 19.382 1.00 3.83 ? ? ? ? ? ? 85 ILE A CA 1 +ATOM 782 C C . ILE A 1 85 ? -2.346 3.642 18.969 1.00 5.48 ? ? ? ? ? ? 85 ILE A C 1 +ATOM 783 O O . ILE A 1 85 ? -1.321 3.637 19.652 1.00 4.60 ? ? ? ? ? ? 85 ILE A O 1 +ATOM 784 C CB . ILE A 1 85 ? -4.078 3.263 20.743 1.00 3.28 ? ? ? ? ? ? 85 ILE A CB 1 +ATOM 785 C CG1 . ILE A 1 85 ? -4.993 2.265 21.468 1.00 4.75 ? ? ? ? ? ? 85 ILE A CG1 1 +ATOM 786 C CG2 . ILE A 1 85 ? -4.764 4.614 20.547 1.00 2.00 ? ? ? ? ? ? 85 ILE A CG2 1 +ATOM 787 C CD1 . ILE A 1 85 ? -6.373 2.028 20.837 1.00 10.37 ? ? ? ? ? ? 85 ILE A CD1 1 +ATOM 788 H H . ILE A 1 85 ? -2.591 0.942 20.095 1.00 15.00 ? ? ? ? ? ? 85 ILE A H 1 +ATOM 789 N N . GLY A 1 86 ? -2.519 4.356 17.827 1.00 3.63 ? ? ? ? ? ? 86 GLY A N 1 +ATOM 790 C CA . GLY A 1 86 ? -1.444 5.149 17.231 1.00 3.97 ? ? ? ? ? ? 86 GLY A CA 1 +ATOM 791 C C . GLY A 1 86 ? -1.513 6.620 17.583 1.00 6.02 ? ? ? ? ? ? 86 GLY A C 1 +ATOM 792 O O . GLY A 1 86 ? -2.415 7.044 18.307 1.00 11.53 ? ? ? ? ? ? 86 GLY A O 1 +ATOM 793 H H . GLY A 1 86 ? -3.436 4.323 17.425 1.00 15.00 ? ? ? ? ? ? 86 GLY A H 1 +ATOM 794 N N . ARG A 1 87 ? -0.582 7.434 17.053 1.00 4.10 ? ? ? ? ? ? 87 ARG A N 1 +ATOM 795 C CA . ARG A 1 87 ? -0.654 8.875 17.437 1.00 6.33 ? ? ? ? ? ? 87 ARG A CA 1 +ATOM 796 C C . ARG A 1 87 ? -1.987 9.709 17.268 1.00 6.34 ? ? ? ? ? ? 87 ARG A C 1 +ATOM 797 O O . ARG A 1 87 ? -2.248 10.670 17.993 1.00 9.00 ? ? ? ? ? ? 87 ARG A O 1 +ATOM 798 C CB . ARG A 1 87 ? 0.560 9.612 16.845 1.00 4.55 ? ? ? ? ? ? 87 ARG A CB 1 +ATOM 799 C CG . ARG A 1 87 ? 1.904 9.047 17.362 1.00 10.87 ? ? ? ? ? ? 87 ARG A CG 1 +ATOM 800 C CD . ARG A 1 87 ? 3.062 9.100 16.353 1.00 5.39 ? ? ? ? ? ? 87 ARG A CD 1 +ATOM 801 N NE . ARG A 1 87 ? 3.209 10.479 15.997 1.00 15.34 ? ? ? ? ? ? 87 ARG A NE 1 +ATOM 802 C CZ . ARG A 1 87 ? 2.792 10.872 14.795 1.00 18.04 ? ? ? ? ? ? 87 ARG A CZ 1 +ATOM 803 N NH1 . ARG A 1 87 ? 2.967 10.101 13.735 1.00 15.78 ? ? ? ? ? ? 87 ARG A NH1 1 +ATOM 804 N NH2 . ARG A 1 87 ? 2.170 12.049 14.692 1.00 19.63 ? ? ? ? ? ? 87 ARG A NH2 1 +ATOM 805 H H . ARG A 1 87 ? 0.196 7.014 16.588 1.00 15.00 ? ? ? ? ? ? 87 ARG A H 1 +ATOM 806 H HE . ARG A 1 87 ? 3.259 11.156 16.730 1.00 15.00 ? ? ? ? ? ? 87 ARG A HE 1 +ATOM 807 H HH11 . ARG A 1 87 ? 3.447 9.229 13.827 1.00 15.00 ? ? ? ? ? ? 87 ARG A HH11 1 +ATOM 808 H HH12 . ARG A 1 87 ? 2.619 10.390 12.845 1.00 15.00 ? ? ? ? ? ? 87 ARG A HH12 1 +ATOM 809 H HH21 . ARG A 1 87 ? 2.040 12.623 15.501 1.00 15.00 ? ? ? ? ? ? 87 ARG A HH21 1 +ATOM 810 H HH22 . ARG A 1 87 ? 1.829 12.357 13.805 1.00 15.00 ? ? ? ? ? ? 87 ARG A HH22 1 +ATOM 811 N N . ASN A 1 88 ? -2.846 9.320 16.284 1.00 4.71 ? ? ? ? ? ? 88 ASN A N 1 +ATOM 812 C CA . ASN A 1 88 ? -4.085 10.064 15.974 1.00 2.94 ? ? ? ? ? ? 88 ASN A CA 1 +ATOM 813 C C . ASN A 1 88 ? -5.100 10.221 17.134 1.00 8.33 ? ? ? ? ? ? 88 ASN A C 1 +ATOM 814 O O . ASN A 1 88 ? -5.814 11.204 17.328 1.00 10.61 ? ? ? ? ? ? 88 ASN A O 1 +ATOM 815 C CB . ASN A 1 88 ? -4.734 9.451 14.714 1.00 2.54 ? ? ? ? ? ? 88 ASN A CB 1 +ATOM 816 C CG . ASN A 1 88 ? -5.452 8.096 14.938 1.00 11.53 ? ? ? ? ? ? 88 ASN A CG 1 +ATOM 817 O OD1 . ASN A 1 88 ? -4.939 7.098 15.437 1.00 2.94 ? ? ? ? ? ? 88 ASN A OD1 1 +ATOM 818 N ND2 . ASN A 1 88 ? -6.728 8.083 14.558 1.00 12.71 ? ? ? ? ? ? 88 ASN A ND2 1 +ATOM 819 H H . ASN A 1 88 ? -2.520 8.580 15.694 1.00 15.00 ? ? ? ? ? ? 88 ASN A H 1 +ATOM 820 H HD21 . ASN A 1 88 ? -7.219 7.218 14.657 1.00 15.00 ? ? ? ? ? ? 88 ASN A HD21 1 +ATOM 821 H HD22 . ASN A 1 88 ? -7.217 8.883 14.213 1.00 15.00 ? ? ? ? ? ? 88 ASN A HD22 1 +ATOM 822 N N . LEU A 1 89 ? -5.100 9.142 17.928 1.00 9.42 ? ? ? ? ? ? 89 LEU A N 1 +ATOM 823 C CA . LEU A 1 89 ? -5.948 9.061 19.121 1.00 8.04 ? ? ? ? ? ? 89 LEU A CA 1 +ATOM 824 C C . LEU A 1 89 ? -5.240 9.372 20.426 1.00 5.83 ? ? ? ? ? ? 89 LEU A C 1 +ATOM 825 O O . LEU A 1 89 ? -5.720 10.079 21.282 1.00 11.22 ? ? ? ? ? ? 89 LEU A O 1 +ATOM 826 C CB . LEU A 1 89 ? -6.576 7.671 19.132 1.00 7.87 ? ? ? ? ? ? 89 LEU A CB 1 +ATOM 827 C CG . LEU A 1 89 ? -7.982 7.575 18.565 1.00 9.76 ? ? ? ? ? ? 89 LEU A CG 1 +ATOM 828 C CD1 . LEU A 1 89 ? -8.269 8.482 17.355 1.00 13.42 ? ? ? ? ? ? 89 LEU A CD1 1 +ATOM 829 C CD2 . LEU A 1 89 ? -8.334 6.110 18.331 1.00 14.63 ? ? ? ? ? ? 89 LEU A CD2 1 +ATOM 830 H H . LEU A 1 89 ? -4.531 8.374 17.626 1.00 15.00 ? ? ? ? ? ? 89 LEU A H 1 +ATOM 831 N N . LEU A 1 90 ? -4.014 8.888 20.545 1.00 8.10 ? ? ? ? ? ? 90 LEU A N 1 +ATOM 832 C CA . LEU A 1 90 ? -3.122 9.326 21.652 1.00 8.09 ? ? ? ? ? ? 90 LEU A CA 1 +ATOM 833 C C . LEU A 1 90 ? -2.996 10.851 21.908 1.00 8.64 ? ? ? ? ? ? 90 LEU A C 1 +ATOM 834 O O . LEU A 1 90 ? -2.902 11.395 23.005 1.00 9.47 ? ? ? ? ? ? 90 LEU A O 1 +ATOM 835 C CB . LEU A 1 90 ? -1.745 8.802 21.290 1.00 5.97 ? ? ? ? ? ? 90 LEU A CB 1 +ATOM 836 C CG . LEU A 1 90 ? -1.170 7.607 22.016 1.00 5.66 ? ? ? ? ? ? 90 LEU A CG 1 +ATOM 837 C CD1 . LEU A 1 90 ? -2.156 6.570 22.522 1.00 4.83 ? ? ? ? ? ? 90 LEU A CD1 1 +ATOM 838 C CD2 . LEU A 1 90 ? -0.167 6.990 21.060 1.00 7.12 ? ? ? ? ? ? 90 LEU A CD2 1 +ATOM 839 H H . LEU A 1 90 ? -3.704 8.240 19.846 1.00 15.00 ? ? ? ? ? ? 90 LEU A H 1 +ATOM 840 N N . THR A 1 91 ? -2.992 11.570 20.795 1.00 9.94 ? ? ? ? ? ? 91 THR A N 1 +ATOM 841 C CA . THR A 1 91 ? -3.029 13.029 20.978 1.00 8.71 ? ? ? ? ? ? 91 THR A CA 1 +ATOM 842 C C . THR A 1 91 ? -4.303 13.614 21.471 1.00 10.30 ? ? ? ? ? ? 91 THR A C 1 +ATOM 843 O O . THR A 1 91 ? -4.259 14.519 22.284 1.00 12.69 ? ? ? ? ? ? 91 THR A O 1 +ATOM 844 C CB . THR A 1 91 ? -2.729 13.810 19.729 1.00 10.12 ? ? ? ? ? ? 91 THR A CB 1 +ATOM 845 O OG1 . THR A 1 91 ? -3.546 13.334 18.654 1.00 9.03 ? ? ? ? ? ? 91 THR A OG1 1 +ATOM 846 C CG2 . THR A 1 91 ? -1.237 13.795 19.403 1.00 9.48 ? ? ? ? ? ? 91 THR A CG2 1 +ATOM 847 H H . THR A 1 91 ? -2.949 11.127 19.899 1.00 15.00 ? ? ? ? ? ? 91 THR A H 1 +ATOM 848 H HG1 . THR A 1 91 ? -3.051 12.631 18.233 1.00 15.00 ? ? ? ? ? ? 91 THR A HG1 1 +ATOM 849 N N . GLN A 1 92 ? -5.435 13.036 21.015 1.00 9.54 ? ? ? ? ? ? 92 GLN A N 1 +ATOM 850 C CA . GLN A 1 92 ? -6.739 13.425 21.614 1.00 8.56 ? ? ? ? ? ? 92 GLN A CA 1 +ATOM 851 C C . GLN A 1 92 ? -6.888 13.403 23.158 1.00 10.13 ? ? ? ? ? ? 92 GLN A C 1 +ATOM 852 O O . GLN A 1 92 ? -7.313 14.362 23.797 1.00 10.19 ? ? ? ? ? ? 92 GLN A O 1 +ATOM 853 C CB . GLN A 1 92 ? -7.901 12.683 20.934 1.00 7.14 ? ? ? ? ? ? 92 GLN A CB 1 +ATOM 854 C CG . GLN A 1 92 ? -8.079 13.162 19.471 1.00 4.88 ? ? ? ? ? ? 92 GLN A CG 1 +ATOM 855 C CD . GLN A 1 92 ? -9.409 12.689 18.959 1.00 4.56 ? ? ? ? ? ? 92 GLN A CD 1 +ATOM 856 O OE1 . GLN A 1 92 ? -10.324 12.409 19.699 1.00 14.03 ? ? ? ? ? ? 92 GLN A OE1 1 +ATOM 857 N NE2 . GLN A 1 92 ? -9.555 12.577 17.672 1.00 2.00 ? ? ? ? ? ? 92 GLN A NE2 1 +ATOM 858 H H . GLN A 1 92 ? -5.340 12.385 20.263 1.00 15.00 ? ? ? ? ? ? 92 GLN A H 1 +ATOM 859 H HE21 . GLN A 1 92 ? -10.464 12.281 17.383 1.00 15.00 ? ? ? ? ? ? 92 GLN A HE21 1 +ATOM 860 H HE22 . GLN A 1 92 ? -8.804 12.777 17.055 1.00 15.00 ? ? ? ? ? ? 92 GLN A HE22 1 +ATOM 861 N N . ILE A 1 93 ? -6.453 12.267 23.731 1.00 7.25 ? ? ? ? ? ? 93 ILE A N 1 +ATOM 862 C CA . ILE A 1 93 ? -6.483 12.101 25.195 1.00 7.07 ? ? ? ? ? ? 93 ILE A CA 1 +ATOM 863 C C . ILE A 1 93 ? -5.335 12.732 26.048 1.00 11.45 ? ? ? ? ? ? 93 ILE A C 1 +ATOM 864 O O . ILE A 1 93 ? -5.207 12.556 27.257 1.00 11.98 ? ? ? ? ? ? 93 ILE A O 1 +ATOM 865 C CB . ILE A 1 93 ? -6.643 10.599 25.548 1.00 8.30 ? ? ? ? ? ? 93 ILE A CB 1 +ATOM 866 C CG1 . ILE A 1 93 ? -5.341 9.820 25.286 1.00 5.63 ? ? ? ? ? ? 93 ILE A CG1 1 +ATOM 867 C CG2 . ILE A 1 93 ? -7.849 9.970 24.810 1.00 6.86 ? ? ? ? ? ? 93 ILE A CG2 1 +ATOM 868 C CD1 . ILE A 1 93 ? -5.437 8.344 25.642 1.00 6.01 ? ? ? ? ? ? 93 ILE A CD1 1 +ATOM 869 H H . ILE A 1 93 ? -6.167 11.548 23.098 1.00 15.00 ? ? ? ? ? ? 93 ILE A H 1 +ATOM 870 N N . GLY A 1 94 ? -4.464 13.486 25.366 1.00 10.82 ? ? ? ? ? ? 94 GLY A N 1 +ATOM 871 C CA . GLY A 1 94 ? -3.410 14.097 26.190 1.00 12.12 ? ? ? ? ? ? 94 GLY A CA 1 +ATOM 872 C C . GLY A 1 94 ? -2.050 13.371 26.432 1.00 15.12 ? ? ? ? ? ? 94 GLY A C 1 +ATOM 873 O O . GLY A 1 94 ? -1.236 13.833 27.223 1.00 17.26 ? ? ? ? ? ? 94 GLY A O 1 +ATOM 874 H H . GLY A 1 94 ? -4.588 13.678 24.392 1.00 15.00 ? ? ? ? ? ? 94 GLY A H 1 +ATOM 875 N N . CYS A 1 95 ? -1.790 12.267 25.687 1.00 14.55 ? ? ? ? ? ? 95 CYS A N 1 +ATOM 876 C CA . CYS A 1 95 ? -0.471 11.597 25.822 1.00 10.81 ? ? ? ? ? ? 95 CYS A CA 1 +ATOM 877 C C . CYS A 1 95 ? 0.838 12.258 25.319 1.00 11.73 ? ? ? ? ? ? 95 CYS A C 1 +ATOM 878 O O . CYS A 1 95 ? 0.949 12.839 24.228 1.00 13.70 ? ? ? ? ? ? 95 CYS A O 1 +ATOM 879 C CB . CYS A 1 95 ? -0.614 10.216 25.243 1.00 12.07 ? ? ? ? ? ? 95 CYS A CB 1 +ATOM 880 S SG . CYS A 1 95 ? 0.307 8.920 26.088 1.00 18.07 ? ? ? ? ? ? 95 CYS A SG 1 +ATOM 881 H H . CYS A 1 95 ? -2.463 12.031 24.988 1.00 15.00 ? ? ? ? ? ? 95 CYS A H 1 +ATOM 882 N N . THR A 1 96 ? 1.843 12.131 26.211 1.00 9.92 ? ? ? ? ? ? 96 THR A N 1 +ATOM 883 C CA . THR A 1 96 ? 3.255 12.544 26.016 1.00 6.70 ? ? ? ? ? ? 96 THR A CA 1 +ATOM 884 C C . THR A 1 96 ? 4.358 11.495 26.430 1.00 11.47 ? ? ? ? ? ? 96 THR A C 1 +ATOM 885 O O . THR A 1 96 ? 4.175 10.661 27.303 1.00 11.99 ? ? ? ? ? ? 96 THR A O 1 +ATOM 886 C CB . THR A 1 96 ? 3.572 13.884 26.732 1.00 3.18 ? ? ? ? ? ? 96 THR A CB 1 +ATOM 887 O OG1 . THR A 1 96 ? 3.422 13.782 28.136 1.00 2.00 ? ? ? ? ? ? 96 THR A OG1 1 +ATOM 888 C CG2 . THR A 1 96 ? 2.735 15.054 26.263 1.00 2.00 ? ? ? ? ? ? 96 THR A CG2 1 +ATOM 889 H H . THR A 1 96 ? 1.543 11.752 27.094 1.00 15.00 ? ? ? ? ? ? 96 THR A H 1 +ATOM 890 H HG1 . THR A 1 96 ? 3.325 14.669 28.470 1.00 15.00 ? ? ? ? ? ? 96 THR A HG1 1 +ATOM 891 N N . LEU A 1 97 ? 5.544 11.562 25.769 1.00 13.36 ? ? ? ? ? ? 97 LEU A N 1 +ATOM 892 C CA . LEU A 1 97 ? 6.781 10.866 26.209 1.00 11.73 ? ? ? ? ? ? 97 LEU A CA 1 +ATOM 893 C C . LEU A 1 97 ? 7.766 11.692 27.122 1.00 12.03 ? ? ? ? ? ? 97 LEU A C 1 +ATOM 894 O O . LEU A 1 97 ? 8.091 12.842 26.868 1.00 13.10 ? ? ? ? ? ? 97 LEU A O 1 +ATOM 895 C CB . LEU A 1 97 ? 7.510 10.366 24.941 1.00 12.45 ? ? ? ? ? ? 97 LEU A CB 1 +ATOM 896 C CG . LEU A 1 97 ? 7.614 8.852 24.580 1.00 12.27 ? ? ? ? ? ? 97 LEU A CG 1 +ATOM 897 C CD1 . LEU A 1 97 ? 6.313 8.199 24.173 1.00 13.18 ? ? ? ? ? ? 97 LEU A CD1 1 +ATOM 898 C CD2 . LEU A 1 97 ? 8.468 8.621 23.357 1.00 9.86 ? ? ? ? ? ? 97 LEU A CD2 1 +ATOM 899 H H . LEU A 1 97 ? 5.576 12.235 25.027 1.00 15.00 ? ? ? ? ? ? 97 LEU A H 1 +ATOM 900 N N . ASN A 1 98 ? 8.241 11.095 28.216 1.00 12.12 ? ? ? ? ? ? 98 ASN A N 1 +ATOM 901 C CA . ASN A 1 98 ? 9.072 11.924 29.137 1.00 14.38 ? ? ? ? ? ? 98 ASN A CA 1 +ATOM 902 C C . ASN A 1 98 ? 10.351 11.322 29.763 1.00 14.68 ? ? ? ? ? ? 98 ASN A C 1 +ATOM 903 O O . ASN A 1 98 ? 10.298 10.201 30.258 1.00 16.20 ? ? ? ? ? ? 98 ASN A O 1 +ATOM 904 C CB . ASN A 1 98 ? 8.278 12.403 30.337 1.00 15.85 ? ? ? ? ? ? 98 ASN A CB 1 +ATOM 905 C CG . ASN A 1 98 ? 7.192 13.386 29.979 1.00 18.15 ? ? ? ? ? ? 98 ASN A CG 1 +ATOM 906 O OD1 . ASN A 1 98 ? 7.427 14.537 29.659 1.00 17.39 ? ? ? ? ? ? 98 ASN A OD1 1 +ATOM 907 N ND2 . ASN A 1 98 ? 5.958 12.904 30.073 1.00 16.74 ? ? ? ? ? ? 98 ASN A ND2 1 +ATOM 908 H H . ASN A 1 98 ? 7.900 10.180 28.444 1.00 15.00 ? ? ? ? ? ? 98 ASN A H 1 +ATOM 909 H HD21 . ASN A 1 98 ? 5.269 13.561 29.783 1.00 15.00 ? ? ? ? ? ? 98 ASN A HD21 1 +ATOM 910 H HD22 . ASN A 1 98 ? 5.737 11.995 30.424 1.00 15.00 ? ? ? ? ? ? 98 ASN A HD22 1 +ATOM 911 N N . PHE A 1 99 ? 11.434 12.148 29.720 1.00 17.67 ? ? ? ? ? ? 99 PHE A N 1 +ATOM 912 C CA . PHE A 1 99 ? 12.828 12.065 30.252 1.00 12.46 ? ? ? ? ? ? 99 PHE A CA 1 +ATOM 913 C C . PHE A 1 99 ? 13.520 13.457 30.096 1.00 7.09 ? ? ? ? ? ? 99 PHE A C 1 +ATOM 914 O O . PHE A 1 99 ? 14.655 13.569 29.636 0.00 8.50 ? ? ? ? ? ? 99 PHE A O 1 +ATOM 915 C CB . PHE A 1 99 ? 13.592 10.871 29.623 1.00 7.80 ? ? ? ? ? ? 99 PHE A CB 1 +ATOM 916 C CG . PHE A 1 99 ? 13.829 11.100 28.161 1.00 5.94 ? ? ? ? ? ? 99 PHE A CG 1 +ATOM 917 C CD1 . PHE A 1 99 ? 12.760 11.001 27.249 1.00 12.70 ? ? ? ? ? ? 99 PHE A CD1 1 +ATOM 918 C CD2 . PHE A 1 99 ? 15.119 11.457 27.715 1.00 10.34 ? ? ? ? ? ? 99 PHE A CD2 1 +ATOM 919 C CE1 . PHE A 1 99 ? 12.961 11.344 25.896 1.00 13.79 ? ? ? ? ? ? 99 PHE A CE1 1 +ATOM 920 C CE2 . PHE A 1 99 ? 15.334 11.813 26.366 1.00 13.69 ? ? ? ? ? ? 99 PHE A CE2 1 +ATOM 921 C CZ . PHE A 1 99 ? 14.238 11.793 25.477 1.00 16.36 ? ? ? ? ? ? 99 PHE A CZ 1 +ATOM 922 O OXT . PHE A 1 99 ? 12.893 14.487 30.349 0.00 8.50 ? ? ? ? ? ? 99 PHE A OXT 1 +ATOM 923 H H . PHE A 1 99 ? 11.228 13.069 29.393 1.00 15.00 ? ? ? ? ? ? 99 PHE A H 1 +ATOM 924 N N . PRO B 1 1 ? 13.587 15.375 28.006 1.00 37.18 ? ? ? ? ? ? 1 PRO B N 1 +ATOM 925 C CA . PRO B 1 1 ? 12.429 15.782 27.190 1.00 32.66 ? ? ? ? ? ? 1 PRO B CA 1 +ATOM 926 C C . PRO B 1 1 ? 11.058 15.893 27.827 1.00 30.70 ? ? ? ? ? ? 1 PRO B C 1 +ATOM 927 O O . PRO B 1 1 ? 10.652 14.934 28.450 1.00 33.19 ? ? ? ? ? ? 1 PRO B O 1 +ATOM 928 C CB . PRO B 1 1 ? 12.884 16.920 26.297 1.00 32.98 ? ? ? ? ? ? 1 PRO B CB 1 +ATOM 929 C CG . PRO B 1 1 ? 14.194 16.250 25.886 1.00 37.01 ? ? ? ? ? ? 1 PRO B CG 1 +ATOM 930 C CD . PRO B 1 1 ? 14.771 15.729 27.210 1.00 37.71 ? ? ? ? ? ? 1 PRO B CD 1 +ATOM 931 H H2 . PRO B 1 1 ? 13.592 15.705 29.002 0.00 0.00 ? ? ? ? ? ? 1 PRO B H2 1 +ATOM 932 H H3 . PRO B 1 1 ? 13.613 14.354 28.265 0.00 0.00 ? ? ? ? ? ? 1 PRO B H3 1 +ATOM 933 N N . GLN B 1 2 ? 10.289 16.963 27.520 1.00 25.28 ? ? ? ? ? ? 2 GLN B N 1 +ATOM 934 C CA . GLN B 1 2 ? 8.951 16.454 27.183 1.00 22.03 ? ? ? ? ? ? 2 GLN B CA 1 +ATOM 935 C C . GLN B 1 2 ? 8.735 16.286 25.690 1.00 18.15 ? ? ? ? ? ? 2 GLN B C 1 +ATOM 936 O O . GLN B 1 2 ? 9.066 17.182 24.944 1.00 19.19 ? ? ? ? ? ? 2 GLN B O 1 +ATOM 937 C CB . GLN B 1 2 ? 7.858 17.317 27.754 1.00 24.59 ? ? ? ? ? ? 2 GLN B CB 1 +ATOM 938 C CG . GLN B 1 2 ? 6.487 16.636 27.780 1.00 21.41 ? ? ? ? ? ? 2 GLN B CG 1 +ATOM 939 C CD . GLN B 1 2 ? 5.550 17.497 28.592 1.00 23.66 ? ? ? ? ? ? 2 GLN B CD 1 +ATOM 940 O OE1 . GLN B 1 2 ? 5.147 17.232 29.715 1.00 17.87 ? ? ? ? ? ? 2 GLN B OE1 1 +ATOM 941 N NE2 . GLN B 1 2 ? 5.195 18.607 27.947 1.00 25.77 ? ? ? ? ? ? 2 GLN B NE2 1 +ATOM 942 H H . GLN B 1 2 ? 10.602 17.852 27.198 1.00 15.00 ? ? ? ? ? ? 2 GLN B H 1 +ATOM 943 H HE21 . GLN B 1 2 ? 4.611 19.180 28.515 1.00 15.00 ? ? ? ? ? ? 2 GLN B HE21 1 +ATOM 944 H HE22 . GLN B 1 2 ? 5.499 18.821 27.027 1.00 15.00 ? ? ? ? ? ? 2 GLN B HE22 1 +ATOM 945 N N . ILE B 1 3 ? 8.226 15.125 25.284 1.00 14.61 ? ? ? ? ? ? 3 ILE B N 1 +ATOM 946 C CA . ILE B 1 3 ? 8.003 14.894 23.853 1.00 14.42 ? ? ? ? ? ? 3 ILE B CA 1 +ATOM 947 C C . ILE B 1 3 ? 6.521 14.704 23.440 1.00 14.49 ? ? ? ? ? ? 3 ILE B C 1 +ATOM 948 O O . ILE B 1 3 ? 5.843 13.739 23.782 1.00 11.98 ? ? ? ? ? ? 3 ILE B O 1 +ATOM 949 C CB . ILE B 1 3 ? 8.908 13.730 23.358 1.00 15.82 ? ? ? ? ? ? 3 ILE B CB 1 +ATOM 950 C CG1 . ILE B 1 3 ? 10.386 13.948 23.707 1.00 17.70 ? ? ? ? ? ? 3 ILE B CG1 1 +ATOM 951 C CG2 . ILE B 1 3 ? 8.805 13.509 21.839 1.00 13.84 ? ? ? ? ? ? 3 ILE B CG2 1 +ATOM 952 C CD1 . ILE B 1 3 ? 11.258 12.860 23.102 1.00 16.91 ? ? ? ? ? ? 3 ILE B CD1 1 +ATOM 953 H H . ILE B 1 3 ? 8.033 14.449 25.996 1.00 15.00 ? ? ? ? ? ? 3 ILE B H 1 +ATOM 954 N N . THR B 1 4 ? 6.007 15.694 22.684 1.00 13.06 ? ? ? ? ? ? 4 THR B N 1 +ATOM 955 C CA . THR B 1 4 ? 4.637 15.475 22.179 1.00 11.34 ? ? ? ? ? ? 4 THR B CA 1 +ATOM 956 C C . THR B 1 4 ? 4.485 14.733 20.868 1.00 14.26 ? ? ? ? ? ? 4 THR B C 1 +ATOM 957 O O . THR B 1 4 ? 5.391 14.603 20.050 1.00 17.92 ? ? ? ? ? ? 4 THR B O 1 +ATOM 958 C CB . THR B 1 4 ? 3.842 16.757 21.981 1.00 12.43 ? ? ? ? ? ? 4 THR B CB 1 +ATOM 959 O OG1 . THR B 1 4 ? 4.477 17.558 20.973 1.00 16.86 ? ? ? ? ? ? 4 THR B OG1 1 +ATOM 960 C CG2 . THR B 1 4 ? 3.616 17.532 23.278 1.00 9.78 ? ? ? ? ? ? 4 THR B CG2 1 +ATOM 961 H H . THR B 1 4 ? 6.612 16.409 22.331 1.00 15.00 ? ? ? ? ? ? 4 THR B H 1 +ATOM 962 H HG1 . THR B 1 4 ? 4.039 18.402 20.956 1.00 15.00 ? ? ? ? ? ? 4 THR B HG1 1 +ATOM 963 N N . LEU B 1 5 ? 3.243 14.257 20.693 1.00 12.93 ? ? ? ? ? ? 5 LEU B N 1 +ATOM 964 C CA . LEU B 1 5 ? 2.994 13.361 19.550 1.00 10.05 ? ? ? ? ? ? 5 LEU B CA 1 +ATOM 965 C C . LEU B 1 5 ? 2.303 13.904 18.292 1.00 10.74 ? ? ? ? ? ? 5 LEU B C 1 +ATOM 966 O O . LEU B 1 5 ? 1.831 13.156 17.450 1.00 13.05 ? ? ? ? ? ? 5 LEU B O 1 +ATOM 967 C CB . LEU B 1 5 ? 2.233 12.124 20.046 1.00 12.05 ? ? ? ? ? ? 5 LEU B CB 1 +ATOM 968 C CG . LEU B 1 5 ? 2.952 11.008 20.841 1.00 12.23 ? ? ? ? ? ? 5 LEU B CG 1 +ATOM 969 C CD1 . LEU B 1 5 ? 4.489 11.031 20.848 1.00 11.19 ? ? ? ? ? ? 5 LEU B CD1 1 +ATOM 970 C CD2 . LEU B 1 5 ? 2.307 10.783 22.180 1.00 2.39 ? ? ? ? ? ? 5 LEU B CD2 1 +ATOM 971 H H . LEU B 1 5 ? 2.596 14.322 21.450 1.00 15.00 ? ? ? ? ? ? 5 LEU B H 1 +ATOM 972 N N . TRP B 1 6 ? 2.245 15.249 18.159 1.00 10.83 ? ? ? ? ? ? 6 TRP B N 1 +ATOM 973 C CA . TRP B 1 6 ? 1.758 15.805 16.880 1.00 8.95 ? ? ? ? ? ? 6 TRP B CA 1 +ATOM 974 C C . TRP B 1 6 ? 2.538 15.367 15.646 1.00 11.86 ? ? ? ? ? ? 6 TRP B C 1 +ATOM 975 O O . TRP B 1 6 ? 2.017 15.148 14.562 1.00 13.20 ? ? ? ? ? ? 6 TRP B O 1 +ATOM 976 C CB . TRP B 1 6 ? 1.831 17.332 16.775 1.00 9.49 ? ? ? ? ? ? 6 TRP B CB 1 +ATOM 977 C CG . TRP B 1 6 ? 1.039 18.078 17.808 1.00 7.19 ? ? ? ? ? ? 6 TRP B CG 1 +ATOM 978 C CD1 . TRP B 1 6 ? 1.619 18.811 18.841 1.00 9.16 ? ? ? ? ? ? 6 TRP B CD1 1 +ATOM 979 C CD2 . TRP B 1 6 ? -0.391 18.196 18.006 1.00 14.14 ? ? ? ? ? ? 6 TRP B CD2 1 +ATOM 980 N NE1 . TRP B 1 6 ? 0.692 19.339 19.659 1.00 7.62 ? ? ? ? ? ? 6 TRP B NE1 1 +ATOM 981 C CE2 . TRP B 1 6 ? -0.576 18.983 19.193 1.00 13.41 ? ? ? ? ? ? 6 TRP B CE2 1 +ATOM 982 C CE3 . TRP B 1 6 ? -1.528 17.737 17.295 1.00 16.58 ? ? ? ? ? ? 6 TRP B CE3 1 +ATOM 983 C CZ2 . TRP B 1 6 ? -1.887 19.274 19.659 1.00 10.89 ? ? ? ? ? ? 6 TRP B CZ2 1 +ATOM 984 C CZ3 . TRP B 1 6 ? -2.827 18.052 17.761 1.00 19.55 ? ? ? ? ? ? 6 TRP B CZ3 1 +ATOM 985 C CH2 . TRP B 1 6 ? -3.008 18.805 18.945 1.00 12.82 ? ? ? ? ? ? 6 TRP B CH2 1 +ATOM 986 H H . TRP B 1 6 ? 2.645 15.799 18.887 1.00 15.00 ? ? ? ? ? ? 6 TRP B H 1 +ATOM 987 H HE1 . TRP B 1 6 ? 0.877 19.912 20.438 1.00 15.00 ? ? ? ? ? ? 6 TRP B HE1 1 +ATOM 988 N N . LYS B 1 7 ? 3.857 15.254 15.865 1.00 15.08 ? ? ? ? ? ? 7 LYS B N 1 +ATOM 989 C CA . LYS B 1 7 ? 4.567 14.402 14.905 1.00 14.05 ? ? ? ? ? ? 7 LYS B CA 1 +ATOM 990 C C . LYS B 1 7 ? 5.265 13.130 15.437 1.00 10.87 ? ? ? ? ? ? 7 LYS B C 1 +ATOM 991 O O . LYS B 1 7 ? 5.190 12.773 16.605 1.00 8.04 ? ? ? ? ? ? 7 LYS B O 1 +ATOM 992 C CB . LYS B 1 7 ? 5.382 15.210 13.864 1.00 12.97 ? ? ? ? ? ? 7 LYS B CB 1 +ATOM 993 C CG . LYS B 1 7 ? 5.922 16.586 14.221 1.00 18.22 ? ? ? ? ? ? 7 LYS B CG 1 +ATOM 994 C CD . LYS B 1 7 ? 7.141 16.570 15.157 1.00 29.42 ? ? ? ? ? ? 7 LYS B CD 1 +ATOM 995 C CE . LYS B 1 7 ? 7.808 17.956 15.399 1.00 36.49 ? ? ? ? ? ? 7 LYS B CE 1 +ATOM 996 N NZ . LYS B 1 7 ? 8.467 18.487 14.174 1.00 41.16 ? ? ? ? ? ? 7 LYS B NZ 1 +ATOM 997 H H . LYS B 1 7 ? 4.258 15.573 16.719 1.00 15.00 ? ? ? ? ? ? 7 LYS B H 1 +ATOM 998 H HZ1 . LYS B 1 7 ? 9.010 17.725 13.719 1.00 15.00 ? ? ? ? ? ? 7 LYS B HZ1 1 +ATOM 999 H HZ2 . LYS B 1 7 ? 7.743 18.839 13.515 1.00 15.00 ? ? ? ? ? ? 7 LYS B HZ2 1 +ATOM 1000 H HZ3 . LYS B 1 7 ? 9.106 19.267 14.430 1.00 15.00 ? ? ? ? ? ? 7 LYS B HZ3 1 +ATOM 1001 N N . ARG B 1 8 ? 5.941 12.438 14.502 1.00 7.83 ? ? ? ? ? ? 8 ARG B N 1 +ATOM 1002 C CA . ARG B 1 8 ? 6.757 11.289 14.910 1.00 6.01 ? ? ? ? ? ? 8 ARG B CA 1 +ATOM 1003 C C . ARG B 1 8 ? 7.864 11.650 15.893 1.00 5.22 ? ? ? ? ? ? 8 ARG B C 1 +ATOM 1004 O O . ARG B 1 8 ? 8.538 12.670 15.755 1.00 2.00 ? ? ? ? ? ? 8 ARG B O 1 +ATOM 1005 C CB . ARG B 1 8 ? 7.392 10.626 13.672 1.00 8.34 ? ? ? ? ? ? 8 ARG B CB 1 +ATOM 1006 C CG . ARG B 1 8 ? 6.440 9.877 12.721 1.00 7.25 ? ? ? ? ? ? 8 ARG B CG 1 +ATOM 1007 C CD . ARG B 1 8 ? 7.149 9.217 11.559 1.00 4.59 ? ? ? ? ? ? 8 ARG B CD 1 +ATOM 1008 N NE . ARG B 1 8 ? 6.209 8.432 10.750 1.00 14.38 ? ? ? ? ? ? 8 ARG B NE 1 +ATOM 1009 C CZ . ARG B 1 8 ? 6.611 7.669 9.688 1.00 15.55 ? ? ? ? ? ? 8 ARG B CZ 1 +ATOM 1010 N NH1 . ARG B 1 8 ? 7.894 7.559 9.332 1.00 16.70 ? ? ? ? ? ? 8 ARG B NH1 1 +ATOM 1011 N NH2 . ARG B 1 8 ? 5.699 7.025 8.965 1.00 18.53 ? ? ? ? ? ? 8 ARG B NH2 1 +ATOM 1012 H H . ARG B 1 8 ? 5.902 12.755 13.558 1.00 15.00 ? ? ? ? ? ? 8 ARG B H 1 +ATOM 1013 H HE . ARG B 1 8 ? 5.228 8.480 10.936 1.00 15.00 ? ? ? ? ? ? 8 ARG B HE 1 +ATOM 1014 H HH11 . ARG B 1 8 ? 8.599 8.035 9.858 1.00 15.00 ? ? ? ? ? ? 8 ARG B HH11 1 +ATOM 1015 H HH12 . ARG B 1 8 ? 8.151 7.003 8.542 1.00 15.00 ? ? ? ? ? ? 8 ARG B HH12 1 +ATOM 1016 H HH21 . ARG B 1 8 ? 4.729 7.091 9.197 1.00 15.00 ? ? ? ? ? ? 8 ARG B HH21 1 +ATOM 1017 H HH22 . ARG B 1 8 ? 5.993 6.478 8.181 1.00 15.00 ? ? ? ? ? ? 8 ARG B HH22 1 +ATOM 1018 N N . PRO B 1 9 ? 8.052 10.777 16.909 1.00 7.39 ? ? ? ? ? ? 9 PRO B N 1 +ATOM 1019 C CA . PRO B 1 9 ? 9.075 11.107 17.923 1.00 8.37 ? ? ? ? ? ? 9 PRO B CA 1 +ATOM 1020 C C . PRO B 1 9 ? 10.507 10.656 17.556 1.00 5.80 ? ? ? ? ? ? 9 PRO B C 1 +ATOM 1021 O O . PRO B 1 9 ? 11.032 9.686 18.101 1.00 5.48 ? ? ? ? ? ? 9 PRO B O 1 +ATOM 1022 C CB . PRO B 1 9 ? 8.443 10.425 19.155 1.00 6.26 ? ? ? ? ? ? 9 PRO B CB 1 +ATOM 1023 C CG . PRO B 1 9 ? 7.757 9.168 18.601 1.00 3.24 ? ? ? ? ? ? 9 PRO B CG 1 +ATOM 1024 C CD . PRO B 1 9 ? 7.280 9.572 17.223 1.00 5.14 ? ? ? ? ? ? 9 PRO B CD 1 +ATOM 1025 N N . LEU B 1 10 ? 11.099 11.404 16.586 1.00 6.45 ? ? ? ? ? ? 10 LEU B N 1 +ATOM 1026 C CA . LEU B 1 10 ? 12.530 11.236 16.151 1.00 10.46 ? ? ? ? ? ? 10 LEU B CA 1 +ATOM 1027 C C . LEU B 1 10 ? 13.651 11.856 17.014 1.00 10.72 ? ? ? ? ? ? 10 LEU B C 1 +ATOM 1028 O O . LEU B 1 10 ? 13.723 13.054 17.210 1.00 11.17 ? ? ? ? ? ? 10 LEU B O 1 +ATOM 1029 C CB . LEU B 1 10 ? 12.878 11.732 14.743 1.00 7.46 ? ? ? ? ? ? 10 LEU B CB 1 +ATOM 1030 C CG . LEU B 1 10 ? 12.299 10.972 13.559 1.00 16.13 ? ? ? ? ? ? 10 LEU B CG 1 +ATOM 1031 C CD1 . LEU B 1 10 ? 12.546 9.461 13.564 1.00 18.86 ? ? ? ? ? ? 10 LEU B CD1 1 +ATOM 1032 C CD2 . LEU B 1 10 ? 10.829 11.269 13.370 1.00 23.21 ? ? ? ? ? ? 10 LEU B CD2 1 +ATOM 1033 H H . LEU B 1 10 ? 10.550 12.178 16.265 1.00 15.00 ? ? ? ? ? ? 10 LEU B H 1 +ATOM 1034 N N . VAL B 1 11 ? 14.543 11.008 17.521 1.00 12.29 ? ? ? ? ? ? 11 VAL B N 1 +ATOM 1035 C CA . VAL B 1 11 ? 15.734 11.566 18.162 1.00 12.15 ? ? ? ? ? ? 11 VAL B CA 1 +ATOM 1036 C C . VAL B 1 11 ? 17.039 11.269 17.422 1.00 14.43 ? ? ? ? ? ? 11 VAL B C 1 +ATOM 1037 O O . VAL B 1 11 ? 17.126 10.470 16.493 1.00 10.98 ? ? ? ? ? ? 11 VAL B O 1 +ATOM 1038 C CB . VAL B 1 11 ? 15.825 11.155 19.642 1.00 14.58 ? ? ? ? ? ? 11 VAL B CB 1 +ATOM 1039 C CG1 . VAL B 1 11 ? 14.809 11.938 20.469 1.00 18.20 ? ? ? ? ? ? 11 VAL B CG1 1 +ATOM 1040 C CG2 . VAL B 1 11 ? 15.703 9.641 19.871 1.00 11.13 ? ? ? ? ? ? 11 VAL B CG2 1 +ATOM 1041 H H . VAL B 1 11 ? 14.370 10.032 17.437 1.00 15.00 ? ? ? ? ? ? 11 VAL B H 1 +ATOM 1042 N N . THR B 1 12 ? 18.082 11.970 17.903 1.00 17.32 ? ? ? ? ? ? 12 THR B N 1 +ATOM 1043 C CA . THR B 1 12 ? 19.472 11.559 17.587 1.00 16.89 ? ? ? ? ? ? 12 THR B CA 1 +ATOM 1044 C C . THR B 1 12 ? 20.117 10.551 18.529 1.00 15.64 ? ? ? ? ? ? 12 THR B C 1 +ATOM 1045 O O . THR B 1 12 ? 20.067 10.620 19.752 1.00 17.75 ? ? ? ? ? ? 12 THR B O 1 +ATOM 1046 C CB . THR B 1 12 ? 20.414 12.758 17.462 1.00 18.04 ? ? ? ? ? ? 12 THR B CB 1 +ATOM 1047 O OG1 . THR B 1 12 ? 20.038 13.533 16.308 1.00 21.81 ? ? ? ? ? ? 12 THR B OG1 1 +ATOM 1048 C CG2 . THR B 1 12 ? 21.917 12.400 17.404 1.00 18.90 ? ? ? ? ? ? 12 THR B CG2 1 +ATOM 1049 H H . THR B 1 12 ? 17.865 12.659 18.592 1.00 15.00 ? ? ? ? ? ? 12 THR B H 1 +ATOM 1050 H HG1 . THR B 1 12 ? 19.091 13.514 16.241 1.00 15.00 ? ? ? ? ? ? 12 THR B HG1 1 +ATOM 1051 N N . ILE B 1 13 ? 20.736 9.600 17.861 1.00 15.87 ? ? ? ? ? ? 13 ILE B N 1 +ATOM 1052 C CA . ILE B 1 13 ? 21.551 8.582 18.500 1.00 18.13 ? ? ? ? ? ? 13 ILE B CA 1 +ATOM 1053 C C . ILE B 1 13 ? 22.966 8.447 17.862 1.00 20.14 ? ? ? ? ? ? 13 ILE B C 1 +ATOM 1054 O O . ILE B 1 13 ? 23.155 8.590 16.653 1.00 22.93 ? ? ? ? ? ? 13 ILE B O 1 +ATOM 1055 C CB . ILE B 1 13 ? 20.781 7.241 18.489 1.00 16.33 ? ? ? ? ? ? 13 ILE B CB 1 +ATOM 1056 C CG1 . ILE B 1 13 ? 20.778 6.658 17.067 1.00 14.28 ? ? ? ? ? ? 13 ILE B CG1 1 +ATOM 1057 C CG2 . ILE B 1 13 ? 19.348 7.415 19.043 1.00 7.89 ? ? ? ? ? ? 13 ILE B CG2 1 +ATOM 1058 C CD1 . ILE B 1 13 ? 20.940 5.139 17.014 1.00 14.30 ? ? ? ? ? ? 13 ILE B CD1 1 +ATOM 1059 H H . ILE B 1 13 ? 20.664 9.631 16.862 1.00 15.00 ? ? ? ? ? ? 13 ILE B H 1 +ATOM 1060 N N . ARG B 1 14 ? 23.937 8.152 18.748 1.00 18.38 ? ? ? ? ? ? 14 ARG B N 1 +ATOM 1061 C CA . ARG B 1 14 ? 25.293 7.749 18.339 1.00 18.22 ? ? ? ? ? ? 14 ARG B CA 1 +ATOM 1062 C C . ARG B 1 14 ? 25.746 6.328 18.747 1.00 19.03 ? ? ? ? ? ? 14 ARG B C 1 +ATOM 1063 O O . ARG B 1 14 ? 25.735 5.918 19.912 1.00 17.41 ? ? ? ? ? ? 14 ARG B O 1 +ATOM 1064 C CB . ARG B 1 14 ? 26.312 8.748 18.855 1.00 20.63 ? ? ? ? ? ? 14 ARG B CB 1 +ATOM 1065 C CG . ARG B 1 14 ? 25.921 10.196 18.572 1.00 19.56 ? ? ? ? ? ? 14 ARG B CG 1 +ATOM 1066 C CD . ARG B 1 14 ? 26.878 11.184 19.231 1.00 17.96 ? ? ? ? ? ? 14 ARG B CD 1 +ATOM 1067 N NE . ARG B 1 14 ? 26.288 12.520 19.271 1.00 18.75 ? ? ? ? ? ? 14 ARG B NE 1 +ATOM 1068 C CZ . ARG B 1 14 ? 26.489 13.396 18.267 1.00 17.61 ? ? ? ? ? ? 14 ARG B CZ 1 +ATOM 1069 N NH1 . ARG B 1 14 ? 27.340 13.131 17.281 1.00 21.18 ? ? ? ? ? ? 14 ARG B NH1 1 +ATOM 1070 N NH2 . ARG B 1 14 ? 25.818 14.542 18.261 1.00 13.12 ? ? ? ? ? ? 14 ARG B NH2 1 +ATOM 1071 H H . ARG B 1 14 ? 23.666 8.180 19.703 1.00 15.00 ? ? ? ? ? ? 14 ARG B H 1 +ATOM 1072 H HE . ARG B 1 14 ? 25.645 12.762 19.997 1.00 15.00 ? ? ? ? ? ? 14 ARG B HE 1 +ATOM 1073 H HH11 . ARG B 1 14 ? 27.865 12.281 17.269 1.00 15.00 ? ? ? ? ? ? 14 ARG B HH11 1 +ATOM 1074 H HH12 . ARG B 1 14 ? 27.463 13.799 16.546 1.00 15.00 ? ? ? ? ? ? 14 ARG B HH12 1 +ATOM 1075 H HH21 . ARG B 1 14 ? 25.170 14.740 18.995 1.00 15.00 ? ? ? ? ? ? 14 ARG B HH21 1 +ATOM 1076 H HH22 . ARG B 1 14 ? 25.958 15.206 17.525 1.00 15.00 ? ? ? ? ? ? 14 ARG B HH22 1 +ATOM 1077 N N . ILE B 1 15 ? 26.136 5.587 17.692 1.00 19.14 ? ? ? ? ? ? 15 ILE B N 1 +ATOM 1078 C CA . ILE B 1 15 ? 26.675 4.223 17.875 1.00 20.97 ? ? ? ? ? ? 15 ILE B CA 1 +ATOM 1079 C C . ILE B 1 15 ? 27.990 4.067 17.116 1.00 21.93 ? ? ? ? ? ? 15 ILE B C 1 +ATOM 1080 O O . ILE B 1 15 ? 28.096 4.437 15.946 1.00 21.67 ? ? ? ? ? ? 15 ILE B O 1 +ATOM 1081 C CB . ILE B 1 15 ? 25.761 3.081 17.346 1.00 21.14 ? ? ? ? ? ? 15 ILE B CB 1 +ATOM 1082 C CG1 . ILE B 1 15 ? 24.325 3.432 17.085 1.00 19.78 ? ? ? ? ? ? 15 ILE B CG1 1 +ATOM 1083 C CG2 . ILE B 1 15 ? 25.817 1.794 18.173 1.00 21.67 ? ? ? ? ? ? 15 ILE B CG2 1 +ATOM 1084 C CD1 . ILE B 1 15 ? 24.119 3.521 15.577 1.00 18.76 ? ? ? ? ? ? 15 ILE B CD1 1 +ATOM 1085 H H . ILE B 1 15 ? 26.065 6.047 16.803 1.00 15.00 ? ? ? ? ? ? 15 ILE B H 1 +ATOM 1086 N N . GLY B 1 16 ? 29.000 3.497 17.790 1.00 22.82 ? ? ? ? ? ? 16 GLY B N 1 +ATOM 1087 C CA . GLY B 1 16 ? 30.321 3.473 17.114 1.00 22.20 ? ? ? ? ? ? 16 GLY B CA 1 +ATOM 1088 C C . GLY B 1 16 ? 30.974 4.847 17.146 1.00 20.60 ? ? ? ? ? ? 16 GLY B C 1 +ATOM 1089 O O . GLY B 1 16 ? 30.938 5.546 18.147 1.00 25.71 ? ? ? ? ? ? 16 GLY B O 1 +ATOM 1090 H H . GLY B 1 16 ? 28.857 3.297 18.757 1.00 15.00 ? ? ? ? ? ? 16 GLY B H 1 +ATOM 1091 N N . GLY B 1 17 ? 31.437 5.279 15.994 1.00 18.01 ? ? ? ? ? ? 17 GLY B N 1 +ATOM 1092 C CA . GLY B 1 17 ? 31.429 6.751 15.988 1.00 19.32 ? ? ? ? ? ? 17 GLY B CA 1 +ATOM 1093 C C . GLY B 1 17 ? 30.339 7.400 15.110 1.00 23.21 ? ? ? ? ? ? 17 GLY B C 1 +ATOM 1094 O O . GLY B 1 17 ? 30.460 8.495 14.576 1.00 26.58 ? ? ? ? ? ? 17 GLY B O 1 +ATOM 1095 H H . GLY B 1 17 ? 31.595 4.698 15.200 1.00 15.00 ? ? ? ? ? ? 17 GLY B H 1 +ATOM 1096 N N . GLN B 1 18 ? 29.259 6.628 14.888 1.00 22.56 ? ? ? ? ? ? 18 GLN B N 1 +ATOM 1097 C CA . GLN B 1 18 ? 28.208 7.031 13.936 1.00 16.21 ? ? ? ? ? ? 18 GLN B CA 1 +ATOM 1098 C C . GLN B 1 18 ? 27.054 7.865 14.457 1.00 12.18 ? ? ? ? ? ? 18 GLN B C 1 +ATOM 1099 O O . GLN B 1 18 ? 26.491 7.608 15.509 1.00 9.33 ? ? ? ? ? ? 18 GLN B O 1 +ATOM 1100 C CB . GLN B 1 18 ? 27.677 5.814 13.157 1.00 18.45 ? ? ? ? ? ? 18 GLN B CB 1 +ATOM 1101 C CG . GLN B 1 18 ? 28.711 4.969 12.407 1.00 21.83 ? ? ? ? ? ? 18 GLN B CG 1 +ATOM 1102 C CD . GLN B 1 18 ? 29.484 5.767 11.340 1.00 31.86 ? ? ? ? ? ? 18 GLN B CD 1 +ATOM 1103 O OE1 . GLN B 1 18 ? 29.459 5.507 10.154 1.00 36.21 ? ? ? ? ? ? 18 GLN B OE1 1 +ATOM 1104 N NE2 . GLN B 1 18 ? 30.265 6.751 11.750 1.00 38.63 ? ? ? ? ? ? 18 GLN B NE2 1 +ATOM 1105 H H . GLN B 1 18 ? 29.143 5.839 15.481 1.00 15.00 ? ? ? ? ? ? 18 GLN B H 1 +ATOM 1106 H HE21 . GLN B 1 18 ? 30.753 7.166 10.988 1.00 15.00 ? ? ? ? ? ? 18 GLN B HE21 1 +ATOM 1107 H HE22 . GLN B 1 18 ? 30.409 7.077 12.678 1.00 15.00 ? ? ? ? ? ? 18 GLN B HE22 1 +ATOM 1108 N N . LEU B 1 19 ? 26.724 8.863 13.624 1.00 11.59 ? ? ? ? ? ? 19 LEU B N 1 +ATOM 1109 C CA . LEU B 1 19 ? 25.504 9.664 13.853 1.00 17.43 ? ? ? ? ? ? 19 LEU B CA 1 +ATOM 1110 C C . LEU B 1 19 ? 24.278 9.189 13.058 1.00 18.33 ? ? ? ? ? ? 19 LEU B C 1 +ATOM 1111 O O . LEU B 1 19 ? 24.321 9.210 11.834 1.00 15.36 ? ? ? ? ? ? 19 LEU B O 1 +ATOM 1112 C CB . LEU B 1 19 ? 25.725 11.148 13.493 1.00 19.73 ? ? ? ? ? ? 19 LEU B CB 1 +ATOM 1113 C CG . LEU B 1 19 ? 24.999 12.217 14.343 1.00 21.23 ? ? ? ? ? ? 19 LEU B CG 1 +ATOM 1114 C CD1 . LEU B 1 19 ? 25.361 13.624 13.837 1.00 21.44 ? ? ? ? ? ? 19 LEU B CD1 1 +ATOM 1115 C CD2 . LEU B 1 19 ? 23.485 12.072 14.414 1.00 18.91 ? ? ? ? ? ? 19 LEU B CD2 1 +ATOM 1116 H H . LEU B 1 19 ? 27.278 8.994 12.808 1.00 15.00 ? ? ? ? ? ? 19 LEU B H 1 +ATOM 1117 N N . LYS B 1 20 ? 23.215 8.804 13.816 1.00 16.80 ? ? ? ? ? ? 20 LYS B N 1 +ATOM 1118 C CA . LYS B 1 20 ? 21.904 8.407 13.282 1.00 15.52 ? ? ? ? ? ? 20 LYS B CA 1 +ATOM 1119 C C . LYS B 1 20 ? 20.676 9.181 13.812 1.00 17.36 ? ? ? ? ? ? 20 LYS B C 1 +ATOM 1120 O O . LYS B 1 20 ? 20.643 9.643 14.945 1.00 15.50 ? ? ? ? ? ? 20 LYS B O 1 +ATOM 1121 C CB . LYS B 1 20 ? 21.574 6.971 13.681 1.00 17.22 ? ? ? ? ? ? 20 LYS B CB 1 +ATOM 1122 C CG . LYS B 1 20 ? 22.607 5.882 13.524 1.00 13.99 ? ? ? ? ? ? 20 LYS B CG 1 +ATOM 1123 C CD . LYS B 1 20 ? 22.882 5.675 12.073 1.00 13.62 ? ? ? ? ? ? 20 LYS B CD 1 +ATOM 1124 C CE . LYS B 1 20 ? 24.025 4.717 11.895 1.00 16.99 ? ? ? ? ? ? 20 LYS B CE 1 +ATOM 1125 N NZ . LYS B 1 20 ? 24.484 4.868 10.504 1.00 24.02 ? ? ? ? ? ? 20 LYS B NZ 1 +ATOM 1126 H H . LYS B 1 20 ? 23.365 8.840 14.806 1.00 15.00 ? ? ? ? ? ? 20 LYS B H 1 +ATOM 1127 H HZ1 . LYS B 1 20 ? 24.754 5.857 10.329 1.00 15.00 ? ? ? ? ? ? 20 LYS B HZ1 1 +ATOM 1128 H HZ2 . LYS B 1 20 ? 25.303 4.247 10.342 1.00 15.00 ? ? ? ? ? ? 20 LYS B HZ2 1 +ATOM 1129 H HZ3 . LYS B 1 20 ? 23.715 4.598 9.857 1.00 15.00 ? ? ? ? ? ? 20 LYS B HZ3 1 +ATOM 1130 N N . GLU B 1 21 ? 19.602 9.192 12.983 1.00 20.16 ? ? ? ? ? ? 21 GLU B N 1 +ATOM 1131 C CA . GLU B 1 21 ? 18.268 9.421 13.598 1.00 21.51 ? ? ? ? ? ? 21 GLU B CA 1 +ATOM 1132 C C . GLU B 1 21 ? 17.361 8.190 13.818 1.00 18.01 ? ? ? ? ? ? 21 GLU B C 1 +ATOM 1133 O O . GLU B 1 21 ? 17.343 7.233 13.047 1.00 18.22 ? ? ? ? ? ? 21 GLU B O 1 +ATOM 1134 C CB . GLU B 1 21 ? 17.480 10.520 12.888 1.00 27.81 ? ? ? ? ? ? 21 GLU B CB 1 +ATOM 1135 C CG . GLU B 1 21 ? 17.066 10.131 11.457 1.00 39.64 ? ? ? ? ? ? 21 GLU B CG 1 +ATOM 1136 C CD . GLU B 1 21 ? 15.964 11.031 10.886 1.00 45.64 ? ? ? ? ? ? 21 GLU B CD 1 +ATOM 1137 O OE1 . GLU B 1 21 ? 15.654 12.058 11.515 1.00 50.60 ? ? ? ? ? ? 21 GLU B OE1 1 +ATOM 1138 O OE2 . GLU B 1 21 ? 15.421 10.685 9.817 1.00 42.07 ? ? ? ? ? ? 21 GLU B OE2 1 +ATOM 1139 H H . GLU B 1 21 ? 19.729 8.916 12.035 1.00 15.00 ? ? ? ? ? ? 21 GLU B H 1 +ATOM 1140 N N . ALA B 1 22 ? 16.616 8.230 14.925 1.00 13.80 ? ? ? ? ? ? 22 ALA B N 1 +ATOM 1141 C CA . ALA B 1 22 ? 15.823 7.055 15.287 1.00 11.87 ? ? ? ? ? ? 22 ALA B CA 1 +ATOM 1142 C C . ALA B 1 22 ? 14.518 7.381 16.019 1.00 11.18 ? ? ? ? ? ? 22 ALA B C 1 +ATOM 1143 O O . ALA B 1 22 ? 14.447 8.415 16.662 1.00 11.74 ? ? ? ? ? ? 22 ALA B O 1 +ATOM 1144 C CB . ALA B 1 22 ? 16.666 6.101 16.149 1.00 10.30 ? ? ? ? ? ? 22 ALA B CB 1 +ATOM 1145 H H . ALA B 1 22 ? 16.676 9.025 15.523 1.00 15.00 ? ? ? ? ? ? 22 ALA B H 1 +ATOM 1146 N N . LEU B 1 23 ? 13.514 6.468 15.921 1.00 10.61 ? ? ? ? ? ? 23 LEU B N 1 +ATOM 1147 C CA . LEU B 1 23 ? 12.192 6.568 16.594 1.00 9.03 ? ? ? ? ? ? 23 LEU B CA 1 +ATOM 1148 C C . LEU B 1 23 ? 12.109 6.049 18.004 1.00 4.38 ? ? ? ? ? ? 23 LEU B C 1 +ATOM 1149 O O . LEU B 1 23 ? 12.334 4.875 18.258 1.00 3.93 ? ? ? ? ? ? 23 LEU B O 1 +ATOM 1150 C CB . LEU B 1 23 ? 11.040 5.757 15.925 1.00 14.89 ? ? ? ? ? ? 23 LEU B CB 1 +ATOM 1151 C CG . LEU B 1 23 ? 10.386 6.220 14.622 1.00 15.84 ? ? ? ? ? ? 23 LEU B CG 1 +ATOM 1152 C CD1 . LEU B 1 23 ? 9.509 5.129 14.020 1.00 15.65 ? ? ? ? ? ? 23 LEU B CD1 1 +ATOM 1153 C CD2 . LEU B 1 23 ? 9.588 7.493 14.822 1.00 18.35 ? ? ? ? ? ? 23 LEU B CD2 1 +ATOM 1154 H H . LEU B 1 23 ? 13.736 5.654 15.389 1.00 15.00 ? ? ? ? ? ? 23 LEU B H 1 +ATOM 1155 N N . LEU B 1 24 ? 11.672 6.936 18.895 1.00 4.41 ? ? ? ? ? ? 24 LEU B N 1 +ATOM 1156 C CA . LEU B 1 24 ? 11.209 6.427 20.199 1.00 5.96 ? ? ? ? ? ? 24 LEU B CA 1 +ATOM 1157 C C . LEU B 1 24 ? 9.869 5.589 20.226 1.00 6.17 ? ? ? ? ? ? 24 LEU B C 1 +ATOM 1158 O O . LEU B 1 24 ? 8.750 6.062 20.072 1.00 3.94 ? ? ? ? ? ? 24 LEU B O 1 +ATOM 1159 C CB . LEU B 1 24 ? 11.234 7.643 21.120 1.00 9.00 ? ? ? ? ? ? 24 LEU B CB 1 +ATOM 1160 C CG . LEU B 1 24 ? 12.381 7.678 22.141 1.00 12.19 ? ? ? ? ? ? 24 LEU B CG 1 +ATOM 1161 C CD1 . LEU B 1 24 ? 13.719 7.199 21.578 1.00 6.06 ? ? ? ? ? ? 24 LEU B CD1 1 +ATOM 1162 C CD2 . LEU B 1 24 ? 12.451 9.015 22.873 1.00 5.03 ? ? ? ? ? ? 24 LEU B CD2 1 +ATOM 1163 H H . LEU B 1 24 ? 11.549 7.886 18.602 1.00 15.00 ? ? ? ? ? ? 24 LEU B H 1 +ATOM 1164 N N . ASP B 1 25 ? 10.009 4.262 20.364 1.00 7.45 ? ? ? ? ? ? 25 ASP B N 1 +ATOM 1165 C CA . ASP B 1 25 ? 8.798 3.452 20.120 1.00 7.91 ? ? ? ? ? ? 25 ASP B CA 1 +ATOM 1166 C C . ASP B 1 25 ? 8.248 2.587 21.300 1.00 5.74 ? ? ? ? ? ? 25 ASP B C 1 +ATOM 1167 O O . ASP B 1 25 ? 8.641 1.467 21.562 1.00 6.02 ? ? ? ? ? ? 25 ASP B O 1 +ATOM 1168 C CB . ASP B 1 25 ? 9.015 2.651 18.801 1.00 9.14 ? ? ? ? ? ? 25 ASP B CB 1 +ATOM 1169 C CG . ASP B 1 25 ? 7.778 1.925 18.308 1.00 12.45 ? ? ? ? ? ? 25 ASP B CG 1 +ATOM 1170 O OD1 . ASP B 1 25 ? 6.703 2.106 18.868 1.00 21.66 ? ? ? ? ? ? 25 ASP B OD1 1 +ATOM 1171 O OD2 . ASP B 1 25 ? 7.881 1.162 17.360 1.00 11.59 ? ? ? ? ? ? 25 ASP B OD2 1 +ATOM 1172 H H . ASP B 1 25 ? 10.914 3.852 20.515 1.00 15.00 ? ? ? ? ? ? 25 ASP B H 1 +ATOM 1173 N N . THR B 1 26 ? 7.241 3.084 22.009 1.00 6.69 ? ? ? ? ? ? 26 THR B N 1 +ATOM 1174 C CA . THR B 1 26 ? 6.714 2.258 23.143 1.00 6.27 ? ? ? ? ? ? 26 THR B CA 1 +ATOM 1175 C C . THR B 1 26 ? 6.004 0.933 22.778 1.00 7.34 ? ? ? ? ? ? 26 THR B C 1 +ATOM 1176 O O . THR B 1 26 ? 5.793 0.036 23.578 1.00 8.88 ? ? ? ? ? ? 26 THR B O 1 +ATOM 1177 C CB . THR B 1 26 ? 5.729 3.109 23.933 1.00 6.84 ? ? ? ? ? ? 26 THR B CB 1 +ATOM 1178 O OG1 . THR B 1 26 ? 4.608 3.464 23.074 1.00 9.25 ? ? ? ? ? ? 26 THR B OG1 1 +ATOM 1179 C CG2 . THR B 1 26 ? 6.425 4.368 24.451 1.00 2.00 ? ? ? ? ? ? 26 THR B CG2 1 +ATOM 1180 H H . THR B 1 26 ? 6.901 4.007 21.818 1.00 15.00 ? ? ? ? ? ? 26 THR B H 1 +ATOM 1181 H HG1 . THR B 1 26 ? 3.859 2.953 23.397 1.00 15.00 ? ? ? ? ? ? 26 THR B HG1 1 +ATOM 1182 N N . GLY B 1 27 ? 5.656 0.858 21.478 1.00 4.35 ? ? ? ? ? ? 27 GLY B N 1 +ATOM 1183 C CA . GLY B 1 27 ? 5.173 -0.400 20.906 1.00 9.46 ? ? ? ? ? ? 27 GLY B CA 1 +ATOM 1184 C C . GLY B 1 27 ? 6.203 -1.516 20.597 1.00 15.26 ? ? ? ? ? ? 27 GLY B C 1 +ATOM 1185 O O . GLY B 1 27 ? 5.877 -2.692 20.436 1.00 17.22 ? ? ? ? ? ? 27 GLY B O 1 +ATOM 1186 H H . GLY B 1 27 ? 5.801 1.683 20.945 1.00 15.00 ? ? ? ? ? ? 27 GLY B H 1 +ATOM 1187 N N . ALA B 1 28 ? 7.492 -1.103 20.522 1.00 14.40 ? ? ? ? ? ? 28 ALA B N 1 +ATOM 1188 C CA . ALA B 1 28 ? 8.551 -2.107 20.342 1.00 5.74 ? ? ? ? ? ? 28 ALA B CA 1 +ATOM 1189 C C . ALA B 1 28 ? 9.165 -2.701 21.615 1.00 2.42 ? ? ? ? ? ? 28 ALA B C 1 +ATOM 1190 O O . ALA B 1 28 ? 9.669 -2.061 22.526 1.00 2.00 ? ? ? ? ? ? 28 ALA B O 1 +ATOM 1191 C CB . ALA B 1 28 ? 9.661 -1.568 19.447 1.00 4.25 ? ? ? ? ? ? 28 ALA B CB 1 +ATOM 1192 H H . ALA B 1 28 ? 7.713 -0.156 20.744 1.00 15.00 ? ? ? ? ? ? 28 ALA B H 1 +ATOM 1193 N N . ASP B 1 29 ? 9.112 -4.029 21.619 1.00 2.74 ? ? ? ? ? ? 29 ASP B N 1 +ATOM 1194 C CA . ASP B 1 29 ? 9.838 -4.791 22.645 1.00 2.57 ? ? ? ? ? ? 29 ASP B CA 1 +ATOM 1195 C C . ASP B 1 29 ? 11.373 -4.638 22.626 1.00 3.27 ? ? ? ? ? ? 29 ASP B C 1 +ATOM 1196 O O . ASP B 1 29 ? 12.073 -4.576 23.621 1.00 7.51 ? ? ? ? ? ? 29 ASP B O 1 +ATOM 1197 C CB . ASP B 1 29 ? 9.512 -6.271 22.479 1.00 5.23 ? ? ? ? ? ? 29 ASP B CB 1 +ATOM 1198 C CG . ASP B 1 29 ? 8.133 -6.745 22.899 1.00 9.26 ? ? ? ? ? ? 29 ASP B CG 1 +ATOM 1199 O OD1 . ASP B 1 29 ? 7.455 -6.048 23.657 1.00 14.61 ? ? ? ? ? ? 29 ASP B OD1 1 +ATOM 1200 O OD2 . ASP B 1 29 ? 7.756 -7.845 22.469 1.00 8.73 ? ? ? ? ? ? 29 ASP B OD2 1 +ATOM 1201 H H . ASP B 1 29 ? 8.540 -4.432 20.905 1.00 15.00 ? ? ? ? ? ? 29 ASP B H 1 +ATOM 1202 N N . ASP B 1 30 ? 11.861 -4.594 21.390 1.00 6.36 ? ? ? ? ? ? 30 ASP B N 1 +ATOM 1203 C CA . ASP B 1 30 ? 13.280 -4.652 21.055 1.00 9.02 ? ? ? ? ? ? 30 ASP B CA 1 +ATOM 1204 C C . ASP B 1 30 ? 13.748 -3.529 20.146 1.00 8.29 ? ? ? ? ? ? 30 ASP B C 1 +ATOM 1205 O O . ASP B 1 30 ? 12.983 -2.852 19.483 1.00 11.43 ? ? ? ? ? ? 30 ASP B O 1 +ATOM 1206 C CB . ASP B 1 30 ? 13.615 -5.914 20.256 1.00 14.97 ? ? ? ? ? ? 30 ASP B CB 1 +ATOM 1207 C CG . ASP B 1 30 ? 13.403 -7.271 20.937 1.00 16.52 ? ? ? ? ? ? 30 ASP B CG 1 +ATOM 1208 O OD1 . ASP B 1 30 ? 13.879 -7.478 22.077 1.00 13.64 ? ? ? ? ? ? 30 ASP B OD1 1 +ATOM 1209 O OD2 . ASP B 1 30 ? 12.783 -8.114 20.271 1.00 16.84 ? ? ? ? ? ? 30 ASP B OD2 1 +ATOM 1210 H H . ASP B 1 30 ? 11.189 -4.560 20.656 1.00 15.00 ? ? ? ? ? ? 30 ASP B H 1 +ATOM 1211 N N . THR B 1 31 ? 15.069 -3.377 20.133 1.00 11.09 ? ? ? ? ? ? 31 THR B N 1 +ATOM 1212 C CA . THR B 1 31 ? 15.689 -2.288 19.330 1.00 10.79 ? ? ? ? ? ? 31 THR B CA 1 +ATOM 1213 C C . THR B 1 31 ? 16.168 -2.748 17.969 1.00 5.57 ? ? ? ? ? ? 31 THR B C 1 +ATOM 1214 O O . THR B 1 31 ? 16.972 -3.643 17.843 1.00 11.09 ? ? ? ? ? ? 31 THR B O 1 +ATOM 1215 C CB . THR B 1 31 ? 16.851 -1.587 20.106 1.00 7.86 ? ? ? ? ? ? 31 THR B CB 1 +ATOM 1216 O OG1 . THR B 1 31 ? 16.360 -0.962 21.300 1.00 3.89 ? ? ? ? ? ? 31 THR B OG1 1 +ATOM 1217 C CG2 . THR B 1 31 ? 17.629 -0.548 19.287 1.00 2.00 ? ? ? ? ? ? 31 THR B CG2 1 +ATOM 1218 H H . THR B 1 31 ? 15.617 -4.041 20.639 1.00 15.00 ? ? ? ? ? ? 31 THR B H 1 +ATOM 1219 H HG1 . THR B 1 31 ? 16.103 -1.648 21.915 1.00 15.00 ? ? ? ? ? ? 31 THR B HG1 1 +ATOM 1220 N N . VAL B 1 32 ? 15.612 -2.144 16.947 1.00 6.15 ? ? ? ? ? ? 32 VAL B N 1 +ATOM 1221 C CA . VAL B 1 32 ? 15.849 -2.621 15.593 1.00 6.00 ? ? ? ? ? ? 32 VAL B CA 1 +ATOM 1222 C C . VAL B 1 32 ? 16.503 -1.559 14.738 1.00 7.16 ? ? ? ? ? ? 32 VAL B C 1 +ATOM 1223 O O . VAL B 1 32 ? 15.939 -0.497 14.526 1.00 12.47 ? ? ? ? ? ? 32 VAL B O 1 +ATOM 1224 C CB . VAL B 1 32 ? 14.518 -3.116 15.014 1.00 3.33 ? ? ? ? ? ? 32 VAL B CB 1 +ATOM 1225 C CG1 . VAL B 1 32 ? 14.578 -3.566 13.547 1.00 8.75 ? ? ? ? ? ? 32 VAL B CG1 1 +ATOM 1226 C CG2 . VAL B 1 32 ? 14.063 -4.290 15.870 1.00 2.01 ? ? ? ? ? ? 32 VAL B CG2 1 +ATOM 1227 H H . VAL B 1 32 ? 15.020 -1.362 17.150 1.00 15.00 ? ? ? ? ? ? 32 VAL B H 1 +ATOM 1228 N N . LEU B 1 33 ? 17.741 -1.848 14.325 1.00 7.71 ? ? ? ? ? ? 33 LEU B N 1 +ATOM 1229 C CA . LEU B 1 33 ? 18.539 -0.837 13.600 1.00 10.06 ? ? ? ? ? ? 33 LEU B CA 1 +ATOM 1230 C C . LEU B 1 33 ? 18.820 -1.204 12.169 1.00 9.90 ? ? ? ? ? ? 33 LEU B C 1 +ATOM 1231 O O . LEU B 1 33 ? 18.788 -2.357 11.795 1.00 15.88 ? ? ? ? ? ? 33 LEU B O 1 +ATOM 1232 C CB . LEU B 1 33 ? 19.892 -0.557 14.286 1.00 11.85 ? ? ? ? ? ? 33 LEU B CB 1 +ATOM 1233 C CG . LEU B 1 33 ? 20.078 0.579 15.330 1.00 14.18 ? ? ? ? ? ? 33 LEU B CG 1 +ATOM 1234 C CD1 . LEU B 1 33 ? 18.852 0.924 16.195 1.00 13.47 ? ? ? ? ? ? 33 LEU B CD1 1 +ATOM 1235 C CD2 . LEU B 1 33 ? 21.275 0.276 16.230 1.00 12.15 ? ? ? ? ? ? 33 LEU B CD2 1 +ATOM 1236 H H . LEU B 1 33 ? 18.087 -2.770 14.499 1.00 15.00 ? ? ? ? ? ? 33 LEU B H 1 +ATOM 1237 N N . GLU B 1 34 ? 19.111 -0.206 11.360 1.00 14.19 ? ? ? ? ? ? 34 GLU B N 1 +ATOM 1238 C CA . GLU B 1 34 ? 19.536 -0.485 9.975 1.00 16.04 ? ? ? ? ? ? 34 GLU B CA 1 +ATOM 1239 C C . GLU B 1 34 ? 20.898 -1.177 9.727 1.00 15.98 ? ? ? ? ? ? 34 GLU B C 1 +ATOM 1240 O O . GLU B 1 34 ? 21.813 -1.161 10.535 1.00 15.35 ? ? ? ? ? ? 34 GLU B O 1 +ATOM 1241 C CB . GLU B 1 34 ? 19.605 0.826 9.249 1.00 19.39 ? ? ? ? ? ? 34 GLU B CB 1 +ATOM 1242 C CG . GLU B 1 34 ? 20.722 1.739 9.795 1.00 26.76 ? ? ? ? ? ? 34 GLU B CG 1 +ATOM 1243 C CD . GLU B 1 34 ? 20.801 2.877 8.814 1.00 34.63 ? ? ? ? ? ? 34 GLU B CD 1 +ATOM 1244 O OE1 . GLU B 1 34 ? 21.217 2.616 7.682 1.00 43.75 ? ? ? ? ? ? 34 GLU B OE1 1 +ATOM 1245 O OE2 . GLU B 1 34 ? 20.420 3.998 9.160 1.00 32.10 ? ? ? ? ? ? 34 GLU B OE2 1 +ATOM 1246 H H . GLU B 1 34 ? 19.139 0.709 11.757 1.00 15.00 ? ? ? ? ? ? 34 GLU B H 1 +ATOM 1247 N N . GLU B 1 35 ? 21.037 -1.752 8.535 1.00 17.85 ? ? ? ? ? ? 35 GLU B N 1 +ATOM 1248 C CA . GLU B 1 35 ? 22.295 -2.452 8.201 1.00 19.01 ? ? ? ? ? ? 35 GLU B CA 1 +ATOM 1249 C C . GLU B 1 35 ? 23.624 -1.752 8.500 1.00 20.56 ? ? ? ? ? ? 35 GLU B C 1 +ATOM 1250 O O . GLU B 1 35 ? 23.953 -0.712 7.941 1.00 22.63 ? ? ? ? ? ? 35 GLU B O 1 +ATOM 1251 C CB . GLU B 1 35 ? 22.267 -2.892 6.739 1.00 18.71 ? ? ? ? ? ? 35 GLU B CB 1 +ATOM 1252 C CG . GLU B 1 35 ? 23.137 -4.070 6.309 1.00 25.41 ? ? ? ? ? ? 35 GLU B CG 1 +ATOM 1253 C CD . GLU B 1 35 ? 23.127 -5.194 7.320 1.00 31.07 ? ? ? ? ? ? 35 GLU B CD 1 +ATOM 1254 O OE1 . GLU B 1 35 ? 22.065 -5.751 7.614 1.00 33.01 ? ? ? ? ? ? 35 GLU B OE1 1 +ATOM 1255 O OE2 . GLU B 1 35 ? 24.211 -5.505 7.809 1.00 33.12 ? ? ? ? ? ? 35 GLU B OE2 1 +ATOM 1256 H H . GLU B 1 35 ? 20.282 -1.708 7.888 1.00 15.00 ? ? ? ? ? ? 35 GLU B H 1 +ATOM 1257 N N . MET B 1 36 ? 24.359 -2.401 9.417 1.00 17.85 ? ? ? ? ? ? 36 MET B N 1 +ATOM 1258 C CA . MET B 1 36 ? 25.668 -1.889 9.802 1.00 16.22 ? ? ? ? ? ? 36 MET B CA 1 +ATOM 1259 C C . MET B 1 36 ? 26.715 -2.887 10.316 1.00 19.10 ? ? ? ? ? ? 36 MET B C 1 +ATOM 1260 O O . MET B 1 36 ? 26.436 -3.975 10.790 1.00 20.28 ? ? ? ? ? ? 36 MET B O 1 +ATOM 1261 C CB . MET B 1 36 ? 25.499 -0.745 10.786 1.00 18.45 ? ? ? ? ? ? 36 MET B CB 1 +ATOM 1262 C CG . MET B 1 36 ? 25.081 -1.138 12.201 1.00 21.13 ? ? ? ? ? ? 36 MET B CG 1 +ATOM 1263 S SD . MET B 1 36 ? 25.048 0.354 13.194 1.00 23.85 ? ? ? ? ? ? 36 MET B SD 1 +ATOM 1264 C CE . MET B 1 36 ? 23.662 1.119 12.338 1.00 23.44 ? ? ? ? ? ? 36 MET B CE 1 +ATOM 1265 H H . MET B 1 36 ? 23.929 -3.187 9.853 1.00 15.00 ? ? ? ? ? ? 36 MET B H 1 +ATOM 1266 N N . ASN B 1 37 ? 27.986 -2.485 10.207 1.00 22.03 ? ? ? ? ? ? 37 ASN B N 1 +ATOM 1267 C CA . ASN B 1 37 ? 28.949 -3.438 10.791 1.00 23.18 ? ? ? ? ? ? 37 ASN B CA 1 +ATOM 1268 C C . ASN B 1 37 ? 29.378 -3.126 12.225 1.00 19.96 ? ? ? ? ? ? 37 ASN B C 1 +ATOM 1269 O O . ASN B 1 37 ? 29.725 -2.007 12.566 1.00 20.91 ? ? ? ? ? ? 37 ASN B O 1 +ATOM 1270 C CB . ASN B 1 37 ? 30.132 -3.676 9.826 1.00 27.49 ? ? ? ? ? ? 37 ASN B CB 1 +ATOM 1271 C CG . ASN B 1 37 ? 30.702 -5.077 10.023 1.00 35.24 ? ? ? ? ? ? 37 ASN B CG 1 +ATOM 1272 O OD1 . ASN B 1 37 ? 30.397 -5.788 10.963 1.00 41.93 ? ? ? ? ? ? 37 ASN B OD1 1 +ATOM 1273 N ND2 . ASN B 1 37 ? 31.570 -5.480 9.113 1.00 36.98 ? ? ? ? ? ? 37 ASN B ND2 1 +ATOM 1274 H H . ASN B 1 37 ? 28.195 -1.569 9.874 1.00 15.00 ? ? ? ? ? ? 37 ASN B H 1 +ATOM 1275 H HD21 . ASN B 1 37 ? 31.921 -6.393 9.305 1.00 15.00 ? ? ? ? ? ? 37 ASN B HD21 1 +ATOM 1276 H HD22 . ASN B 1 37 ? 31.883 -4.926 8.350 1.00 15.00 ? ? ? ? ? ? 37 ASN B HD22 1 +ATOM 1277 N N . LEU B 1 38 ? 29.309 -4.142 13.064 1.00 16.38 ? ? ? ? ? ? 38 LEU B N 1 +ATOM 1278 C CA . LEU B 1 38 ? 29.572 -3.902 14.486 1.00 13.73 ? ? ? ? ? ? 38 LEU B CA 1 +ATOM 1279 C C . LEU B 1 38 ? 30.672 -4.815 15.041 1.00 16.59 ? ? ? ? ? ? 38 LEU B C 1 +ATOM 1280 O O . LEU B 1 38 ? 30.881 -5.966 14.639 1.00 18.31 ? ? ? ? ? ? 38 LEU B O 1 +ATOM 1281 C CB . LEU B 1 38 ? 28.261 -4.104 15.252 1.00 8.78 ? ? ? ? ? ? 38 LEU B CB 1 +ATOM 1282 C CG . LEU B 1 38 ? 27.534 -2.931 15.893 1.00 8.20 ? ? ? ? ? ? 38 LEU B CG 1 +ATOM 1283 C CD1 . LEU B 1 38 ? 27.680 -1.620 15.152 1.00 6.79 ? ? ? ? ? ? 38 LEU B CD1 1 +ATOM 1284 C CD2 . LEU B 1 38 ? 26.049 -3.255 16.082 1.00 9.67 ? ? ? ? ? ? 38 LEU B CD2 1 +ATOM 1285 H H . LEU B 1 38 ? 29.106 -5.046 12.686 1.00 15.00 ? ? ? ? ? ? 38 LEU B H 1 +ATOM 1286 N N . PRO B 1 39 ? 31.437 -4.284 16.011 1.00 16.54 ? ? ? ? ? ? 39 PRO B N 1 +ATOM 1287 C CA . PRO B 1 39 ? 32.392 -5.211 16.638 1.00 16.80 ? ? ? ? ? ? 39 PRO B CA 1 +ATOM 1288 C C . PRO B 1 39 ? 31.710 -6.381 17.333 1.00 18.98 ? ? ? ? ? ? 39 PRO B C 1 +ATOM 1289 O O . PRO B 1 39 ? 30.861 -6.185 18.187 1.00 23.65 ? ? ? ? ? ? 39 PRO B O 1 +ATOM 1290 C CB . PRO B 1 39 ? 33.194 -4.307 17.571 1.00 11.55 ? ? ? ? ? ? 39 PRO B CB 1 +ATOM 1291 C CG . PRO B 1 39 ? 32.285 -3.098 17.816 1.00 18.60 ? ? ? ? ? ? 39 PRO B CG 1 +ATOM 1292 C CD . PRO B 1 39 ? 31.499 -2.919 16.509 1.00 15.25 ? ? ? ? ? ? 39 PRO B CD 1 +ATOM 1293 N N . GLY B 1 40 ? 32.112 -7.602 16.940 1.00 19.65 ? ? ? ? ? ? 40 GLY B N 1 +ATOM 1294 C CA . GLY B 1 40 ? 31.768 -8.774 17.771 1.00 19.46 ? ? ? ? ? ? 40 GLY B CA 1 +ATOM 1295 C C . GLY B 1 40 ? 31.086 -10.008 17.131 1.00 19.70 ? ? ? ? ? ? 40 GLY B C 1 +ATOM 1296 O O . GLY B 1 40 ? 30.880 -10.132 15.928 1.00 16.77 ? ? ? ? ? ? 40 GLY B O 1 +ATOM 1297 H H . GLY B 1 40 ? 32.609 -7.655 16.081 1.00 15.00 ? ? ? ? ? ? 40 GLY B H 1 +ATOM 1298 N N . LYS B 1 41 ? 30.735 -10.942 18.032 1.00 22.02 ? ? ? ? ? ? 41 LYS B N 1 +ATOM 1299 C CA . LYS B 1 41 ? 29.912 -12.108 17.617 1.00 23.82 ? ? ? ? ? ? 41 LYS B CA 1 +ATOM 1300 C C . LYS B 1 41 ? 28.393 -11.915 17.692 1.00 21.29 ? ? ? ? ? ? 41 LYS B C 1 +ATOM 1301 O O . LYS B 1 41 ? 27.859 -11.242 18.567 1.00 25.33 ? ? ? ? ? ? 41 LYS B O 1 +ATOM 1302 C CB . LYS B 1 41 ? 30.291 -13.337 18.450 1.00 28.74 ? ? ? ? ? ? 41 LYS B CB 1 +ATOM 1303 C CG . LYS B 1 41 ? 31.518 -14.026 17.845 1.00 36.82 ? ? ? ? ? ? 41 LYS B CG 1 +ATOM 1304 C CD . LYS B 1 41 ? 32.275 -14.891 18.859 1.00 43.84 ? ? ? ? ? ? 41 LYS B CD 1 +ATOM 1305 C CE . LYS B 1 41 ? 33.584 -15.475 18.292 1.00 50.21 ? ? ? ? ? ? 41 LYS B CE 1 +ATOM 1306 N NZ . LYS B 1 41 ? 34.272 -16.305 19.307 1.00 53.29 ? ? ? ? ? ? 41 LYS B NZ 1 +ATOM 1307 H H . LYS B 1 41 ? 30.884 -10.710 18.991 1.00 15.00 ? ? ? ? ? ? 41 LYS B H 1 +ATOM 1308 H HZ1 . LYS B 1 41 ? 34.471 -15.730 20.151 1.00 15.00 ? ? ? ? ? ? 41 LYS B HZ1 1 +ATOM 1309 H HZ2 . LYS B 1 41 ? 33.664 -17.106 19.573 1.00 15.00 ? ? ? ? ? ? 41 LYS B HZ2 1 +ATOM 1310 H HZ3 . LYS B 1 41 ? 35.165 -16.665 18.913 1.00 15.00 ? ? ? ? ? ? 41 LYS B HZ3 1 +ATOM 1311 N N . TRP B 1 42 ? 27.716 -12.539 16.733 1.00 17.46 ? ? ? ? ? ? 42 TRP B N 1 +ATOM 1312 C CA . TRP B 1 42 ? 26.251 -12.403 16.649 1.00 13.49 ? ? ? ? ? ? 42 TRP B CA 1 +ATOM 1313 C C . TRP B 1 42 ? 25.510 -13.703 16.324 1.00 12.15 ? ? ? ? ? ? 42 TRP B C 1 +ATOM 1314 O O . TRP B 1 42 ? 26.051 -14.654 15.782 1.00 14.95 ? ? ? ? ? ? 42 TRP B O 1 +ATOM 1315 C CB . TRP B 1 42 ? 25.920 -11.301 15.634 1.00 12.14 ? ? ? ? ? ? 42 TRP B CB 1 +ATOM 1316 C CG . TRP B 1 42 ? 26.433 -11.709 14.276 1.00 13.33 ? ? ? ? ? ? 42 TRP B CG 1 +ATOM 1317 C CD1 . TRP B 1 42 ? 27.694 -11.399 13.751 1.00 11.85 ? ? ? ? ? ? 42 TRP B CD1 1 +ATOM 1318 C CD2 . TRP B 1 42 ? 25.816 -12.577 13.295 1.00 13.96 ? ? ? ? ? ? 42 TRP B CD2 1 +ATOM 1319 N NE1 . TRP B 1 42 ? 27.895 -12.010 12.555 1.00 15.10 ? ? ? ? ? ? 42 TRP B NE1 1 +ATOM 1320 C CE2 . TRP B 1 42 ? 26.761 -12.752 12.231 1.00 16.59 ? ? ? ? ? ? 42 TRP B CE2 1 +ATOM 1321 C CE3 . TRP B 1 42 ? 24.574 -13.230 13.225 1.00 15.64 ? ? ? ? ? ? 42 TRP B CE3 1 +ATOM 1322 C CZ2 . TRP B 1 42 ? 26.437 -13.571 11.121 1.00 13.61 ? ? ? ? ? ? 42 TRP B CZ2 1 +ATOM 1323 C CZ3 . TRP B 1 42 ? 24.267 -14.045 12.116 1.00 15.99 ? ? ? ? ? ? 42 TRP B CZ3 1 +ATOM 1324 C CH2 . TRP B 1 42 ? 25.190 -14.212 11.063 1.00 13.09 ? ? ? ? ? ? 42 TRP B CH2 1 +ATOM 1325 H H . TRP B 1 42 ? 28.224 -13.083 16.070 1.00 15.00 ? ? ? ? ? ? 42 TRP B H 1 +ATOM 1326 H HE1 . TRP B 1 42 ? 28.703 -11.932 12.009 1.00 15.00 ? ? ? ? ? ? 42 TRP B HE1 1 +ATOM 1327 N N . LYS B 1 43 ? 24.230 -13.726 16.645 1.00 14.76 ? ? ? ? ? ? 43 LYS B N 1 +ATOM 1328 C CA . LYS B 1 43 ? 23.372 -14.840 16.156 1.00 15.01 ? ? ? ? ? ? 43 LYS B CA 1 +ATOM 1329 C C . LYS B 1 43 ? 22.199 -14.340 15.321 1.00 11.60 ? ? ? ? ? ? 43 LYS B C 1 +ATOM 1330 O O . LYS B 1 43 ? 21.748 -13.221 15.518 1.00 8.57 ? ? ? ? ? ? 43 LYS B O 1 +ATOM 1331 C CB . LYS B 1 43 ? 22.767 -15.644 17.315 1.00 16.41 ? ? ? ? ? ? 43 LYS B CB 1 +ATOM 1332 C CG . LYS B 1 43 ? 23.607 -15.698 18.598 1.00 25.64 ? ? ? ? ? ? 43 LYS B CG 1 +ATOM 1333 C CD . LYS B 1 43 ? 22.793 -16.192 19.807 1.00 30.49 ? ? ? ? ? ? 43 LYS B CD 1 +ATOM 1334 C CE . LYS B 1 43 ? 23.348 -15.681 21.147 1.00 36.04 ? ? ? ? ? ? 43 LYS B CE 1 +ATOM 1335 N NZ . LYS B 1 43 ? 22.471 -16.056 22.271 1.00 38.16 ? ? ? ? ? ? 43 LYS B NZ 1 +ATOM 1336 H H . LYS B 1 43 ? 23.865 -12.950 17.161 1.00 15.00 ? ? ? ? ? ? 43 LYS B H 1 +ATOM 1337 H HZ1 . LYS B 1 43 ? 22.222 -17.062 22.183 1.00 15.00 ? ? ? ? ? ? 43 LYS B HZ1 1 +ATOM 1338 H HZ2 . LYS B 1 43 ? 22.986 -15.906 23.162 1.00 15.00 ? ? ? ? ? ? 43 LYS B HZ2 1 +ATOM 1339 H HZ3 . LYS B 1 43 ? 21.605 -15.481 22.263 1.00 15.00 ? ? ? ? ? ? 43 LYS B HZ3 1 +ATOM 1340 N N . PRO B 1 44 ? 21.685 -15.153 14.386 1.00 11.50 ? ? ? ? ? ? 44 PRO B N 1 +ATOM 1341 C CA . PRO B 1 44 ? 20.414 -14.773 13.752 1.00 10.15 ? ? ? ? ? ? 44 PRO B CA 1 +ATOM 1342 C C . PRO B 1 44 ? 19.083 -15.026 14.525 1.00 14.71 ? ? ? ? ? ? 44 PRO B C 1 +ATOM 1343 O O . PRO B 1 44 ? 18.892 -15.789 15.474 1.00 15.94 ? ? ? ? ? ? 44 PRO B O 1 +ATOM 1344 C CB . PRO B 1 44 ? 20.520 -15.507 12.434 1.00 7.39 ? ? ? ? ? ? 44 PRO B CB 1 +ATOM 1345 C CG . PRO B 1 44 ? 21.262 -16.797 12.740 1.00 10.30 ? ? ? ? ? ? 44 PRO B CG 1 +ATOM 1346 C CD . PRO B 1 44 ? 22.250 -16.379 13.839 1.00 15.80 ? ? ? ? ? ? 44 PRO B CD 1 +ATOM 1347 N N . LYS B 1 45 ? 18.106 -14.284 14.016 1.00 14.12 ? ? ? ? ? ? 45 LYS B N 1 +ATOM 1348 C CA . LYS B 1 45 ? 16.794 -14.321 14.642 1.00 7.59 ? ? ? ? ? ? 45 LYS B CA 1 +ATOM 1349 C C . LYS B 1 45 ? 15.674 -14.033 13.602 1.00 10.68 ? ? ? ? ? ? 45 LYS B C 1 +ATOM 1350 O O . LYS B 1 45 ? 15.874 -13.253 12.677 1.00 13.93 ? ? ? ? ? ? 45 LYS B O 1 +ATOM 1351 C CB . LYS B 1 45 ? 16.948 -13.268 15.700 1.00 2.27 ? ? ? ? ? ? 45 LYS B CB 1 +ATOM 1352 C CG . LYS B 1 45 ? 16.151 -13.533 16.934 1.00 10.10 ? ? ? ? ? ? 45 LYS B CG 1 +ATOM 1353 C CD . LYS B 1 45 ? 15.901 -12.228 17.660 1.00 13.52 ? ? ? ? ? ? 45 LYS B CD 1 +ATOM 1354 C CE . LYS B 1 45 ? 14.845 -12.483 18.738 1.00 22.70 ? ? ? ? ? ? 45 LYS B CE 1 +ATOM 1355 N NZ . LYS B 1 45 ? 14.288 -11.214 19.244 1.00 24.26 ? ? ? ? ? ? 45 LYS B NZ 1 +ATOM 1356 H H . LYS B 1 45 ? 18.350 -13.597 13.327 1.00 15.00 ? ? ? ? ? ? 45 LYS B H 1 +ATOM 1357 H HZ1 . LYS B 1 45 ? 13.969 -10.630 18.445 1.00 15.00 ? ? ? ? ? ? 45 LYS B HZ1 1 +ATOM 1358 H HZ2 . LYS B 1 45 ? 13.480 -11.422 19.864 1.00 15.00 ? ? ? ? ? ? 45 LYS B HZ2 1 +ATOM 1359 H HZ3 . LYS B 1 45 ? 15.017 -10.705 19.784 1.00 15.00 ? ? ? ? ? ? 45 LYS B HZ3 1 +ATOM 1360 N N . MET B 1 46 ? 14.490 -14.663 13.752 1.00 15.78 ? ? ? ? ? ? 46 MET B N 1 +ATOM 1361 C CA . MET B 1 46 ? 13.281 -14.132 13.037 1.00 13.78 ? ? ? ? ? ? 46 MET B CA 1 +ATOM 1362 C C . MET B 1 46 ? 12.336 -13.203 13.877 1.00 11.68 ? ? ? ? ? ? 46 MET B C 1 +ATOM 1363 O O . MET B 1 46 ? 11.738 -13.624 14.856 1.00 11.56 ? ? ? ? ? ? 46 MET B O 1 +ATOM 1364 C CB . MET B 1 46 ? 12.405 -15.249 12.457 1.00 7.23 ? ? ? ? ? ? 46 MET B CB 1 +ATOM 1365 C CG . MET B 1 46 ? 13.121 -16.153 11.481 1.00 10.18 ? ? ? ? ? ? 46 MET B CG 1 +ATOM 1366 S SD . MET B 1 46 ? 13.485 -15.302 9.972 1.00 15.69 ? ? ? ? ? ? 46 MET B SD 1 +ATOM 1367 C CE . MET B 1 46 ? 11.863 -15.290 9.206 1.00 8.69 ? ? ? ? ? ? 46 MET B CE 1 +ATOM 1368 H H . MET B 1 46 ? 14.423 -15.366 14.457 1.00 15.00 ? ? ? ? ? ? 46 MET B H 1 +ATOM 1369 N N . ILE B 1 47 ? 12.207 -11.923 13.471 1.00 11.05 ? ? ? ? ? ? 47 ILE B N 1 +ATOM 1370 C CA . ILE B 1 47 ? 11.224 -11.056 14.153 1.00 8.18 ? ? ? ? ? ? 47 ILE B CA 1 +ATOM 1371 C C . ILE B 1 47 ? 10.063 -10.567 13.256 1.00 6.17 ? ? ? ? ? ? 47 ILE B C 1 +ATOM 1372 O O . ILE B 1 47 ? 10.203 -10.268 12.071 1.00 4.21 ? ? ? ? ? ? 47 ILE B O 1 +ATOM 1373 C CB . ILE B 1 47 ? 11.868 -9.870 14.915 1.00 6.47 ? ? ? ? ? ? 47 ILE B CB 1 +ATOM 1374 C CG1 . ILE B 1 47 ? 12.676 -8.934 14.035 1.00 8.49 ? ? ? ? ? ? 47 ILE B CG1 1 +ATOM 1375 C CG2 . ILE B 1 47 ? 12.748 -10.294 16.084 1.00 2.00 ? ? ? ? ? ? 47 ILE B CG2 1 +ATOM 1376 C CD1 . ILE B 1 47 ? 12.795 -7.565 14.730 1.00 7.40 ? ? ? ? ? ? 47 ILE B CD1 1 +ATOM 1377 H H . ILE B 1 47 ? 12.692 -11.654 12.636 1.00 15.00 ? ? ? ? ? ? 47 ILE B H 1 +ATOM 1378 N N . GLY B 1 48 ? 8.867 -10.542 13.860 1.00 7.20 ? ? ? ? ? ? 48 GLY B N 1 +ATOM 1379 C CA . GLY B 1 48 ? 7.681 -10.220 13.032 1.00 8.57 ? ? ? ? ? ? 48 GLY B CA 1 +ATOM 1380 C C . GLY B 1 48 ? 6.758 -9.082 13.466 1.00 9.75 ? ? ? ? ? ? 48 GLY B C 1 +ATOM 1381 O O . GLY B 1 48 ? 6.748 -8.612 14.598 1.00 8.98 ? ? ? ? ? ? 48 GLY B O 1 +ATOM 1382 H H . GLY B 1 48 ? 8.821 -10.741 14.834 1.00 15.00 ? ? ? ? ? ? 48 GLY B H 1 +ATOM 1383 N N . GLY B 1 49 ? 5.941 -8.656 12.514 1.00 13.64 ? ? ? ? ? ? 49 GLY B N 1 +ATOM 1384 C CA . GLY B 1 49 ? 4.937 -7.642 12.885 1.00 12.84 ? ? ? ? ? ? 49 GLY B CA 1 +ATOM 1385 C C . GLY B 1 49 ? 4.027 -7.270 11.734 1.00 15.22 ? ? ? ? ? ? 49 GLY B C 1 +ATOM 1386 O O . GLY B 1 49 ? 3.748 -8.129 10.915 1.00 18.27 ? ? ? ? ? ? 49 GLY B O 1 +ATOM 1387 H H . GLY B 1 49 ? 5.989 -9.057 11.606 1.00 15.00 ? ? ? ? ? ? 49 GLY B H 1 +ATOM 1388 N N . ILE B 1 50 ? 3.573 -6.002 11.639 1.00 13.68 ? ? ? ? ? ? 50 ILE B N 1 +ATOM 1389 C CA . ILE B 1 50 ? 2.706 -5.646 10.491 1.00 11.58 ? ? ? ? ? ? 50 ILE B CA 1 +ATOM 1390 C C . ILE B 1 50 ? 3.278 -6.090 9.113 1.00 13.86 ? ? ? ? ? ? 50 ILE B C 1 +ATOM 1391 O O . ILE B 1 50 ? 4.400 -5.782 8.730 1.00 20.94 ? ? ? ? ? ? 50 ILE B O 1 +ATOM 1392 C CB . ILE B 1 50 ? 2.409 -4.126 10.524 1.00 10.42 ? ? ? ? ? ? 50 ILE B CB 1 +ATOM 1393 C CG1 . ILE B 1 50 ? 1.846 -3.670 11.872 1.00 7.91 ? ? ? ? ? ? 50 ILE B CG1 1 +ATOM 1394 C CG2 . ILE B 1 50 ? 1.502 -3.590 9.395 1.00 2.54 ? ? ? ? ? ? 50 ILE B CG2 1 +ATOM 1395 C CD1 . ILE B 1 50 ? 0.604 -4.431 12.287 1.00 8.46 ? ? ? ? ? ? 50 ILE B CD1 1 +ATOM 1396 H H . ILE B 1 50 ? 3.886 -5.334 12.323 1.00 15.00 ? ? ? ? ? ? 50 ILE B H 1 +ATOM 1397 N N . GLY B 1 51 ? 2.506 -6.887 8.376 1.00 12.85 ? ? ? ? ? ? 51 GLY B N 1 +ATOM 1398 C CA . GLY B 1 51 ? 3.070 -7.232 7.062 1.00 11.85 ? ? ? ? ? ? 51 GLY B CA 1 +ATOM 1399 C C . GLY B 1 51 ? 3.804 -8.561 7.004 1.00 11.64 ? ? ? ? ? ? 51 GLY B C 1 +ATOM 1400 O O . GLY B 1 51 ? 3.910 -9.207 5.975 1.00 13.97 ? ? ? ? ? ? 51 GLY B O 1 +ATOM 1401 H H . GLY B 1 51 ? 1.636 -7.226 8.725 1.00 15.00 ? ? ? ? ? ? 51 GLY B H 1 +ATOM 1402 N N . GLY B 1 52 ? 4.281 -8.956 8.192 1.00 10.16 ? ? ? ? ? ? 52 GLY B N 1 +ATOM 1403 C CA . GLY B 1 52 ? 5.063 -10.188 8.325 1.00 8.77 ? ? ? ? ? ? 52 GLY B CA 1 +ATOM 1404 C C . GLY B 1 52 ? 6.412 -10.082 9.085 1.00 10.56 ? ? ? ? ? ? 52 GLY B C 1 +ATOM 1405 O O . GLY B 1 52 ? 6.637 -9.230 9.933 1.00 11.23 ? ? ? ? ? ? 52 GLY B O 1 +ATOM 1406 H H . GLY B 1 52 ? 4.104 -8.383 8.992 1.00 15.00 ? ? ? ? ? ? 52 GLY B H 1 +ATOM 1407 N N . PHE B 1 53 ? 7.281 -11.045 8.747 1.00 11.07 ? ? ? ? ? ? 53 PHE B N 1 +ATOM 1408 C CA . PHE B 1 53 ? 8.617 -11.307 9.317 1.00 11.70 ? ? ? ? ? ? 53 PHE B CA 1 +ATOM 1409 C C . PHE B 1 53 ? 9.829 -10.842 8.488 1.00 15.80 ? ? ? ? ? ? 53 PHE B C 1 +ATOM 1410 O O . PHE B 1 53 ? 9.897 -11.013 7.274 1.00 18.07 ? ? ? ? ? ? 53 PHE B O 1 +ATOM 1411 C CB . PHE B 1 53 ? 8.808 -12.806 9.572 1.00 4.31 ? ? ? ? ? ? 53 PHE B CB 1 +ATOM 1412 C CG . PHE B 1 53 ? 8.086 -13.211 10.823 1.00 4.87 ? ? ? ? ? ? 53 PHE B CG 1 +ATOM 1413 C CD1 . PHE B 1 53 ? 6.707 -13.481 10.761 1.00 6.81 ? ? ? ? ? ? 53 PHE B CD1 1 +ATOM 1414 C CD2 . PHE B 1 53 ? 8.807 -13.338 12.023 1.00 2.00 ? ? ? ? ? ? 53 PHE B CD2 1 +ATOM 1415 C CE1 . PHE B 1 53 ? 6.043 -13.950 11.908 1.00 10.37 ? ? ? ? ? ? 53 PHE B CE1 1 +ATOM 1416 C CE2 . PHE B 1 53 ? 8.152 -13.838 13.157 1.00 4.35 ? ? ? ? ? ? 53 PHE B CE2 1 +ATOM 1417 C CZ . PHE B 1 53 ? 6.780 -14.160 13.088 1.00 4.36 ? ? ? ? ? ? 53 PHE B CZ 1 +ATOM 1418 H H . PHE B 1 53 ? 6.973 -11.592 7.970 1.00 15.00 ? ? ? ? ? ? 53 PHE B H 1 +ATOM 1419 N N . ILE B 1 54 ? 10.807 -10.278 9.234 1.00 16.52 ? ? ? ? ? ? 54 ILE B N 1 +ATOM 1420 C CA . ILE B 1 54 ? 12.170 -10.098 8.704 1.00 10.33 ? ? ? ? ? ? 54 ILE B CA 1 +ATOM 1421 C C . ILE B 1 54 ? 13.260 -10.938 9.408 1.00 9.77 ? ? ? ? ? ? 54 ILE B C 1 +ATOM 1422 O O . ILE B 1 54 ? 13.132 -11.362 10.558 1.00 7.99 ? ? ? ? ? ? 54 ILE B O 1 +ATOM 1423 C CB . ILE B 1 54 ? 12.572 -8.613 8.634 1.00 6.25 ? ? ? ? ? ? 54 ILE B CB 1 +ATOM 1424 C CG1 . ILE B 1 54 ? 12.653 -7.928 10.004 1.00 9.81 ? ? ? ? ? ? 54 ILE B CG1 1 +ATOM 1425 C CG2 . ILE B 1 54 ? 11.639 -7.857 7.703 1.00 2.00 ? ? ? ? ? ? 54 ILE B CG2 1 +ATOM 1426 C CD1 . ILE B 1 54 ? 13.384 -6.579 9.991 1.00 2.88 ? ? ? ? ? ? 54 ILE B CD1 1 +ATOM 1427 H H . ILE B 1 54 ? 10.591 -10.082 10.192 1.00 15.00 ? ? ? ? ? ? 54 ILE B H 1 +ATOM 1428 N N . LYS B 1 55 ? 14.367 -11.147 8.652 1.00 10.99 ? ? ? ? ? ? 55 LYS B N 1 +ATOM 1429 C CA . LYS B 1 55 ? 15.595 -11.645 9.329 1.00 10.11 ? ? ? ? ? ? 55 LYS B CA 1 +ATOM 1430 C C . LYS B 1 55 ? 16.630 -10.591 9.723 1.00 5.92 ? ? ? ? ? ? 55 LYS B C 1 +ATOM 1431 O O . LYS B 1 55 ? 16.878 -9.611 9.044 1.00 6.28 ? ? ? ? ? ? 55 LYS B O 1 +ATOM 1432 C CB . LYS B 1 55 ? 16.267 -12.792 8.562 1.00 12.08 ? ? ? ? ? ? 55 LYS B CB 1 +ATOM 1433 C CG . LYS B 1 55 ? 17.209 -13.621 9.428 1.00 18.95 ? ? ? ? ? ? 55 LYS B CG 1 +ATOM 1434 C CD . LYS B 1 55 ? 17.995 -14.639 8.595 1.00 26.21 ? ? ? ? ? ? 55 LYS B CD 1 +ATOM 1435 C CE . LYS B 1 55 ? 19.344 -14.978 9.238 1.00 30.94 ? ? ? ? ? ? 55 LYS B CE 1 +ATOM 1436 N NZ . LYS B 1 55 ? 20.154 -15.900 8.409 1.00 35.50 ? ? ? ? ? ? 55 LYS B NZ 1 +ATOM 1437 H H . LYS B 1 55 ? 14.363 -10.794 7.720 1.00 15.00 ? ? ? ? ? ? 55 LYS B H 1 +ATOM 1438 H HZ1 . LYS B 1 55 ? 19.567 -16.713 8.131 1.00 15.00 ? ? ? ? ? ? 55 LYS B HZ1 1 +ATOM 1439 H HZ2 . LYS B 1 55 ? 20.484 -15.400 7.560 1.00 15.00 ? ? ? ? ? ? 55 LYS B HZ2 1 +ATOM 1440 H HZ3 . LYS B 1 55 ? 20.969 -16.233 8.962 1.00 15.00 ? ? ? ? ? ? 55 LYS B HZ3 1 +ATOM 1441 N N . VAL B 1 56 ? 17.170 -10.858 10.902 1.00 8.08 ? ? ? ? ? ? 56 VAL B N 1 +ATOM 1442 C CA . VAL B 1 56 ? 17.925 -9.967 11.800 1.00 8.36 ? ? ? ? ? ? 56 VAL B CA 1 +ATOM 1443 C C . VAL B 1 56 ? 19.180 -10.675 12.405 1.00 9.26 ? ? ? ? ? ? 56 VAL B C 1 +ATOM 1444 O O . VAL B 1 56 ? 19.237 -11.905 12.504 1.00 10.25 ? ? ? ? ? ? 56 VAL B O 1 +ATOM 1445 C CB . VAL B 1 56 ? 16.825 -9.604 12.832 1.00 11.67 ? ? ? ? ? ? 56 VAL B CB 1 +ATOM 1446 C CG1 . VAL B 1 56 ? 17.084 -9.976 14.294 1.00 12.60 ? ? ? ? ? ? 56 VAL B CG1 1 +ATOM 1447 C CG2 . VAL B 1 56 ? 16.255 -8.214 12.568 1.00 14.41 ? ? ? ? ? ? 56 VAL B CG2 1 +ATOM 1448 H H . VAL B 1 56 ? 16.866 -11.733 11.281 1.00 15.00 ? ? ? ? ? ? 56 VAL B H 1 +ATOM 1449 N N . ARG B 1 57 ? 20.168 -9.866 12.832 1.00 8.70 ? ? ? ? ? ? 57 ARG B N 1 +ATOM 1450 C CA . ARG B 1 57 ? 21.337 -10.349 13.610 1.00 10.33 ? ? ? ? ? ? 57 ARG B CA 1 +ATOM 1451 C C . ARG B 1 57 ? 21.395 -9.718 14.992 1.00 10.16 ? ? ? ? ? ? 57 ARG B C 1 +ATOM 1452 O O . ARG B 1 57 ? 21.362 -8.504 15.149 1.00 9.24 ? ? ? ? ? ? 57 ARG B O 1 +ATOM 1453 C CB . ARG B 1 57 ? 22.727 -10.090 12.937 1.00 8.35 ? ? ? ? ? ? 57 ARG B CB 1 +ATOM 1454 C CG . ARG B 1 57 ? 22.713 -10.404 11.425 1.00 13.65 ? ? ? ? ? ? 57 ARG B CG 1 +ATOM 1455 C CD . ARG B 1 57 ? 24.024 -10.465 10.619 1.00 11.84 ? ? ? ? ? ? 57 ARG B CD 1 +ATOM 1456 N NE . ARG B 1 57 ? 24.804 -9.225 10.674 1.00 16.18 ? ? ? ? ? ? 57 ARG B NE 1 +ATOM 1457 C CZ . ARG B 1 57 ? 24.649 -8.242 9.749 1.00 22.99 ? ? ? ? ? ? 57 ARG B CZ 1 +ATOM 1458 N NH1 . ARG B 1 57 ? 23.787 -8.366 8.737 1.00 24.07 ? ? ? ? ? ? 57 ARG B NH1 1 +ATOM 1459 N NH2 . ARG B 1 57 ? 25.371 -7.121 9.840 1.00 19.42 ? ? ? ? ? ? 57 ARG B NH2 1 +ATOM 1460 H H . ARG B 1 57 ? 20.044 -8.904 12.610 1.00 15.00 ? ? ? ? ? ? 57 ARG B H 1 +ATOM 1461 H HE . ARG B 1 57 ? 25.451 -9.064 11.420 1.00 15.00 ? ? ? ? ? ? 57 ARG B HE 1 +ATOM 1462 H HH11 . ARG B 1 57 ? 23.234 -9.194 8.644 1.00 15.00 ? ? ? ? ? ? 57 ARG B HH11 1 +ATOM 1463 H HH12 . ARG B 1 57 ? 23.691 -7.628 8.068 1.00 15.00 ? ? ? ? ? ? 57 ARG B HH12 1 +ATOM 1464 H HH21 . ARG B 1 57 ? 26.017 -7.011 10.597 1.00 15.00 ? ? ? ? ? ? 57 ARG B HH21 1 +ATOM 1465 H HH22 . ARG B 1 57 ? 25.270 -6.397 9.158 1.00 15.00 ? ? ? ? ? ? 57 ARG B HH22 1 +ATOM 1466 N N . GLN B 1 58 ? 21.486 -10.570 15.988 1.00 7.03 ? ? ? ? ? ? 58 GLN B N 1 +ATOM 1467 C CA . GLN B 1 58 ? 21.592 -10.082 17.357 1.00 10.22 ? ? ? ? ? ? 58 GLN B CA 1 +ATOM 1468 C C . GLN B 1 58 ? 22.996 -9.771 17.916 1.00 13.31 ? ? ? ? ? ? 58 GLN B C 1 +ATOM 1469 O O . GLN B 1 58 ? 23.802 -10.678 18.113 1.00 16.89 ? ? ? ? ? ? 58 GLN B O 1 +ATOM 1470 C CB . GLN B 1 58 ? 20.886 -11.120 18.237 1.00 12.64 ? ? ? ? ? ? 58 GLN B CB 1 +ATOM 1471 C CG . GLN B 1 58 ? 21.070 -10.886 19.729 1.00 17.77 ? ? ? ? ? ? 58 GLN B CG 1 +ATOM 1472 C CD . GLN B 1 58 ? 20.058 -11.736 20.440 1.00 25.70 ? ? ? ? ? ? 58 GLN B CD 1 +ATOM 1473 O OE1 . GLN B 1 58 ? 19.913 -12.907 20.192 1.00 33.64 ? ? ? ? ? ? 58 GLN B OE1 1 +ATOM 1474 N NE2 . GLN B 1 58 ? 19.283 -11.126 21.315 1.00 30.17 ? ? ? ? ? ? 58 GLN B NE2 1 +ATOM 1475 H H . GLN B 1 58 ? 21.408 -11.533 15.773 1.00 15.00 ? ? ? ? ? ? 58 GLN B H 1 +ATOM 1476 H HE21 . GLN B 1 58 ? 18.621 -11.771 21.684 1.00 15.00 ? ? ? ? ? ? 58 GLN B HE21 1 +ATOM 1477 H HE22 . GLN B 1 58 ? 19.338 -10.167 21.559 1.00 15.00 ? ? ? ? ? ? 58 GLN B HE22 1 +ATOM 1478 N N . TYR B 1 59 ? 23.236 -8.475 18.241 1.00 11.16 ? ? ? ? ? ? 59 TYR B N 1 +ATOM 1479 C CA . TYR B 1 59 ? 24.436 -8.173 19.042 1.00 7.33 ? ? ? ? ? ? 59 TYR B CA 1 +ATOM 1480 C C . TYR B 1 59 ? 24.160 -7.804 20.484 1.00 7.47 ? ? ? ? ? ? 59 TYR B C 1 +ATOM 1481 O O . TYR B 1 59 ? 23.241 -7.060 20.840 1.00 10.58 ? ? ? ? ? ? 59 TYR B O 1 +ATOM 1482 C CB . TYR B 1 59 ? 25.371 -7.105 18.436 1.00 4.61 ? ? ? ? ? ? 59 TYR B CB 1 +ATOM 1483 C CG . TYR B 1 59 ? 25.778 -7.327 16.992 1.00 2.00 ? ? ? ? ? ? 59 TYR B CG 1 +ATOM 1484 C CD1 . TYR B 1 59 ? 24.840 -7.147 15.954 1.00 3.44 ? ? ? ? ? ? 59 TYR B CD1 1 +ATOM 1485 C CD2 . TYR B 1 59 ? 27.113 -7.657 16.698 1.00 2.40 ? ? ? ? ? ? 59 TYR B CD2 1 +ATOM 1486 C CE1 . TYR B 1 59 ? 25.261 -7.249 14.608 1.00 7.27 ? ? ? ? ? ? 59 TYR B CE1 1 +ATOM 1487 C CE2 . TYR B 1 59 ? 27.540 -7.767 15.353 1.00 2.54 ? ? ? ? ? ? 59 TYR B CE2 1 +ATOM 1488 C CZ . TYR B 1 59 ? 26.618 -7.530 14.311 1.00 7.43 ? ? ? ? ? ? 59 TYR B CZ 1 +ATOM 1489 O OH . TYR B 1 59 ? 27.042 -7.529 12.985 1.00 11.55 ? ? ? ? ? ? 59 TYR B OH 1 +ATOM 1490 H H . TYR B 1 59 ? 22.548 -7.789 17.999 1.00 15.00 ? ? ? ? ? ? 59 TYR B H 1 +ATOM 1491 H HH . TYR B 1 59 ? 27.983 -7.657 12.954 1.00 15.00 ? ? ? ? ? ? 59 TYR B HH 1 +ATOM 1492 N N . ASP B 1 60 ? 25.010 -8.383 21.321 1.00 5.52 ? ? ? ? ? ? 60 ASP B N 1 +ATOM 1493 C CA . ASP B 1 60 ? 24.952 -8.043 22.752 1.00 11.07 ? ? ? ? ? ? 60 ASP B CA 1 +ATOM 1494 C C . ASP B 1 60 ? 25.991 -7.060 23.263 1.00 13.43 ? ? ? ? ? ? 60 ASP B C 1 +ATOM 1495 O O . ASP B 1 60 ? 27.047 -6.935 22.676 1.00 20.73 ? ? ? ? ? ? 60 ASP B O 1 +ATOM 1496 C CB . ASP B 1 60 ? 25.082 -9.282 23.617 1.00 15.28 ? ? ? ? ? ? 60 ASP B CB 1 +ATOM 1497 C CG . ASP B 1 60 ? 23.954 -10.241 23.296 1.00 18.44 ? ? ? ? ? ? 60 ASP B CG 1 +ATOM 1498 O OD1 . ASP B 1 60 ? 22.860 -9.744 23.015 1.00 16.85 ? ? ? ? ? ? 60 ASP B OD1 1 +ATOM 1499 O OD2 . ASP B 1 60 ? 24.181 -11.465 23.320 1.00 19.95 ? ? ? ? ? ? 60 ASP B OD2 1 +ATOM 1500 H H . ASP B 1 60 ? 25.741 -8.939 20.927 1.00 15.00 ? ? ? ? ? ? 60 ASP B H 1 +ATOM 1501 N N . GLN B 1 61 ? 25.680 -6.359 24.359 1.00 11.99 ? ? ? ? ? ? 61 GLN B N 1 +ATOM 1502 C CA . GLN B 1 61 ? 26.655 -5.387 24.929 1.00 14.03 ? ? ? ? ? ? 61 GLN B CA 1 +ATOM 1503 C C . GLN B 1 61 ? 27.100 -4.131 24.148 1.00 12.65 ? ? ? ? ? ? 61 GLN B C 1 +ATOM 1504 O O . GLN B 1 61 ? 28.092 -3.460 24.385 1.00 9.03 ? ? ? ? ? ? 61 GLN B O 1 +ATOM 1505 C CB . GLN B 1 61 ? 27.843 -6.114 25.593 1.00 24.34 ? ? ? ? ? ? 61 GLN B CB 1 +ATOM 1506 C CG . GLN B 1 61 ? 27.531 -6.962 26.835 1.00 35.39 ? ? ? ? ? ? 61 GLN B CG 1 +ATOM 1507 C CD . GLN B 1 61 ? 26.983 -6.063 27.946 1.00 47.74 ? ? ? ? ? ? 61 GLN B CD 1 +ATOM 1508 O OE1 . GLN B 1 61 ? 26.140 -5.195 27.786 1.00 51.02 ? ? ? ? ? ? 61 GLN B OE1 1 +ATOM 1509 N NE2 . GLN B 1 61 ? 27.471 -6.306 29.148 1.00 55.07 ? ? ? ? ? ? 61 GLN B NE2 1 +ATOM 1510 H H . GLN B 1 61 ? 24.795 -6.513 24.791 1.00 15.00 ? ? ? ? ? ? 61 GLN B H 1 +ATOM 1511 H HE21 . GLN B 1 61 ? 27.031 -5.678 29.788 1.00 15.00 ? ? ? ? ? ? 61 GLN B HE21 1 +ATOM 1512 H HE22 . GLN B 1 61 ? 28.160 -6.986 29.364 1.00 15.00 ? ? ? ? ? ? 61 GLN B HE22 1 +ATOM 1513 N N . ILE B 1 62 ? 26.251 -3.796 23.179 1.00 15.70 ? ? ? ? ? ? 62 ILE B N 1 +ATOM 1514 C CA . ILE B 1 62 ? 26.481 -2.555 22.443 1.00 12.03 ? ? ? ? ? ? 62 ILE B CA 1 +ATOM 1515 C C . ILE B 1 62 ? 26.180 -1.354 23.300 1.00 14.39 ? ? ? ? ? ? 62 ILE B C 1 +ATOM 1516 O O . ILE B 1 62 ? 25.092 -1.272 23.856 1.00 12.23 ? ? ? ? ? ? 62 ILE B O 1 +ATOM 1517 C CB . ILE B 1 62 ? 25.600 -2.457 21.182 1.00 5.49 ? ? ? ? ? ? 62 ILE B CB 1 +ATOM 1518 C CG1 . ILE B 1 62 ? 25.559 -3.776 20.432 1.00 5.59 ? ? ? ? ? ? 62 ILE B CG1 1 +ATOM 1519 C CG2 . ILE B 1 62 ? 26.128 -1.327 20.278 1.00 3.31 ? ? ? ? ? ? 62 ILE B CG2 1 +ATOM 1520 C CD1 . ILE B 1 62 ? 26.921 -4.324 19.958 1.00 7.41 ? ? ? ? ? ? 62 ILE B CD1 1 +ATOM 1521 H H . ILE B 1 62 ? 25.381 -4.278 23.102 1.00 15.00 ? ? ? ? ? ? 62 ILE B H 1 +ATOM 1522 N N . PRO B 1 63 ? 27.164 -0.428 23.385 1.00 15.61 ? ? ? ? ? ? 63 PRO B N 1 +ATOM 1523 C CA . PRO B 1 63 ? 26.906 0.898 23.941 1.00 13.48 ? ? ? ? ? ? 63 PRO B CA 1 +ATOM 1524 C C . PRO B 1 63 ? 26.293 1.795 22.909 1.00 13.82 ? ? ? ? ? ? 63 PRO B C 1 +ATOM 1525 O O . PRO B 1 63 ? 26.734 1.853 21.766 1.00 15.11 ? ? ? ? ? ? 63 PRO B O 1 +ATOM 1526 C CB . PRO B 1 63 ? 28.303 1.391 24.340 1.00 14.26 ? ? ? ? ? ? 63 PRO B CB 1 +ATOM 1527 C CG . PRO B 1 63 ? 29.197 0.154 24.279 1.00 19.67 ? ? ? ? ? ? 63 PRO B CG 1 +ATOM 1528 C CD . PRO B 1 63 ? 28.572 -0.618 23.111 1.00 19.48 ? ? ? ? ? ? 63 PRO B CD 1 +ATOM 1529 N N . VAL B 1 64 ? 25.233 2.488 23.357 1.00 14.77 ? ? ? ? ? ? 64 VAL B N 1 +ATOM 1530 C CA . VAL B 1 64 ? 24.634 3.508 22.485 1.00 13.40 ? ? ? ? ? ? 64 VAL B CA 1 +ATOM 1531 C C . VAL B 1 64 ? 24.339 4.803 23.230 1.00 15.46 ? ? ? ? ? ? 64 VAL B C 1 +ATOM 1532 O O . VAL B 1 64 ? 23.944 4.810 24.387 1.00 16.60 ? ? ? ? ? ? 64 VAL B O 1 +ATOM 1533 C CB . VAL B 1 64 ? 23.501 2.988 21.503 1.00 11.21 ? ? ? ? ? ? 64 VAL B CB 1 +ATOM 1534 C CG1 . VAL B 1 64 ? 22.926 1.611 21.779 1.00 3.55 ? ? ? ? ? ? 64 VAL B CG1 1 +ATOM 1535 C CG2 . VAL B 1 64 ? 22.439 4.014 21.112 1.00 8.00 ? ? ? ? ? ? 64 VAL B CG2 1 +ATOM 1536 H H . VAL B 1 64 ? 24.918 2.327 24.293 1.00 15.00 ? ? ? ? ? ? 64 VAL B H 1 +ATOM 1537 N N . GLU B 1 65 ? 24.606 5.911 22.539 1.00 16.43 ? ? ? ? ? ? 65 GLU B N 1 +ATOM 1538 C CA . GLU B 1 65 ? 24.175 7.152 23.161 1.00 18.66 ? ? ? ? ? ? 65 GLU B CA 1 +ATOM 1539 C C . GLU B 1 65 ? 22.979 7.838 22.511 1.00 19.98 ? ? ? ? ? ? 65 GLU B C 1 +ATOM 1540 O O . GLU B 1 65 ? 22.969 8.218 21.351 1.00 20.05 ? ? ? ? ? ? 65 GLU B O 1 +ATOM 1541 C CB . GLU B 1 65 ? 25.336 8.115 23.378 1.00 21.70 ? ? ? ? ? ? 65 GLU B CB 1 +ATOM 1542 C CG . GLU B 1 65 ? 24.919 9.208 24.341 1.00 29.65 ? ? ? ? ? ? 65 GLU B CG 1 +ATOM 1543 C CD . GLU B 1 65 ? 26.083 10.070 24.736 1.00 36.74 ? ? ? ? ? ? 65 GLU B CD 1 +ATOM 1544 O OE1 . GLU B 1 65 ? 26.320 11.055 24.038 1.00 38.38 ? ? ? ? ? ? 65 GLU B OE1 1 +ATOM 1545 O OE2 . GLU B 1 65 ? 26.723 9.772 25.754 1.00 42.36 ? ? ? ? ? ? 65 GLU B OE2 1 +ATOM 1546 H H . GLU B 1 65 ? 25.013 5.841 21.629 1.00 15.00 ? ? ? ? ? ? 65 GLU B H 1 +ATOM 1547 N N . ILE B 1 66 ? 21.940 7.962 23.333 1.00 18.67 ? ? ? ? ? ? 66 ILE B N 1 +ATOM 1548 C CA . ILE B 1 66 ? 20.655 8.450 22.838 1.00 21.20 ? ? ? ? ? ? 66 ILE B CA 1 +ATOM 1549 C C . ILE B 1 66 ? 20.204 9.728 23.515 1.00 22.01 ? ? ? ? ? ? 66 ILE B C 1 +ATOM 1550 O O . ILE B 1 66 ? 20.030 9.800 24.731 1.00 17.93 ? ? ? ? ? ? 66 ILE B O 1 +ATOM 1551 C CB . ILE B 1 66 ? 19.633 7.322 22.954 1.00 29.17 ? ? ? ? ? ? 66 ILE B CB 1 +ATOM 1552 C CG1 . ILE B 1 66 ? 18.184 7.765 22.953 1.00 29.67 ? ? ? ? ? ? 66 ILE B CG1 1 +ATOM 1553 C CG2 . ILE B 1 66 ? 19.883 6.414 24.176 1.00 36.07 ? ? ? ? ? ? 66 ILE B CG2 1 +ATOM 1554 C CD1 . ILE B 1 66 ? 17.378 6.470 22.919 1.00 37.39 ? ? ? ? ? ? 66 ILE B CD1 1 +ATOM 1555 H H . ILE B 1 66 ? 22.084 7.662 24.277 1.00 15.00 ? ? ? ? ? ? 66 ILE B H 1 +ATOM 1556 N N . CYS B 1 67 ? 20.130 10.773 22.653 1.00 21.67 ? ? ? ? ? ? 67 CYS B N 1 +ATOM 1557 C CA . CYS B 1 67 ? 19.868 12.129 23.183 1.00 24.86 ? ? ? ? ? ? 67 CYS B CA 1 +ATOM 1558 C C . CYS B 1 67 ? 20.683 12.628 24.398 1.00 27.18 ? ? ? ? ? ? 67 CYS B C 1 +ATOM 1559 O O . CYS B 1 67 ? 20.158 13.217 25.331 1.00 32.07 ? ? ? ? ? ? 67 CYS B O 1 +ATOM 1560 C CB . CYS B 1 67 ? 18.379 12.323 23.536 1.00 26.01 ? ? ? ? ? ? 67 CYS B CB 1 +ATOM 1561 S SG . CYS B 1 67 ? 17.441 13.262 22.312 1.00 31.34 ? ? ? ? ? ? 67 CYS B SG 1 +ATOM 1562 H H . CYS B 1 67 ? 20.189 10.569 21.672 1.00 15.00 ? ? ? ? ? ? 67 CYS B H 1 +ATOM 1563 N N . GLY B 1 68 ? 21.999 12.356 24.407 1.00 25.32 ? ? ? ? ? ? 68 GLY B N 1 +ATOM 1564 C CA . GLY B 1 68 ? 22.716 12.679 25.663 1.00 19.59 ? ? ? ? ? ? 68 GLY B CA 1 +ATOM 1565 C C . GLY B 1 68 ? 22.794 11.604 26.757 1.00 19.67 ? ? ? ? ? ? 68 GLY B C 1 +ATOM 1566 O O . GLY B 1 68 ? 23.457 11.726 27.772 1.00 20.47 ? ? ? ? ? ? 68 GLY B O 1 +ATOM 1567 H H . GLY B 1 68 ? 22.406 11.891 23.626 1.00 15.00 ? ? ? ? ? ? 68 GLY B H 1 +ATOM 1568 N N . HIS B 1 69 ? 22.110 10.491 26.512 1.00 19.22 ? ? ? ? ? ? 69 HIS B N 1 +ATOM 1569 C CA . HIS B 1 69 ? 22.143 9.499 27.575 1.00 21.19 ? ? ? ? ? ? 69 HIS B CA 1 +ATOM 1570 C C . HIS B 1 69 ? 22.852 8.196 27.168 1.00 23.33 ? ? ? ? ? ? 69 HIS B C 1 +ATOM 1571 O O . HIS B 1 69 ? 22.624 7.632 26.113 1.00 25.34 ? ? ? ? ? ? 69 HIS B O 1 +ATOM 1572 C CB . HIS B 1 69 ? 20.703 9.191 28.092 1.00 25.56 ? ? ? ? ? ? 69 HIS B CB 1 +ATOM 1573 C CG . HIS B 1 69 ? 19.843 10.386 28.515 1.00 28.62 ? ? ? ? ? ? 69 HIS B CG 1 +ATOM 1574 N ND1 . HIS B 1 69 ? 19.325 10.554 29.754 1.00 28.41 ? ? ? ? ? ? 69 HIS B ND1 1 +ATOM 1575 C CD2 . HIS B 1 69 ? 19.453 11.490 27.750 1.00 30.83 ? ? ? ? ? ? 69 HIS B CD2 1 +ATOM 1576 C CE1 . HIS B 1 69 ? 18.641 11.738 29.777 1.00 30.39 ? ? ? ? ? ? 69 HIS B CE1 1 +ATOM 1577 N NE2 . HIS B 1 69 ? 18.726 12.315 28.538 1.00 33.59 ? ? ? ? ? ? 69 HIS B NE2 1 +ATOM 1578 H H . HIS B 1 69 ? 21.463 10.446 25.757 1.00 15.00 ? ? ? ? ? ? 69 HIS B H 1 +ATOM 1579 H HD1 . HIS B 1 69 ? 19.357 9.932 30.504 1.00 15.00 ? ? ? ? ? ? 69 HIS B HD1 1 +ATOM 1580 N N . LYS B 1 70 ? 23.683 7.692 28.070 1.00 26.10 ? ? ? ? ? ? 70 LYS B N 1 +ATOM 1581 C CA . LYS B 1 70 ? 24.147 6.296 27.941 1.00 26.44 ? ? ? ? ? ? 70 LYS B CA 1 +ATOM 1582 C C . LYS B 1 70 ? 23.153 5.138 28.154 1.00 24.20 ? ? ? ? ? ? 70 LYS B C 1 +ATOM 1583 O O . LYS B 1 70 ? 22.630 4.904 29.238 1.00 22.46 ? ? ? ? ? ? 70 LYS B O 1 +ATOM 1584 C CB . LYS B 1 70 ? 25.305 5.947 28.897 1.00 32.97 ? ? ? ? ? ? 70 LYS B CB 1 +ATOM 1585 C CG . LYS B 1 70 ? 25.920 7.049 29.766 1.00 45.39 ? ? ? ? ? ? 70 LYS B CG 1 +ATOM 1586 C CD . LYS B 1 70 ? 27.070 7.863 29.144 1.00 55.83 ? ? ? ? ? ? 70 LYS B CD 1 +ATOM 1587 C CE . LYS B 1 70 ? 27.628 8.851 30.192 1.00 61.60 ? ? ? ? ? ? 70 LYS B CE 1 +ATOM 1588 N NZ . LYS B 1 70 ? 29.049 9.144 29.936 1.00 66.82 ? ? ? ? ? ? 70 LYS B NZ 1 +ATOM 1589 H H . LYS B 1 70 ? 23.780 8.222 28.908 1.00 15.00 ? ? ? ? ? ? 70 LYS B H 1 +ATOM 1590 H HZ1 . LYS B 1 70 ? 29.401 8.506 29.193 1.00 15.00 ? ? ? ? ? ? 70 LYS B HZ1 1 +ATOM 1591 H HZ2 . LYS B 1 70 ? 29.168 10.130 29.630 1.00 15.00 ? ? ? ? ? ? 70 LYS B HZ2 1 +ATOM 1592 H HZ3 . LYS B 1 70 ? 29.597 8.979 30.806 1.00 15.00 ? ? ? ? ? ? 70 LYS B HZ3 1 +ATOM 1593 N N . ALA B 1 71 ? 23.009 4.349 27.090 1.00 21.63 ? ? ? ? ? ? 71 ALA B N 1 +ATOM 1594 C CA . ALA B 1 71 ? 22.576 2.978 27.368 1.00 18.01 ? ? ? ? ? ? 71 ALA B CA 1 +ATOM 1595 C C . ALA B 1 71 ? 23.596 1.930 26.894 1.00 16.20 ? ? ? ? ? ? 71 ALA B C 1 +ATOM 1596 O O . ALA B 1 71 ? 24.524 2.199 26.131 1.00 17.84 ? ? ? ? ? ? 71 ALA B O 1 +ATOM 1597 C CB . ALA B 1 71 ? 21.223 2.724 26.702 1.00 15.87 ? ? ? ? ? ? 71 ALA B CB 1 +ATOM 1598 H H . ALA B 1 71 ? 23.336 4.643 26.191 1.00 15.00 ? ? ? ? ? ? 71 ALA B H 1 +ATOM 1599 N N . ILE B 1 72 ? 23.382 0.708 27.363 1.00 13.59 ? ? ? ? ? ? 72 ILE B N 1 +ATOM 1600 C CA . ILE B 1 72 ? 24.104 -0.478 26.873 1.00 15.46 ? ? ? ? ? ? 72 ILE B CA 1 +ATOM 1601 C C . ILE B 1 72 ? 23.229 -1.722 26.797 1.00 13.71 ? ? ? ? ? ? 72 ILE B C 1 +ATOM 1602 O O . ILE B 1 72 ? 22.621 -2.213 27.750 1.00 16.33 ? ? ? ? ? ? 72 ILE B O 1 +ATOM 1603 C CB . ILE B 1 72 ? 25.348 -0.855 27.715 1.00 20.10 ? ? ? ? ? ? 72 ILE B CB 1 +ATOM 1604 C CG1 . ILE B 1 72 ? 26.167 0.377 28.088 1.00 26.26 ? ? ? ? ? ? 72 ILE B CG1 1 +ATOM 1605 C CG2 . ILE B 1 72 ? 26.252 -1.857 26.968 1.00 20.07 ? ? ? ? ? ? 72 ILE B CG2 1 +ATOM 1606 C CD1 . ILE B 1 72 ? 27.266 0.065 29.097 1.00 32.25 ? ? ? ? ? ? 72 ILE B CD1 1 +ATOM 1607 H H . ILE B 1 72 ? 22.708 0.658 28.101 1.00 15.00 ? ? ? ? ? ? 72 ILE B H 1 +ATOM 1608 N N . GLY B 1 73 ? 23.201 -2.239 25.596 1.00 11.67 ? ? ? ? ? ? 73 GLY B N 1 +ATOM 1609 C CA . GLY B 1 73 ? 22.655 -3.574 25.482 1.00 8.87 ? ? ? ? ? ? 73 GLY B CA 1 +ATOM 1610 C C . GLY B 1 73 ? 22.522 -4.085 24.067 1.00 6.58 ? ? ? ? ? ? 73 GLY B C 1 +ATOM 1611 O O . GLY B 1 73 ? 23.303 -3.787 23.177 1.00 5.20 ? ? ? ? ? ? 73 GLY B O 1 +ATOM 1612 H H . GLY B 1 73 ? 23.670 -1.766 24.857 1.00 15.00 ? ? ? ? ? ? 73 GLY B H 1 +ATOM 1613 N N . THR B 1 74 ? 21.478 -4.898 23.926 1.00 6.84 ? ? ? ? ? ? 74 THR B N 1 +ATOM 1614 C CA . THR B 1 74 ? 21.186 -5.594 22.663 1.00 11.08 ? ? ? ? ? ? 74 THR B CA 1 +ATOM 1615 C C . THR B 1 74 ? 20.493 -4.851 21.500 1.00 14.36 ? ? ? ? ? ? 74 THR B C 1 +ATOM 1616 O O . THR B 1 74 ? 19.344 -4.398 21.562 1.00 14.96 ? ? ? ? ? ? 74 THR B O 1 +ATOM 1617 C CB . THR B 1 74 ? 20.471 -6.889 23.036 1.00 8.01 ? ? ? ? ? ? 74 THR B CB 1 +ATOM 1618 O OG1 . THR B 1 74 ? 21.331 -7.561 23.970 1.00 8.78 ? ? ? ? ? ? 74 THR B OG1 1 +ATOM 1619 C CG2 . THR B 1 74 ? 20.123 -7.812 21.873 1.00 3.87 ? ? ? ? ? ? 74 THR B CG2 1 +ATOM 1620 H H . THR B 1 74 ? 20.903 -5.031 24.731 1.00 15.00 ? ? ? ? ? ? 74 THR B H 1 +ATOM 1621 H HG1 . THR B 1 74 ? 22.051 -7.890 23.448 1.00 15.00 ? ? ? ? ? ? 74 THR B HG1 1 +ATOM 1622 N N . VAL B 1 75 ? 21.280 -4.770 20.393 1.00 14.46 ? ? ? ? ? ? 75 VAL B N 1 +ATOM 1623 C CA . VAL B 1 75 ? 20.635 -4.294 19.154 1.00 10.05 ? ? ? ? ? ? 75 VAL B CA 1 +ATOM 1624 C C . VAL B 1 75 ? 20.396 -5.411 18.134 1.00 11.79 ? ? ? ? ? ? 75 VAL B C 1 +ATOM 1625 O O . VAL B 1 75 ? 21.175 -6.357 18.057 1.00 16.56 ? ? ? ? ? ? 75 VAL B O 1 +ATOM 1626 C CB . VAL B 1 75 ? 21.386 -3.109 18.544 1.00 5.97 ? ? ? ? ? ? 75 VAL B CB 1 +ATOM 1627 C CG1 . VAL B 1 75 ? 21.650 -2.004 19.576 1.00 2.00 ? ? ? ? ? ? 75 VAL B CG1 1 +ATOM 1628 C CG2 . VAL B 1 75 ? 22.664 -3.549 17.855 1.00 7.87 ? ? ? ? ? ? 75 VAL B CG2 1 +ATOM 1629 H H . VAL B 1 75 ? 22.195 -5.175 20.425 1.00 15.00 ? ? ? ? ? ? 75 VAL B H 1 +ATOM 1630 N N . LEU B 1 76 ? 19.274 -5.301 17.401 1.00 6.91 ? ? ? ? ? ? 76 LEU B N 1 +ATOM 1631 C CA . LEU B 1 76 ? 19.017 -6.238 16.306 1.00 3.96 ? ? ? ? ? ? 76 LEU B CA 1 +ATOM 1632 C C . LEU B 1 76 ? 19.276 -5.547 14.995 1.00 5.63 ? ? ? ? ? ? 76 LEU B C 1 +ATOM 1633 O O . LEU B 1 76 ? 18.674 -4.505 14.789 1.00 6.81 ? ? ? ? ? ? 76 LEU B O 1 +ATOM 1634 C CB . LEU B 1 76 ? 17.553 -6.658 16.291 1.00 5.49 ? ? ? ? ? ? 76 LEU B CB 1 +ATOM 1635 C CG . LEU B 1 76 ? 17.041 -7.743 17.238 1.00 6.70 ? ? ? ? ? ? 76 LEU B CG 1 +ATOM 1636 C CD1 . LEU B 1 76 ? 17.919 -8.081 18.439 1.00 9.14 ? ? ? ? ? ? 76 LEU B CD1 1 +ATOM 1637 C CD2 . LEU B 1 76 ? 15.677 -7.341 17.731 1.00 3.57 ? ? ? ? ? ? 76 LEU B CD2 1 +ATOM 1638 H H . LEU B 1 76 ? 18.652 -4.536 17.575 1.00 15.00 ? ? ? ? ? ? 76 LEU B H 1 +ATOM 1639 N N . VAL B 1 77 ? 20.185 -6.095 14.140 1.00 9.13 ? ? ? ? ? ? 77 VAL B N 1 +ATOM 1640 C CA . VAL B 1 77 ? 20.380 -5.444 12.823 1.00 5.95 ? ? ? ? ? ? 77 VAL B CA 1 +ATOM 1641 C C . VAL B 1 77 ? 19.859 -6.220 11.609 1.00 8.66 ? ? ? ? ? ? 77 VAL B C 1 +ATOM 1642 O O . VAL B 1 77 ? 19.810 -7.436 11.611 1.00 12.59 ? ? ? ? ? ? 77 VAL B O 1 +ATOM 1643 C CB . VAL B 1 77 ? 21.782 -4.796 12.651 1.00 7.05 ? ? ? ? ? ? 77 VAL B CB 1 +ATOM 1644 C CG1 . VAL B 1 77 ? 22.481 -4.562 14.004 1.00 6.71 ? ? ? ? ? ? 77 VAL B CG1 1 +ATOM 1645 C CG2 . VAL B 1 77 ? 22.699 -5.406 11.601 1.00 4.38 ? ? ? ? ? ? 77 VAL B CG2 1 +ATOM 1646 H H . VAL B 1 77 ? 20.697 -6.896 14.446 1.00 15.00 ? ? ? ? ? ? 77 VAL B H 1 +ATOM 1647 N N . GLY B 1 78 ? 19.381 -5.499 10.595 1.00 8.15 ? ? ? ? ? ? 78 GLY B N 1 +ATOM 1648 C CA . GLY B 1 78 ? 18.603 -6.169 9.534 1.00 3.81 ? ? ? ? ? ? 78 GLY B CA 1 +ATOM 1649 C C . GLY B 1 78 ? 17.921 -5.111 8.659 1.00 5.65 ? ? ? ? ? ? 78 GLY B C 1 +ATOM 1650 O O . GLY B 1 78 ? 18.077 -3.923 8.917 1.00 5.08 ? ? ? ? ? ? 78 GLY B O 1 +ATOM 1651 H H . GLY B 1 78 ? 19.401 -4.503 10.690 1.00 15.00 ? ? ? ? ? ? 78 GLY B H 1 +ATOM 1652 N N . PRO B 1 79 ? 17.158 -5.518 7.614 1.00 5.18 ? ? ? ? ? ? 79 PRO B N 1 +ATOM 1653 C CA . PRO B 1 79 ? 16.657 -4.546 6.644 1.00 2.92 ? ? ? ? ? ? 79 PRO B CA 1 +ATOM 1654 C C . PRO B 1 79 ? 15.390 -3.757 7.007 1.00 9.24 ? ? ? ? ? ? 79 PRO B C 1 +ATOM 1655 O O . PRO B 1 79 ? 14.341 -3.835 6.391 1.00 14.52 ? ? ? ? ? ? 79 PRO B O 1 +ATOM 1656 C CB . PRO B 1 79 ? 16.548 -5.391 5.396 1.00 2.02 ? ? ? ? ? ? 79 PRO B CB 1 +ATOM 1657 C CG . PRO B 1 79 ? 16.054 -6.736 5.949 1.00 2.52 ? ? ? ? ? ? 79 PRO B CG 1 +ATOM 1658 C CD . PRO B 1 79 ? 16.794 -6.881 7.274 1.00 4.34 ? ? ? ? ? ? 79 PRO B CD 1 +ATOM 1659 N N . THR B 1 80 ? 15.532 -2.889 8.004 1.00 10.43 ? ? ? ? ? ? 80 THR B N 1 +ATOM 1660 C CA . THR B 1 80 ? 14.414 -1.968 8.250 1.00 10.86 ? ? ? ? ? ? 80 THR B CA 1 +ATOM 1661 C C . THR B 1 80 ? 14.497 -0.600 7.557 1.00 13.07 ? ? ? ? ? ? 80 THR B C 1 +ATOM 1662 O O . THR B 1 80 ? 15.558 0.016 7.484 1.00 19.01 ? ? ? ? ? ? 80 THR B O 1 +ATOM 1663 C CB . THR B 1 80 ? 14.277 -1.755 9.751 1.00 9.00 ? ? ? ? ? ? 80 THR B CB 1 +ATOM 1664 O OG1 . THR B 1 80 ? 13.272 -0.766 10.037 1.00 10.99 ? ? ? ? ? ? 80 THR B OG1 1 +ATOM 1665 C CG2 . THR B 1 80 ? 15.638 -1.318 10.308 1.00 12.20 ? ? ? ? ? ? 80 THR B CG2 1 +ATOM 1666 H H . THR B 1 80 ? 16.405 -2.887 8.491 1.00 15.00 ? ? ? ? ? ? 80 THR B H 1 +ATOM 1667 H HG1 . THR B 1 80 ? 13.456 -0.448 10.925 1.00 15.00 ? ? ? ? ? ? 80 THR B HG1 1 +ATOM 1668 N N . PRO B 1 81 ? 13.357 -0.063 7.046 1.00 12.42 ? ? ? ? ? ? 81 PRO B N 1 +ATOM 1669 C CA . PRO B 1 81 ? 13.412 1.341 6.572 1.00 13.21 ? ? ? ? ? ? 81 PRO B CA 1 +ATOM 1670 C C . PRO B 1 81 ? 13.581 2.406 7.662 1.00 12.96 ? ? ? ? ? ? 81 PRO B C 1 +ATOM 1671 O O . PRO B 1 81 ? 13.811 3.579 7.400 1.00 11.59 ? ? ? ? ? ? 81 PRO B O 1 +ATOM 1672 C CB . PRO B 1 81 ? 12.105 1.495 5.796 1.00 11.64 ? ? ? ? ? ? 81 PRO B CB 1 +ATOM 1673 C CG . PRO B 1 81 ? 11.143 0.471 6.400 1.00 8.50 ? ? ? ? ? ? 81 PRO B CG 1 +ATOM 1674 C CD . PRO B 1 81 ? 12.053 -0.684 6.808 1.00 11.98 ? ? ? ? ? ? 81 PRO B CD 1 +ATOM 1675 N N . VAL B 1 82 ? 13.446 1.928 8.912 1.00 13.68 ? ? ? ? ? ? 82 VAL B N 1 +ATOM 1676 C CA . VAL B 1 82 ? 13.561 2.838 10.064 1.00 13.36 ? ? ? ? ? ? 82 VAL B CA 1 +ATOM 1677 C C . VAL B 1 82 ? 14.236 2.271 11.334 1.00 13.68 ? ? ? ? ? ? 82 VAL B C 1 +ATOM 1678 O O . VAL B 1 82 ? 14.088 1.127 11.760 1.00 16.22 ? ? ? ? ? ? 82 VAL B O 1 +ATOM 1679 C CB . VAL B 1 82 ? 12.166 3.484 10.323 1.00 14.41 ? ? ? ? ? ? 82 VAL B CB 1 +ATOM 1680 C CG1 . VAL B 1 82 ? 11.063 2.448 10.552 1.00 15.43 ? ? ? ? ? ? 82 VAL B CG1 1 +ATOM 1681 C CG2 . VAL B 1 82 ? 12.195 4.590 11.382 1.00 11.95 ? ? ? ? ? ? 82 VAL B CG2 1 +ATOM 1682 H H . VAL B 1 82 ? 13.191 0.971 9.049 1.00 15.00 ? ? ? ? ? ? 82 VAL B H 1 +ATOM 1683 N N . ASN B 1 83 ? 15.025 3.157 11.932 1.00 12.01 ? ? ? ? ? ? 83 ASN B N 1 +ATOM 1684 C CA . ASN B 1 83 ? 15.666 2.791 13.194 1.00 10.29 ? ? ? ? ? ? 83 ASN B CA 1 +ATOM 1685 C C . ASN B 1 83 ? 14.749 2.975 14.382 1.00 10.32 ? ? ? ? ? ? 83 ASN B C 1 +ATOM 1686 O O . ASN B 1 83 ? 14.326 4.076 14.683 1.00 10.57 ? ? ? ? ? ? 83 ASN B O 1 +ATOM 1687 C CB . ASN B 1 83 ? 16.893 3.665 13.454 1.00 12.27 ? ? ? ? ? ? 83 ASN B CB 1 +ATOM 1688 C CG . ASN B 1 83 ? 18.006 3.484 12.423 1.00 15.73 ? ? ? ? ? ? 83 ASN B CG 1 +ATOM 1689 O OD1 . ASN B 1 83 ? 18.331 2.413 11.945 1.00 15.61 ? ? ? ? ? ? 83 ASN B OD1 1 +ATOM 1690 N ND2 . ASN B 1 83 ? 18.625 4.608 12.090 1.00 14.21 ? ? ? ? ? ? 83 ASN B ND2 1 +ATOM 1691 H H . ASN B 1 83 ? 15.112 4.055 11.508 1.00 15.00 ? ? ? ? ? ? 83 ASN B H 1 +ATOM 1692 H HD21 . ASN B 1 83 ? 19.364 4.496 11.434 1.00 15.00 ? ? ? ? ? ? 83 ASN B HD21 1 +ATOM 1693 H HD22 . ASN B 1 83 ? 18.324 5.482 12.478 1.00 15.00 ? ? ? ? ? ? 83 ASN B HD22 1 +ATOM 1694 N N . ILE B 1 84 ? 14.477 1.868 15.060 1.00 9.64 ? ? ? ? ? ? 84 ILE B N 1 +ATOM 1695 C CA . ILE B 1 84 ? 13.566 1.901 16.204 1.00 6.41 ? ? ? ? ? ? 84 ILE B CA 1 +ATOM 1696 C C . ILE B 1 84 ? 14.247 1.541 17.523 1.00 4.30 ? ? ? ? ? ? 84 ILE B C 1 +ATOM 1697 O O . ILE B 1 84 ? 14.832 0.478 17.661 1.00 2.00 ? ? ? ? ? ? 84 ILE B O 1 +ATOM 1698 C CB . ILE B 1 84 ? 12.385 0.935 15.879 1.00 10.02 ? ? ? ? ? ? 84 ILE B CB 1 +ATOM 1699 C CG1 . ILE B 1 84 ? 11.366 1.514 14.928 1.00 8.83 ? ? ? ? ? ? 84 ILE B CG1 1 +ATOM 1700 C CG2 . ILE B 1 84 ? 11.566 0.418 17.051 1.00 13.45 ? ? ? ? ? ? 84 ILE B CG2 1 +ATOM 1701 C CD1 . ILE B 1 84 ? 10.834 0.320 14.179 1.00 13.89 ? ? ? ? ? ? 84 ILE B CD1 1 +ATOM 1702 H H . ILE B 1 84 ? 14.881 1.013 14.728 1.00 15.00 ? ? ? ? ? ? 84 ILE B H 1 +ATOM 1703 N N . ILE B 1 85 ? 14.100 2.481 18.481 1.00 2.41 ? ? ? ? ? ? 85 ILE B N 1 +ATOM 1704 C CA . ILE B 1 85 ? 14.438 2.258 19.883 1.00 2.00 ? ? ? ? ? ? 85 ILE B CA 1 +ATOM 1705 C C . ILE B 1 85 ? 13.254 1.658 20.664 1.00 4.79 ? ? ? ? ? ? 85 ILE B C 1 +ATOM 1706 O O . ILE B 1 85 ? 12.239 2.291 20.911 1.00 7.52 ? ? ? ? ? ? 85 ILE B O 1 +ATOM 1707 C CB . ILE B 1 85 ? 14.902 3.586 20.555 1.00 2.00 ? ? ? ? ? ? 85 ILE B CB 1 +ATOM 1708 C CG1 . ILE B 1 85 ? 16.010 4.266 19.743 1.00 5.76 ? ? ? ? ? ? 85 ILE B CG1 1 +ATOM 1709 C CG2 . ILE B 1 85 ? 15.426 3.416 22.009 1.00 2.00 ? ? ? ? ? ? 85 ILE B CG2 1 +ATOM 1710 C CD1 . ILE B 1 85 ? 17.379 3.572 19.680 1.00 2.00 ? ? ? ? ? ? 85 ILE B CD1 1 +ATOM 1711 H H . ILE B 1 85 ? 13.583 3.301 18.224 1.00 15.00 ? ? ? ? ? ? 85 ILE B H 1 +ATOM 1712 N N . GLY B 1 86 ? 13.433 0.396 21.043 1.00 5.77 ? ? ? ? ? ? 86 GLY B N 1 +ATOM 1713 C CA . GLY B 1 86 ? 12.423 -0.340 21.815 1.00 2.16 ? ? ? ? ? ? 86 GLY B CA 1 +ATOM 1714 C C . GLY B 1 86 ? 12.550 -0.181 23.328 1.00 4.53 ? ? ? ? ? ? 86 GLY B C 1 +ATOM 1715 O O . GLY B 1 86 ? 13.503 0.392 23.860 1.00 6.76 ? ? ? ? ? ? 86 GLY B O 1 +ATOM 1716 H H . GLY B 1 86 ? 14.339 0.022 20.849 1.00 15.00 ? ? ? ? ? ? 86 GLY B H 1 +ATOM 1717 N N . ARG B 1 87 ? 11.557 -0.749 24.017 1.00 3.38 ? ? ? ? ? ? 87 ARG B N 1 +ATOM 1718 C CA . ARG B 1 87 ? 11.510 -0.755 25.479 1.00 2.44 ? ? ? ? ? ? 87 ARG B CA 1 +ATOM 1719 C C . ARG B 1 87 ? 12.725 -1.248 26.266 1.00 5.65 ? ? ? ? ? ? 87 ARG B C 1 +ATOM 1720 O O . ARG B 1 87 ? 12.956 -0.806 27.381 1.00 13.25 ? ? ? ? ? ? 87 ARG B O 1 +ATOM 1721 C CB . ARG B 1 87 ? 10.290 -1.528 25.906 1.00 7.47 ? ? ? ? ? ? 87 ARG B CB 1 +ATOM 1722 C CG . ARG B 1 87 ? 8.917 -0.959 25.491 1.00 8.87 ? ? ? ? ? ? 87 ARG B CG 1 +ATOM 1723 C CD . ARG B 1 87 ? 7.801 -2.039 25.487 1.00 7.94 ? ? ? ? ? ? 87 ARG B CD 1 +ATOM 1724 N NE . ARG B 1 87 ? 7.774 -2.654 26.794 1.00 5.94 ? ? ? ? ? ? 87 ARG B NE 1 +ATOM 1725 C CZ . ARG B 1 87 ? 8.189 -3.922 26.991 1.00 6.37 ? ? ? ? ? ? 87 ARG B CZ 1 +ATOM 1726 N NH1 . ARG B 1 87 ? 8.179 -4.849 26.041 1.00 2.00 ? ? ? ? ? ? 87 ARG B NH1 1 +ATOM 1727 N NH2 . ARG B 1 87 ? 8.637 -4.237 28.197 1.00 10.76 ? ? ? ? ? ? 87 ARG B NH2 1 +ATOM 1728 H H . ARG B 1 87 ? 10.767 -1.026 23.480 1.00 15.00 ? ? ? ? ? ? 87 ARG B H 1 +ATOM 1729 H HE . ARG B 1 87 ? 7.682 -2.071 27.601 1.00 15.00 ? ? ? ? ? ? 87 ARG B HE 1 +ATOM 1730 H HH11 . ARG B 1 87 ? 7.853 -4.627 25.123 1.00 15.00 ? ? ? ? ? ? 87 ARG B HH11 1 +ATOM 1731 H HH12 . ARG B 1 87 ? 8.503 -5.772 26.246 1.00 15.00 ? ? ? ? ? ? 87 ARG B HH12 1 +ATOM 1732 H HH21 . ARG B 1 87 ? 8.653 -3.541 28.915 1.00 15.00 ? ? ? ? ? ? 87 ARG B HH21 1 +ATOM 1733 H HH22 . ARG B 1 87 ? 8.959 -5.165 28.391 1.00 15.00 ? ? ? ? ? ? 87 ARG B HH22 1 +ATOM 1734 N N . ASN B 1 88 ? 13.552 -2.137 25.667 1.00 4.58 ? ? ? ? ? ? 88 ASN B N 1 +ATOM 1735 C CA . ASN B 1 88 ? 14.830 -2.535 26.304 1.00 4.31 ? ? ? ? ? ? 88 ASN B CA 1 +ATOM 1736 C C . ASN B 1 88 ? 15.915 -1.471 26.592 1.00 6.99 ? ? ? ? ? ? 88 ASN B C 1 +ATOM 1737 O O . ASN B 1 88 ? 16.718 -1.548 27.513 1.00 10.50 ? ? ? ? ? ? 88 ASN B O 1 +ATOM 1738 C CB . ASN B 1 88 ? 15.458 -3.730 25.561 1.00 2.00 ? ? ? ? ? ? 88 ASN B CB 1 +ATOM 1739 C CG . ASN B 1 88 ? 16.103 -3.340 24.263 1.00 4.25 ? ? ? ? ? ? 88 ASN B CG 1 +ATOM 1740 O OD1 . ASN B 1 88 ? 15.559 -2.581 23.473 1.00 6.48 ? ? ? ? ? ? 88 ASN B OD1 1 +ATOM 1741 N ND2 . ASN B 1 88 ? 17.308 -3.865 24.045 1.00 2.00 ? ? ? ? ? ? 88 ASN B ND2 1 +ATOM 1742 H H . ASN B 1 88 ? 13.264 -2.501 24.783 1.00 15.00 ? ? ? ? ? ? 88 ASN B H 1 +ATOM 1743 H HD21 . ASN B 1 88 ? 17.747 -3.648 23.174 1.00 15.00 ? ? ? ? ? ? 88 ASN B HD21 1 +ATOM 1744 H HD22 . ASN B 1 88 ? 17.759 -4.444 24.722 1.00 15.00 ? ? ? ? ? ? 88 ASN B HD22 1 +ATOM 1745 N N . LEU B 1 89 ? 15.903 -0.476 25.702 1.00 6.35 ? ? ? ? ? ? 89 LEU B N 1 +ATOM 1746 C CA . LEU B 1 89 ? 16.787 0.686 25.809 1.00 2.00 ? ? ? ? ? ? 89 LEU B CA 1 +ATOM 1747 C C . LEU B 1 89 ? 16.077 1.846 26.476 1.00 2.18 ? ? ? ? ? ? 89 LEU B C 1 +ATOM 1748 O O . LEU B 1 89 ? 16.600 2.478 27.382 1.00 4.96 ? ? ? ? ? ? 89 LEU B O 1 +ATOM 1749 C CB . LEU B 1 89 ? 17.326 1.021 24.395 1.00 3.14 ? ? ? ? ? ? 89 LEU B CB 1 +ATOM 1750 C CG . LEU B 1 89 ? 18.799 0.609 24.116 1.00 4.86 ? ? ? ? ? ? 89 LEU B CG 1 +ATOM 1751 C CD1 . LEU B 1 89 ? 19.161 -0.777 24.667 1.00 8.03 ? ? ? ? ? ? 89 LEU B CD1 1 +ATOM 1752 C CD2 . LEU B 1 89 ? 19.205 0.739 22.651 1.00 2.06 ? ? ? ? ? ? 89 LEU B CD2 1 +ATOM 1753 H H . LEU B 1 89 ? 15.259 -0.599 24.942 1.00 15.00 ? ? ? ? ? ? 89 LEU B H 1 +ATOM 1754 N N . LEU B 1 90 ? 14.800 2.061 26.082 1.00 6.66 ? ? ? ? ? ? 90 LEU B N 1 +ATOM 1755 C CA . LEU B 1 90 ? 13.932 3.133 26.689 1.00 6.20 ? ? ? ? ? ? 90 LEU B CA 1 +ATOM 1756 C C . LEU B 1 90 ? 13.854 3.200 28.214 1.00 4.35 ? ? ? ? ? ? 90 LEU B C 1 +ATOM 1757 O O . LEU B 1 90 ? 13.775 4.235 28.869 1.00 5.39 ? ? ? ? ? ? 90 LEU B O 1 +ATOM 1758 C CB . LEU B 1 90 ? 12.465 3.015 26.184 1.00 8.53 ? ? ? ? ? ? 90 LEU B CB 1 +ATOM 1759 C CG . LEU B 1 90 ? 11.936 3.857 24.981 1.00 5.53 ? ? ? ? ? ? 90 LEU B CG 1 +ATOM 1760 C CD1 . LEU B 1 90 ? 13.007 4.601 24.193 1.00 2.00 ? ? ? ? ? ? 90 LEU B CD1 1 +ATOM 1761 C CD2 . LEU B 1 90 ? 10.944 3.065 24.112 1.00 3.50 ? ? ? ? ? ? 90 LEU B CD2 1 +ATOM 1762 H H . LEU B 1 90 ? 14.483 1.528 25.293 1.00 15.00 ? ? ? ? ? ? 90 LEU B H 1 +ATOM 1763 N N . THR B 1 91 ? 13.883 2.005 28.787 1.00 5.72 ? ? ? ? ? ? 91 THR B N 1 +ATOM 1764 C CA . THR B 1 91 ? 13.936 2.005 30.248 1.00 8.62 ? ? ? ? ? ? 91 THR B CA 1 +ATOM 1765 C C . THR B 1 91 ? 15.238 2.497 30.906 1.00 12.11 ? ? ? ? ? ? 91 THR B C 1 +ATOM 1766 O O . THR B 1 91 ? 15.268 3.135 31.946 1.00 12.10 ? ? ? ? ? ? 91 THR B O 1 +ATOM 1767 C CB . THR B 1 91 ? 13.563 0.625 30.757 1.00 8.36 ? ? ? ? ? ? 91 THR B CB 1 +ATOM 1768 O OG1 . THR B 1 91 ? 14.488 -0.364 30.335 1.00 9.15 ? ? ? ? ? ? 91 THR B OG1 1 +ATOM 1769 C CG2 . THR B 1 91 ? 12.176 0.247 30.265 1.00 2.92 ? ? ? ? ? ? 91 THR B CG2 1 +ATOM 1770 H H . THR B 1 91 ? 13.883 1.154 28.259 1.00 15.00 ? ? ? ? ? ? 91 THR B H 1 +ATOM 1771 H HG1 . THR B 1 91 ? 13.997 -1.180 30.314 1.00 15.00 ? ? ? ? ? ? 91 THR B HG1 1 +ATOM 1772 N N . GLN B 1 92 ? 16.343 2.259 30.192 1.00 13.30 ? ? ? ? ? ? 92 GLN B N 1 +ATOM 1773 C CA . GLN B 1 92 ? 17.639 2.763 30.654 1.00 13.01 ? ? ? ? ? ? 92 GLN B CA 1 +ATOM 1774 C C . GLN B 1 92 ? 17.807 4.289 30.707 1.00 16.58 ? ? ? ? ? ? 92 GLN B C 1 +ATOM 1775 O O . GLN B 1 92 ? 18.555 4.840 31.504 1.00 21.33 ? ? ? ? ? ? 92 GLN B O 1 +ATOM 1776 C CB . GLN B 1 92 ? 18.749 2.149 29.811 1.00 11.12 ? ? ? ? ? ? 92 GLN B CB 1 +ATOM 1777 C CG . GLN B 1 92 ? 18.915 0.652 30.094 1.00 7.58 ? ? ? ? ? ? 92 GLN B CG 1 +ATOM 1778 C CD . GLN B 1 92 ? 20.064 0.116 29.278 1.00 7.51 ? ? ? ? ? ? 92 GLN B CD 1 +ATOM 1779 O OE1 . GLN B 1 92 ? 21.087 0.737 29.085 1.00 9.84 ? ? ? ? ? ? 92 GLN B OE1 1 +ATOM 1780 N NE2 . GLN B 1 92 ? 19.884 -1.074 28.761 1.00 6.92 ? ? ? ? ? ? 92 GLN B NE2 1 +ATOM 1781 H H . GLN B 1 92 ? 16.253 1.748 29.339 1.00 15.00 ? ? ? ? ? ? 92 GLN B H 1 +ATOM 1782 H HE21 . GLN B 1 92 ? 20.713 -1.454 28.349 1.00 15.00 ? ? ? ? ? ? 92 GLN B HE21 1 +ATOM 1783 H HE22 . GLN B 1 92 ? 18.987 -1.510 28.793 1.00 15.00 ? ? ? ? ? ? 92 GLN B HE22 1 +ATOM 1784 N N . ILE B 1 93 ? 17.045 4.968 29.837 1.00 12.87 ? ? ? ? ? ? 93 ILE B N 1 +ATOM 1785 C CA . ILE B 1 93 ? 17.188 6.422 29.880 1.00 11.98 ? ? ? ? ? ? 93 ILE B CA 1 +ATOM 1786 C C . ILE B 1 93 ? 16.200 7.226 30.748 1.00 15.56 ? ? ? ? ? ? 93 ILE B C 1 +ATOM 1787 O O . ILE B 1 93 ? 16.194 8.452 30.763 1.00 18.42 ? ? ? ? ? ? 93 ILE B O 1 +ATOM 1788 C CB . ILE B 1 93 ? 17.265 6.997 28.459 1.00 13.13 ? ? ? ? ? ? 93 ILE B CB 1 +ATOM 1789 C CG1 . ILE B 1 93 ? 15.894 6.880 27.787 1.00 8.28 ? ? ? ? ? ? 93 ILE B CG1 1 +ATOM 1790 C CG2 . ILE B 1 93 ? 18.397 6.268 27.707 1.00 11.44 ? ? ? ? ? ? 93 ILE B CG2 1 +ATOM 1791 C CD1 . ILE B 1 93 ? 15.838 7.301 26.320 1.00 2.00 ? ? ? ? ? ? 93 ILE B CD1 1 +ATOM 1792 H H . ILE B 1 93 ? 16.524 4.453 29.159 1.00 15.00 ? ? ? ? ? ? 93 ILE B H 1 +ATOM 1793 N N . GLY B 1 94 ? 15.333 6.473 31.472 1.00 18.70 ? ? ? ? ? ? 94 GLY B N 1 +ATOM 1794 C CA . GLY B 1 94 ? 14.292 7.114 32.314 1.00 15.92 ? ? ? ? ? ? 94 GLY B CA 1 +ATOM 1795 C C . GLY B 1 94 ? 12.929 7.432 31.657 1.00 20.12 ? ? ? ? ? ? 94 GLY B C 1 +ATOM 1796 O O . GLY B 1 94 ? 12.145 8.270 32.096 1.00 21.88 ? ? ? ? ? ? 94 GLY B O 1 +ATOM 1797 H H . GLY B 1 94 ? 15.472 5.483 31.470 1.00 15.00 ? ? ? ? ? ? 94 GLY B H 1 +ATOM 1798 N N . CYS B 1 95 ? 12.677 6.696 30.551 1.00 17.65 ? ? ? ? ? ? 95 CYS B N 1 +ATOM 1799 C CA . CYS B 1 95 ? 11.518 7.078 29.755 1.00 13.90 ? ? ? ? ? ? 95 CYS B CA 1 +ATOM 1800 C C . CYS B 1 95 ? 10.172 6.552 30.232 1.00 15.16 ? ? ? ? ? ? 95 CYS B C 1 +ATOM 1801 O O . CYS B 1 95 ? 9.972 5.378 30.537 1.00 15.03 ? ? ? ? ? ? 95 CYS B O 1 +ATOM 1802 C CB . CYS B 1 95 ? 11.751 6.682 28.326 1.00 17.96 ? ? ? ? ? ? 95 CYS B CB 1 +ATOM 1803 S SG . CYS B 1 95 ? 10.719 7.651 27.244 1.00 24.85 ? ? ? ? ? ? 95 CYS B SG 1 +ATOM 1804 H H . CYS B 1 95 ? 13.302 5.956 30.306 1.00 15.00 ? ? ? ? ? ? 95 CYS B H 1 +ATOM 1805 N N . THR B 1 96 ? 9.255 7.512 30.304 1.00 14.17 ? ? ? ? ? ? 96 THR B N 1 +ATOM 1806 C CA . THR B 1 96 ? 7.892 7.277 30.822 1.00 10.50 ? ? ? ? ? ? 96 THR B CA 1 +ATOM 1807 C C . THR B 1 96 ? 6.703 7.772 29.924 1.00 10.86 ? ? ? ? ? ? 96 THR B C 1 +ATOM 1808 O O . THR B 1 96 ? 6.776 8.715 29.137 1.00 10.68 ? ? ? ? ? ? 96 THR B O 1 +ATOM 1809 C CB . THR B 1 96 ? 7.876 7.836 32.244 1.00 7.42 ? ? ? ? ? ? 96 THR B CB 1 +ATOM 1810 O OG1 . THR B 1 96 ? 7.122 7.049 33.131 1.00 18.33 ? ? ? ? ? ? 96 THR B OG1 1 +ATOM 1811 C CG2 . THR B 1 96 ? 7.423 9.268 32.346 1.00 7.05 ? ? ? ? ? ? 96 THR B CG2 1 +ATOM 1812 H H . THR B 1 96 ? 9.595 8.433 30.102 1.00 15.00 ? ? ? ? ? ? 96 THR B H 1 +ATOM 1813 H HG1 . THR B 1 96 ? 7.076 7.573 33.926 1.00 15.00 ? ? ? ? ? ? 96 THR B HG1 1 +ATOM 1814 N N . LEU B 1 97 ? 5.572 7.068 30.017 1.00 12.50 ? ? ? ? ? ? 97 LEU B N 1 +ATOM 1815 C CA . LEU B 1 97 ? 4.381 7.555 29.292 1.00 9.08 ? ? ? ? ? ? 97 LEU B CA 1 +ATOM 1816 C C . LEU B 1 97 ? 3.341 8.244 30.248 1.00 10.28 ? ? ? ? ? ? 97 LEU B C 1 +ATOM 1817 O O . LEU B 1 97 ? 2.995 7.752 31.323 1.00 4.98 ? ? ? ? ? ? 97 LEU B O 1 +ATOM 1818 C CB . LEU B 1 97 ? 3.930 6.335 28.456 1.00 6.81 ? ? ? ? ? ? 97 LEU B CB 1 +ATOM 1819 C CG . LEU B 1 97 ? 2.975 6.301 27.249 1.00 2.00 ? ? ? ? ? ? 97 LEU B CG 1 +ATOM 1820 C CD1 . LEU B 1 97 ? 3.278 7.121 25.993 1.00 2.00 ? ? ? ? ? ? 97 LEU B CD1 1 +ATOM 1821 C CD2 . LEU B 1 97 ? 3.030 4.874 26.782 1.00 2.00 ? ? ? ? ? ? 97 LEU B CD2 1 +ATOM 1822 H H . LEU B 1 97 ? 5.557 6.271 30.624 1.00 15.00 ? ? ? ? ? ? 97 LEU B H 1 +ATOM 1823 N N . ASN B 1 98 ? 2.906 9.456 29.840 1.00 11.81 ? ? ? ? ? ? 98 ASN B N 1 +ATOM 1824 C CA . ASN B 1 98 ? 2.027 10.258 30.712 1.00 14.60 ? ? ? ? ? ? 98 ASN B CA 1 +ATOM 1825 C C . ASN B 1 98 ? 0.815 10.898 30.041 1.00 17.08 ? ? ? ? ? ? 98 ASN B C 1 +ATOM 1826 O O . ASN B 1 98 ? 0.770 11.025 28.820 1.00 16.80 ? ? ? ? ? ? 98 ASN B O 1 +ATOM 1827 C CB . ASN B 1 98 ? 2.741 11.428 31.309 1.00 15.57 ? ? ? ? ? ? 98 ASN B CB 1 +ATOM 1828 C CG . ASN B 1 98 ? 3.799 10.997 32.279 1.00 18.53 ? ? ? ? ? ? 98 ASN B CG 1 +ATOM 1829 O OD1 . ASN B 1 98 ? 4.988 11.013 32.015 1.00 14.88 ? ? ? ? ? ? 98 ASN B OD1 1 +ATOM 1830 N ND2 . ASN B 1 98 ? 3.330 10.741 33.486 1.00 17.86 ? ? ? ? ? ? 98 ASN B ND2 1 +ATOM 1831 H H . ASN B 1 98 ? 3.227 9.802 28.954 1.00 15.00 ? ? ? ? ? ? 98 ASN B H 1 +ATOM 1832 H HD21 . ASN B 1 98 ? 4.036 10.609 34.175 1.00 15.00 ? ? ? ? ? ? 98 ASN B HD21 1 +ATOM 1833 H HD22 . ASN B 1 98 ? 2.344 10.686 33.628 1.00 15.00 ? ? ? ? ? ? 98 ASN B HD22 1 +ATOM 1834 N N . PHE B 1 99 ? -0.104 11.294 30.941 1.00 20.23 ? ? ? ? ? ? 99 PHE B N 1 +ATOM 1835 C CA . PHE B 1 99 ? -1.522 10.899 31.041 1.00 20.55 ? ? ? ? ? ? 99 PHE B CA 1 +ATOM 1836 C C . PHE B 1 99 ? -2.234 11.277 32.355 1.00 15.56 ? ? ? ? ? ? 99 PHE B C 1 +ATOM 1837 O O . PHE B 1 99 ? -3.448 11.150 32.489 0.00 16.69 ? ? ? ? ? ? 99 PHE B O 1 +ATOM 1838 C CB . PHE B 1 99 ? -2.373 11.019 29.759 1.00 22.25 ? ? ? ? ? ? 99 PHE B CB 1 +ATOM 1839 C CG . PHE B 1 99 ? -2.820 9.586 29.541 1.00 25.51 ? ? ? ? ? ? 99 PHE B CG 1 +ATOM 1840 C CD1 . PHE B 1 99 ? -1.892 8.647 29.026 1.00 25.13 ? ? ? ? ? ? 99 PHE B CD1 1 +ATOM 1841 C CD2 . PHE B 1 99 ? -4.113 9.170 29.940 1.00 28.47 ? ? ? ? ? ? 99 PHE B CD2 1 +ATOM 1842 C CE1 . PHE B 1 99 ? -2.222 7.274 28.976 1.00 21.04 ? ? ? ? ? ? 99 PHE B CE1 1 +ATOM 1843 C CE2 . PHE B 1 99 ? -4.446 7.799 29.894 1.00 25.86 ? ? ? ? ? ? 99 PHE B CE2 1 +ATOM 1844 C CZ . PHE B 1 99 ? -3.488 6.863 29.441 1.00 24.17 ? ? ? ? ? ? 99 PHE B CZ 1 +ATOM 1845 O OXT . PHE B 1 99 ? -1.554 11.525 33.354 0.00 16.69 ? ? ? ? ? ? 99 PHE B OXT 1 +ATOM 1846 H H . PHE B 1 99 ? 0.193 11.604 31.840 1.00 15.00 ? ? ? ? ? ? 99 PHE B H 1 +HETATM 1847 C C1 . ARQ C 2 . ? 1.474 1.321 11.354 1.00 10.36 ? ? ? ? ? ? 401 ARQ A C1 1 +HETATM 1848 C C2 . ARQ C 2 . ? 0.562 0.252 12.036 1.00 10.59 ? ? ? ? ? ? 401 ARQ A C2 1 +HETATM 1849 C C3 . ARQ C 2 . ? 0.675 2.633 11.410 1.00 7.58 ? ? ? ? ? ? 401 ARQ A C3 1 +HETATM 1850 C C4 . ARQ C 2 . ? 1.852 1.006 9.891 1.00 4.50 ? ? ? ? ? ? 401 ARQ A C4 1 +HETATM 1851 O O4 . ARQ C 2 . ? 2.664 1.554 12.108 1.00 13.55 ? ? ? ? ? ? 401 ARQ A O4 1 +HETATM 1852 C C30 . ARQ C 2 . ? 3.511 0.571 12.400 1.00 11.18 ? ? ? ? ? ? 401 ARQ A C30 1 +HETATM 1853 O O3 . ARQ C 2 . ? 3.399 -0.533 11.970 1.00 9.15 ? ? ? ? ? ? 401 ARQ A O3 1 +HETATM 1854 N N1 . ARQ C 2 . ? 4.497 0.994 13.193 1.00 11.89 ? ? ? ? ? ? 401 ARQ A N1 1 +HETATM 1855 C C5 . ARQ C 2 . ? 5.716 0.269 13.558 1.00 14.02 ? ? ? ? ? ? 401 ARQ A C5 1 +HETATM 1856 C C6 . ARQ C 2 . ? 6.953 1.163 13.346 1.00 9.73 ? ? ? ? ? ? 401 ARQ A C6 1 +HETATM 1857 C C7 . ARQ C 2 . ? 6.975 1.824 11.998 1.00 9.34 ? ? ? ? ? ? 401 ARQ A C7 1 +HETATM 1858 C C8 . ARQ C 2 . ? 6.815 1.051 10.826 1.00 8.95 ? ? ? ? ? ? 401 ARQ A C8 1 +HETATM 1859 C C9 . ARQ C 2 . ? 6.791 1.701 9.574 1.00 6.26 ? ? ? ? ? ? 401 ARQ A C9 1 +HETATM 1860 C C10 . ARQ C 2 . ? 6.927 3.110 9.519 1.00 5.40 ? ? ? ? ? ? 401 ARQ A C10 1 +HETATM 1861 C C11 . ARQ C 2 . ? 7.114 3.232 11.941 1.00 8.18 ? ? ? ? ? ? 401 ARQ A C11 1 +HETATM 1862 C C12 . ARQ C 2 . ? 7.085 3.888 10.692 1.00 5.52 ? ? ? ? ? ? 401 ARQ A C12 1 +HETATM 1863 C C13 . ARQ C 2 . ? 5.642 -0.319 14.998 1.00 12.77 ? ? ? ? ? ? 401 ARQ A C13 1 +HETATM 1864 O O1 . ARQ C 2 . ? 5.248 0.651 15.980 1.00 8.69 ? ? ? ? ? ? 401 ARQ A O1 1 +HETATM 1865 C C14 . ARQ C 2 . ? 4.669 -1.525 15.008 1.00 14.15 ? ? ? ? ? ? 401 ARQ A C14 1 +HETATM 1866 N N2 . ARQ C 2 . ? 4.998 -2.669 15.910 1.00 16.35 ? ? ? ? ? ? 401 ARQ A N2 1 +HETATM 1867 C C22 . ARQ C 2 . ? 5.441 -2.219 17.249 1.00 15.50 ? ? ? ? ? ? 401 ARQ A C22 1 +HETATM 1868 C C15 . ARQ C 2 . ? 3.718 -3.441 16.024 1.00 12.33 ? ? ? ? ? ? 401 ARQ A C15 1 +HETATM 1869 C C16 . ARQ C 2 . ? 3.724 -4.695 16.883 1.00 6.95 ? ? ? ? ? ? 401 ARQ A C16 1 +HETATM 1870 C C17 . ARQ C 2 . ? 4.055 -5.940 16.308 1.00 9.51 ? ? ? ? ? ? 401 ARQ A C17 1 +HETATM 1871 C C18 . ARQ C 2 . ? 4.162 -7.106 17.109 1.00 9.70 ? ? ? ? ? ? 401 ARQ A C18 1 +HETATM 1872 C C19 . ARQ C 2 . ? 3.957 -7.006 18.505 1.00 3.77 ? ? ? ? ? ? 401 ARQ A C19 1 +HETATM 1873 C C20 . ARQ C 2 . ? 3.386 -4.632 18.248 1.00 8.21 ? ? ? ? ? ? 401 ARQ A C20 1 +HETATM 1874 C C21 . ARQ C 2 . ? 3.502 -5.791 19.063 1.00 7.45 ? ? ? ? ? ? 401 ARQ A C21 1 +HETATM 1875 N N3 . ARQ C 2 . ? 6.121 -3.333 15.291 1.00 13.41 ? ? ? ? ? ? 401 ARQ A N3 1 +HETATM 1876 C C23 . ARQ C 2 . ? 6.067 -4.033 14.140 1.00 20.01 ? ? ? ? ? ? 401 ARQ A C23 1 +HETATM 1877 O O2 . ARQ C 2 . ? 5.015 -4.224 13.523 1.00 22.49 ? ? ? ? ? ? 401 ARQ A O2 1 +HETATM 1878 C C27 . ARQ C 2 . ? 7.360 -4.579 13.674 1.00 23.08 ? ? ? ? ? ? 401 ARQ A C27 1 +HETATM 1879 C C26 . ARQ C 2 . ? 7.343 -5.490 12.582 1.00 23.69 ? ? ? ? ? ? 401 ARQ A C26 1 +HETATM 1880 C C25 . ARQ C 2 . ? 8.521 -6.101 12.123 1.00 18.68 ? ? ? ? ? ? 401 ARQ A C25 1 +HETATM 1881 C C24 . ARQ C 2 . ? 9.714 -5.796 12.796 1.00 19.95 ? ? ? ? ? ? 401 ARQ A C24 1 +HETATM 1882 C C28 . ARQ C 2 . ? 8.593 -4.222 14.279 1.00 25.64 ? ? ? ? ? ? 401 ARQ A C28 1 +HETATM 1883 C C29 . ARQ C 2 . ? 9.781 -4.839 13.838 1.00 23.32 ? ? ? ? ? ? 401 ARQ A C29 1 +HETATM 1884 H HN1 . ARQ C 2 . ? 4.325 1.941 13.433 0.00 0.00 ? ? ? ? ? ? 401 ARQ A HN1 1 +HETATM 1885 H H5 . ARQ C 2 . ? 5.812 -0.555 12.861 0.00 0.00 ? ? ? ? ? ? 401 ARQ A H5 1 +HETATM 1886 H H13 . ARQ C 2 . ? 6.691 -0.707 15.134 0.00 0.00 ? ? ? ? ? ? 401 ARQ A H13 1 +HETATM 1887 H HO1 . ARQ C 2 . ? 4.272 0.697 16.063 0.00 0.00 ? ? ? ? ? ? 401 ARQ A HO1 1 +HETATM 1888 H HN3 . ARQ C 2 . ? 7.032 -3.144 15.636 0.00 0.00 ? ? ? ? ? ? 401 ARQ A HN3 1 +HETATM 1889 O O . HOH D 3 . ? 5.120 -2.430 11.475 1.00 17.90 ? ? ? ? ? ? 402 HOH A O 1 +HETATM 1890 H H1 . HOH D 3 . ? 4.703 -2.628 12.329 0.00 20.00 ? ? ? ? ? ? 402 HOH A H1 1 +HETATM 1891 H H2 . HOH D 3 . ? 4.811 -1.521 11.387 0.00 20.00 ? ? ? ? ? ? 402 HOH A H2 1 +HETATM 1892 O O . HOH D 3 . ? 8.333 -4.450 17.823 1.00 17.83 ? ? ? ? ? ? 403 HOH A O 1 +HETATM 1893 H H1 . HOH D 3 . ? 8.259 -3.544 17.504 0.00 20.00 ? ? ? ? ? ? 403 HOH A H1 1 +HETATM 1894 H H2 . HOH D 3 . ? 7.430 -4.770 17.707 0.00 20.00 ? ? ? ? ? ? 403 HOH A H2 1 +HETATM 1895 O O . HOH D 3 . ? -1.392 10.401 12.400 1.00 25.70 ? ? ? ? ? ? 405 HOH A O 1 +HETATM 1896 H H1 . HOH D 3 . ? -1.110 9.691 12.984 0.00 20.00 ? ? ? ? ? ? 405 HOH A H1 1 +HETATM 1897 H H2 . HOH D 3 . ? -1.196 11.201 12.890 0.00 20.00 ? ? ? ? ? ? 405 HOH A H2 1 +HETATM 1898 O O . HOH D 3 . ? -8.545 10.688 13.725 1.00 4.29 ? ? ? ? ? ? 406 HOH A O 1 +HETATM 1899 H H1 . HOH D 3 . ? -8.105 11.169 13.015 0.00 20.00 ? ? ? ? ? ? 406 HOH A H1 1 +HETATM 1900 H H2 . HOH D 3 . ? -8.992 11.385 14.219 0.00 20.00 ? ? ? ? ? ? 406 HOH A H2 1 +HETATM 1901 O O . HOH D 3 . ? 7.328 3.159 38.192 1.00 63.38 ? ? ? ? ? ? 410 HOH A O 1 +HETATM 1902 H H1 . HOH D 3 . ? 7.836 2.868 38.960 0.00 20.00 ? ? ? ? ? ? 410 HOH A H1 1 +HETATM 1903 H H2 . HOH D 3 . ? 7.292 2.360 37.640 0.00 20.00 ? ? ? ? ? ? 410 HOH A H2 1 +HETATM 1904 O O . HOH E 3 . ? 18.496 0.062 6.092 1.00 58.99 ? ? ? ? ? ? 407 HOH B O 1 +HETATM 1905 H H1 . HOH E 3 . ? 18.810 0.911 5.772 0.00 20.00 ? ? ? ? ? ? 407 HOH B H1 1 +HETATM 1906 H H2 . HOH E 3 . ? 17.595 0.283 6.369 0.00 20.00 ? ? ? ? ? ? 407 HOH B H2 1 +HETATM 1907 O O . HOH E 3 . ? 18.639 -4.883 26.553 1.00 13.69 ? ? ? ? ? ? 408 HOH B O 1 +HETATM 1908 H H1 . HOH E 3 . ? 19.047 -5.595 27.057 0.00 20.00 ? ? ? ? ? ? 408 HOH B H1 1 +HETATM 1909 H H2 . HOH E 3 . ? 18.259 -4.326 27.243 0.00 20.00 ? ? ? ? ? ? 408 HOH B H2 1 +HETATM 1910 O O . HOH E 3 . ? 10.120 3.111 32.180 1.00 13.85 ? ? ? ? ? ? 409 HOH B O 1 +HETATM 1911 H H1 . HOH E 3 . ? 10.839 3.269 32.796 0.00 20.00 ? ? ? ? ? ? 409 HOH B H1 1 +HETATM 1912 H H2 . HOH E 3 . ? 10.029 3.959 31.733 0.00 20.00 ? ? ? ? ? ? 409 HOH B H2 1 +# +loop_ +_pdbx_poly_seq_scheme.asym_id +_pdbx_poly_seq_scheme.entity_id +_pdbx_poly_seq_scheme.seq_id +_pdbx_poly_seq_scheme.mon_id +_pdbx_poly_seq_scheme.ndb_seq_num +_pdbx_poly_seq_scheme.pdb_seq_num +_pdbx_poly_seq_scheme.auth_seq_num +_pdbx_poly_seq_scheme.pdb_mon_id +_pdbx_poly_seq_scheme.auth_mon_id +_pdbx_poly_seq_scheme.pdb_strand_id +_pdbx_poly_seq_scheme.pdb_ins_code +_pdbx_poly_seq_scheme.hetero +A 1 1 PRO 1 1 1 PRO PRO A . n +A 1 2 GLN 2 2 2 GLN GLN A . n +A 1 3 ILE 3 3 3 ILE ILE A . n +A 1 4 THR 4 4 4 THR THR A . n +A 1 5 LEU 5 5 5 LEU LEU A . n +A 1 6 TRP 6 6 6 TRP TRP A . n +A 1 7 LYS 7 7 7 LYS LYS A . n +A 1 8 ARG 8 8 8 ARG ARG A . n +A 1 9 PRO 9 9 9 PRO PRO A . n +A 1 10 LEU 10 10 10 LEU LEU A . n +A 1 11 VAL 11 11 11 VAL VAL A . n +A 1 12 THR 12 12 12 THR THR A . n +A 1 13 ILE 13 13 13 ILE ILE A . n +A 1 14 ARG 14 14 14 ARG ARG A . n +A 1 15 ILE 15 15 15 ILE ILE A . n +A 1 16 GLY 16 16 16 GLY GLY A . n +A 1 17 GLY 17 17 17 GLY GLY A . n +A 1 18 GLN 18 18 18 GLN GLN A . n +A 1 19 LEU 19 19 19 LEU LEU A . n +A 1 20 LYS 20 20 20 LYS LYS A . n +A 1 21 GLU 21 21 21 GLU GLU A . n +A 1 22 ALA 22 22 22 ALA ALA A . n +A 1 23 LEU 23 23 23 LEU LEU A . n +A 1 24 LEU 24 24 24 LEU LEU A . n +A 1 25 ASP 25 25 25 ASP ASP A . n +A 1 26 THR 26 26 26 THR THR A . n +A 1 27 GLY 27 27 27 GLY GLY A . n +A 1 28 ALA 28 28 28 ALA ALA A . n +A 1 29 ASP 29 29 29 ASP ASP A . n +A 1 30 ASP 30 30 30 ASP ASP A . n +A 1 31 THR 31 31 31 THR THR A . n +A 1 32 VAL 32 32 32 VAL VAL A . n +A 1 33 LEU 33 33 33 LEU LEU A . n +A 1 34 GLU 34 34 34 GLU GLU A . n +A 1 35 GLU 35 35 35 GLU GLU A . n +A 1 36 MET 36 36 36 MET MET A . n +A 1 37 ASN 37 37 37 ASN ASN A . n +A 1 38 LEU 38 38 38 LEU LEU A . n +A 1 39 PRO 39 39 39 PRO PRO A . n +A 1 40 GLY 40 40 40 GLY GLY A . n +A 1 41 LYS 41 41 41 LYS LYS A . n +A 1 42 TRP 42 42 42 TRP TRP A . n +A 1 43 LYS 43 43 43 LYS LYS A . n +A 1 44 PRO 44 44 44 PRO PRO A . n +A 1 45 LYS 45 45 45 LYS LYS A . n +A 1 46 MET 46 46 46 MET MET A . n +A 1 47 ILE 47 47 47 ILE ILE A . n +A 1 48 GLY 48 48 48 GLY GLY A . n +A 1 49 GLY 49 49 49 GLY GLY A . n +A 1 50 ILE 50 50 50 ILE ILE A . n +A 1 51 GLY 51 51 51 GLY GLY A . n +A 1 52 GLY 52 52 52 GLY GLY A . n +A 1 53 PHE 53 53 53 PHE PHE A . n +A 1 54 ILE 54 54 54 ILE ILE A . n +A 1 55 LYS 55 55 55 LYS LYS A . n +A 1 56 VAL 56 56 56 VAL VAL A . n +A 1 57 ARG 57 57 57 ARG ARG A . n +A 1 58 GLN 58 58 58 GLN GLN A . n +A 1 59 TYR 59 59 59 TYR TYR A . n +A 1 60 ASP 60 60 60 ASP ASP A . n +A 1 61 GLN 61 61 61 GLN GLN A . n +A 1 62 ILE 62 62 62 ILE ILE A . n +A 1 63 PRO 63 63 63 PRO PRO A . n +A 1 64 VAL 64 64 64 VAL VAL A . n +A 1 65 GLU 65 65 65 GLU GLU A . n +A 1 66 ILE 66 66 66 ILE ILE A . n +A 1 67 CYS 67 67 67 CYS CYS A . n +A 1 68 GLY 68 68 68 GLY GLY A . n +A 1 69 HIS 69 69 69 HIS HIS A . n +A 1 70 LYS 70 70 70 LYS LYS A . n +A 1 71 ALA 71 71 71 ALA ALA A . n +A 1 72 ILE 72 72 72 ILE ILE A . n +A 1 73 GLY 73 73 73 GLY GLY A . n +A 1 74 THR 74 74 74 THR THR A . n +A 1 75 VAL 75 75 75 VAL VAL A . n +A 1 76 LEU 76 76 76 LEU LEU A . n +A 1 77 VAL 77 77 77 VAL VAL A . n +A 1 78 GLY 78 78 78 GLY GLY A . n +A 1 79 PRO 79 79 79 PRO PRO A . n +A 1 80 THR 80 80 80 THR THR A . n +A 1 81 PRO 81 81 81 PRO PRO A . n +A 1 82 VAL 82 82 82 VAL VAL A . n +A 1 83 ASN 83 83 83 ASN ASN A . n +A 1 84 ILE 84 84 84 ILE ILE A . n +A 1 85 ILE 85 85 85 ILE ILE A . n +A 1 86 GLY 86 86 86 GLY GLY A . n +A 1 87 ARG 87 87 87 ARG ARG A . n +A 1 88 ASN 88 88 88 ASN ASN A . n +A 1 89 LEU 89 89 89 LEU LEU A . n +A 1 90 LEU 90 90 90 LEU LEU A . n +A 1 91 THR 91 91 91 THR THR A . n +A 1 92 GLN 92 92 92 GLN GLN A . n +A 1 93 ILE 93 93 93 ILE ILE A . n +A 1 94 GLY 94 94 94 GLY GLY A . n +A 1 95 CYS 95 95 95 CYS CYS A . n +A 1 96 THR 96 96 96 THR THR A . n +A 1 97 LEU 97 97 97 LEU LEU A . n +A 1 98 ASN 98 98 98 ASN ASN A . n +A 1 99 PHE 99 99 99 PHE PHE A . n +B 1 1 PRO 1 1 1 PRO PRO B . n +B 1 2 GLN 2 2 2 GLN GLN B . n +B 1 3 ILE 3 3 3 ILE ILE B . n +B 1 4 THR 4 4 4 THR THR B . n +B 1 5 LEU 5 5 5 LEU LEU B . n +B 1 6 TRP 6 6 6 TRP TRP B . n +B 1 7 LYS 7 7 7 LYS LYS B . n +B 1 8 ARG 8 8 8 ARG ARG B . n +B 1 9 PRO 9 9 9 PRO PRO B . n +B 1 10 LEU 10 10 10 LEU LEU B . n +B 1 11 VAL 11 11 11 VAL VAL B . n +B 1 12 THR 12 12 12 THR THR B . n +B 1 13 ILE 13 13 13 ILE ILE B . n +B 1 14 ARG 14 14 14 ARG ARG B . n +B 1 15 ILE 15 15 15 ILE ILE B . n +B 1 16 GLY 16 16 16 GLY GLY B . n +B 1 17 GLY 17 17 17 GLY GLY B . n +B 1 18 GLN 18 18 18 GLN GLN B . n +B 1 19 LEU 19 19 19 LEU LEU B . n +B 1 20 LYS 20 20 20 LYS LYS B . n +B 1 21 GLU 21 21 21 GLU GLU B . n +B 1 22 ALA 22 22 22 ALA ALA B . n +B 1 23 LEU 23 23 23 LEU LEU B . n +B 1 24 LEU 24 24 24 LEU LEU B . n +B 1 25 ASP 25 25 25 ASP ASP B . n +B 1 26 THR 26 26 26 THR THR B . n +B 1 27 GLY 27 27 27 GLY GLY B . n +B 1 28 ALA 28 28 28 ALA ALA B . n +B 1 29 ASP 29 29 29 ASP ASP B . n +B 1 30 ASP 30 30 30 ASP ASP B . n +B 1 31 THR 31 31 31 THR THR B . n +B 1 32 VAL 32 32 32 VAL VAL B . n +B 1 33 LEU 33 33 33 LEU LEU B . n +B 1 34 GLU 34 34 34 GLU GLU B . n +B 1 35 GLU 35 35 35 GLU GLU B . n +B 1 36 MET 36 36 36 MET MET B . n +B 1 37 ASN 37 37 37 ASN ASN B . n +B 1 38 LEU 38 38 38 LEU LEU B . n +B 1 39 PRO 39 39 39 PRO PRO B . n +B 1 40 GLY 40 40 40 GLY GLY B . n +B 1 41 LYS 41 41 41 LYS LYS B . n +B 1 42 TRP 42 42 42 TRP TRP B . n +B 1 43 LYS 43 43 43 LYS LYS B . n +B 1 44 PRO 44 44 44 PRO PRO B . n +B 1 45 LYS 45 45 45 LYS LYS B . n +B 1 46 MET 46 46 46 MET MET B . n +B 1 47 ILE 47 47 47 ILE ILE B . n +B 1 48 GLY 48 48 48 GLY GLY B . n +B 1 49 GLY 49 49 49 GLY GLY B . n +B 1 50 ILE 50 50 50 ILE ILE B . n +B 1 51 GLY 51 51 51 GLY GLY B . n +B 1 52 GLY 52 52 52 GLY GLY B . n +B 1 53 PHE 53 53 53 PHE PHE B . n +B 1 54 ILE 54 54 54 ILE ILE B . n +B 1 55 LYS 55 55 55 LYS LYS B . n +B 1 56 VAL 56 56 56 VAL VAL B . n +B 1 57 ARG 57 57 57 ARG ARG B . n +B 1 58 GLN 58 58 58 GLN GLN B . n +B 1 59 TYR 59 59 59 TYR TYR B . n +B 1 60 ASP 60 60 60 ASP ASP B . n +B 1 61 GLN 61 61 61 GLN GLN B . n +B 1 62 ILE 62 62 62 ILE ILE B . n +B 1 63 PRO 63 63 63 PRO PRO B . n +B 1 64 VAL 64 64 64 VAL VAL B . n +B 1 65 GLU 65 65 65 GLU GLU B . n +B 1 66 ILE 66 66 66 ILE ILE B . n +B 1 67 CYS 67 67 67 CYS CYS B . n +B 1 68 GLY 68 68 68 GLY GLY B . n +B 1 69 HIS 69 69 69 HIS HIS B . n +B 1 70 LYS 70 70 70 LYS LYS B . n +B 1 71 ALA 71 71 71 ALA ALA B . n +B 1 72 ILE 72 72 72 ILE ILE B . n +B 1 73 GLY 73 73 73 GLY GLY B . n +B 1 74 THR 74 74 74 THR THR B . n +B 1 75 VAL 75 75 75 VAL VAL B . n +B 1 76 LEU 76 76 76 LEU LEU B . n +B 1 77 VAL 77 77 77 VAL VAL B . n +B 1 78 GLY 78 78 78 GLY GLY B . n +B 1 79 PRO 79 79 79 PRO PRO B . n +B 1 80 THR 80 80 80 THR THR B . n +B 1 81 PRO 81 81 81 PRO PRO B . n +B 1 82 VAL 82 82 82 VAL VAL B . n +B 1 83 ASN 83 83 83 ASN ASN B . n +B 1 84 ILE 84 84 84 ILE ILE B . n +B 1 85 ILE 85 85 85 ILE ILE B . n +B 1 86 GLY 86 86 86 GLY GLY B . n +B 1 87 ARG 87 87 87 ARG ARG B . n +B 1 88 ASN 88 88 88 ASN ASN B . n +B 1 89 LEU 89 89 89 LEU LEU B . n +B 1 90 LEU 90 90 90 LEU LEU B . n +B 1 91 THR 91 91 91 THR THR B . n +B 1 92 GLN 92 92 92 GLN GLN B . n +B 1 93 ILE 93 93 93 ILE ILE B . n +B 1 94 GLY 94 94 94 GLY GLY B . n +B 1 95 CYS 95 95 95 CYS CYS B . n +B 1 96 THR 96 96 96 THR THR B . n +B 1 97 LEU 97 97 97 LEU LEU B . n +B 1 98 ASN 98 98 98 ASN ASN B . n +B 1 99 PHE 99 99 99 PHE PHE B . n +# +loop_ +_software.name +_software.classification +_software.version +_software.citation_id +_software.pdbx_ordinal +X-PLOR 'model building' 2.0 ? 1 +X-PLOR refinement 2.0 ? 2 +# +loop_ +_pdbx_version.entry_id +_pdbx_version.revision_date +_pdbx_version.major_version +_pdbx_version.minor_version +_pdbx_version.revision_type +_pdbx_version.details +3AID 2008-03-03 3 2 'Version format compliance' 'compliance with PDB format V.3.15' +3AID 2011-07-13 4 0000 'Version format compliance' 'compliance with PDB Exchange Dictionary V4' +# +loop_ +_pdbx_unobs_or_zero_occ_atoms.id +_pdbx_unobs_or_zero_occ_atoms.polymer_flag +_pdbx_unobs_or_zero_occ_atoms.occupancy_flag +_pdbx_unobs_or_zero_occ_atoms.PDB_model_num +_pdbx_unobs_or_zero_occ_atoms.auth_asym_id +_pdbx_unobs_or_zero_occ_atoms.auth_comp_id +_pdbx_unobs_or_zero_occ_atoms.auth_seq_id +_pdbx_unobs_or_zero_occ_atoms.PDB_ins_code +_pdbx_unobs_or_zero_occ_atoms.auth_atom_id +_pdbx_unobs_or_zero_occ_atoms.label_alt_id +1 Y 0 1 A PHE 99 ? O ? +2 Y 0 1 A PHE 99 ? OXT ? +3 Y 0 1 B PHE 99 ? O ? +4 Y 0 1 B PHE 99 ? OXT ? +# +_pdbx_struct_assembly.id 1 +_pdbx_struct_assembly.details author_and_software_defined_assembly +_pdbx_struct_assembly.method_details PISA +_pdbx_struct_assembly.oligomeric_details dimeric +_pdbx_struct_assembly.oligomeric_count 2 +# +_pdbx_struct_assembly_gen.assembly_id 1 +_pdbx_struct_assembly_gen.oper_expression 1 +_pdbx_struct_assembly_gen.asym_id_list A,C,D,B,E +# +loop_ +_pdbx_struct_assembly_prop.biol_id +_pdbx_struct_assembly_prop.type +_pdbx_struct_assembly_prop.value +_pdbx_struct_assembly_prop.details +1 'ABSA (A^2)' 4910 ? +1 'SSA (A^2)' 9760 ? +1 MORE -18 ? +# +_pdbx_struct_oper_list.id 1 +_pdbx_struct_oper_list.type 'identity operation' +_pdbx_struct_oper_list.name 1_555 +_pdbx_struct_oper_list.symmetry_operation x,y,z +_pdbx_struct_oper_list.matrix[1][1] 1.0000000000 +_pdbx_struct_oper_list.matrix[1][2] 0.0000000000 +_pdbx_struct_oper_list.matrix[1][3] 0.0000000000 +_pdbx_struct_oper_list.vector[1] 0.0000000000 +_pdbx_struct_oper_list.matrix[2][1] 0.0000000000 +_pdbx_struct_oper_list.matrix[2][2] 1.0000000000 +_pdbx_struct_oper_list.matrix[2][3] 0.0000000000 +_pdbx_struct_oper_list.vector[2] 0.0000000000 +_pdbx_struct_oper_list.matrix[3][1] 0.0000000000 +_pdbx_struct_oper_list.matrix[3][2] 0.0000000000 +_pdbx_struct_oper_list.matrix[3][3] 1.0000000000 +_pdbx_struct_oper_list.vector[3] 0.0000000000 +# +loop_ +_pdbx_nonpoly_scheme.asym_id +_pdbx_nonpoly_scheme.entity_id +_pdbx_nonpoly_scheme.mon_id +_pdbx_nonpoly_scheme.ndb_seq_num +_pdbx_nonpoly_scheme.pdb_seq_num +_pdbx_nonpoly_scheme.auth_seq_num +_pdbx_nonpoly_scheme.pdb_mon_id +_pdbx_nonpoly_scheme.auth_mon_id +_pdbx_nonpoly_scheme.pdb_strand_id +_pdbx_nonpoly_scheme.pdb_ins_code +C 2 ARQ 1 401 401 ARQ ARQ A . +D 3 HOH 1 402 402 HOH HOH A . +D 3 HOH 2 403 403 HOH HOH A . +D 3 HOH 3 405 405 HOH HOH A . +D 3 HOH 4 406 406 HOH HOH A . +D 3 HOH 5 410 410 HOH HOH A . +E 3 HOH 1 407 407 HOH HOH B . +E 3 HOH 2 408 408 HOH HOH B . +E 3 HOH 3 409 409 HOH HOH B . +# +loop_ +_pdbx_validate_rmsd_angle.id +_pdbx_validate_rmsd_angle.PDB_model_num +_pdbx_validate_rmsd_angle.auth_atom_id_1 +_pdbx_validate_rmsd_angle.auth_asym_id_1 +_pdbx_validate_rmsd_angle.auth_comp_id_1 +_pdbx_validate_rmsd_angle.auth_seq_id_1 +_pdbx_validate_rmsd_angle.PDB_ins_code_1 +_pdbx_validate_rmsd_angle.label_alt_id_1 +_pdbx_validate_rmsd_angle.auth_atom_id_2 +_pdbx_validate_rmsd_angle.auth_asym_id_2 +_pdbx_validate_rmsd_angle.auth_comp_id_2 +_pdbx_validate_rmsd_angle.auth_seq_id_2 +_pdbx_validate_rmsd_angle.PDB_ins_code_2 +_pdbx_validate_rmsd_angle.label_alt_id_2 +_pdbx_validate_rmsd_angle.auth_atom_id_3 +_pdbx_validate_rmsd_angle.auth_asym_id_3 +_pdbx_validate_rmsd_angle.auth_comp_id_3 +_pdbx_validate_rmsd_angle.auth_seq_id_3 +_pdbx_validate_rmsd_angle.PDB_ins_code_3 +_pdbx_validate_rmsd_angle.label_alt_id_3 +_pdbx_validate_rmsd_angle.angle_deviation +1 1 NE A ARG 8 ? ? CZ A ARG 8 ? ? NH1 A ARG 8 ? ? 3.6 +2 1 NE A ARG 8 ? ? CZ A ARG 8 ? ? NH2 A ARG 8 ? ? -3.8 +3 1 C B GLY 16 ? ? N B GLY 17 ? ? CA B GLY 17 ? ? -13.0 +4 1 NE B ARG 87 ? ? CZ B ARG 87 ? ? NH1 B ARG 87 ? ? 3.0 +# +_pdbx_validate_torsion.id 1 +_pdbx_validate_torsion.PDB_model_num 1 +_pdbx_validate_torsion.auth_comp_id GLU +_pdbx_validate_torsion.auth_asym_id A +_pdbx_validate_torsion.auth_seq_id 35 +_pdbx_validate_torsion.PDB_ins_code ? +_pdbx_validate_torsion.phi -41.76 +_pdbx_validate_torsion.psi 108.21 +# +loop_ +_pdbx_validate_peptide_omega.id +_pdbx_validate_peptide_omega.PDB_model_num +_pdbx_validate_peptide_omega.auth_comp_id_1 +_pdbx_validate_peptide_omega.auth_asym_id_1 +_pdbx_validate_peptide_omega.auth_seq_id_1 +_pdbx_validate_peptide_omega.PDB_ins_code_1 +_pdbx_validate_peptide_omega.auth_comp_id_2 +_pdbx_validate_peptide_omega.auth_asym_id_2 +_pdbx_validate_peptide_omega.auth_seq_id_2 +_pdbx_validate_peptide_omega.PDB_ins_code_2 +_pdbx_validate_peptide_omega.omega +1 1 PRO B 1 ? GLN B 2 ? 131.857 +2 1 ASN B 98 ? PHE B 99 ? -122.454 +# +loop_ +_pdbx_validate_chiral.id +_pdbx_validate_chiral.PDB_model_num +_pdbx_validate_chiral.auth_comp_id +_pdbx_validate_chiral.auth_asym_id +_pdbx_validate_chiral.auth_seq_id +_pdbx_validate_chiral.PDB_ins_code +_pdbx_validate_chiral.details +_pdbx_validate_chiral.omega +1 1 PRO A 1 ? 'Expecting L Found D WRONG HAND' -20.210 +2 1 ILE A 50 ? 'Expecting L Found L OUTSIDE RANGE' 21.813 +3 1 GLN A 61 ? 'Expecting L Found L OUTSIDE RANGE' 23.281 +4 1 VAL A 64 ? 'Expecting L Found L OUTSIDE RANGE' 22.866 +5 1 PRO B 1 ? 'Expecting L Found D WRONG HAND' -25.807 +6 1 LYS B 7 ? 'Expecting L Found L OUTSIDE RANGE' 23.439 +7 1 GLN B 61 ? 'Expecting L Found L OUTSIDE RANGE' 23.530 +8 1 VAL B 77 ? 'Expecting L Found L OUTSIDE RANGE' 24.832 +9 1 PHE B 99 ? 'Expecting L Found D WRONG HAND' -21.536 +# +loop_ +_pdbx_validate_planes.id +_pdbx_validate_planes.PDB_model_num +_pdbx_validate_planes.auth_comp_id +_pdbx_validate_planes.auth_asym_id +_pdbx_validate_planes.auth_seq_id +_pdbx_validate_planes.PDB_ins_code +_pdbx_validate_planes.rmsd +_pdbx_validate_planes.type +1 1 ARG A 87 ? 0.198 'SIDE CHAIN' +2 1 ARG B 87 ? 0.130 'SIDE CHAIN' +# +loop_ +_pdbx_entity_nonpoly.entity_id +_pdbx_entity_nonpoly.name +_pdbx_entity_nonpoly.comp_id +2 'BENZOYLAMINO-BENZYL-METHYL-[2-HYDROXY-3-[1-METHYL-ETHYL-OXY-N-FORMAMIDYL]-4-PHENYL-BUTYL]-AMMONIUM' ARQ +3 water HOH +# diff --git a/moldesign/_tests/data/3aid.pdb b/moldesign/_tests/data/3aid.pdb new file mode 100644 index 0000000..821fd19 --- /dev/null +++ b/moldesign/_tests/data/3aid.pdb @@ -0,0 +1,2354 @@ +HEADER ASPARTYL PROTEASE 15-MAY-97 3AID +TITLE A NEW CLASS OF HIV-1 PROTEASE INHIBITOR: THE +TITLE 2 CRYSTALLOGRAPHIC STRUCTURE, INHIBITION AND CHEMICAL +TITLE 3 SYNTHESIS OF AN AMINIMIDE PEPTIDE ISOSTERE +COMPND MOL_ID: 1; +COMPND 2 MOLECULE: HUMAN IMMUNODEFICIENCY VIRUS PROTEASE; +COMPND 3 CHAIN: A, B; +COMPND 4 SYNONYM: HIV PROTEASE, HIV PR; +COMPND 5 EC: 3.4.23.16; +COMPND 6 ENGINEERED: YES; +COMPND 7 MUTATION: YES +SOURCE MOL_ID: 1; +SOURCE 2 ORGANISM_SCIENTIFIC: HUMAN IMMUNODEFICIENCY VIRUS 1; +SOURCE 3 ORGANISM_TAXID: 11676; +SOURCE 4 VARIANT: SF1 ISOLATE; +SOURCE 5 EXPRESSION_SYSTEM: ESCHERICHIA COLI; +SOURCE 6 EXPRESSION_SYSTEM_TAXID: 562 +KEYWDS ASPARTYL PROTEASE, PROTEASE, HIV, PEPTIDE ISOSTERE +KEYWDS 2 INHIBITOR, DRUG DESIGN +EXPDTA X-RAY DIFFRACTION +AUTHOR E.E.RUTENBER,R.M.STROUD +REVDAT 3 24-FEB-09 3AID 1 VERSN +REVDAT 2 01-APR-03 3AID 1 JRNL +REVDAT 1 17-SEP-97 3AID 0 +JRNL AUTH E.E.RUTENBER,F.MCPHEE,A.P.KAPLAN,S.L.GALLION, +JRNL AUTH 2 J.C.HOGAN JR.,C.S.CRAIK,R.M.STROUD +JRNL TITL A NEW CLASS OF HIV-1 PROTEASE INHIBITOR: THE +JRNL TITL 2 CRYSTALLOGRAPHIC STRUCTURE, INHIBITION AND +JRNL TITL 3 CHEMICAL SYNTHESIS OF AN AMINIMIDE PEPTIDE +JRNL TITL 4 ISOSTERE. +JRNL REF BIOORG.MED.CHEM. V. 4 1545 1996 +JRNL REFN ISSN 0968-0896 +JRNL PMID 8894111 +JRNL DOI 10.1016/0968-0896(96)00147-2 +REMARK 1 +REMARK 2 +REMARK 2 RESOLUTION. 2.50 ANGSTROMS. +REMARK 3 +REMARK 3 REFINEMENT. +REMARK 3 PROGRAM : X-PLOR 2.0 +REMARK 3 AUTHORS : BRUNGER +REMARK 3 +REMARK 3 DATA USED IN REFINEMENT. +REMARK 3 RESOLUTION RANGE HIGH (ANGSTROMS) : 2.50 +REMARK 3 RESOLUTION RANGE LOW (ANGSTROMS) : 7.00 +REMARK 3 DATA CUTOFF (SIGMA(F)) : 0.000 +REMARK 3 DATA CUTOFF HIGH (ABS(F)) : NULL +REMARK 3 DATA CUTOFF LOW (ABS(F)) : NULL +REMARK 3 COMPLETENESS (WORKING+TEST) (%) : 88.0 +REMARK 3 NUMBER OF REFLECTIONS : 6864 +REMARK 3 +REMARK 3 FIT TO DATA USED IN REFINEMENT. +REMARK 3 CROSS-VALIDATION METHOD : NULL +REMARK 3 FREE R VALUE TEST SET SELECTION : NULL +REMARK 3 R VALUE (WORKING SET) : 0.180 +REMARK 3 FREE R VALUE : NULL +REMARK 3 FREE R VALUE TEST SET SIZE (%) : NULL +REMARK 3 FREE R VALUE TEST SET COUNT : NULL +REMARK 3 ESTIMATED ERROR OF FREE R VALUE : NULL +REMARK 3 +REMARK 3 FIT IN THE HIGHEST RESOLUTION BIN. +REMARK 3 TOTAL NUMBER OF BINS USED : NULL +REMARK 3 BIN RESOLUTION RANGE HIGH (A) : NULL +REMARK 3 BIN RESOLUTION RANGE LOW (A) : NULL +REMARK 3 BIN COMPLETENESS (WORKING+TEST) (%) : NULL +REMARK 3 REFLECTIONS IN BIN (WORKING SET) : NULL +REMARK 3 BIN R VALUE (WORKING SET) : NULL +REMARK 3 BIN FREE R VALUE : NULL +REMARK 3 BIN FREE R VALUE TEST SET SIZE (%) : NULL +REMARK 3 BIN FREE R VALUE TEST SET COUNT : NULL +REMARK 3 ESTIMATED ERROR OF BIN FREE R VALUE : NULL +REMARK 3 +REMARK 3 NUMBER OF NON-HYDROGEN ATOMS USED IN REFINEMENT. +REMARK 3 PROTEIN ATOMS : 1846 +REMARK 3 NUCLEIC ACID ATOMS : 0 +REMARK 3 HETEROGEN ATOMS : 42 +REMARK 3 SOLVENT ATOMS : 24 +REMARK 3 +REMARK 3 B VALUES. +REMARK 3 FROM WILSON PLOT (A**2) : NULL +REMARK 3 MEAN B VALUE (OVERALL, A**2) : NULL +REMARK 3 OVERALL ANISOTROPIC B VALUE. +REMARK 3 B11 (A**2) : NULL +REMARK 3 B22 (A**2) : NULL +REMARK 3 B33 (A**2) : NULL +REMARK 3 B12 (A**2) : NULL +REMARK 3 B13 (A**2) : NULL +REMARK 3 B23 (A**2) : NULL +REMARK 3 +REMARK 3 ESTIMATED COORDINATE ERROR. +REMARK 3 ESD FROM LUZZATI PLOT (A) : NULL +REMARK 3 ESD FROM SIGMAA (A) : NULL +REMARK 3 LOW RESOLUTION CUTOFF (A) : NULL +REMARK 3 +REMARK 3 CROSS-VALIDATED ESTIMATED COORDINATE ERROR. +REMARK 3 ESD FROM C-V LUZZATI PLOT (A) : NULL +REMARK 3 ESD FROM C-V SIGMAA (A) : NULL +REMARK 3 +REMARK 3 RMS DEVIATIONS FROM IDEAL VALUES. +REMARK 3 BOND LENGTHS (A) : 0.021 +REMARK 3 BOND ANGLES (DEGREES) : 3.50 +REMARK 3 DIHEDRAL ANGLES (DEGREES) : 30.10 +REMARK 3 IMPROPER ANGLES (DEGREES) : 16.40 +REMARK 3 +REMARK 3 ISOTROPIC THERMAL MODEL : NULL +REMARK 3 +REMARK 3 ISOTROPIC THERMAL FACTOR RESTRAINTS. RMS SIGMA +REMARK 3 MAIN-CHAIN BOND (A**2) : NULL ; NULL +REMARK 3 MAIN-CHAIN ANGLE (A**2) : NULL ; NULL +REMARK 3 SIDE-CHAIN BOND (A**2) : NULL ; NULL +REMARK 3 SIDE-CHAIN ANGLE (A**2) : NULL ; NULL +REMARK 3 +REMARK 3 NCS MODEL : NULL +REMARK 3 +REMARK 3 NCS RESTRAINTS. RMS SIGMA/WEIGHT +REMARK 3 GROUP 1 POSITIONAL (A) : NULL ; NULL +REMARK 3 GROUP 1 B-FACTOR (A**2) : NULL ; NULL +REMARK 3 +REMARK 3 PARAMETER FILE 1 : PARAM19X.PRO +REMARK 3 PARAMETER FILE 2 : NULL +REMARK 3 PARAMETER FILE 3 : NULL +REMARK 3 TOPOLOGY FILE 1 : TOPH19X.PRO +REMARK 3 TOPOLOGY FILE 2 : NULL +REMARK 3 TOPOLOGY FILE 3 : NULL +REMARK 3 +REMARK 3 OTHER REFINEMENT REMARKS: NULL +REMARK 4 +REMARK 4 3AID COMPLIES WITH FORMAT V. 3.15, 01-DEC-08 +REMARK 100 +REMARK 100 THIS ENTRY HAS BEEN PROCESSED BY BNL. +REMARK 200 +REMARK 200 EXPERIMENTAL DETAILS +REMARK 200 EXPERIMENT TYPE : X-RAY DIFFRACTION +REMARK 200 DATE OF DATA COLLECTION : JAN-95 +REMARK 200 TEMPERATURE (KELVIN) : 287 +REMARK 200 PH : 5.4 +REMARK 200 NUMBER OF CRYSTALS USED : 1 +REMARK 200 +REMARK 200 SYNCHROTRON (Y/N) : N +REMARK 200 RADIATION SOURCE : ROTATING ANODE +REMARK 200 BEAMLINE : NULL +REMARK 200 X-RAY GENERATOR MODEL : RIGAKU RUH3R +REMARK 200 MONOCHROMATIC OR LAUE (M/L) : M +REMARK 200 WAVELENGTH OR RANGE (A) : 1.5418 +REMARK 200 MONOCHROMATOR : GRAPHITE(002) +REMARK 200 OPTICS : NULL +REMARK 200 +REMARK 200 DETECTOR TYPE : AREA DETECTOR +REMARK 200 DETECTOR MANUFACTURER : SIEMENS +REMARK 200 INTENSITY-INTEGRATION SOFTWARE : SIEMENS +REMARK 200 DATA SCALING SOFTWARE : SIEMENS +REMARK 200 +REMARK 200 NUMBER OF UNIQUE REFLECTIONS : 14215 +REMARK 200 RESOLUTION RANGE HIGH (A) : 2.500 +REMARK 200 RESOLUTION RANGE LOW (A) : 100.000 +REMARK 200 REJECTION CRITERIA (SIGMA(I)) : 0.000 +REMARK 200 +REMARK 200 OVERALL. +REMARK 200 COMPLETENESS FOR RANGE (%) : 87.0 +REMARK 200 DATA REDUNDANCY : 2.200 +REMARK 200 R MERGE (I) : 0.08100 +REMARK 200 R SYM (I) : 0.08100 +REMARK 200 FOR THE DATA SET : NULL +REMARK 200 +REMARK 200 IN THE HIGHEST RESOLUTION SHELL. +REMARK 200 HIGHEST RESOLUTION SHELL, RANGE HIGH (A) : NULL +REMARK 200 HIGHEST RESOLUTION SHELL, RANGE LOW (A) : NULL +REMARK 200 COMPLETENESS FOR SHELL (%) : NULL +REMARK 200 DATA REDUNDANCY IN SHELL : NULL +REMARK 200 R MERGE FOR SHELL (I) : NULL +REMARK 200 R SYM FOR SHELL (I) : NULL +REMARK 200 FOR SHELL : NULL +REMARK 200 +REMARK 200 DIFFRACTION PROTOCOL: NULL +REMARK 200 METHOD USED TO DETERMINE THE STRUCTURE: MOLECULAR REPLACEMENT +REMARK 200 SOFTWARE USED: X-PLOR 2.0 +REMARK 200 STARTING MODEL: PDB ENTRY 3HVP +REMARK 200 +REMARK 200 REMARK: NULL +REMARK 280 +REMARK 280 CRYSTAL +REMARK 280 SOLVENT CONTENT, VS (%): 48.04 +REMARK 280 MATTHEWS COEFFICIENT, VM (ANGSTROMS**3/DA): 2.37 +REMARK 280 +REMARK 280 CRYSTALLIZATION CONDITIONS: PH 5.4 +REMARK 290 +REMARK 290 CRYSTALLOGRAPHIC SYMMETRY +REMARK 290 SYMMETRY OPERATORS FOR SPACE GROUP: P 21 21 21 +REMARK 290 +REMARK 290 SYMOP SYMMETRY +REMARK 290 NNNMMM OPERATOR +REMARK 290 1555 X,Y,Z +REMARK 290 2555 -X+1/2,-Y,Z+1/2 +REMARK 290 3555 -X,Y+1/2,-Z+1/2 +REMARK 290 4555 X+1/2,-Y+1/2,-Z +REMARK 290 +REMARK 290 WHERE NNN -> OPERATOR NUMBER +REMARK 290 MMM -> TRANSLATION VECTOR +REMARK 290 +REMARK 290 CRYSTALLOGRAPHIC SYMMETRY TRANSFORMATIONS +REMARK 290 THE FOLLOWING TRANSFORMATIONS OPERATE ON THE ATOM/HETATM +REMARK 290 RECORDS IN THIS ENTRY TO PRODUCE CRYSTALLOGRAPHICALLY +REMARK 290 RELATED MOLECULES. +REMARK 290 SMTRY1 1 1.000000 0.000000 0.000000 0.00000 +REMARK 290 SMTRY2 1 0.000000 1.000000 0.000000 0.00000 +REMARK 290 SMTRY3 1 0.000000 0.000000 1.000000 0.00000 +REMARK 290 SMTRY1 2 -1.000000 0.000000 0.000000 26.55000 +REMARK 290 SMTRY2 2 0.000000 -1.000000 0.000000 0.00000 +REMARK 290 SMTRY3 2 0.000000 0.000000 1.000000 31.60000 +REMARK 290 SMTRY1 3 -1.000000 0.000000 0.000000 0.00000 +REMARK 290 SMTRY2 3 0.000000 1.000000 0.000000 30.50000 +REMARK 290 SMTRY3 3 0.000000 0.000000 -1.000000 31.60000 +REMARK 290 SMTRY1 4 1.000000 0.000000 0.000000 26.55000 +REMARK 290 SMTRY2 4 0.000000 -1.000000 0.000000 30.50000 +REMARK 290 SMTRY3 4 0.000000 0.000000 -1.000000 0.00000 +REMARK 290 +REMARK 290 REMARK: NULL +REMARK 300 +REMARK 300 BIOMOLECULE: 1 +REMARK 300 SEE REMARK 350 FOR THE AUTHOR PROVIDED AND/OR PROGRAM +REMARK 300 GENERATED ASSEMBLY INFORMATION FOR THE STRUCTURE IN +REMARK 300 THIS ENTRY. THE REMARK MAY ALSO PROVIDE INFORMATION ON +REMARK 300 BURIED SURFACE AREA. +REMARK 350 +REMARK 350 COORDINATES FOR A COMPLETE MULTIMER REPRESENTING THE KNOWN +REMARK 350 BIOLOGICALLY SIGNIFICANT OLIGOMERIZATION STATE OF THE +REMARK 350 MOLECULE CAN BE GENERATED BY APPLYING BIOMT TRANSFORMATIONS +REMARK 350 GIVEN BELOW. BOTH NON-CRYSTALLOGRAPHIC AND +REMARK 350 CRYSTALLOGRAPHIC OPERATIONS ARE GIVEN. +REMARK 350 +REMARK 350 BIOMOLECULE: 1 +REMARK 350 AUTHOR DETERMINED BIOLOGICAL UNIT: DIMERIC +REMARK 350 SOFTWARE DETERMINED QUATERNARY STRUCTURE: DIMERIC +REMARK 350 SOFTWARE USED: PISA +REMARK 350 TOTAL BURIED SURFACE AREA: 4910 ANGSTROM**2 +REMARK 350 SURFACE AREA OF THE COMPLEX: 9760 ANGSTROM**2 +REMARK 350 CHANGE IN SOLVENT FREE ENERGY: -18.0 KCAL/MOL +REMARK 350 APPLY THE FOLLOWING TO CHAINS: A, B +REMARK 350 BIOMT1 1 1.000000 0.000000 0.000000 0.00000 +REMARK 350 BIOMT2 1 0.000000 1.000000 0.000000 0.00000 +REMARK 350 BIOMT3 1 0.000000 0.000000 1.000000 0.00000 +REMARK 480 +REMARK 480 ZERO OCCUPANCY ATOM +REMARK 480 THE FOLLOWING RESIDUES HAVE ATOMS MODELED WITH ZERO +REMARK 480 OCCUPANCY. THE LOCATION AND PROPERTIES OF THESE ATOMS +REMARK 480 MAY NOT BE RELIABLE. (M=MODEL NUMBER; RES=RESIDUE NAME; +REMARK 480 C=CHAIN IDENTIFIER; SSEQ=SEQUENCE NUMBER; I=INSERTION CODE): +REMARK 480 M RES C SSEQI ATOMS +REMARK 480 PHE A 99 O OXT +REMARK 480 PHE B 99 O OXT +REMARK 500 +REMARK 500 GEOMETRY AND STEREOCHEMISTRY +REMARK 500 SUBTOPIC: COVALENT BOND ANGLES +REMARK 500 +REMARK 500 THE STEREOCHEMICAL PARAMETERS OF THE FOLLOWING RESIDUES +REMARK 500 HAVE VALUES WHICH DEVIATE FROM EXPECTED VALUES BY MORE +REMARK 500 THAN 6*RMSD (M=MODEL NUMBER; RES=RESIDUE NAME; C=CHAIN +REMARK 500 IDENTIFIER; SSEQ=SEQUENCE NUMBER; I=INSERTION CODE). +REMARK 500 +REMARK 500 STANDARD TABLE: +REMARK 500 FORMAT: (10X,I3,1X,A3,1X,A1,I4,A1,3(1X,A4,2X),12X,F5.1) +REMARK 500 +REMARK 500 EXPECTED VALUES PROTEIN: ENGH AND HUBER, 1999 +REMARK 500 EXPECTED VALUES NUCLEIC ACID: CLOWNEY ET AL 1996 +REMARK 500 +REMARK 500 M RES CSSEQI ATM1 ATM2 ATM3 +REMARK 500 ARG A 8 NE - CZ - NH1 ANGL. DEV. = 3.6 DEGREES +REMARK 500 ARG A 8 NE - CZ - NH2 ANGL. DEV. = -3.8 DEGREES +REMARK 500 GLY B 17 C - N - CA ANGL. DEV. = -13.0 DEGREES +REMARK 500 ARG B 87 NE - CZ - NH1 ANGL. DEV. = 3.0 DEGREES +REMARK 500 +REMARK 500 REMARK: NULL +REMARK 500 +REMARK 500 GEOMETRY AND STEREOCHEMISTRY +REMARK 500 SUBTOPIC: TORSION ANGLES +REMARK 500 +REMARK 500 TORSION ANGLES OUTSIDE THE EXPECTED RAMACHANDRAN REGIONS: +REMARK 500 (M=MODEL NUMBER; RES=RESIDUE NAME; C=CHAIN IDENTIFIER; +REMARK 500 SSEQ=SEQUENCE NUMBER; I=INSERTION CODE). +REMARK 500 +REMARK 500 STANDARD TABLE: +REMARK 500 FORMAT:(10X,I3,1X,A3,1X,A1,I4,A1,4X,F7.2,3X,F7.2) +REMARK 500 +REMARK 500 EXPECTED VALUES: GJ KLEYWEGT AND TA JONES (1996). PHI/PSI- +REMARK 500 CHOLOGY: RAMACHANDRAN REVISITED. STRUCTURE 4, 1395 - 1400 +REMARK 500 +REMARK 500 M RES CSSEQI PSI PHI +REMARK 500 GLU A 35 108.21 -41.76 +REMARK 500 +REMARK 500 REMARK: NULL +REMARK 500 +REMARK 500 GEOMETRY AND STEREOCHEMISTRY +REMARK 500 SUBTOPIC: NON-CIS, NON-TRANS +REMARK 500 +REMARK 500 THE FOLLOWING PEPTIDE BONDS DEVIATE SIGNIFICANTLY FROM BOTH +REMARK 500 CIS AND TRANS CONFORMATION. CIS BONDS, IF ANY, ARE LISTED +REMARK 500 ON CISPEP RECORDS. TRANS IS DEFINED AS 180 +/- 30 AND +REMARK 500 CIS IS DEFINED AS 0 +/- 30 DEGREES. +REMARK 500 MODEL OMEGA +REMARK 500 PRO B 1 GLN B 2 131.86 +REMARK 500 ASN B 98 PHE B 99 -122.45 +REMARK 500 +REMARK 500 REMARK: NULL +REMARK 500 +REMARK 500 GEOMETRY AND STEREOCHEMISTRY +REMARK 500 SUBTOPIC: PLANAR GROUPS +REMARK 500 +REMARK 500 PLANAR GROUPS IN THE FOLLOWING RESIDUES HAVE A TOTAL +REMARK 500 RMS DISTANCE OF ALL ATOMS FROM THE BEST-FIT PLANE +REMARK 500 BY MORE THAN AN EXPECTED VALUE OF 6*RMSD, WITH AN +REMARK 500 RMSD 0.02 ANGSTROMS, OR AT LEAST ONE ATOM HAS +REMARK 500 AN RMSD GREATER THAN THIS VALUE +REMARK 500 (M=MODEL NUMBER; RES=RESIDUE NAME; C=CHAIN IDENTIFIER; +REMARK 500 SSEQ=SEQUENCE NUMBER; I=INSERTION CODE). +REMARK 500 +REMARK 500 M RES CSSEQI RMS TYPE +REMARK 500 ARG A 87 0.20 SIDE_CHAIN +REMARK 500 ARG B 87 0.13 SIDE_CHAIN +REMARK 500 +REMARK 500 REMARK: NULL +REMARK 500 +REMARK 500 GEOMETRY AND STEREOCHEMISTRY +REMARK 500 SUBTOPIC: CHIRAL CENTERS +REMARK 500 +REMARK 500 UNEXPECTED CONFIGURATION OF THE FOLLOWING CHIRAL +REMARK 500 CENTER(S) USING IMPROPER CA--C--CB--N CHIRALITY +REMARK 500 M=MODEL NUMBER; RES=RESIDUE NAME; C=CHAIN +REMARK 500 IDENTIFIER; SSEQ=SEQUENCE NUMBER; I=INSERTION CODE +REMARK 500 +REMARK 500 STANDARD TABLE: +REMARK 500 FORMAT: (11X,I3,1X,A3,1X,A1,I4,A1,6X,F5.1,6X,A1,10X,A1,3X,A16) +REMARK 500 +REMARK 500 M RES CSSEQI IMPROPER EXPECTED FOUND DETAILS +REMARK 500 PRO A 1 144.2 ALPHA-CARBON +REMARK 500 PRO B 1 137.7 ALPHA-CARBON +REMARK 500 PHE B 99 141.9 ALPHA-CARBON +REMARK 500 +REMARK 500 REMARK: NULL +REMARK 800 +REMARK 800 SITE +REMARK 800 SITE_IDENTIFIER: AC1 +REMARK 800 EVIDENCE_CODE: SOFTWARE +REMARK 800 SITE_DESCRIPTION: BINDING SITE FOR RESIDUE ARQ A 401 +DBREF 3AID A 1 99 UNP P03369 POL_HV1A2 57 155 +DBREF 3AID B 1 99 UNP P03369 POL_HV1A2 57 155 +SEQADV 3AID LYS A 7 UNP P03369 GLN 63 ENGINEERED +SEQADV 3AID LYS B 7 UNP P03369 GLN 63 ENGINEERED +SEQRES 1 A 99 PRO GLN ILE THR LEU TRP LYS ARG PRO LEU VAL THR ILE +SEQRES 2 A 99 ARG ILE GLY GLY GLN LEU LYS GLU ALA LEU LEU ASP THR +SEQRES 3 A 99 GLY ALA ASP ASP THR VAL LEU GLU GLU MET ASN LEU PRO +SEQRES 4 A 99 GLY LYS TRP LYS PRO LYS MET ILE GLY GLY ILE GLY GLY +SEQRES 5 A 99 PHE ILE LYS VAL ARG GLN TYR ASP GLN ILE PRO VAL GLU +SEQRES 6 A 99 ILE CYS GLY HIS LYS ALA ILE GLY THR VAL LEU VAL GLY +SEQRES 7 A 99 PRO THR PRO VAL ASN ILE ILE GLY ARG ASN LEU LEU THR +SEQRES 8 A 99 GLN ILE GLY CYS THR LEU ASN PHE +SEQRES 1 B 99 PRO GLN ILE THR LEU TRP LYS ARG PRO LEU VAL THR ILE +SEQRES 2 B 99 ARG ILE GLY GLY GLN LEU LYS GLU ALA LEU LEU ASP THR +SEQRES 3 B 99 GLY ALA ASP ASP THR VAL LEU GLU GLU MET ASN LEU PRO +SEQRES 4 B 99 GLY LYS TRP LYS PRO LYS MET ILE GLY GLY ILE GLY GLY +SEQRES 5 B 99 PHE ILE LYS VAL ARG GLN TYR ASP GLN ILE PRO VAL GLU +SEQRES 6 B 99 ILE CYS GLY HIS LYS ALA ILE GLY THR VAL LEU VAL GLY +SEQRES 7 B 99 PRO THR PRO VAL ASN ILE ILE GLY ARG ASN LEU LEU THR +SEQRES 8 B 99 GLN ILE GLY CYS THR LEU ASN PHE +HET ARQ A 401 42 +HETNAM ARQ BENZOYLAMINO-BENZYL-METHYL-[2-HYDROXY-3-[1-METHYL- +HETNAM 2 ARQ ETHYL-OXY-N-FORMAMIDYL]-4-PHENYL-BUTYL]-AMMONIUM +FORMUL 3 ARQ C30 H38 N3 O4 1+ +FORMUL 4 HOH *8(H2 O) +HELIX 1 1 ARG A 87 LEU A 90 1 4 +HELIX 2 2 ARG B 87 LEU B 90 1 4 +SHEET 1 A 4 GLN A 18 LEU A 23 0 +SHEET 2 A 4 LEU A 10 ILE A 15 -1 N ILE A 15 O GLN A 18 +SHEET 3 A 4 ILE A 62 ILE A 66 -1 N GLU A 65 O ARG A 14 +SHEET 4 A 4 HIS A 69 GLY A 73 -1 N GLY A 73 O ILE A 62 +SHEET 1 B 3 LYS A 43 GLY A 49 0 +SHEET 2 B 3 GLY A 52 TYR A 59 -1 N GLN A 58 O LYS A 43 +SHEET 3 B 3 VAL A 75 GLY A 78 -1 N VAL A 77 O ARG A 57 +SHEET 1 C 2 THR A 96 ASN A 98 0 +SHEET 2 C 2 THR B 96 ASN B 98 -1 N ASN B 98 O THR A 96 +SHEET 1 D 2 LEU B 10 ILE B 15 0 +SHEET 2 D 2 GLN B 18 LEU B 23 -1 N ALA B 22 O VAL B 11 +SHEET 1 E 3 TRP B 42 GLY B 49 0 +SHEET 2 E 3 GLY B 52 TYR B 59 -1 N GLN B 58 O LYS B 43 +SHEET 3 E 3 VAL B 75 GLY B 78 -1 N VAL B 77 O ARG B 57 +SHEET 1 F 2 ILE B 62 ILE B 66 0 +SHEET 2 F 2 HIS B 69 GLY B 73 -1 N GLY B 73 O ILE B 62 +SITE 1 AC1 10 ASP A 25 GLY A 27 ALA A 28 ILE A 50 +SITE 2 AC1 10 HOH A 402 LEU B 23 ASP B 25 GLY B 27 +SITE 3 AC1 10 GLY B 49 ILE B 50 +CRYST1 53.100 61.000 63.200 90.00 90.00 90.00 P 21 21 21 8 +ORIGX1 1.000000 0.000000 0.000000 0.00000 +ORIGX2 0.000000 1.000000 0.000000 0.00000 +ORIGX3 0.000000 0.000000 1.000000 0.00000 +SCALE1 0.018832 0.000000 0.000000 0.00000 +SCALE2 0.000000 0.016393 0.000000 0.00000 +SCALE3 0.000000 0.000000 0.015823 0.00000 +ATOM 1 N PRO A 1 -2.555 9.253 34.411 1.00 30.60 N +ATOM 2 CA PRO A 1 -1.620 8.250 33.848 1.00 28.31 C +ATOM 3 C PRO A 1 -0.108 8.328 33.944 1.00 23.58 C +ATOM 4 O PRO A 1 0.501 8.910 33.067 1.00 29.57 O +ATOM 5 CB PRO A 1 -2.238 6.879 33.989 1.00 28.94 C +ATOM 6 CG PRO A 1 -3.624 7.314 33.540 1.00 32.55 C +ATOM 7 CD PRO A 1 -3.859 8.575 34.395 1.00 34.64 C +ATOM 8 H2 PRO A 1 -2.308 9.752 35.280 0.00 0.00 H +ATOM 9 H3 PRO A 1 -2.623 10.035 33.697 0.00 0.00 H +ATOM 10 N GLN A 2 0.519 7.674 34.926 1.00 20.68 N +ATOM 11 CA GLN A 2 1.942 7.366 34.601 1.00 22.20 C +ATOM 12 C GLN A 2 2.286 5.899 34.319 1.00 22.20 C +ATOM 13 O GLN A 2 2.239 5.053 35.212 1.00 24.91 O +ATOM 14 CB GLN A 2 3.002 7.941 35.586 1.00 22.73 C +ATOM 15 CG GLN A 2 4.462 7.592 35.145 1.00 23.29 C +ATOM 16 CD GLN A 2 5.541 8.058 36.132 1.00 23.86 C +ATOM 17 OE1 GLN A 2 6.166 9.080 35.963 1.00 21.61 O +ATOM 18 NE2 GLN A 2 5.815 7.280 37.164 1.00 21.66 N +ATOM 19 H GLN A 2 0.038 7.260 35.695 1.00 15.00 H +ATOM 20 HE21 GLN A 2 6.517 7.687 37.741 1.00 15.00 H +ATOM 21 HE22 GLN A 2 5.386 6.401 37.335 1.00 15.00 H +ATOM 22 N ILE A 3 2.606 5.658 33.030 1.00 18.27 N +ATOM 23 CA ILE A 3 2.930 4.304 32.526 1.00 14.22 C +ATOM 24 C ILE A 3 4.436 4.069 32.273 1.00 15.16 C +ATOM 25 O ILE A 3 5.020 4.591 31.332 1.00 20.12 O +ATOM 26 CB ILE A 3 2.076 3.977 31.276 1.00 8.81 C +ATOM 27 CG1 ILE A 3 0.614 4.286 31.565 1.00 6.38 C +ATOM 28 CG2 ILE A 3 2.170 2.509 30.873 1.00 3.08 C +ATOM 29 CD1 ILE A 3 -0.351 3.719 30.518 1.00 10.97 C +ATOM 30 H ILE A 3 2.634 6.454 32.436 1.00 15.00 H +ATOM 31 N THR A 4 5.050 3.270 33.166 1.00 10.39 N +ATOM 32 CA THR A 4 6.416 2.743 32.935 1.00 10.00 C +ATOM 33 C THR A 4 6.599 1.452 32.068 1.00 11.66 C +ATOM 34 O THR A 4 5.793 0.527 32.112 1.00 15.69 O +ATOM 35 CB THR A 4 7.056 2.437 34.248 1.00 4.39 C +ATOM 36 OG1 THR A 4 6.473 1.231 34.804 1.00 5.25 O +ATOM 37 CG2 THR A 4 6.920 3.635 35.165 1.00 2.00 C +ATOM 38 H THR A 4 4.492 2.965 33.935 1.00 15.00 H +ATOM 39 HG1 THR A 4 5.929 0.815 34.136 1.00 15.00 H +ATOM 40 N LEU A 5 7.715 1.398 31.321 1.00 8.84 N +ATOM 41 CA LEU A 5 7.870 0.420 30.235 1.00 7.65 C +ATOM 42 C LEU A 5 8.606 -0.903 30.466 1.00 8.47 C +ATOM 43 O LEU A 5 9.134 -1.511 29.545 1.00 9.06 O +ATOM 44 CB LEU A 5 8.534 1.094 29.034 1.00 6.66 C +ATOM 45 CG LEU A 5 7.818 2.230 28.311 1.00 9.11 C +ATOM 46 CD1 LEU A 5 6.305 2.030 28.315 1.00 10.52 C +ATOM 47 CD2 LEU A 5 8.236 3.611 28.775 1.00 10.50 C +ATOM 48 H LEU A 5 8.405 2.109 31.468 1.00 15.00 H +ATOM 49 N TRP A 6 8.646 -1.381 31.725 1.00 13.00 N +ATOM 50 CA TRP A 6 9.213 -2.750 31.877 1.00 14.24 C +ATOM 51 C TRP A 6 8.280 -3.867 31.412 1.00 14.81 C +ATOM 52 O TRP A 6 8.651 -5.001 31.168 1.00 16.96 O +ATOM 53 CB TRP A 6 9.687 -3.124 33.289 1.00 14.28 C +ATOM 54 CG TRP A 6 10.074 -1.910 34.088 1.00 20.68 C +ATOM 55 CD1 TRP A 6 9.182 -1.145 34.863 1.00 27.93 C +ATOM 56 CD2 TRP A 6 11.333 -1.208 34.201 1.00 21.72 C +ATOM 57 NE1 TRP A 6 9.777 -0.041 35.406 1.00 26.52 N +ATOM 58 CE2 TRP A 6 11.101 -0.027 35.017 1.00 22.61 C +ATOM 59 CE3 TRP A 6 12.617 -1.473 33.714 1.00 16.16 C +ATOM 60 CZ2 TRP A 6 12.128 0.887 35.290 1.00 20.31 C +ATOM 61 CZ3 TRP A 6 13.644 -0.553 34.018 1.00 17.45 C +ATOM 62 CH2 TRP A 6 13.406 0.616 34.778 1.00 18.71 C +ATOM 63 H TRP A 6 8.228 -0.834 32.447 1.00 15.00 H +ATOM 64 HE1 TRP A 6 9.317 0.632 35.960 1.00 15.00 H +ATOM 65 N LYS A 7 7.017 -3.454 31.284 1.00 12.93 N +ATOM 66 CA LYS A 7 5.990 -4.250 30.643 1.00 9.56 C +ATOM 67 C LYS A 7 5.420 -3.525 29.460 1.00 11.55 C +ATOM 68 O LYS A 7 5.478 -2.299 29.399 1.00 12.41 O +ATOM 69 CB LYS A 7 4.841 -4.432 31.607 1.00 18.71 C +ATOM 70 CG LYS A 7 5.137 -5.278 32.839 1.00 28.83 C +ATOM 71 CD LYS A 7 3.948 -5.219 33.795 1.00 36.81 C +ATOM 72 CE LYS A 7 4.209 -5.975 35.117 1.00 43.42 C +ATOM 73 NZ LYS A 7 3.160 -5.652 36.107 1.00 42.34 N +ATOM 74 H LYS A 7 6.799 -2.518 31.545 1.00 15.00 H +ATOM 75 HZ1 LYS A 7 2.887 -4.655 35.991 1.00 15.00 H +ATOM 76 HZ2 LYS A 7 2.331 -6.260 35.944 1.00 15.00 H +ATOM 77 HZ3 LYS A 7 3.527 -5.810 37.067 1.00 15.00 H +ATOM 78 N ARG A 8 4.801 -4.305 28.535 1.00 12.42 N +ATOM 79 CA ARG A 8 4.091 -3.587 27.449 1.00 10.97 C +ATOM 80 C ARG A 8 3.003 -2.612 27.887 1.00 11.55 C +ATOM 81 O ARG A 8 2.184 -2.938 28.746 1.00 13.27 O +ATOM 82 CB ARG A 8 3.384 -4.517 26.488 1.00 9.39 C +ATOM 83 CG ARG A 8 4.144 -5.748 26.107 1.00 6.80 C +ATOM 84 CD ARG A 8 3.297 -6.581 25.184 1.00 12.73 C +ATOM 85 NE ARG A 8 4.151 -7.669 24.790 1.00 28.15 N +ATOM 86 CZ ARG A 8 4.343 -8.083 23.521 1.00 36.60 C +ATOM 87 NH1 ARG A 8 3.598 -7.690 22.490 1.00 33.53 N +ATOM 88 NH2 ARG A 8 5.334 -8.947 23.322 1.00 45.16 N +ATOM 89 H ARG A 8 4.761 -5.287 28.694 1.00 15.00 H +ATOM 90 HE ARG A 8 4.684 -8.129 25.500 1.00 15.00 H +ATOM 91 HH11 ARG A 8 2.832 -7.063 22.626 1.00 15.00 H +ATOM 92 HH12 ARG A 8 3.812 -8.029 21.574 1.00 15.00 H +ATOM 93 HH21 ARG A 8 5.883 -9.253 24.101 1.00 15.00 H +ATOM 94 HH22 ARG A 8 5.536 -9.289 22.407 1.00 15.00 H +ATOM 95 N PRO A 9 2.957 -1.418 27.265 1.00 10.22 N +ATOM 96 CA PRO A 9 1.838 -0.522 27.644 1.00 9.31 C +ATOM 97 C PRO A 9 0.443 -0.973 27.113 1.00 9.47 C +ATOM 98 O PRO A 9 -0.016 -0.531 26.071 1.00 12.70 O +ATOM 99 CB PRO A 9 2.350 0.830 27.118 1.00 7.49 C +ATOM 100 CG PRO A 9 3.309 0.489 25.949 1.00 10.39 C +ATOM 101 CD PRO A 9 3.886 -0.881 26.272 1.00 7.83 C +ATOM 102 N LEU A 10 -0.222 -1.893 27.855 1.00 10.28 N +ATOM 103 CA LEU A 10 -1.555 -2.420 27.472 1.00 5.59 C +ATOM 104 C LEU A 10 -2.725 -1.865 28.254 1.00 6.30 C +ATOM 105 O LEU A 10 -2.737 -1.938 29.472 1.00 9.79 O +ATOM 106 CB LEU A 10 -1.653 -3.892 27.745 1.00 2.00 C +ATOM 107 CG LEU A 10 -1.056 -4.838 26.734 1.00 2.00 C +ATOM 108 CD1 LEU A 10 -1.127 -6.225 27.327 1.00 2.00 C +ATOM 109 CD2 LEU A 10 -1.725 -4.792 25.361 1.00 2.00 C +ATOM 110 H LEU A 10 0.241 -2.213 28.683 1.00 15.00 H +ATOM 111 N VAL A 11 -3.701 -1.304 27.534 1.00 8.40 N +ATOM 112 CA VAL A 11 -4.916 -0.688 28.141 1.00 13.91 C +ATOM 113 C VAL A 11 -6.236 -1.349 27.788 1.00 13.86 C +ATOM 114 O VAL A 11 -6.351 -2.140 26.860 1.00 17.89 O +ATOM 115 CB VAL A 11 -5.114 0.850 27.856 1.00 12.10 C +ATOM 116 CG1 VAL A 11 -4.279 1.777 28.747 1.00 7.44 C +ATOM 117 CG2 VAL A 11 -5.022 1.221 26.378 1.00 11.10 C +ATOM 118 H VAL A 11 -3.481 -1.176 26.579 1.00 15.00 H +ATOM 119 N THR A 12 -7.266 -0.967 28.535 1.00 10.31 N +ATOM 120 CA THR A 12 -8.564 -1.409 28.023 1.00 10.43 C +ATOM 121 C THR A 12 -9.308 -0.344 27.224 1.00 11.24 C +ATOM 122 O THR A 12 -9.366 0.823 27.604 1.00 10.44 O +ATOM 123 CB THR A 12 -9.457 -1.922 29.145 1.00 12.18 C +ATOM 124 OG1 THR A 12 -8.702 -2.710 30.069 1.00 17.40 O +ATOM 125 CG2 THR A 12 -10.631 -2.754 28.609 1.00 17.57 C +ATOM 126 H THR A 12 -7.147 -0.445 29.378 1.00 15.00 H +ATOM 127 HG1 THR A 12 -8.439 -3.503 29.623 1.00 15.00 H +ATOM 128 N ILE A 13 -9.871 -0.754 26.084 1.00 9.17 N +ATOM 129 CA ILE A 13 -10.756 0.212 25.415 1.00 12.06 C +ATOM 130 C ILE A 13 -12.234 -0.216 25.366 1.00 10.83 C +ATOM 131 O ILE A 13 -12.538 -1.399 25.368 1.00 9.79 O +ATOM 132 CB ILE A 13 -10.210 0.567 24.013 1.00 12.82 C +ATOM 133 CG1 ILE A 13 -10.268 -0.673 23.102 1.00 13.26 C +ATOM 134 CG2 ILE A 13 -8.775 1.089 24.152 1.00 10.61 C +ATOM 135 CD1 ILE A 13 -9.741 -0.448 21.680 1.00 8.04 C +ATOM 136 H ILE A 13 -9.726 -1.672 25.742 1.00 15.00 H +ATOM 137 N ARG A 14 -13.131 0.779 25.310 1.00 11.30 N +ATOM 138 CA ARG A 14 -14.522 0.471 24.896 1.00 12.92 C +ATOM 139 C ARG A 14 -15.041 1.080 23.583 1.00 10.44 C +ATOM 140 O ARG A 14 -15.093 2.293 23.409 1.00 7.41 O +ATOM 141 CB ARG A 14 -15.504 0.807 26.012 1.00 14.22 C +ATOM 142 CG ARG A 14 -16.864 0.177 25.793 1.00 17.00 C +ATOM 143 CD ARG A 14 -17.694 0.101 27.077 1.00 26.96 C +ATOM 144 NE ARG A 14 -18.008 1.437 27.592 1.00 36.17 N +ATOM 145 CZ ARG A 14 -19.298 1.876 27.717 1.00 37.70 C +ATOM 146 NH1 ARG A 14 -20.333 1.094 27.387 1.00 32.95 N +ATOM 147 NH2 ARG A 14 -19.525 3.107 28.183 1.00 36.64 N +ATOM 148 H ARG A 14 -12.790 1.708 25.451 1.00 15.00 H +ATOM 149 HE ARG A 14 -17.264 2.048 27.861 1.00 15.00 H +ATOM 150 HH11 ARG A 14 -20.172 0.168 27.046 1.00 15.00 H +ATOM 151 HH12 ARG A 14 -21.270 1.431 27.484 1.00 15.00 H +ATOM 152 HH21 ARG A 14 -18.757 3.696 28.432 1.00 15.00 H +ATOM 153 HH22 ARG A 14 -20.463 3.436 28.281 1.00 15.00 H +ATOM 154 N ILE A 15 -15.430 0.176 22.675 1.00 12.87 N +ATOM 155 CA ILE A 15 -15.898 0.493 21.290 1.00 15.53 C +ATOM 156 C ILE A 15 -17.205 -0.298 20.877 1.00 18.97 C +ATOM 157 O ILE A 15 -17.352 -1.513 21.048 1.00 18.58 O +ATOM 158 CB ILE A 15 -14.683 0.289 20.287 1.00 11.75 C +ATOM 159 CG1 ILE A 15 -14.865 0.767 18.845 1.00 16.54 C +ATOM 160 CG2 ILE A 15 -14.203 -1.165 20.176 1.00 8.01 C +ATOM 161 CD1 ILE A 15 -13.597 0.580 17.968 1.00 8.82 C +ATOM 162 H ILE A 15 -15.304 -0.768 22.981 1.00 15.00 H +ATOM 163 N GLY A 16 -18.222 0.426 20.372 1.00 17.76 N +ATOM 164 CA GLY A 16 -19.516 -0.259 20.088 1.00 19.38 C +ATOM 165 C GLY A 16 -20.301 -1.000 21.233 1.00 24.46 C +ATOM 166 O GLY A 16 -20.991 -1.996 21.018 1.00 24.31 O +ATOM 167 H GLY A 16 -18.033 1.383 20.158 1.00 15.00 H +ATOM 168 N GLY A 17 -20.087 -0.491 22.484 1.00 24.55 N +ATOM 169 CA GLY A 17 -20.430 -1.299 23.661 1.00 24.34 C +ATOM 170 C GLY A 17 -19.445 -2.433 24.070 1.00 27.45 C +ATOM 171 O GLY A 17 -19.508 -2.983 25.156 1.00 29.91 O +ATOM 172 H GLY A 17 -19.559 0.351 22.553 1.00 15.00 H +ATOM 173 N GLN A 18 -18.495 -2.765 23.170 1.00 26.11 N +ATOM 174 CA GLN A 18 -17.478 -3.803 23.456 1.00 20.99 C +ATOM 175 C GLN A 18 -16.203 -3.371 24.218 1.00 15.25 C +ATOM 176 O GLN A 18 -15.635 -2.312 23.997 1.00 11.39 O +ATOM 177 CB GLN A 18 -17.005 -4.489 22.166 1.00 23.80 C +ATOM 178 CG GLN A 18 -18.029 -4.623 21.041 1.00 32.40 C +ATOM 179 CD GLN A 18 -19.152 -5.530 21.478 1.00 38.02 C +ATOM 180 OE1 GLN A 18 -18.938 -6.689 21.796 1.00 37.03 O +ATOM 181 NE2 GLN A 18 -20.364 -4.962 21.485 1.00 39.34 N +ATOM 182 H GLN A 18 -18.474 -2.254 22.318 1.00 15.00 H +ATOM 183 HE21 GLN A 18 -21.093 -5.567 21.790 1.00 15.00 H +ATOM 184 HE22 GLN A 18 -20.563 -4.026 21.197 1.00 15.00 H +ATOM 185 N LEU A 19 -15.782 -4.293 25.086 1.00 11.19 N +ATOM 186 CA LEU A 19 -14.556 -4.231 25.893 1.00 13.09 C +ATOM 187 C LEU A 19 -13.336 -5.013 25.346 1.00 15.36 C +ATOM 188 O LEU A 19 -13.250 -6.240 25.418 1.00 17.95 O +ATOM 189 CB LEU A 19 -14.906 -4.687 27.338 1.00 11.59 C +ATOM 190 CG LEU A 19 -14.624 -3.661 28.457 1.00 12.93 C +ATOM 191 CD1 LEU A 19 -14.946 -2.235 28.030 1.00 11.72 C +ATOM 192 CD2 LEU A 19 -15.342 -3.985 29.758 1.00 11.09 C +ATOM 193 H LEU A 19 -16.371 -5.096 25.148 1.00 15.00 H +ATOM 194 N LYS A 20 -12.370 -4.247 24.790 1.00 14.09 N +ATOM 195 CA LYS A 20 -11.142 -4.882 24.258 1.00 14.64 C +ATOM 196 C LYS A 20 -9.802 -4.451 24.908 1.00 14.53 C +ATOM 197 O LYS A 20 -9.642 -3.401 25.505 1.00 12.98 O +ATOM 198 CB LYS A 20 -11.043 -4.676 22.726 1.00 17.47 C +ATOM 199 CG LYS A 20 -12.017 -5.389 21.788 1.00 19.14 C +ATOM 200 CD LYS A 20 -11.772 -5.048 20.311 1.00 24.53 C +ATOM 201 CE LYS A 20 -11.560 -6.280 19.383 1.00 29.82 C +ATOM 202 NZ LYS A 20 -11.034 -5.893 18.044 1.00 29.67 N +ATOM 203 H LYS A 20 -12.518 -3.255 24.813 1.00 15.00 H +ATOM 204 HZ1 LYS A 20 -11.563 -5.071 17.687 1.00 15.00 H +ATOM 205 HZ2 LYS A 20 -10.029 -5.641 18.136 1.00 15.00 H +ATOM 206 HZ3 LYS A 20 -11.132 -6.685 17.378 1.00 15.00 H +ATOM 207 N GLU A 21 -8.793 -5.297 24.735 1.00 17.16 N +ATOM 208 CA GLU A 21 -7.435 -4.835 25.101 1.00 19.20 C +ATOM 209 C GLU A 21 -6.558 -4.227 23.984 1.00 16.65 C +ATOM 210 O GLU A 21 -6.418 -4.773 22.892 1.00 14.72 O +ATOM 211 CB GLU A 21 -6.673 -5.991 25.757 1.00 27.98 C +ATOM 212 CG GLU A 21 -5.828 -5.575 26.971 1.00 36.72 C +ATOM 213 CD GLU A 21 -6.619 -5.622 28.289 1.00 40.40 C +ATOM 214 OE1 GLU A 21 -7.802 -5.261 28.334 1.00 40.04 O +ATOM 215 OE2 GLU A 21 -6.026 -6.027 29.287 1.00 43.31 O +ATOM 216 H GLU A 21 -8.967 -6.156 24.259 1.00 15.00 H +ATOM 217 N ALA A 22 -5.972 -3.066 24.276 1.00 14.75 N +ATOM 218 CA ALA A 22 -5.100 -2.434 23.260 1.00 11.83 C +ATOM 219 C ALA A 22 -3.705 -1.932 23.759 1.00 9.55 C +ATOM 220 O ALA A 22 -3.453 -1.775 24.948 1.00 7.28 O +ATOM 221 CB ALA A 22 -5.865 -1.280 22.617 1.00 11.78 C +ATOM 222 H ALA A 22 -6.107 -2.677 25.179 1.00 15.00 H +ATOM 223 N LEU A 23 -2.787 -1.711 22.805 1.00 5.96 N +ATOM 224 CA LEU A 23 -1.397 -1.289 23.114 1.00 4.12 C +ATOM 225 C LEU A 23 -1.118 0.146 22.698 1.00 2.00 C +ATOM 226 O LEU A 23 -1.441 0.552 21.586 1.00 2.00 O +ATOM 227 CB LEU A 23 -0.438 -2.253 22.366 1.00 4.90 C +ATOM 228 CG LEU A 23 1.083 -2.186 22.476 1.00 2.00 C +ATOM 229 CD1 LEU A 23 1.571 -2.706 23.809 1.00 7.34 C +ATOM 230 CD2 LEU A 23 1.744 -3.023 21.405 1.00 3.18 C +ATOM 231 H LEU A 23 -3.068 -1.872 21.862 1.00 15.00 H +ATOM 232 N LEU A 24 -0.537 0.896 23.624 1.00 2.00 N +ATOM 233 CA LEU A 24 -0.196 2.267 23.300 1.00 2.00 C +ATOM 234 C LEU A 24 1.124 2.367 22.612 1.00 3.88 C +ATOM 235 O LEU A 24 2.176 2.052 23.152 1.00 6.52 O +ATOM 236 CB LEU A 24 -0.090 3.152 24.536 1.00 9.50 C +ATOM 237 CG LEU A 24 -1.255 3.055 25.535 1.00 15.22 C +ATOM 238 CD1 LEU A 24 -0.973 3.913 26.770 1.00 12.11 C +ATOM 239 CD2 LEU A 24 -2.622 3.353 24.899 1.00 12.26 C +ATOM 240 H LEU A 24 -0.281 0.454 24.486 1.00 15.00 H +ATOM 241 N ASP A 25 1.038 2.790 21.357 1.00 7.69 N +ATOM 242 CA ASP A 25 2.150 2.485 20.441 1.00 7.59 C +ATOM 243 C ASP A 25 2.638 3.731 19.715 1.00 7.44 C +ATOM 244 O ASP A 25 2.305 3.987 18.574 1.00 8.42 O +ATOM 245 CB ASP A 25 1.693 1.332 19.491 1.00 10.29 C +ATOM 246 CG ASP A 25 2.634 0.934 18.354 1.00 14.25 C +ATOM 247 OD1 ASP A 25 3.520 1.687 17.966 1.00 15.67 O +ATOM 248 OD2 ASP A 25 2.465 -0.161 17.838 1.00 16.99 O +ATOM 249 H ASP A 25 0.142 3.095 21.017 1.00 15.00 H +ATOM 250 N THR A 26 3.487 4.495 20.404 1.00 5.41 N +ATOM 251 CA THR A 26 3.974 5.754 19.819 1.00 2.13 C +ATOM 252 C THR A 26 4.681 5.739 18.455 1.00 2.64 C +ATOM 253 O THR A 26 4.739 6.713 17.725 1.00 4.71 O +ATOM 254 CB THR A 26 4.908 6.402 20.819 1.00 3.16 C +ATOM 255 OG1 THR A 26 6.075 5.582 21.010 1.00 10.74 O +ATOM 256 CG2 THR A 26 4.172 6.524 22.144 1.00 6.50 C +ATOM 257 H THR A 26 3.761 4.193 21.320 1.00 15.00 H +ATOM 258 HG1 THR A 26 6.833 6.097 20.712 1.00 15.00 H +ATOM 259 N GLY A 27 5.240 4.582 18.101 1.00 3.99 N +ATOM 260 CA GLY A 27 5.764 4.489 16.717 1.00 5.22 C +ATOM 261 C GLY A 27 4.807 4.080 15.556 1.00 4.61 C +ATOM 262 O GLY A 27 5.169 3.927 14.399 1.00 3.35 O +ATOM 263 H GLY A 27 5.207 3.817 18.736 1.00 15.00 H +ATOM 264 N ALA A 28 3.519 3.982 15.911 1.00 6.91 N +ATOM 265 CA ALA A 28 2.455 3.921 14.904 1.00 3.02 C +ATOM 266 C ALA A 28 1.731 5.256 14.687 1.00 3.42 C +ATOM 267 O ALA A 28 1.156 5.870 15.572 1.00 3.02 O +ATOM 268 CB ALA A 28 1.433 2.831 15.275 1.00 2.00 C +ATOM 269 H ALA A 28 3.297 4.070 16.878 1.00 15.00 H +ATOM 270 N ASP A 29 1.735 5.695 13.417 1.00 3.92 N +ATOM 271 CA ASP A 29 0.961 6.906 13.082 1.00 6.42 C +ATOM 272 C ASP A 29 -0.564 6.870 13.321 1.00 6.90 C +ATOM 273 O ASP A 29 -1.237 7.831 13.680 1.00 7.18 O +ATOM 274 CB ASP A 29 1.214 7.334 11.621 1.00 10.78 C +ATOM 275 CG ASP A 29 2.652 7.723 11.241 1.00 16.60 C +ATOM 276 OD1 ASP A 29 3.473 8.024 12.119 1.00 16.61 O +ATOM 277 OD2 ASP A 29 2.937 7.729 10.035 1.00 19.82 O +ATOM 278 H ASP A 29 2.329 5.189 12.788 1.00 15.00 H +ATOM 279 N ASP A 30 -1.060 5.654 13.068 1.00 10.14 N +ATOM 280 CA ASP A 30 -2.488 5.277 13.093 1.00 9.04 C +ATOM 281 C ASP A 30 -2.819 4.094 14.037 1.00 10.66 C +ATOM 282 O ASP A 30 -1.961 3.353 14.529 1.00 10.32 O +ATOM 283 CB ASP A 30 -3.013 4.874 11.694 1.00 8.49 C +ATOM 284 CG ASP A 30 -2.604 5.771 10.511 1.00 12.48 C +ATOM 285 OD1 ASP A 30 -2.969 6.951 10.471 1.00 13.46 O +ATOM 286 OD2 ASP A 30 -1.929 5.277 9.606 1.00 14.26 O +ATOM 287 H ASP A 30 -0.378 4.955 12.866 1.00 15.00 H +ATOM 288 N THR A 31 -4.147 3.987 14.228 1.00 10.75 N +ATOM 289 CA THR A 31 -4.846 3.005 15.081 1.00 8.58 C +ATOM 290 C THR A 31 -5.458 1.897 14.250 1.00 14.08 C +ATOM 291 O THR A 31 -6.255 2.173 13.366 1.00 17.64 O +ATOM 292 CB THR A 31 -5.964 3.748 15.851 1.00 8.52 C +ATOM 293 OG1 THR A 31 -5.386 4.814 16.619 1.00 5.59 O +ATOM 294 CG2 THR A 31 -6.900 2.920 16.750 1.00 5.14 C +ATOM 295 H THR A 31 -4.696 4.667 13.750 1.00 15.00 H +ATOM 296 HG1 THR A 31 -5.542 5.620 16.140 1.00 15.00 H +ATOM 297 N VAL A 32 -5.041 0.651 14.549 1.00 14.57 N +ATOM 298 CA VAL A 32 -5.394 -0.599 13.818 1.00 11.51 C +ATOM 299 C VAL A 32 -5.834 -1.722 14.783 1.00 12.42 C +ATOM 300 O VAL A 32 -5.219 -2.060 15.809 1.00 9.55 O +ATOM 301 CB VAL A 32 -4.226 -1.172 12.961 1.00 11.77 C +ATOM 302 CG1 VAL A 32 -4.659 -2.391 12.146 1.00 7.51 C +ATOM 303 CG2 VAL A 32 -3.615 -0.156 11.996 1.00 9.56 C +ATOM 304 H VAL A 32 -4.480 0.606 15.379 1.00 15.00 H +ATOM 305 N LEU A 33 -6.996 -2.262 14.399 1.00 8.46 N +ATOM 306 CA LEU A 33 -7.736 -3.086 15.361 1.00 6.71 C +ATOM 307 C LEU A 33 -8.115 -4.411 14.697 1.00 5.60 C +ATOM 308 O LEU A 33 -8.200 -4.467 13.472 1.00 5.00 O +ATOM 309 CB LEU A 33 -8.939 -2.216 15.805 1.00 9.14 C +ATOM 310 CG LEU A 33 -9.079 -1.598 17.233 1.00 11.97 C +ATOM 311 CD1 LEU A 33 -7.885 -0.913 17.897 1.00 8.88 C +ATOM 312 CD2 LEU A 33 -10.185 -0.573 17.172 1.00 15.65 C +ATOM 313 H LEU A 33 -7.396 -1.982 13.525 1.00 15.00 H +ATOM 314 N GLU A 34 -8.299 -5.481 15.493 1.00 6.68 N +ATOM 315 CA GLU A 34 -8.591 -6.789 14.850 1.00 10.45 C +ATOM 316 C GLU A 34 -9.937 -6.870 14.168 1.00 11.56 C +ATOM 317 O GLU A 34 -10.780 -6.017 14.371 1.00 13.54 O +ATOM 318 CB GLU A 34 -8.470 -7.969 15.820 1.00 14.09 C +ATOM 319 CG GLU A 34 -7.056 -8.084 16.443 1.00 24.30 C +ATOM 320 CD GLU A 34 -7.025 -8.905 17.749 1.00 33.54 C +ATOM 321 OE1 GLU A 34 -8.068 -9.169 18.379 1.00 35.23 O +ATOM 322 OE2 GLU A 34 -5.919 -9.262 18.145 1.00 34.97 O +ATOM 323 H GLU A 34 -8.257 -5.324 16.478 1.00 15.00 H +ATOM 324 N GLU A 35 -10.144 -7.918 13.360 1.00 15.87 N +ATOM 325 CA GLU A 35 -11.484 -8.118 12.720 1.00 20.76 C +ATOM 326 C GLU A 35 -12.751 -7.880 13.549 1.00 19.68 C +ATOM 327 O GLU A 35 -13.089 -8.704 14.391 1.00 23.35 O +ATOM 328 CB GLU A 35 -11.714 -9.549 12.214 1.00 20.31 C +ATOM 329 CG GLU A 35 -11.549 -9.697 10.718 1.00 30.20 C +ATOM 330 CD GLU A 35 -12.383 -8.701 9.949 1.00 39.71 C +ATOM 331 OE1 GLU A 35 -13.609 -8.709 10.089 1.00 43.68 O +ATOM 332 OE2 GLU A 35 -11.784 -7.927 9.198 1.00 46.22 O +ATOM 333 H GLU A 35 -9.364 -8.507 13.177 1.00 15.00 H +ATOM 334 N MET A 36 -13.447 -6.776 13.230 1.00 13.95 N +ATOM 335 CA MET A 36 -14.799 -6.605 13.769 1.00 10.73 C +ATOM 336 C MET A 36 -15.834 -5.918 12.828 1.00 13.63 C +ATOM 337 O MET A 36 -15.547 -5.316 11.794 1.00 11.97 O +ATOM 338 CB MET A 36 -14.754 -5.925 15.136 1.00 6.21 C +ATOM 339 CG MET A 36 -14.475 -4.427 14.916 1.00 14.27 C +ATOM 340 SD MET A 36 -14.218 -3.469 16.396 1.00 15.34 S +ATOM 341 CE MET A 36 -15.640 -3.903 17.405 1.00 13.96 C +ATOM 342 H MET A 36 -13.002 -6.089 12.656 1.00 15.00 H +ATOM 343 N ASN A 37 -17.086 -6.053 13.291 1.00 11.98 N +ATOM 344 CA ASN A 37 -18.179 -5.371 12.623 1.00 13.42 C +ATOM 345 C ASN A 37 -18.578 -4.047 13.255 1.00 16.43 C +ATOM 346 O ASN A 37 -19.012 -3.954 14.394 1.00 16.51 O +ATOM 347 CB ASN A 37 -19.375 -6.301 12.537 1.00 16.24 C +ATOM 348 CG ASN A 37 -18.994 -7.301 11.471 1.00 23.68 C +ATOM 349 OD1 ASN A 37 -18.624 -6.954 10.357 1.00 32.36 O +ATOM 350 ND2 ASN A 37 -19.029 -8.579 11.848 1.00 18.92 N +ATOM 351 H ASN A 37 -17.210 -6.545 14.147 1.00 15.00 H +ATOM 352 HD21 ASN A 37 -18.634 -9.172 11.152 1.00 15.00 H +ATOM 353 HD22 ASN A 37 -19.424 -8.895 12.704 1.00 15.00 H +ATOM 354 N LEU A 38 -18.379 -3.018 12.440 1.00 16.56 N +ATOM 355 CA LEU A 38 -18.704 -1.681 12.902 1.00 15.78 C +ATOM 356 C LEU A 38 -19.693 -1.009 11.938 1.00 19.85 C +ATOM 357 O LEU A 38 -19.680 -1.251 10.724 1.00 20.78 O +ATOM 358 CB LEU A 38 -17.348 -0.970 13.021 1.00 14.49 C +ATOM 359 CG LEU A 38 -16.858 -0.246 14.307 1.00 8.64 C +ATOM 360 CD1 LEU A 38 -17.074 -0.915 15.666 1.00 5.75 C +ATOM 361 CD2 LEU A 38 -15.366 -0.009 14.154 1.00 5.18 C +ATOM 362 H LEU A 38 -17.966 -3.206 11.549 1.00 15.00 H +ATOM 363 N PRO A 39 -20.594 -0.180 12.534 1.00 22.42 N +ATOM 364 CA PRO A 39 -21.611 0.588 11.771 1.00 26.77 C +ATOM 365 C PRO A 39 -21.130 1.539 10.665 1.00 29.54 C +ATOM 366 O PRO A 39 -20.396 2.503 10.868 1.00 29.99 O +ATOM 367 CB PRO A 39 -22.332 1.421 12.823 1.00 24.85 C +ATOM 368 CG PRO A 39 -22.072 0.681 14.122 1.00 28.76 C +ATOM 369 CD PRO A 39 -20.699 0.052 13.959 1.00 21.86 C +ATOM 370 N GLY A 40 -21.657 1.274 9.478 1.00 28.51 N +ATOM 371 CA GLY A 40 -21.516 2.378 8.526 1.00 28.87 C +ATOM 372 C GLY A 40 -20.618 2.162 7.311 1.00 30.87 C +ATOM 373 O GLY A 40 -20.231 1.070 6.911 1.00 29.78 O +ATOM 374 H GLY A 40 -22.057 0.383 9.286 1.00 15.00 H +ATOM 375 N LYS A 41 -20.343 3.293 6.680 1.00 33.12 N +ATOM 376 CA LYS A 41 -19.625 3.137 5.415 1.00 37.91 C +ATOM 377 C LYS A 41 -18.101 3.232 5.504 1.00 38.30 C +ATOM 378 O LYS A 41 -17.526 4.054 6.207 1.00 42.40 O +ATOM 379 CB LYS A 41 -20.195 4.083 4.341 1.00 41.89 C +ATOM 380 CG LYS A 41 -21.035 3.347 3.297 1.00 42.36 C +ATOM 381 CD LYS A 41 -20.669 3.854 1.902 1.00 48.74 C +ATOM 382 CE LYS A 41 -21.210 3.011 0.734 1.00 51.48 C +ATOM 383 NZ LYS A 41 -20.639 3.508 -0.530 1.00 50.33 N +ATOM 384 H LYS A 41 -20.527 4.159 7.137 1.00 15.00 H +ATOM 385 HZ1 LYS A 41 -20.796 4.534 -0.598 1.00 15.00 H +ATOM 386 HZ2 LYS A 41 -19.617 3.316 -0.550 1.00 15.00 H +ATOM 387 HZ3 LYS A 41 -21.094 3.036 -1.338 1.00 15.00 H +ATOM 388 N TRP A 42 -17.466 2.327 4.774 1.00 34.90 N +ATOM 389 CA TRP A 42 -16.020 2.225 4.935 1.00 30.92 C +ATOM 390 C TRP A 42 -15.259 2.241 3.615 1.00 33.72 C +ATOM 391 O TRP A 42 -15.677 1.739 2.572 1.00 35.04 O +ATOM 392 CB TRP A 42 -15.640 0.985 5.734 1.00 24.59 C +ATOM 393 CG TRP A 42 -16.258 -0.178 5.014 1.00 26.07 C +ATOM 394 CD1 TRP A 42 -17.588 -0.603 5.142 1.00 27.36 C +ATOM 395 CD2 TRP A 42 -15.682 -1.014 3.985 1.00 28.61 C +ATOM 396 NE1 TRP A 42 -17.863 -1.611 4.282 1.00 31.74 N +ATOM 397 CE2 TRP A 42 -16.714 -1.914 3.550 1.00 31.16 C +ATOM 398 CE3 TRP A 42 -14.401 -1.100 3.396 1.00 28.02 C +ATOM 399 CZ2 TRP A 42 -16.443 -2.867 2.537 1.00 24.44 C +ATOM 400 CZ3 TRP A 42 -14.145 -2.056 2.386 1.00 22.00 C +ATOM 401 CH2 TRP A 42 -15.154 -2.938 1.967 1.00 21.98 C +ATOM 402 H TRP A 42 -17.981 1.727 4.167 1.00 15.00 H +ATOM 403 HE1 TRP A 42 -18.729 -2.063 4.206 1.00 15.00 H +ATOM 404 N LYS A 43 -14.085 2.847 3.741 1.00 32.75 N +ATOM 405 CA LYS A 43 -13.177 2.907 2.604 1.00 30.62 C +ATOM 406 C LYS A 43 -12.023 1.867 2.694 1.00 27.14 C +ATOM 407 O LYS A 43 -11.369 1.726 3.716 1.00 22.53 O +ATOM 408 CB LYS A 43 -12.716 4.372 2.591 1.00 33.09 C +ATOM 409 CG LYS A 43 -11.786 4.732 1.446 1.00 41.34 C +ATOM 410 CD LYS A 43 -10.974 5.998 1.713 1.00 49.18 C +ATOM 411 CE LYS A 43 -9.514 5.868 1.216 1.00 54.01 C +ATOM 412 NZ LYS A 43 -8.786 4.797 1.932 1.00 50.64 N +ATOM 413 H LYS A 43 -13.846 3.198 4.649 1.00 15.00 H +ATOM 414 HZ1 LYS A 43 -8.763 5.005 2.951 1.00 15.00 H +ATOM 415 HZ2 LYS A 43 -9.264 3.887 1.778 1.00 15.00 H +ATOM 416 HZ3 LYS A 43 -7.812 4.735 1.574 1.00 15.00 H +ATOM 417 N PRO A 44 -11.769 1.125 1.599 1.00 23.46 N +ATOM 418 CA PRO A 44 -10.508 0.364 1.498 1.00 23.08 C +ATOM 419 C PRO A 44 -9.215 1.173 1.381 1.00 22.15 C +ATOM 420 O PRO A 44 -9.090 2.205 0.739 1.00 18.72 O +ATOM 421 CB PRO A 44 -10.712 -0.506 0.266 1.00 23.78 C +ATOM 422 CG PRO A 44 -11.689 0.298 -0.581 1.00 24.22 C +ATOM 423 CD PRO A 44 -12.609 0.980 0.436 1.00 23.63 C +ATOM 424 N LYS A 45 -8.216 0.598 2.050 1.00 25.28 N +ATOM 425 CA LYS A 45 -6.884 1.223 2.149 1.00 23.40 C +ATOM 426 C LYS A 45 -5.758 0.172 2.280 1.00 20.00 C +ATOM 427 O LYS A 45 -5.897 -0.785 3.026 1.00 20.10 O +ATOM 428 CB LYS A 45 -6.924 2.167 3.363 1.00 21.78 C +ATOM 429 CG LYS A 45 -5.932 3.322 3.377 1.00 24.75 C +ATOM 430 CD LYS A 45 -5.897 3.959 4.769 1.00 35.26 C +ATOM 431 CE LYS A 45 -5.082 5.271 4.942 1.00 38.29 C +ATOM 432 NZ LYS A 45 -5.054 5.680 6.371 1.00 38.89 N +ATOM 433 H LYS A 45 -8.468 -0.179 2.630 1.00 15.00 H +ATOM 434 HZ1 LYS A 45 -4.624 4.919 6.935 1.00 15.00 H +ATOM 435 HZ2 LYS A 45 -4.492 6.549 6.476 1.00 15.00 H +ATOM 436 HZ3 LYS A 45 -6.024 5.850 6.706 1.00 15.00 H +ATOM 437 N MET A 46 -4.644 0.367 1.567 1.00 20.42 N +ATOM 438 CA MET A 46 -3.404 -0.401 1.915 1.00 22.45 C +ATOM 439 C MET A 46 -2.345 0.337 2.775 1.00 22.01 C +ATOM 440 O MET A 46 -1.871 1.427 2.447 1.00 22.84 O +ATOM 441 CB MET A 46 -2.621 -0.857 0.685 1.00 21.43 C +ATOM 442 CG MET A 46 -3.433 -1.507 -0.429 1.00 26.00 C +ATOM 443 SD MET A 46 -3.572 -3.280 -0.248 1.00 33.71 S +ATOM 444 CE MET A 46 -1.806 -3.607 -0.201 1.00 33.67 C +ATOM 445 H MET A 46 -4.635 1.130 0.924 1.00 15.00 H +ATOM 446 N ILE A 47 -1.967 -0.307 3.889 1.00 19.66 N +ATOM 447 CA ILE A 47 -0.898 0.272 4.742 1.00 13.85 C +ATOM 448 C ILE A 47 0.461 -0.453 4.862 1.00 10.43 C +ATOM 449 O ILE A 47 0.579 -1.641 5.090 1.00 13.68 O +ATOM 450 CB ILE A 47 -1.466 0.587 6.123 1.00 13.67 C +ATOM 451 CG1 ILE A 47 -1.712 -0.683 6.942 1.00 10.96 C +ATOM 452 CG2 ILE A 47 -2.734 1.446 5.944 1.00 9.75 C +ATOM 453 CD1 ILE A 47 -1.279 -0.564 8.399 1.00 9.43 C +ATOM 454 H ILE A 47 -2.401 -1.189 4.069 1.00 15.00 H +ATOM 455 N GLY A 48 1.541 0.287 4.685 1.00 12.48 N +ATOM 456 CA GLY A 48 2.810 -0.455 4.774 1.00 10.79 C +ATOM 457 C GLY A 48 3.501 -0.450 6.124 1.00 8.62 C +ATOM 458 O GLY A 48 3.690 0.611 6.685 1.00 10.71 O +ATOM 459 H GLY A 48 1.467 1.275 4.566 1.00 15.00 H +ATOM 460 N GLY A 49 3.872 -1.638 6.630 1.00 9.15 N +ATOM 461 CA GLY A 49 4.667 -1.717 7.878 1.00 8.64 C +ATOM 462 C GLY A 49 6.032 -2.371 7.671 1.00 13.08 C +ATOM 463 O GLY A 49 6.401 -2.675 6.548 1.00 11.27 O +ATOM 464 H GLY A 49 3.656 -2.448 6.091 1.00 15.00 H +ATOM 465 N ILE A 50 6.824 -2.604 8.737 1.00 16.21 N +ATOM 466 CA ILE A 50 8.168 -3.023 8.290 1.00 18.38 C +ATOM 467 C ILE A 50 8.324 -4.364 7.545 1.00 19.29 C +ATOM 468 O ILE A 50 9.159 -4.511 6.670 1.00 21.57 O +ATOM 469 CB ILE A 50 9.340 -2.791 9.305 1.00 19.61 C +ATOM 470 CG1 ILE A 50 9.950 -4.057 9.888 1.00 21.42 C +ATOM 471 CG2 ILE A 50 9.056 -1.788 10.438 1.00 13.44 C +ATOM 472 CD1 ILE A 50 11.321 -3.759 10.485 1.00 27.01 C +ATOM 473 H ILE A 50 6.487 -2.493 9.676 1.00 15.00 H +ATOM 474 N GLY A 51 7.463 -5.341 7.897 1.00 19.71 N +ATOM 475 CA GLY A 51 7.553 -6.613 7.154 1.00 14.98 C +ATOM 476 C GLY A 51 6.710 -6.733 5.871 1.00 14.89 C +ATOM 477 O GLY A 51 6.612 -7.796 5.302 1.00 15.83 O +ATOM 478 H GLY A 51 6.725 -5.156 8.547 1.00 15.00 H +ATOM 479 N GLY A 52 6.075 -5.619 5.421 1.00 18.52 N +ATOM 480 CA GLY A 52 5.285 -5.622 4.169 1.00 13.59 C +ATOM 481 C GLY A 52 3.992 -4.783 4.145 1.00 13.84 C +ATOM 482 O GLY A 52 3.774 -3.944 5.001 1.00 14.07 O +ATOM 483 H GLY A 52 6.253 -4.766 5.912 1.00 15.00 H +ATOM 484 N PHE A 53 3.129 -5.045 3.137 1.00 15.75 N +ATOM 485 CA PHE A 53 1.825 -4.369 2.984 1.00 17.32 C +ATOM 486 C PHE A 53 0.629 -5.087 3.565 1.00 23.07 C +ATOM 487 O PHE A 53 0.349 -6.209 3.169 1.00 29.18 O +ATOM 488 CB PHE A 53 1.380 -4.225 1.535 1.00 15.75 C +ATOM 489 CG PHE A 53 1.930 -2.972 0.914 1.00 17.91 C +ATOM 490 CD1 PHE A 53 1.601 -1.710 1.440 1.00 23.67 C +ATOM 491 CD2 PHE A 53 2.811 -3.091 -0.166 1.00 21.23 C +ATOM 492 CE1 PHE A 53 2.265 -0.559 0.964 1.00 25.07 C +ATOM 493 CE2 PHE A 53 3.469 -1.951 -0.659 1.00 24.15 C +ATOM 494 CZ PHE A 53 3.232 -0.704 -0.047 1.00 26.52 C +ATOM 495 H PHE A 53 3.394 -5.798 2.536 1.00 15.00 H +ATOM 496 N ILE A 54 -0.129 -4.404 4.444 1.00 22.84 N +ATOM 497 CA ILE A 54 -1.485 -4.944 4.682 1.00 19.56 C +ATOM 498 C ILE A 54 -2.705 -4.183 4.103 1.00 20.37 C +ATOM 499 O ILE A 54 -2.698 -3.007 3.755 1.00 21.02 O +ATOM 500 CB ILE A 54 -1.731 -5.333 6.163 1.00 18.04 C +ATOM 501 CG1 ILE A 54 -1.860 -4.152 7.112 1.00 14.47 C +ATOM 502 CG2 ILE A 54 -0.682 -6.319 6.686 1.00 12.60 C +ATOM 503 CD1 ILE A 54 -2.069 -4.596 8.565 1.00 17.81 C +ATOM 504 H ILE A 54 0.185 -3.510 4.767 1.00 15.00 H +ATOM 505 N LYS A 55 -3.800 -4.939 4.016 1.00 19.34 N +ATOM 506 CA LYS A 55 -5.043 -4.305 3.566 1.00 18.48 C +ATOM 507 C LYS A 55 -6.107 -4.126 4.665 1.00 17.27 C +ATOM 508 O LYS A 55 -6.276 -4.956 5.550 1.00 14.14 O +ATOM 509 CB LYS A 55 -5.582 -5.052 2.347 1.00 22.23 C +ATOM 510 CG LYS A 55 -6.899 -4.551 1.755 1.00 33.21 C +ATOM 511 CD LYS A 55 -7.404 -5.499 0.663 1.00 43.72 C +ATOM 512 CE LYS A 55 -8.898 -5.297 0.373 1.00 50.72 C +ATOM 513 NZ LYS A 55 -9.336 -6.204 -0.702 1.00 52.98 N +ATOM 514 H LYS A 55 -3.763 -5.884 4.331 1.00 15.00 H +ATOM 515 HZ1 LYS A 55 -9.059 -7.180 -0.474 1.00 15.00 H +ATOM 516 HZ2 LYS A 55 -10.370 -6.152 -0.805 1.00 15.00 H +ATOM 517 HZ3 LYS A 55 -8.888 -5.919 -1.596 1.00 15.00 H +ATOM 518 N VAL A 56 -6.764 -2.942 4.573 1.00 18.67 N +ATOM 519 CA VAL A 56 -7.550 -2.360 5.673 1.00 12.05 C +ATOM 520 C VAL A 56 -8.917 -1.786 5.308 1.00 8.82 C +ATOM 521 O VAL A 56 -9.168 -1.353 4.196 1.00 11.63 O +ATOM 522 CB VAL A 56 -6.603 -1.392 6.391 1.00 7.83 C +ATOM 523 CG1 VAL A 56 -6.834 0.091 6.224 1.00 2.00 C +ATOM 524 CG2 VAL A 56 -6.395 -1.903 7.799 1.00 6.80 C +ATOM 525 H VAL A 56 -6.551 -2.385 3.770 1.00 15.00 H +ATOM 526 N ARG A 57 -9.815 -1.814 6.286 1.00 10.78 N +ATOM 527 CA ARG A 57 -11.066 -1.048 6.164 1.00 8.48 C +ATOM 528 C ARG A 57 -11.091 0.197 7.039 1.00 8.76 C +ATOM 529 O ARG A 57 -11.111 0.145 8.266 1.00 8.67 O +ATOM 530 CB ARG A 57 -12.279 -1.893 6.531 1.00 7.92 C +ATOM 531 CG ARG A 57 -12.585 -3.018 5.549 1.00 9.23 C +ATOM 532 CD ARG A 57 -13.825 -3.819 5.947 1.00 12.88 C +ATOM 533 NE ARG A 57 -13.522 -4.972 6.797 1.00 19.41 N +ATOM 534 CZ ARG A 57 -14.057 -5.084 8.049 1.00 28.57 C +ATOM 535 NH1 ARG A 57 -14.670 -4.055 8.653 1.00 29.23 N +ATOM 536 NH2 ARG A 57 -14.002 -6.251 8.702 1.00 25.99 N +ATOM 537 H ARG A 57 -9.580 -2.337 7.110 1.00 15.00 H +ATOM 538 HE ARG A 57 -13.012 -5.747 6.424 1.00 15.00 H +ATOM 539 HH11 ARG A 57 -14.734 -3.165 8.198 1.00 15.00 H +ATOM 540 HH12 ARG A 57 -15.067 -4.176 9.562 1.00 15.00 H +ATOM 541 HH21 ARG A 57 -13.559 -7.042 8.279 1.00 15.00 H +ATOM 542 HH22 ARG A 57 -14.403 -6.332 9.613 1.00 15.00 H +ATOM 543 N GLN A 58 -11.083 1.339 6.349 1.00 9.36 N +ATOM 544 CA GLN A 58 -11.207 2.635 7.013 1.00 7.13 C +ATOM 545 C GLN A 58 -12.595 3.074 7.512 1.00 7.78 C +ATOM 546 O GLN A 58 -13.454 3.367 6.691 1.00 9.82 O +ATOM 547 CB GLN A 58 -10.584 3.683 6.087 1.00 9.03 C +ATOM 548 CG GLN A 58 -10.344 5.049 6.766 1.00 15.66 C +ATOM 549 CD GLN A 58 -9.510 5.977 5.891 1.00 16.91 C +ATOM 550 OE1 GLN A 58 -9.023 5.669 4.822 1.00 22.25 O +ATOM 551 NE2 GLN A 58 -9.320 7.175 6.380 1.00 13.90 N +ATOM 552 H GLN A 58 -10.980 1.249 5.365 1.00 15.00 H +ATOM 553 HE21 GLN A 58 -8.751 7.678 5.735 1.00 15.00 H +ATOM 554 HE22 GLN A 58 -9.668 7.526 7.238 1.00 15.00 H +ATOM 555 N TYR A 59 -12.765 3.179 8.860 1.00 4.58 N +ATOM 556 CA TYR A 59 -13.942 3.885 9.422 1.00 5.07 C +ATOM 557 C TYR A 59 -13.682 5.245 10.081 1.00 7.84 C +ATOM 558 O TYR A 59 -12.843 5.379 10.961 1.00 10.41 O +ATOM 559 CB TYR A 59 -14.720 3.072 10.477 1.00 5.28 C +ATOM 560 CG TYR A 59 -15.178 1.717 9.985 1.00 7.61 C +ATOM 561 CD1 TYR A 59 -16.429 1.595 9.367 1.00 7.43 C +ATOM 562 CD2 TYR A 59 -14.333 0.601 10.167 1.00 15.35 C +ATOM 563 CE1 TYR A 59 -16.870 0.332 8.951 1.00 10.12 C +ATOM 564 CE2 TYR A 59 -14.755 -0.666 9.736 1.00 16.82 C +ATOM 565 CZ TYR A 59 -16.046 -0.793 9.181 1.00 16.20 C +ATOM 566 OH TYR A 59 -16.537 -2.052 8.909 1.00 15.62 O +ATOM 567 H TYR A 59 -12.060 2.784 9.452 1.00 15.00 H +ATOM 568 HH TYR A 59 -17.463 -1.979 8.709 1.00 15.00 H +ATOM 569 N ASP A 60 -14.420 6.280 9.634 1.00 8.33 N +ATOM 570 CA ASP A 60 -14.201 7.632 10.191 1.00 8.94 C +ATOM 571 C ASP A 60 -15.146 8.076 11.297 1.00 12.12 C +ATOM 572 O ASP A 60 -16.218 7.526 11.443 1.00 12.98 O +ATOM 573 CB ASP A 60 -14.214 8.715 9.106 1.00 7.49 C +ATOM 574 CG ASP A 60 -13.268 8.367 7.959 1.00 11.05 C +ATOM 575 OD1 ASP A 60 -12.124 7.999 8.231 1.00 19.89 O +ATOM 576 OD2 ASP A 60 -13.668 8.458 6.796 1.00 11.72 O +ATOM 577 H ASP A 60 -15.187 6.059 9.035 1.00 15.00 H +ATOM 578 N GLN A 61 -14.742 9.086 12.089 1.00 13.98 N +ATOM 579 CA GLN A 61 -15.664 9.514 13.179 1.00 16.08 C +ATOM 580 C GLN A 61 -16.363 8.514 14.188 1.00 14.69 C +ATOM 581 O GLN A 61 -17.532 8.604 14.552 1.00 13.55 O +ATOM 582 CB GLN A 61 -16.653 10.548 12.637 1.00 19.49 C +ATOM 583 CG GLN A 61 -16.031 11.796 11.980 1.00 30.71 C +ATOM 584 CD GLN A 61 -15.203 12.627 12.959 1.00 36.70 C +ATOM 585 OE1 GLN A 61 -15.341 12.589 14.170 1.00 40.08 O +ATOM 586 NE2 GLN A 61 -14.260 13.384 12.397 1.00 36.53 N +ATOM 587 H GLN A 61 -13.853 9.505 11.941 1.00 15.00 H +ATOM 588 HE21 GLN A 61 -13.744 13.870 13.098 1.00 15.00 H +ATOM 589 HE22 GLN A 61 -14.115 13.472 11.420 1.00 15.00 H +ATOM 590 N ILE A 62 -15.544 7.560 14.664 1.00 10.58 N +ATOM 591 CA ILE A 62 -15.963 6.587 15.673 1.00 8.91 C +ATOM 592 C ILE A 62 -15.545 6.958 17.114 1.00 12.94 C +ATOM 593 O ILE A 62 -14.431 7.393 17.403 1.00 10.33 O +ATOM 594 CB ILE A 62 -15.376 5.225 15.295 1.00 4.78 C +ATOM 595 CG1 ILE A 62 -15.670 4.782 13.852 1.00 5.50 C +ATOM 596 CG2 ILE A 62 -15.760 4.140 16.303 1.00 2.00 C +ATOM 597 CD1 ILE A 62 -17.080 4.296 13.470 1.00 6.02 C +ATOM 598 H ILE A 62 -14.604 7.557 14.327 1.00 15.00 H +ATOM 599 N PRO A 63 -16.523 6.806 18.041 1.00 14.35 N +ATOM 600 CA PRO A 63 -16.248 7.063 19.462 1.00 11.42 C +ATOM 601 C PRO A 63 -15.550 5.916 20.180 1.00 13.82 C +ATOM 602 O PRO A 63 -16.004 4.771 20.218 1.00 13.36 O +ATOM 603 CB PRO A 63 -17.636 7.378 20.025 1.00 7.57 C +ATOM 604 CG PRO A 63 -18.554 7.567 18.809 1.00 9.23 C +ATOM 605 CD PRO A 63 -17.942 6.610 17.786 1.00 14.61 C +ATOM 606 N VAL A 64 -14.379 6.277 20.750 1.00 12.69 N +ATOM 607 CA VAL A 64 -13.736 5.312 21.632 1.00 9.70 C +ATOM 608 C VAL A 64 -13.381 5.801 23.031 1.00 8.20 C +ATOM 609 O VAL A 64 -13.052 6.949 23.305 1.00 8.01 O +ATOM 610 CB VAL A 64 -12.654 4.392 20.936 1.00 9.79 C +ATOM 611 CG1 VAL A 64 -12.700 4.364 19.396 1.00 2.00 C +ATOM 612 CG2 VAL A 64 -11.241 4.495 21.474 1.00 12.10 C +ATOM 613 H VAL A 64 -14.000 7.170 20.528 1.00 15.00 H +ATOM 614 N GLU A 65 -13.505 4.868 23.955 1.00 7.36 N +ATOM 615 CA GLU A 65 -12.972 5.193 25.262 1.00 8.29 C +ATOM 616 C GLU A 65 -11.712 4.464 25.650 1.00 8.72 C +ATOM 617 O GLU A 65 -11.632 3.239 25.692 1.00 7.20 O +ATOM 618 CB GLU A 65 -14.009 4.958 26.331 1.00 16.21 C +ATOM 619 CG GLU A 65 -15.173 5.917 26.227 1.00 28.95 C +ATOM 620 CD GLU A 65 -16.036 5.762 27.457 1.00 42.00 C +ATOM 621 OE1 GLU A 65 -15.655 6.281 28.515 1.00 41.15 O +ATOM 622 OE2 GLU A 65 -17.086 5.118 27.336 1.00 47.92 O +ATOM 623 H GLU A 65 -13.913 3.986 23.705 1.00 15.00 H +ATOM 624 N ILE A 66 -10.718 5.287 25.964 1.00 12.31 N +ATOM 625 CA ILE A 66 -9.424 4.746 26.428 1.00 15.55 C +ATOM 626 C ILE A 66 -9.134 5.185 27.859 1.00 17.26 C +ATOM 627 O ILE A 66 -8.955 6.366 28.160 1.00 14.67 O +ATOM 628 CB ILE A 66 -8.240 5.161 25.497 1.00 14.67 C +ATOM 629 CG1 ILE A 66 -8.601 5.198 24.012 1.00 14.16 C +ATOM 630 CG2 ILE A 66 -7.004 4.253 25.635 1.00 12.13 C +ATOM 631 CD1 ILE A 66 -7.499 5.896 23.204 1.00 12.50 C +ATOM 632 H ILE A 66 -10.882 6.267 25.831 1.00 15.00 H +ATOM 633 N CYS A 67 -9.142 4.196 28.776 1.00 20.80 N +ATOM 634 CA CYS A 67 -8.903 4.595 30.199 1.00 24.96 C +ATOM 635 C CYS A 67 -9.762 5.707 30.862 1.00 25.05 C +ATOM 636 O CYS A 67 -9.280 6.561 31.606 1.00 25.64 O +ATOM 637 CB CYS A 67 -7.455 5.015 30.442 1.00 24.85 C +ATOM 638 SG CYS A 67 -6.469 3.587 30.789 1.00 34.14 S +ATOM 639 H CYS A 67 -9.210 3.247 28.455 1.00 15.00 H +ATOM 640 N GLY A 68 -11.058 5.710 30.508 1.00 22.38 N +ATOM 641 CA GLY A 68 -11.856 6.851 30.987 1.00 23.78 C +ATOM 642 C GLY A 68 -11.771 8.182 30.210 1.00 25.98 C +ATOM 643 O GLY A 68 -12.465 9.153 30.491 1.00 30.44 O +ATOM 644 H GLY A 68 -11.411 5.002 29.905 1.00 15.00 H +ATOM 645 N HIS A 69 -10.906 8.176 29.182 1.00 22.38 N +ATOM 646 CA HIS A 69 -10.885 9.341 28.308 1.00 19.25 C +ATOM 647 C HIS A 69 -11.555 9.024 27.002 1.00 19.72 C +ATOM 648 O HIS A 69 -11.320 7.998 26.375 1.00 21.73 O +ATOM 649 CB HIS A 69 -9.464 9.853 28.056 1.00 20.58 C +ATOM 650 CG HIS A 69 -8.777 10.135 29.370 1.00 24.61 C +ATOM 651 ND1 HIS A 69 -8.210 9.190 30.156 1.00 27.85 N +ATOM 652 CD2 HIS A 69 -8.662 11.363 30.018 1.00 25.43 C +ATOM 653 CE1 HIS A 69 -7.748 9.797 31.284 1.00 24.14 C +ATOM 654 NE2 HIS A 69 -8.034 11.130 31.196 1.00 22.87 N +ATOM 655 H HIS A 69 -10.316 7.394 29.003 1.00 15.00 H +ATOM 656 HD1 HIS A 69 -8.149 8.233 29.977 1.00 15.00 H +ATOM 657 N LYS A 70 -12.450 9.933 26.649 1.00 19.65 N +ATOM 658 CA LYS A 70 -13.221 9.826 25.406 1.00 17.22 C +ATOM 659 C LYS A 70 -12.507 10.406 24.163 1.00 15.83 C +ATOM 660 O LYS A 70 -11.947 11.489 24.204 1.00 15.38 O +ATOM 661 CB LYS A 70 -14.508 10.605 25.650 1.00 20.19 C +ATOM 662 CG LYS A 70 -15.789 9.845 25.956 1.00 30.72 C +ATOM 663 CD LYS A 70 -16.197 9.005 24.735 1.00 39.08 C +ATOM 664 CE LYS A 70 -16.223 9.752 23.395 1.00 39.55 C +ATOM 665 NZ LYS A 70 -15.774 8.786 22.393 1.00 38.04 N +ATOM 666 H LYS A 70 -12.475 10.764 27.198 1.00 15.00 H +ATOM 667 HZ1 LYS A 70 -14.814 8.468 22.636 1.00 15.00 H +ATOM 668 HZ2 LYS A 70 -16.418 7.970 22.384 1.00 15.00 H +ATOM 669 HZ3 LYS A 70 -15.765 9.237 21.456 1.00 15.00 H +ATOM 670 N ALA A 71 -12.581 9.669 23.053 1.00 14.11 N +ATOM 671 CA ALA A 71 -12.049 10.164 21.785 1.00 9.65 C +ATOM 672 C ALA A 71 -12.950 9.871 20.542 1.00 14.05 C +ATOM 673 O ALA A 71 -13.774 8.960 20.525 1.00 17.33 O +ATOM 674 CB ALA A 71 -10.691 9.503 21.588 1.00 13.01 C +ATOM 675 H ALA A 71 -12.986 8.761 23.141 1.00 15.00 H +ATOM 676 N ILE A 72 -12.793 10.673 19.468 1.00 12.13 N +ATOM 677 CA ILE A 72 -13.614 10.476 18.259 1.00 7.59 C +ATOM 678 C ILE A 72 -12.785 10.549 16.968 1.00 7.29 C +ATOM 679 O ILE A 72 -12.084 11.503 16.658 1.00 7.41 O +ATOM 680 CB ILE A 72 -14.848 11.451 18.212 1.00 7.82 C +ATOM 681 CG1 ILE A 72 -15.644 11.511 19.533 1.00 6.92 C +ATOM 682 CG2 ILE A 72 -15.821 11.024 17.111 1.00 2.99 C +ATOM 683 CD1 ILE A 72 -16.810 12.505 19.598 1.00 7.31 C +ATOM 684 H ILE A 72 -12.094 11.391 19.558 1.00 15.00 H +ATOM 685 N GLY A 73 -12.812 9.459 16.216 1.00 6.85 N +ATOM 686 CA GLY A 73 -11.802 9.477 15.165 1.00 3.66 C +ATOM 687 C GLY A 73 -11.808 8.290 14.226 1.00 5.70 C +ATOM 688 O GLY A 73 -12.670 7.431 14.296 1.00 5.13 O +ATOM 689 H GLY A 73 -13.337 8.653 16.494 1.00 15.00 H +ATOM 690 N THR A 74 -10.814 8.304 13.326 1.00 4.83 N +ATOM 691 CA THR A 74 -10.557 7.175 12.406 1.00 6.42 C +ATOM 692 C THR A 74 -9.927 5.876 12.993 1.00 8.54 C +ATOM 693 O THR A 74 -8.938 5.859 13.741 1.00 11.09 O +ATOM 694 CB THR A 74 -9.720 7.753 11.231 1.00 9.90 C +ATOM 695 OG1 THR A 74 -10.423 8.883 10.688 1.00 6.69 O +ATOM 696 CG2 THR A 74 -9.271 6.796 10.104 1.00 9.55 C +ATOM 697 H THR A 74 -10.187 9.084 13.351 1.00 15.00 H +ATOM 698 HG1 THR A 74 -11.146 8.537 10.185 1.00 15.00 H +ATOM 699 N VAL A 75 -10.581 4.751 12.619 1.00 7.45 N +ATOM 700 CA VAL A 75 -10.064 3.424 12.999 1.00 3.64 C +ATOM 701 C VAL A 75 -10.002 2.529 11.798 1.00 5.50 C +ATOM 702 O VAL A 75 -10.908 2.484 10.966 1.00 6.60 O +ATOM 703 CB VAL A 75 -10.751 2.669 14.181 1.00 2.00 C +ATOM 704 CG1 VAL A 75 -10.913 3.535 15.429 1.00 2.24 C +ATOM 705 CG2 VAL A 75 -12.074 2.028 13.818 1.00 2.67 C +ATOM 706 H VAL A 75 -11.433 4.856 12.105 1.00 15.00 H +ATOM 707 N LEU A 76 -8.827 1.882 11.712 1.00 7.70 N +ATOM 708 CA LEU A 76 -8.560 0.993 10.582 1.00 9.14 C +ATOM 709 C LEU A 76 -8.758 -0.411 11.091 1.00 8.24 C +ATOM 710 O LEU A 76 -8.180 -0.689 12.133 1.00 8.98 O +ATOM 711 CB LEU A 76 -7.096 1.080 10.170 1.00 10.74 C +ATOM 712 CG LEU A 76 -6.554 2.116 9.182 1.00 10.68 C +ATOM 713 CD1 LEU A 76 -7.371 3.382 9.044 1.00 7.60 C +ATOM 714 CD2 LEU A 76 -5.065 2.380 9.472 1.00 4.59 C +ATOM 715 H LEU A 76 -8.164 1.978 12.458 1.00 15.00 H +ATOM 716 N VAL A 77 -9.556 -1.241 10.379 1.00 5.51 N +ATOM 717 CA VAL A 77 -9.612 -2.615 10.873 1.00 7.56 C +ATOM 718 C VAL A 77 -9.067 -3.627 9.884 1.00 11.19 C +ATOM 719 O VAL A 77 -9.292 -3.527 8.684 1.00 15.24 O +ATOM 720 CB VAL A 77 -10.965 -3.018 11.575 1.00 10.81 C +ATOM 721 CG1 VAL A 77 -11.992 -1.869 11.789 1.00 6.89 C +ATOM 722 CG2 VAL A 77 -11.605 -4.314 11.072 1.00 6.45 C +ATOM 723 H VAL A 77 -10.102 -0.873 9.624 1.00 15.00 H +ATOM 724 N GLY A 78 -8.247 -4.550 10.439 1.00 14.31 N +ATOM 725 CA GLY A 78 -7.421 -5.459 9.606 1.00 11.38 C +ATOM 726 C GLY A 78 -6.549 -6.491 10.338 1.00 10.04 C +ATOM 727 O GLY A 78 -6.689 -6.696 11.536 1.00 11.54 O +ATOM 728 H GLY A 78 -8.172 -4.530 11.440 1.00 15.00 H +ATOM 729 N PRO A 79 -5.657 -7.198 9.576 1.00 10.23 N +ATOM 730 CA PRO A 79 -4.843 -8.307 10.160 1.00 8.21 C +ATOM 731 C PRO A 79 -3.582 -7.953 10.985 1.00 13.23 C +ATOM 732 O PRO A 79 -2.449 -8.222 10.618 1.00 21.44 O +ATOM 733 CB PRO A 79 -4.516 -9.134 8.905 1.00 4.37 C +ATOM 734 CG PRO A 79 -4.472 -8.118 7.757 1.00 2.00 C +ATOM 735 CD PRO A 79 -5.536 -7.089 8.115 1.00 3.01 C +ATOM 736 N THR A 80 -3.793 -7.352 12.147 1.00 16.55 N +ATOM 737 CA THR A 80 -2.668 -6.967 13.039 1.00 14.33 C +ATOM 738 C THR A 80 -2.414 -7.963 14.181 1.00 14.07 C +ATOM 739 O THR A 80 -3.361 -8.591 14.627 1.00 14.05 O +ATOM 740 CB THR A 80 -2.984 -5.585 13.630 1.00 10.44 C +ATOM 741 OG1 THR A 80 -2.027 -5.241 14.620 1.00 12.88 O +ATOM 742 CG2 THR A 80 -4.388 -5.503 14.223 1.00 4.82 C +ATOM 743 H THR A 80 -4.756 -7.257 12.405 1.00 15.00 H +ATOM 744 HG1 THR A 80 -2.528 -4.947 15.384 1.00 15.00 H +ATOM 745 N PRO A 81 -1.144 -8.155 14.681 1.00 14.95 N +ATOM 746 CA PRO A 81 -0.988 -9.139 15.784 1.00 12.96 C +ATOM 747 C PRO A 81 -1.790 -8.850 17.053 1.00 12.83 C +ATOM 748 O PRO A 81 -2.404 -9.713 17.644 1.00 16.23 O +ATOM 749 CB PRO A 81 0.521 -9.191 16.065 1.00 7.77 C +ATOM 750 CG PRO A 81 1.178 -8.551 14.848 1.00 7.13 C +ATOM 751 CD PRO A 81 0.139 -7.587 14.270 1.00 10.90 C +ATOM 752 N VAL A 82 -1.736 -7.570 17.453 1.00 15.40 N +ATOM 753 CA VAL A 82 -2.440 -7.017 18.624 1.00 11.41 C +ATOM 754 C VAL A 82 -3.373 -5.845 18.241 1.00 10.53 C +ATOM 755 O VAL A 82 -3.254 -5.294 17.142 1.00 9.57 O +ATOM 756 CB VAL A 82 -1.397 -6.519 19.651 1.00 9.70 C +ATOM 757 CG1 VAL A 82 -0.766 -7.679 20.370 1.00 5.78 C +ATOM 758 CG2 VAL A 82 -0.333 -5.607 19.030 1.00 10.61 C +ATOM 759 H VAL A 82 -1.252 -6.961 16.826 1.00 15.00 H +ATOM 760 N ASN A 83 -4.242 -5.425 19.203 1.00 5.95 N +ATOM 761 CA ASN A 83 -4.800 -4.081 18.959 1.00 3.62 C +ATOM 762 C ASN A 83 -3.849 -2.918 19.265 1.00 3.68 C +ATOM 763 O ASN A 83 -3.264 -2.850 20.340 1.00 6.21 O +ATOM 764 CB ASN A 83 -6.103 -3.838 19.728 1.00 8.40 C +ATOM 765 CG ASN A 83 -7.265 -4.688 19.236 1.00 9.86 C +ATOM 766 OD1 ASN A 83 -7.744 -4.560 18.129 1.00 15.78 O +ATOM 767 ND2 ASN A 83 -7.765 -5.557 20.102 1.00 6.89 N +ATOM 768 H ASN A 83 -4.312 -5.927 20.062 1.00 15.00 H +ATOM 769 HD21 ASN A 83 -8.526 -6.068 19.715 1.00 15.00 H +ATOM 770 HD22 ASN A 83 -7.387 -5.635 21.026 1.00 15.00 H +ATOM 771 N ILE A 84 -3.733 -2.018 18.281 1.00 4.44 N +ATOM 772 CA ILE A 84 -2.820 -0.844 18.286 1.00 6.23 C +ATOM 773 C ILE A 84 -3.530 0.548 18.348 1.00 7.54 C +ATOM 774 O ILE A 84 -4.310 0.914 17.470 1.00 10.49 O +ATOM 775 CB ILE A 84 -1.917 -0.949 17.005 1.00 9.16 C +ATOM 776 CG1 ILE A 84 -0.878 -2.065 17.074 1.00 9.46 C +ATOM 777 CG2 ILE A 84 -1.171 0.325 16.564 1.00 9.37 C +ATOM 778 CD1 ILE A 84 -0.214 -2.279 15.708 1.00 12.32 C +ATOM 779 H ILE A 84 -4.302 -2.187 17.474 1.00 15.00 H +ATOM 780 N ILE A 85 -3.203 1.329 19.399 1.00 6.08 N +ATOM 781 CA ILE A 85 -3.549 2.761 19.382 1.00 3.83 C +ATOM 782 C ILE A 85 -2.346 3.642 18.969 1.00 5.48 C +ATOM 783 O ILE A 85 -1.321 3.637 19.652 1.00 4.60 O +ATOM 784 CB ILE A 85 -4.078 3.263 20.743 1.00 3.28 C +ATOM 785 CG1 ILE A 85 -4.993 2.265 21.468 1.00 4.75 C +ATOM 786 CG2 ILE A 85 -4.764 4.614 20.547 1.00 2.00 C +ATOM 787 CD1 ILE A 85 -6.373 2.028 20.837 1.00 10.37 C +ATOM 788 H ILE A 85 -2.591 0.942 20.095 1.00 15.00 H +ATOM 789 N GLY A 86 -2.519 4.356 17.827 1.00 3.63 N +ATOM 790 CA GLY A 86 -1.444 5.149 17.231 1.00 3.97 C +ATOM 791 C GLY A 86 -1.513 6.620 17.583 1.00 6.02 C +ATOM 792 O GLY A 86 -2.415 7.044 18.307 1.00 11.53 O +ATOM 793 H GLY A 86 -3.436 4.323 17.425 1.00 15.00 H +ATOM 794 N ARG A 87 -0.582 7.434 17.053 1.00 4.10 N +ATOM 795 CA ARG A 87 -0.654 8.875 17.437 1.00 6.33 C +ATOM 796 C ARG A 87 -1.987 9.709 17.268 1.00 6.34 C +ATOM 797 O ARG A 87 -2.248 10.670 17.993 1.00 9.00 O +ATOM 798 CB ARG A 87 0.560 9.612 16.845 1.00 4.55 C +ATOM 799 CG ARG A 87 1.904 9.047 17.362 1.00 10.87 C +ATOM 800 CD ARG A 87 3.062 9.100 16.353 1.00 5.39 C +ATOM 801 NE ARG A 87 3.209 10.479 15.997 1.00 15.34 N +ATOM 802 CZ ARG A 87 2.792 10.872 14.795 1.00 18.04 C +ATOM 803 NH1 ARG A 87 2.967 10.101 13.735 1.00 15.78 N +ATOM 804 NH2 ARG A 87 2.170 12.049 14.692 1.00 19.63 N +ATOM 805 H ARG A 87 0.196 7.014 16.588 1.00 15.00 H +ATOM 806 HE ARG A 87 3.259 11.156 16.730 1.00 15.00 H +ATOM 807 HH11 ARG A 87 3.447 9.229 13.827 1.00 15.00 H +ATOM 808 HH12 ARG A 87 2.619 10.390 12.845 1.00 15.00 H +ATOM 809 HH21 ARG A 87 2.040 12.623 15.501 1.00 15.00 H +ATOM 810 HH22 ARG A 87 1.829 12.357 13.805 1.00 15.00 H +ATOM 811 N ASN A 88 -2.846 9.320 16.284 1.00 4.71 N +ATOM 812 CA ASN A 88 -4.085 10.064 15.974 1.00 2.94 C +ATOM 813 C ASN A 88 -5.100 10.221 17.134 1.00 8.33 C +ATOM 814 O ASN A 88 -5.814 11.204 17.328 1.00 10.61 O +ATOM 815 CB ASN A 88 -4.734 9.451 14.714 1.00 2.54 C +ATOM 816 CG ASN A 88 -5.452 8.096 14.938 1.00 11.53 C +ATOM 817 OD1 ASN A 88 -4.939 7.098 15.437 1.00 2.94 O +ATOM 818 ND2 ASN A 88 -6.728 8.083 14.558 1.00 12.71 N +ATOM 819 H ASN A 88 -2.520 8.580 15.694 1.00 15.00 H +ATOM 820 HD21 ASN A 88 -7.219 7.218 14.657 1.00 15.00 H +ATOM 821 HD22 ASN A 88 -7.217 8.883 14.213 1.00 15.00 H +ATOM 822 N LEU A 89 -5.100 9.142 17.928 1.00 9.42 N +ATOM 823 CA LEU A 89 -5.948 9.061 19.121 1.00 8.04 C +ATOM 824 C LEU A 89 -5.240 9.372 20.426 1.00 5.83 C +ATOM 825 O LEU A 89 -5.720 10.079 21.282 1.00 11.22 O +ATOM 826 CB LEU A 89 -6.576 7.671 19.132 1.00 7.87 C +ATOM 827 CG LEU A 89 -7.982 7.575 18.565 1.00 9.76 C +ATOM 828 CD1 LEU A 89 -8.269 8.482 17.355 1.00 13.42 C +ATOM 829 CD2 LEU A 89 -8.334 6.110 18.331 1.00 14.63 C +ATOM 830 H LEU A 89 -4.531 8.374 17.626 1.00 15.00 H +ATOM 831 N LEU A 90 -4.014 8.888 20.545 1.00 8.10 N +ATOM 832 CA LEU A 90 -3.122 9.326 21.652 1.00 8.09 C +ATOM 833 C LEU A 90 -2.996 10.851 21.908 1.00 8.64 C +ATOM 834 O LEU A 90 -2.902 11.395 23.005 1.00 9.47 O +ATOM 835 CB LEU A 90 -1.745 8.802 21.290 1.00 5.97 C +ATOM 836 CG LEU A 90 -1.170 7.607 22.016 1.00 5.66 C +ATOM 837 CD1 LEU A 90 -2.156 6.570 22.522 1.00 4.83 C +ATOM 838 CD2 LEU A 90 -0.167 6.990 21.060 1.00 7.12 C +ATOM 839 H LEU A 90 -3.704 8.240 19.846 1.00 15.00 H +ATOM 840 N THR A 91 -2.992 11.570 20.795 1.00 9.94 N +ATOM 841 CA THR A 91 -3.029 13.029 20.978 1.00 8.71 C +ATOM 842 C THR A 91 -4.303 13.614 21.471 1.00 10.30 C +ATOM 843 O THR A 91 -4.259 14.519 22.284 1.00 12.69 O +ATOM 844 CB THR A 91 -2.729 13.810 19.729 1.00 10.12 C +ATOM 845 OG1 THR A 91 -3.546 13.334 18.654 1.00 9.03 O +ATOM 846 CG2 THR A 91 -1.237 13.795 19.403 1.00 9.48 C +ATOM 847 H THR A 91 -2.949 11.127 19.899 1.00 15.00 H +ATOM 848 HG1 THR A 91 -3.051 12.631 18.233 1.00 15.00 H +ATOM 849 N GLN A 92 -5.435 13.036 21.015 1.00 9.54 N +ATOM 850 CA GLN A 92 -6.739 13.425 21.614 1.00 8.56 C +ATOM 851 C GLN A 92 -6.888 13.403 23.158 1.00 10.13 C +ATOM 852 O GLN A 92 -7.313 14.362 23.797 1.00 10.19 O +ATOM 853 CB GLN A 92 -7.901 12.683 20.934 1.00 7.14 C +ATOM 854 CG GLN A 92 -8.079 13.162 19.471 1.00 4.88 C +ATOM 855 CD GLN A 92 -9.409 12.689 18.959 1.00 4.56 C +ATOM 856 OE1 GLN A 92 -10.324 12.409 19.699 1.00 14.03 O +ATOM 857 NE2 GLN A 92 -9.555 12.577 17.672 1.00 2.00 N +ATOM 858 H GLN A 92 -5.340 12.385 20.263 1.00 15.00 H +ATOM 859 HE21 GLN A 92 -10.464 12.281 17.383 1.00 15.00 H +ATOM 860 HE22 GLN A 92 -8.804 12.777 17.055 1.00 15.00 H +ATOM 861 N ILE A 93 -6.453 12.267 23.731 1.00 7.25 N +ATOM 862 CA ILE A 93 -6.483 12.101 25.195 1.00 7.07 C +ATOM 863 C ILE A 93 -5.335 12.732 26.048 1.00 11.45 C +ATOM 864 O ILE A 93 -5.207 12.556 27.257 1.00 11.98 O +ATOM 865 CB ILE A 93 -6.643 10.599 25.548 1.00 8.30 C +ATOM 866 CG1 ILE A 93 -5.341 9.820 25.286 1.00 5.63 C +ATOM 867 CG2 ILE A 93 -7.849 9.970 24.810 1.00 6.86 C +ATOM 868 CD1 ILE A 93 -5.437 8.344 25.642 1.00 6.01 C +ATOM 869 H ILE A 93 -6.167 11.548 23.098 1.00 15.00 H +ATOM 870 N GLY A 94 -4.464 13.486 25.366 1.00 10.82 N +ATOM 871 CA GLY A 94 -3.410 14.097 26.190 1.00 12.12 C +ATOM 872 C GLY A 94 -2.050 13.371 26.432 1.00 15.12 C +ATOM 873 O GLY A 94 -1.236 13.833 27.223 1.00 17.26 O +ATOM 874 H GLY A 94 -4.588 13.678 24.392 1.00 15.00 H +ATOM 875 N CYS A 95 -1.790 12.267 25.687 1.00 14.55 N +ATOM 876 CA CYS A 95 -0.471 11.597 25.822 1.00 10.81 C +ATOM 877 C CYS A 95 0.838 12.258 25.319 1.00 11.73 C +ATOM 878 O CYS A 95 0.949 12.839 24.228 1.00 13.70 O +ATOM 879 CB CYS A 95 -0.614 10.216 25.243 1.00 12.07 C +ATOM 880 SG CYS A 95 0.307 8.920 26.088 1.00 18.07 S +ATOM 881 H CYS A 95 -2.463 12.031 24.988 1.00 15.00 H +ATOM 882 N THR A 96 1.843 12.131 26.211 1.00 9.92 N +ATOM 883 CA THR A 96 3.255 12.544 26.016 1.00 6.70 C +ATOM 884 C THR A 96 4.358 11.495 26.430 1.00 11.47 C +ATOM 885 O THR A 96 4.175 10.661 27.303 1.00 11.99 O +ATOM 886 CB THR A 96 3.572 13.884 26.732 1.00 3.18 C +ATOM 887 OG1 THR A 96 3.422 13.782 28.136 1.00 2.00 O +ATOM 888 CG2 THR A 96 2.735 15.054 26.263 1.00 2.00 C +ATOM 889 H THR A 96 1.543 11.752 27.094 1.00 15.00 H +ATOM 890 HG1 THR A 96 3.325 14.669 28.470 1.00 15.00 H +ATOM 891 N LEU A 97 5.544 11.562 25.769 1.00 13.36 N +ATOM 892 CA LEU A 97 6.781 10.866 26.209 1.00 11.73 C +ATOM 893 C LEU A 97 7.766 11.692 27.122 1.00 12.03 C +ATOM 894 O LEU A 97 8.091 12.842 26.868 1.00 13.10 O +ATOM 895 CB LEU A 97 7.510 10.366 24.941 1.00 12.45 C +ATOM 896 CG LEU A 97 7.614 8.852 24.580 1.00 12.27 C +ATOM 897 CD1 LEU A 97 6.313 8.199 24.173 1.00 13.18 C +ATOM 898 CD2 LEU A 97 8.468 8.621 23.357 1.00 9.86 C +ATOM 899 H LEU A 97 5.576 12.235 25.027 1.00 15.00 H +ATOM 900 N ASN A 98 8.241 11.095 28.216 1.00 12.12 N +ATOM 901 CA ASN A 98 9.072 11.924 29.137 1.00 14.38 C +ATOM 902 C ASN A 98 10.351 11.322 29.763 1.00 14.68 C +ATOM 903 O ASN A 98 10.298 10.201 30.258 1.00 16.20 O +ATOM 904 CB ASN A 98 8.278 12.403 30.337 1.00 15.85 C +ATOM 905 CG ASN A 98 7.192 13.386 29.979 1.00 18.15 C +ATOM 906 OD1 ASN A 98 7.427 14.537 29.659 1.00 17.39 O +ATOM 907 ND2 ASN A 98 5.958 12.904 30.073 1.00 16.74 N +ATOM 908 H ASN A 98 7.900 10.180 28.444 1.00 15.00 H +ATOM 909 HD21 ASN A 98 5.269 13.561 29.783 1.00 15.00 H +ATOM 910 HD22 ASN A 98 5.737 11.995 30.424 1.00 15.00 H +ATOM 911 N PHE A 99 11.434 12.148 29.720 1.00 17.67 N +ATOM 912 CA PHE A 99 12.828 12.065 30.252 1.00 12.46 C +ATOM 913 C PHE A 99 13.520 13.457 30.096 1.00 7.09 C +ATOM 914 O PHE A 99 14.655 13.569 29.636 0.00 8.50 O +ATOM 915 CB PHE A 99 13.592 10.871 29.623 1.00 7.80 C +ATOM 916 CG PHE A 99 13.829 11.100 28.161 1.00 5.94 C +ATOM 917 CD1 PHE A 99 12.760 11.001 27.249 1.00 12.70 C +ATOM 918 CD2 PHE A 99 15.119 11.457 27.715 1.00 10.34 C +ATOM 919 CE1 PHE A 99 12.961 11.344 25.896 1.00 13.79 C +ATOM 920 CE2 PHE A 99 15.334 11.813 26.366 1.00 13.69 C +ATOM 921 CZ PHE A 99 14.238 11.793 25.477 1.00 16.36 C +ATOM 922 OXT PHE A 99 12.893 14.487 30.349 0.00 8.50 O +ATOM 923 H PHE A 99 11.228 13.069 29.393 1.00 15.00 H +TER 924 PHE A 99 +ATOM 925 N PRO B 1 13.587 15.375 28.006 1.00 37.18 N +ATOM 926 CA PRO B 1 12.429 15.782 27.190 1.00 32.66 C +ATOM 927 C PRO B 1 11.058 15.893 27.827 1.00 30.70 C +ATOM 928 O PRO B 1 10.652 14.934 28.450 1.00 33.19 O +ATOM 929 CB PRO B 1 12.884 16.920 26.297 1.00 32.98 C +ATOM 930 CG PRO B 1 14.194 16.250 25.886 1.00 37.01 C +ATOM 931 CD PRO B 1 14.771 15.729 27.210 1.00 37.71 C +ATOM 932 H2 PRO B 1 13.592 15.705 29.002 0.00 0.00 H +ATOM 933 H3 PRO B 1 13.613 14.354 28.265 0.00 0.00 H +ATOM 934 N GLN B 2 10.289 16.963 27.520 1.00 25.28 N +ATOM 935 CA GLN B 2 8.951 16.454 27.183 1.00 22.03 C +ATOM 936 C GLN B 2 8.735 16.286 25.690 1.00 18.15 C +ATOM 937 O GLN B 2 9.066 17.182 24.944 1.00 19.19 O +ATOM 938 CB GLN B 2 7.858 17.317 27.754 1.00 24.59 C +ATOM 939 CG GLN B 2 6.487 16.636 27.780 1.00 21.41 C +ATOM 940 CD GLN B 2 5.550 17.497 28.592 1.00 23.66 C +ATOM 941 OE1 GLN B 2 5.147 17.232 29.715 1.00 17.87 O +ATOM 942 NE2 GLN B 2 5.195 18.607 27.947 1.00 25.77 N +ATOM 943 H GLN B 2 10.602 17.852 27.198 1.00 15.00 H +ATOM 944 HE21 GLN B 2 4.611 19.180 28.515 1.00 15.00 H +ATOM 945 HE22 GLN B 2 5.499 18.821 27.027 1.00 15.00 H +ATOM 946 N ILE B 3 8.226 15.125 25.284 1.00 14.61 N +ATOM 947 CA ILE B 3 8.003 14.894 23.853 1.00 14.42 C +ATOM 948 C ILE B 3 6.521 14.704 23.440 1.00 14.49 C +ATOM 949 O ILE B 3 5.843 13.739 23.782 1.00 11.98 O +ATOM 950 CB ILE B 3 8.908 13.730 23.358 1.00 15.82 C +ATOM 951 CG1 ILE B 3 10.386 13.948 23.707 1.00 17.70 C +ATOM 952 CG2 ILE B 3 8.805 13.509 21.839 1.00 13.84 C +ATOM 953 CD1 ILE B 3 11.258 12.860 23.102 1.00 16.91 C +ATOM 954 H ILE B 3 8.033 14.449 25.996 1.00 15.00 H +ATOM 955 N THR B 4 6.007 15.694 22.684 1.00 13.06 N +ATOM 956 CA THR B 4 4.637 15.475 22.179 1.00 11.34 C +ATOM 957 C THR B 4 4.485 14.733 20.868 1.00 14.26 C +ATOM 958 O THR B 4 5.391 14.603 20.050 1.00 17.92 O +ATOM 959 CB THR B 4 3.842 16.757 21.981 1.00 12.43 C +ATOM 960 OG1 THR B 4 4.477 17.558 20.973 1.00 16.86 O +ATOM 961 CG2 THR B 4 3.616 17.532 23.278 1.00 9.78 C +ATOM 962 H THR B 4 6.612 16.409 22.331 1.00 15.00 H +ATOM 963 HG1 THR B 4 4.039 18.402 20.956 1.00 15.00 H +ATOM 964 N LEU B 5 3.243 14.257 20.693 1.00 12.93 N +ATOM 965 CA LEU B 5 2.994 13.361 19.550 1.00 10.05 C +ATOM 966 C LEU B 5 2.303 13.904 18.292 1.00 10.74 C +ATOM 967 O LEU B 5 1.831 13.156 17.450 1.00 13.05 O +ATOM 968 CB LEU B 5 2.233 12.124 20.046 1.00 12.05 C +ATOM 969 CG LEU B 5 2.952 11.008 20.841 1.00 12.23 C +ATOM 970 CD1 LEU B 5 4.489 11.031 20.848 1.00 11.19 C +ATOM 971 CD2 LEU B 5 2.307 10.783 22.180 1.00 2.39 C +ATOM 972 H LEU B 5 2.596 14.322 21.450 1.00 15.00 H +ATOM 973 N TRP B 6 2.245 15.249 18.159 1.00 10.83 N +ATOM 974 CA TRP B 6 1.758 15.805 16.880 1.00 8.95 C +ATOM 975 C TRP B 6 2.538 15.367 15.646 1.00 11.86 C +ATOM 976 O TRP B 6 2.017 15.148 14.562 1.00 13.20 O +ATOM 977 CB TRP B 6 1.831 17.332 16.775 1.00 9.49 C +ATOM 978 CG TRP B 6 1.039 18.078 17.808 1.00 7.19 C +ATOM 979 CD1 TRP B 6 1.619 18.811 18.841 1.00 9.16 C +ATOM 980 CD2 TRP B 6 -0.391 18.196 18.006 1.00 14.14 C +ATOM 981 NE1 TRP B 6 0.692 19.339 19.659 1.00 7.62 N +ATOM 982 CE2 TRP B 6 -0.576 18.983 19.193 1.00 13.41 C +ATOM 983 CE3 TRP B 6 -1.528 17.737 17.295 1.00 16.58 C +ATOM 984 CZ2 TRP B 6 -1.887 19.274 19.659 1.00 10.89 C +ATOM 985 CZ3 TRP B 6 -2.827 18.052 17.761 1.00 19.55 C +ATOM 986 CH2 TRP B 6 -3.008 18.805 18.945 1.00 12.82 C +ATOM 987 H TRP B 6 2.645 15.799 18.887 1.00 15.00 H +ATOM 988 HE1 TRP B 6 0.877 19.912 20.438 1.00 15.00 H +ATOM 989 N LYS B 7 3.857 15.254 15.865 1.00 15.08 N +ATOM 990 CA LYS B 7 4.567 14.402 14.905 1.00 14.05 C +ATOM 991 C LYS B 7 5.265 13.130 15.437 1.00 10.87 C +ATOM 992 O LYS B 7 5.190 12.773 16.605 1.00 8.04 O +ATOM 993 CB LYS B 7 5.382 15.210 13.864 1.00 12.97 C +ATOM 994 CG LYS B 7 5.922 16.586 14.221 1.00 18.22 C +ATOM 995 CD LYS B 7 7.141 16.570 15.157 1.00 29.42 C +ATOM 996 CE LYS B 7 7.808 17.956 15.399 1.00 36.49 C +ATOM 997 NZ LYS B 7 8.467 18.487 14.174 1.00 41.16 N +ATOM 998 H LYS B 7 4.258 15.573 16.719 1.00 15.00 H +ATOM 999 HZ1 LYS B 7 9.010 17.725 13.719 1.00 15.00 H +ATOM 1000 HZ2 LYS B 7 7.743 18.839 13.515 1.00 15.00 H +ATOM 1001 HZ3 LYS B 7 9.106 19.267 14.430 1.00 15.00 H +ATOM 1002 N ARG B 8 5.941 12.438 14.502 1.00 7.83 N +ATOM 1003 CA ARG B 8 6.757 11.289 14.910 1.00 6.01 C +ATOM 1004 C ARG B 8 7.864 11.650 15.893 1.00 5.22 C +ATOM 1005 O ARG B 8 8.538 12.670 15.755 1.00 2.00 O +ATOM 1006 CB ARG B 8 7.392 10.626 13.672 1.00 8.34 C +ATOM 1007 CG ARG B 8 6.440 9.877 12.721 1.00 7.25 C +ATOM 1008 CD ARG B 8 7.149 9.217 11.559 1.00 4.59 C +ATOM 1009 NE ARG B 8 6.209 8.432 10.750 1.00 14.38 N +ATOM 1010 CZ ARG B 8 6.611 7.669 9.688 1.00 15.55 C +ATOM 1011 NH1 ARG B 8 7.894 7.559 9.332 1.00 16.70 N +ATOM 1012 NH2 ARG B 8 5.699 7.025 8.965 1.00 18.53 N +ATOM 1013 H ARG B 8 5.902 12.755 13.558 1.00 15.00 H +ATOM 1014 HE ARG B 8 5.228 8.480 10.936 1.00 15.00 H +ATOM 1015 HH11 ARG B 8 8.599 8.035 9.858 1.00 15.00 H +ATOM 1016 HH12 ARG B 8 8.151 7.003 8.542 1.00 15.00 H +ATOM 1017 HH21 ARG B 8 4.729 7.091 9.197 1.00 15.00 H +ATOM 1018 HH22 ARG B 8 5.993 6.478 8.181 1.00 15.00 H +ATOM 1019 N PRO B 9 8.052 10.777 16.909 1.00 7.39 N +ATOM 1020 CA PRO B 9 9.075 11.107 17.923 1.00 8.37 C +ATOM 1021 C PRO B 9 10.507 10.656 17.556 1.00 5.80 C +ATOM 1022 O PRO B 9 11.032 9.686 18.101 1.00 5.48 O +ATOM 1023 CB PRO B 9 8.443 10.425 19.155 1.00 6.26 C +ATOM 1024 CG PRO B 9 7.757 9.168 18.601 1.00 3.24 C +ATOM 1025 CD PRO B 9 7.280 9.572 17.223 1.00 5.14 C +ATOM 1026 N LEU B 10 11.099 11.404 16.586 1.00 6.45 N +ATOM 1027 CA LEU B 10 12.530 11.236 16.151 1.00 10.46 C +ATOM 1028 C LEU B 10 13.651 11.856 17.014 1.00 10.72 C +ATOM 1029 O LEU B 10 13.723 13.054 17.210 1.00 11.17 O +ATOM 1030 CB LEU B 10 12.878 11.732 14.743 1.00 7.46 C +ATOM 1031 CG LEU B 10 12.299 10.972 13.559 1.00 16.13 C +ATOM 1032 CD1 LEU B 10 12.546 9.461 13.564 1.00 18.86 C +ATOM 1033 CD2 LEU B 10 10.829 11.269 13.370 1.00 23.21 C +ATOM 1034 H LEU B 10 10.550 12.178 16.265 1.00 15.00 H +ATOM 1035 N VAL B 11 14.543 11.008 17.521 1.00 12.29 N +ATOM 1036 CA VAL B 11 15.734 11.566 18.162 1.00 12.15 C +ATOM 1037 C VAL B 11 17.039 11.269 17.422 1.00 14.43 C +ATOM 1038 O VAL B 11 17.126 10.470 16.493 1.00 10.98 O +ATOM 1039 CB VAL B 11 15.825 11.155 19.642 1.00 14.58 C +ATOM 1040 CG1 VAL B 11 14.809 11.938 20.469 1.00 18.20 C +ATOM 1041 CG2 VAL B 11 15.703 9.641 19.871 1.00 11.13 C +ATOM 1042 H VAL B 11 14.370 10.032 17.437 1.00 15.00 H +ATOM 1043 N THR B 12 18.082 11.970 17.903 1.00 17.32 N +ATOM 1044 CA THR B 12 19.472 11.559 17.587 1.00 16.89 C +ATOM 1045 C THR B 12 20.117 10.551 18.529 1.00 15.64 C +ATOM 1046 O THR B 12 20.067 10.620 19.752 1.00 17.75 O +ATOM 1047 CB THR B 12 20.414 12.758 17.462 1.00 18.04 C +ATOM 1048 OG1 THR B 12 20.038 13.533 16.308 1.00 21.81 O +ATOM 1049 CG2 THR B 12 21.917 12.400 17.404 1.00 18.90 C +ATOM 1050 H THR B 12 17.865 12.659 18.592 1.00 15.00 H +ATOM 1051 HG1 THR B 12 19.091 13.514 16.241 1.00 15.00 H +ATOM 1052 N ILE B 13 20.736 9.600 17.861 1.00 15.87 N +ATOM 1053 CA ILE B 13 21.551 8.582 18.500 1.00 18.13 C +ATOM 1054 C ILE B 13 22.966 8.447 17.862 1.00 20.14 C +ATOM 1055 O ILE B 13 23.155 8.590 16.653 1.00 22.93 O +ATOM 1056 CB ILE B 13 20.781 7.241 18.489 1.00 16.33 C +ATOM 1057 CG1 ILE B 13 20.778 6.658 17.067 1.00 14.28 C +ATOM 1058 CG2 ILE B 13 19.348 7.415 19.043 1.00 7.89 C +ATOM 1059 CD1 ILE B 13 20.940 5.139 17.014 1.00 14.30 C +ATOM 1060 H ILE B 13 20.664 9.631 16.862 1.00 15.00 H +ATOM 1061 N ARG B 14 23.937 8.152 18.748 1.00 18.38 N +ATOM 1062 CA ARG B 14 25.293 7.749 18.339 1.00 18.22 C +ATOM 1063 C ARG B 14 25.746 6.328 18.747 1.00 19.03 C +ATOM 1064 O ARG B 14 25.735 5.918 19.912 1.00 17.41 O +ATOM 1065 CB ARG B 14 26.312 8.748 18.855 1.00 20.63 C +ATOM 1066 CG ARG B 14 25.921 10.196 18.572 1.00 19.56 C +ATOM 1067 CD ARG B 14 26.878 11.184 19.231 1.00 17.96 C +ATOM 1068 NE ARG B 14 26.288 12.520 19.271 1.00 18.75 N +ATOM 1069 CZ ARG B 14 26.489 13.396 18.267 1.00 17.61 C +ATOM 1070 NH1 ARG B 14 27.340 13.131 17.281 1.00 21.18 N +ATOM 1071 NH2 ARG B 14 25.818 14.542 18.261 1.00 13.12 N +ATOM 1072 H ARG B 14 23.666 8.180 19.703 1.00 15.00 H +ATOM 1073 HE ARG B 14 25.645 12.762 19.997 1.00 15.00 H +ATOM 1074 HH11 ARG B 14 27.865 12.281 17.269 1.00 15.00 H +ATOM 1075 HH12 ARG B 14 27.463 13.799 16.546 1.00 15.00 H +ATOM 1076 HH21 ARG B 14 25.170 14.740 18.995 1.00 15.00 H +ATOM 1077 HH22 ARG B 14 25.958 15.206 17.525 1.00 15.00 H +ATOM 1078 N ILE B 15 26.136 5.587 17.692 1.00 19.14 N +ATOM 1079 CA ILE B 15 26.675 4.223 17.875 1.00 20.97 C +ATOM 1080 C ILE B 15 27.990 4.067 17.116 1.00 21.93 C +ATOM 1081 O ILE B 15 28.096 4.437 15.946 1.00 21.67 O +ATOM 1082 CB ILE B 15 25.761 3.081 17.346 1.00 21.14 C +ATOM 1083 CG1 ILE B 15 24.325 3.432 17.085 1.00 19.78 C +ATOM 1084 CG2 ILE B 15 25.817 1.794 18.173 1.00 21.67 C +ATOM 1085 CD1 ILE B 15 24.119 3.521 15.577 1.00 18.76 C +ATOM 1086 H ILE B 15 26.065 6.047 16.803 1.00 15.00 H +ATOM 1087 N GLY B 16 29.000 3.497 17.790 1.00 22.82 N +ATOM 1088 CA GLY B 16 30.321 3.473 17.114 1.00 22.20 C +ATOM 1089 C GLY B 16 30.974 4.847 17.146 1.00 20.60 C +ATOM 1090 O GLY B 16 30.938 5.546 18.147 1.00 25.71 O +ATOM 1091 H GLY B 16 28.857 3.297 18.757 1.00 15.00 H +ATOM 1092 N GLY B 17 31.437 5.279 15.994 1.00 18.01 N +ATOM 1093 CA GLY B 17 31.429 6.751 15.988 1.00 19.32 C +ATOM 1094 C GLY B 17 30.339 7.400 15.110 1.00 23.21 C +ATOM 1095 O GLY B 17 30.460 8.495 14.576 1.00 26.58 O +ATOM 1096 H GLY B 17 31.595 4.698 15.200 1.00 15.00 H +ATOM 1097 N GLN B 18 29.259 6.628 14.888 1.00 22.56 N +ATOM 1098 CA GLN B 18 28.208 7.031 13.936 1.00 16.21 C +ATOM 1099 C GLN B 18 27.054 7.865 14.457 1.00 12.18 C +ATOM 1100 O GLN B 18 26.491 7.608 15.509 1.00 9.33 O +ATOM 1101 CB GLN B 18 27.677 5.814 13.157 1.00 18.45 C +ATOM 1102 CG GLN B 18 28.711 4.969 12.407 1.00 21.83 C +ATOM 1103 CD GLN B 18 29.484 5.767 11.340 1.00 31.86 C +ATOM 1104 OE1 GLN B 18 29.459 5.507 10.154 1.00 36.21 O +ATOM 1105 NE2 GLN B 18 30.265 6.751 11.750 1.00 38.63 N +ATOM 1106 H GLN B 18 29.143 5.839 15.481 1.00 15.00 H +ATOM 1107 HE21 GLN B 18 30.753 7.166 10.988 1.00 15.00 H +ATOM 1108 HE22 GLN B 18 30.409 7.077 12.678 1.00 15.00 H +ATOM 1109 N LEU B 19 26.724 8.863 13.624 1.00 11.59 N +ATOM 1110 CA LEU B 19 25.504 9.664 13.853 1.00 17.43 C +ATOM 1111 C LEU B 19 24.278 9.189 13.058 1.00 18.33 C +ATOM 1112 O LEU B 19 24.321 9.210 11.834 1.00 15.36 O +ATOM 1113 CB LEU B 19 25.725 11.148 13.493 1.00 19.73 C +ATOM 1114 CG LEU B 19 24.999 12.217 14.343 1.00 21.23 C +ATOM 1115 CD1 LEU B 19 25.361 13.624 13.837 1.00 21.44 C +ATOM 1116 CD2 LEU B 19 23.485 12.072 14.414 1.00 18.91 C +ATOM 1117 H LEU B 19 27.278 8.994 12.808 1.00 15.00 H +ATOM 1118 N LYS B 20 23.215 8.804 13.816 1.00 16.80 N +ATOM 1119 CA LYS B 20 21.904 8.407 13.282 1.00 15.52 C +ATOM 1120 C LYS B 20 20.676 9.181 13.812 1.00 17.36 C +ATOM 1121 O LYS B 20 20.643 9.643 14.945 1.00 15.50 O +ATOM 1122 CB LYS B 20 21.574 6.971 13.681 1.00 17.22 C +ATOM 1123 CG LYS B 20 22.607 5.882 13.524 1.00 13.99 C +ATOM 1124 CD LYS B 20 22.882 5.675 12.073 1.00 13.62 C +ATOM 1125 CE LYS B 20 24.025 4.717 11.895 1.00 16.99 C +ATOM 1126 NZ LYS B 20 24.484 4.868 10.504 1.00 24.02 N +ATOM 1127 H LYS B 20 23.365 8.840 14.806 1.00 15.00 H +ATOM 1128 HZ1 LYS B 20 24.754 5.857 10.329 1.00 15.00 H +ATOM 1129 HZ2 LYS B 20 25.303 4.247 10.342 1.00 15.00 H +ATOM 1130 HZ3 LYS B 20 23.715 4.598 9.857 1.00 15.00 H +ATOM 1131 N GLU B 21 19.602 9.192 12.983 1.00 20.16 N +ATOM 1132 CA GLU B 21 18.268 9.421 13.598 1.00 21.51 C +ATOM 1133 C GLU B 21 17.361 8.190 13.818 1.00 18.01 C +ATOM 1134 O GLU B 21 17.343 7.233 13.047 1.00 18.22 O +ATOM 1135 CB GLU B 21 17.480 10.520 12.888 1.00 27.81 C +ATOM 1136 CG GLU B 21 17.066 10.131 11.457 1.00 39.64 C +ATOM 1137 CD GLU B 21 15.964 11.031 10.886 1.00 45.64 C +ATOM 1138 OE1 GLU B 21 15.654 12.058 11.515 1.00 50.60 O +ATOM 1139 OE2 GLU B 21 15.421 10.685 9.817 1.00 42.07 O +ATOM 1140 H GLU B 21 19.729 8.916 12.035 1.00 15.00 H +ATOM 1141 N ALA B 22 16.616 8.230 14.925 1.00 13.80 N +ATOM 1142 CA ALA B 22 15.823 7.055 15.287 1.00 11.87 C +ATOM 1143 C ALA B 22 14.518 7.381 16.019 1.00 11.18 C +ATOM 1144 O ALA B 22 14.447 8.415 16.662 1.00 11.74 O +ATOM 1145 CB ALA B 22 16.666 6.101 16.149 1.00 10.30 C +ATOM 1146 H ALA B 22 16.676 9.025 15.523 1.00 15.00 H +ATOM 1147 N LEU B 23 13.514 6.468 15.921 1.00 10.61 N +ATOM 1148 CA LEU B 23 12.192 6.568 16.594 1.00 9.03 C +ATOM 1149 C LEU B 23 12.109 6.049 18.004 1.00 4.38 C +ATOM 1150 O LEU B 23 12.334 4.875 18.258 1.00 3.93 O +ATOM 1151 CB LEU B 23 11.040 5.757 15.925 1.00 14.89 C +ATOM 1152 CG LEU B 23 10.386 6.220 14.622 1.00 15.84 C +ATOM 1153 CD1 LEU B 23 9.509 5.129 14.020 1.00 15.65 C +ATOM 1154 CD2 LEU B 23 9.588 7.493 14.822 1.00 18.35 C +ATOM 1155 H LEU B 23 13.736 5.654 15.389 1.00 15.00 H +ATOM 1156 N LEU B 24 11.672 6.936 18.895 1.00 4.41 N +ATOM 1157 CA LEU B 24 11.209 6.427 20.199 1.00 5.96 C +ATOM 1158 C LEU B 24 9.869 5.589 20.226 1.00 6.17 C +ATOM 1159 O LEU B 24 8.750 6.062 20.072 1.00 3.94 O +ATOM 1160 CB LEU B 24 11.234 7.643 21.120 1.00 9.00 C +ATOM 1161 CG LEU B 24 12.381 7.678 22.141 1.00 12.19 C +ATOM 1162 CD1 LEU B 24 13.719 7.199 21.578 1.00 6.06 C +ATOM 1163 CD2 LEU B 24 12.451 9.015 22.873 1.00 5.03 C +ATOM 1164 H LEU B 24 11.549 7.886 18.602 1.00 15.00 H +ATOM 1165 N ASP B 25 10.009 4.262 20.364 1.00 7.45 N +ATOM 1166 CA ASP B 25 8.798 3.452 20.120 1.00 7.91 C +ATOM 1167 C ASP B 25 8.248 2.587 21.300 1.00 5.74 C +ATOM 1168 O ASP B 25 8.641 1.467 21.562 1.00 6.02 O +ATOM 1169 CB ASP B 25 9.015 2.651 18.801 1.00 9.14 C +ATOM 1170 CG ASP B 25 7.778 1.925 18.308 1.00 12.45 C +ATOM 1171 OD1 ASP B 25 6.703 2.106 18.868 1.00 21.66 O +ATOM 1172 OD2 ASP B 25 7.881 1.162 17.360 1.00 11.59 O +ATOM 1173 H ASP B 25 10.914 3.852 20.515 1.00 15.00 H +ATOM 1174 N THR B 26 7.241 3.084 22.009 1.00 6.69 N +ATOM 1175 CA THR B 26 6.714 2.258 23.143 1.00 6.27 C +ATOM 1176 C THR B 26 6.004 0.933 22.778 1.00 7.34 C +ATOM 1177 O THR B 26 5.793 0.036 23.578 1.00 8.88 O +ATOM 1178 CB THR B 26 5.729 3.109 23.933 1.00 6.84 C +ATOM 1179 OG1 THR B 26 4.608 3.464 23.074 1.00 9.25 O +ATOM 1180 CG2 THR B 26 6.425 4.368 24.451 1.00 2.00 C +ATOM 1181 H THR B 26 6.901 4.007 21.818 1.00 15.00 H +ATOM 1182 HG1 THR B 26 3.859 2.953 23.397 1.00 15.00 H +ATOM 1183 N GLY B 27 5.656 0.858 21.478 1.00 4.35 N +ATOM 1184 CA GLY B 27 5.173 -0.400 20.906 1.00 9.46 C +ATOM 1185 C GLY B 27 6.203 -1.516 20.597 1.00 15.26 C +ATOM 1186 O GLY B 27 5.877 -2.692 20.436 1.00 17.22 O +ATOM 1187 H GLY B 27 5.801 1.683 20.945 1.00 15.00 H +ATOM 1188 N ALA B 28 7.492 -1.103 20.522 1.00 14.40 N +ATOM 1189 CA ALA B 28 8.551 -2.107 20.342 1.00 5.74 C +ATOM 1190 C ALA B 28 9.165 -2.701 21.615 1.00 2.42 C +ATOM 1191 O ALA B 28 9.669 -2.061 22.526 1.00 2.00 O +ATOM 1192 CB ALA B 28 9.661 -1.568 19.447 1.00 4.25 C +ATOM 1193 H ALA B 28 7.713 -0.156 20.744 1.00 15.00 H +ATOM 1194 N ASP B 29 9.112 -4.029 21.619 1.00 2.74 N +ATOM 1195 CA ASP B 29 9.838 -4.791 22.645 1.00 2.57 C +ATOM 1196 C ASP B 29 11.373 -4.638 22.626 1.00 3.27 C +ATOM 1197 O ASP B 29 12.073 -4.576 23.621 1.00 7.51 O +ATOM 1198 CB ASP B 29 9.512 -6.271 22.479 1.00 5.23 C +ATOM 1199 CG ASP B 29 8.133 -6.745 22.899 1.00 9.26 C +ATOM 1200 OD1 ASP B 29 7.455 -6.048 23.657 1.00 14.61 O +ATOM 1201 OD2 ASP B 29 7.756 -7.845 22.469 1.00 8.73 O +ATOM 1202 H ASP B 29 8.540 -4.432 20.905 1.00 15.00 H +ATOM 1203 N ASP B 30 11.861 -4.594 21.390 1.00 6.36 N +ATOM 1204 CA ASP B 30 13.280 -4.652 21.055 1.00 9.02 C +ATOM 1205 C ASP B 30 13.748 -3.529 20.146 1.00 8.29 C +ATOM 1206 O ASP B 30 12.983 -2.852 19.483 1.00 11.43 O +ATOM 1207 CB ASP B 30 13.615 -5.914 20.256 1.00 14.97 C +ATOM 1208 CG ASP B 30 13.403 -7.271 20.937 1.00 16.52 C +ATOM 1209 OD1 ASP B 30 13.879 -7.478 22.077 1.00 13.64 O +ATOM 1210 OD2 ASP B 30 12.783 -8.114 20.271 1.00 16.84 O +ATOM 1211 H ASP B 30 11.189 -4.560 20.656 1.00 15.00 H +ATOM 1212 N THR B 31 15.069 -3.377 20.133 1.00 11.09 N +ATOM 1213 CA THR B 31 15.689 -2.288 19.330 1.00 10.79 C +ATOM 1214 C THR B 31 16.168 -2.748 17.969 1.00 5.57 C +ATOM 1215 O THR B 31 16.972 -3.643 17.843 1.00 11.09 O +ATOM 1216 CB THR B 31 16.851 -1.587 20.106 1.00 7.86 C +ATOM 1217 OG1 THR B 31 16.360 -0.962 21.300 1.00 3.89 O +ATOM 1218 CG2 THR B 31 17.629 -0.548 19.287 1.00 2.00 C +ATOM 1219 H THR B 31 15.617 -4.041 20.639 1.00 15.00 H +ATOM 1220 HG1 THR B 31 16.103 -1.648 21.915 1.00 15.00 H +ATOM 1221 N VAL B 32 15.612 -2.144 16.947 1.00 6.15 N +ATOM 1222 CA VAL B 32 15.849 -2.621 15.593 1.00 6.00 C +ATOM 1223 C VAL B 32 16.503 -1.559 14.738 1.00 7.16 C +ATOM 1224 O VAL B 32 15.939 -0.497 14.526 1.00 12.47 O +ATOM 1225 CB VAL B 32 14.518 -3.116 15.014 1.00 3.33 C +ATOM 1226 CG1 VAL B 32 14.578 -3.566 13.547 1.00 8.75 C +ATOM 1227 CG2 VAL B 32 14.063 -4.290 15.870 1.00 2.01 C +ATOM 1228 H VAL B 32 15.020 -1.362 17.150 1.00 15.00 H +ATOM 1229 N LEU B 33 17.741 -1.848 14.325 1.00 7.71 N +ATOM 1230 CA LEU B 33 18.539 -0.837 13.600 1.00 10.06 C +ATOM 1231 C LEU B 33 18.820 -1.204 12.169 1.00 9.90 C +ATOM 1232 O LEU B 33 18.788 -2.357 11.795 1.00 15.88 O +ATOM 1233 CB LEU B 33 19.892 -0.557 14.286 1.00 11.85 C +ATOM 1234 CG LEU B 33 20.078 0.579 15.330 1.00 14.18 C +ATOM 1235 CD1 LEU B 33 18.852 0.924 16.195 1.00 13.47 C +ATOM 1236 CD2 LEU B 33 21.275 0.276 16.230 1.00 12.15 C +ATOM 1237 H LEU B 33 18.087 -2.770 14.499 1.00 15.00 H +ATOM 1238 N GLU B 34 19.111 -0.206 11.360 1.00 14.19 N +ATOM 1239 CA GLU B 34 19.536 -0.485 9.975 1.00 16.04 C +ATOM 1240 C GLU B 34 20.898 -1.177 9.727 1.00 15.98 C +ATOM 1241 O GLU B 34 21.813 -1.161 10.535 1.00 15.35 O +ATOM 1242 CB GLU B 34 19.605 0.826 9.249 1.00 19.39 C +ATOM 1243 CG GLU B 34 20.722 1.739 9.795 1.00 26.76 C +ATOM 1244 CD GLU B 34 20.801 2.877 8.814 1.00 34.63 C +ATOM 1245 OE1 GLU B 34 21.217 2.616 7.682 1.00 43.75 O +ATOM 1246 OE2 GLU B 34 20.420 3.998 9.160 1.00 32.10 O +ATOM 1247 H GLU B 34 19.139 0.709 11.757 1.00 15.00 H +ATOM 1248 N GLU B 35 21.037 -1.752 8.535 1.00 17.85 N +ATOM 1249 CA GLU B 35 22.295 -2.452 8.201 1.00 19.01 C +ATOM 1250 C GLU B 35 23.624 -1.752 8.500 1.00 20.56 C +ATOM 1251 O GLU B 35 23.953 -0.712 7.941 1.00 22.63 O +ATOM 1252 CB GLU B 35 22.267 -2.892 6.739 1.00 18.71 C +ATOM 1253 CG GLU B 35 23.137 -4.070 6.309 1.00 25.41 C +ATOM 1254 CD GLU B 35 23.127 -5.194 7.320 1.00 31.07 C +ATOM 1255 OE1 GLU B 35 22.065 -5.751 7.614 1.00 33.01 O +ATOM 1256 OE2 GLU B 35 24.211 -5.505 7.809 1.00 33.12 O +ATOM 1257 H GLU B 35 20.282 -1.708 7.888 1.00 15.00 H +ATOM 1258 N MET B 36 24.359 -2.401 9.417 1.00 17.85 N +ATOM 1259 CA MET B 36 25.668 -1.889 9.802 1.00 16.22 C +ATOM 1260 C MET B 36 26.715 -2.887 10.316 1.00 19.10 C +ATOM 1261 O MET B 36 26.436 -3.975 10.790 1.00 20.28 O +ATOM 1262 CB MET B 36 25.499 -0.745 10.786 1.00 18.45 C +ATOM 1263 CG MET B 36 25.081 -1.138 12.201 1.00 21.13 C +ATOM 1264 SD MET B 36 25.048 0.354 13.194 1.00 23.85 S +ATOM 1265 CE MET B 36 23.662 1.119 12.338 1.00 23.44 C +ATOM 1266 H MET B 36 23.929 -3.187 9.853 1.00 15.00 H +ATOM 1267 N ASN B 37 27.986 -2.485 10.207 1.00 22.03 N +ATOM 1268 CA ASN B 37 28.949 -3.438 10.791 1.00 23.18 C +ATOM 1269 C ASN B 37 29.378 -3.126 12.225 1.00 19.96 C +ATOM 1270 O ASN B 37 29.725 -2.007 12.566 1.00 20.91 O +ATOM 1271 CB ASN B 37 30.132 -3.676 9.826 1.00 27.49 C +ATOM 1272 CG ASN B 37 30.702 -5.077 10.023 1.00 35.24 C +ATOM 1273 OD1 ASN B 37 30.397 -5.788 10.963 1.00 41.93 O +ATOM 1274 ND2 ASN B 37 31.570 -5.480 9.113 1.00 36.98 N +ATOM 1275 H ASN B 37 28.195 -1.569 9.874 1.00 15.00 H +ATOM 1276 HD21 ASN B 37 31.921 -6.393 9.305 1.00 15.00 H +ATOM 1277 HD22 ASN B 37 31.883 -4.926 8.350 1.00 15.00 H +ATOM 1278 N LEU B 38 29.309 -4.142 13.064 1.00 16.38 N +ATOM 1279 CA LEU B 38 29.572 -3.902 14.486 1.00 13.73 C +ATOM 1280 C LEU B 38 30.672 -4.815 15.041 1.00 16.59 C +ATOM 1281 O LEU B 38 30.881 -5.966 14.639 1.00 18.31 O +ATOM 1282 CB LEU B 38 28.261 -4.104 15.252 1.00 8.78 C +ATOM 1283 CG LEU B 38 27.534 -2.931 15.893 1.00 8.20 C +ATOM 1284 CD1 LEU B 38 27.680 -1.620 15.152 1.00 6.79 C +ATOM 1285 CD2 LEU B 38 26.049 -3.255 16.082 1.00 9.67 C +ATOM 1286 H LEU B 38 29.106 -5.046 12.686 1.00 15.00 H +ATOM 1287 N PRO B 39 31.437 -4.284 16.011 1.00 16.54 N +ATOM 1288 CA PRO B 39 32.392 -5.211 16.638 1.00 16.80 C +ATOM 1289 C PRO B 39 31.710 -6.381 17.333 1.00 18.98 C +ATOM 1290 O PRO B 39 30.861 -6.185 18.187 1.00 23.65 O +ATOM 1291 CB PRO B 39 33.194 -4.307 17.571 1.00 11.55 C +ATOM 1292 CG PRO B 39 32.285 -3.098 17.816 1.00 18.60 C +ATOM 1293 CD PRO B 39 31.499 -2.919 16.509 1.00 15.25 C +ATOM 1294 N GLY B 40 32.112 -7.602 16.940 1.00 19.65 N +ATOM 1295 CA GLY B 40 31.768 -8.774 17.771 1.00 19.46 C +ATOM 1296 C GLY B 40 31.086 -10.008 17.131 1.00 19.70 C +ATOM 1297 O GLY B 40 30.880 -10.132 15.928 1.00 16.77 O +ATOM 1298 H GLY B 40 32.609 -7.655 16.081 1.00 15.00 H +ATOM 1299 N LYS B 41 30.735 -10.942 18.032 1.00 22.02 N +ATOM 1300 CA LYS B 41 29.912 -12.108 17.617 1.00 23.82 C +ATOM 1301 C LYS B 41 28.393 -11.915 17.692 1.00 21.29 C +ATOM 1302 O LYS B 41 27.859 -11.242 18.567 1.00 25.33 O +ATOM 1303 CB LYS B 41 30.291 -13.337 18.450 1.00 28.74 C +ATOM 1304 CG LYS B 41 31.518 -14.026 17.845 1.00 36.82 C +ATOM 1305 CD LYS B 41 32.275 -14.891 18.859 1.00 43.84 C +ATOM 1306 CE LYS B 41 33.584 -15.475 18.292 1.00 50.21 C +ATOM 1307 NZ LYS B 41 34.272 -16.305 19.307 1.00 53.29 N +ATOM 1308 H LYS B 41 30.884 -10.710 18.991 1.00 15.00 H +ATOM 1309 HZ1 LYS B 41 34.471 -15.730 20.151 1.00 15.00 H +ATOM 1310 HZ2 LYS B 41 33.664 -17.106 19.573 1.00 15.00 H +ATOM 1311 HZ3 LYS B 41 35.165 -16.665 18.913 1.00 15.00 H +ATOM 1312 N TRP B 42 27.716 -12.539 16.733 1.00 17.46 N +ATOM 1313 CA TRP B 42 26.251 -12.403 16.649 1.00 13.49 C +ATOM 1314 C TRP B 42 25.510 -13.703 16.324 1.00 12.15 C +ATOM 1315 O TRP B 42 26.051 -14.654 15.782 1.00 14.95 O +ATOM 1316 CB TRP B 42 25.920 -11.301 15.634 1.00 12.14 C +ATOM 1317 CG TRP B 42 26.433 -11.709 14.276 1.00 13.33 C +ATOM 1318 CD1 TRP B 42 27.694 -11.399 13.751 1.00 11.85 C +ATOM 1319 CD2 TRP B 42 25.816 -12.577 13.295 1.00 13.96 C +ATOM 1320 NE1 TRP B 42 27.895 -12.010 12.555 1.00 15.10 N +ATOM 1321 CE2 TRP B 42 26.761 -12.752 12.231 1.00 16.59 C +ATOM 1322 CE3 TRP B 42 24.574 -13.230 13.225 1.00 15.64 C +ATOM 1323 CZ2 TRP B 42 26.437 -13.571 11.121 1.00 13.61 C +ATOM 1324 CZ3 TRP B 42 24.267 -14.045 12.116 1.00 15.99 C +ATOM 1325 CH2 TRP B 42 25.190 -14.212 11.063 1.00 13.09 C +ATOM 1326 H TRP B 42 28.224 -13.083 16.070 1.00 15.00 H +ATOM 1327 HE1 TRP B 42 28.703 -11.932 12.009 1.00 15.00 H +ATOM 1328 N LYS B 43 24.230 -13.726 16.645 1.00 14.76 N +ATOM 1329 CA LYS B 43 23.372 -14.840 16.156 1.00 15.01 C +ATOM 1330 C LYS B 43 22.199 -14.340 15.321 1.00 11.60 C +ATOM 1331 O LYS B 43 21.748 -13.221 15.518 1.00 8.57 O +ATOM 1332 CB LYS B 43 22.767 -15.644 17.315 1.00 16.41 C +ATOM 1333 CG LYS B 43 23.607 -15.698 18.598 1.00 25.64 C +ATOM 1334 CD LYS B 43 22.793 -16.192 19.807 1.00 30.49 C +ATOM 1335 CE LYS B 43 23.348 -15.681 21.147 1.00 36.04 C +ATOM 1336 NZ LYS B 43 22.471 -16.056 22.271 1.00 38.16 N +ATOM 1337 H LYS B 43 23.865 -12.950 17.161 1.00 15.00 H +ATOM 1338 HZ1 LYS B 43 22.222 -17.062 22.183 1.00 15.00 H +ATOM 1339 HZ2 LYS B 43 22.986 -15.906 23.162 1.00 15.00 H +ATOM 1340 HZ3 LYS B 43 21.605 -15.481 22.263 1.00 15.00 H +ATOM 1341 N PRO B 44 21.685 -15.153 14.386 1.00 11.50 N +ATOM 1342 CA PRO B 44 20.414 -14.773 13.752 1.00 10.15 C +ATOM 1343 C PRO B 44 19.083 -15.026 14.525 1.00 14.71 C +ATOM 1344 O PRO B 44 18.892 -15.789 15.474 1.00 15.94 O +ATOM 1345 CB PRO B 44 20.520 -15.507 12.434 1.00 7.39 C +ATOM 1346 CG PRO B 44 21.262 -16.797 12.740 1.00 10.30 C +ATOM 1347 CD PRO B 44 22.250 -16.379 13.839 1.00 15.80 C +ATOM 1348 N LYS B 45 18.106 -14.284 14.016 1.00 14.12 N +ATOM 1349 CA LYS B 45 16.794 -14.321 14.642 1.00 7.59 C +ATOM 1350 C LYS B 45 15.674 -14.033 13.602 1.00 10.68 C +ATOM 1351 O LYS B 45 15.874 -13.253 12.677 1.00 13.93 O +ATOM 1352 CB LYS B 45 16.948 -13.268 15.700 1.00 2.27 C +ATOM 1353 CG LYS B 45 16.151 -13.533 16.934 1.00 10.10 C +ATOM 1354 CD LYS B 45 15.901 -12.228 17.660 1.00 13.52 C +ATOM 1355 CE LYS B 45 14.845 -12.483 18.738 1.00 22.70 C +ATOM 1356 NZ LYS B 45 14.288 -11.214 19.244 1.00 24.26 N +ATOM 1357 H LYS B 45 18.350 -13.597 13.327 1.00 15.00 H +ATOM 1358 HZ1 LYS B 45 13.969 -10.630 18.445 1.00 15.00 H +ATOM 1359 HZ2 LYS B 45 13.480 -11.422 19.864 1.00 15.00 H +ATOM 1360 HZ3 LYS B 45 15.017 -10.705 19.784 1.00 15.00 H +ATOM 1361 N MET B 46 14.490 -14.663 13.752 1.00 15.78 N +ATOM 1362 CA MET B 46 13.281 -14.132 13.037 1.00 13.78 C +ATOM 1363 C MET B 46 12.336 -13.203 13.877 1.00 11.68 C +ATOM 1364 O MET B 46 11.738 -13.624 14.856 1.00 11.56 O +ATOM 1365 CB MET B 46 12.405 -15.249 12.457 1.00 7.23 C +ATOM 1366 CG MET B 46 13.121 -16.153 11.481 1.00 10.18 C +ATOM 1367 SD MET B 46 13.485 -15.302 9.972 1.00 15.69 S +ATOM 1368 CE MET B 46 11.863 -15.290 9.206 1.00 8.69 C +ATOM 1369 H MET B 46 14.423 -15.366 14.457 1.00 15.00 H +ATOM 1370 N ILE B 47 12.207 -11.923 13.471 1.00 11.05 N +ATOM 1371 CA ILE B 47 11.224 -11.056 14.153 1.00 8.18 C +ATOM 1372 C ILE B 47 10.063 -10.567 13.256 1.00 6.17 C +ATOM 1373 O ILE B 47 10.203 -10.268 12.071 1.00 4.21 O +ATOM 1374 CB ILE B 47 11.868 -9.870 14.915 1.00 6.47 C +ATOM 1375 CG1 ILE B 47 12.676 -8.934 14.035 1.00 8.49 C +ATOM 1376 CG2 ILE B 47 12.748 -10.294 16.084 1.00 2.00 C +ATOM 1377 CD1 ILE B 47 12.795 -7.565 14.730 1.00 7.40 C +ATOM 1378 H ILE B 47 12.692 -11.654 12.636 1.00 15.00 H +ATOM 1379 N GLY B 48 8.867 -10.542 13.860 1.00 7.20 N +ATOM 1380 CA GLY B 48 7.681 -10.220 13.032 1.00 8.57 C +ATOM 1381 C GLY B 48 6.758 -9.082 13.466 1.00 9.75 C +ATOM 1382 O GLY B 48 6.748 -8.612 14.598 1.00 8.98 O +ATOM 1383 H GLY B 48 8.821 -10.741 14.834 1.00 15.00 H +ATOM 1384 N GLY B 49 5.941 -8.656 12.514 1.00 13.64 N +ATOM 1385 CA GLY B 49 4.937 -7.642 12.885 1.00 12.84 C +ATOM 1386 C GLY B 49 4.027 -7.270 11.734 1.00 15.22 C +ATOM 1387 O GLY B 49 3.748 -8.129 10.915 1.00 18.27 O +ATOM 1388 H GLY B 49 5.989 -9.057 11.606 1.00 15.00 H +ATOM 1389 N ILE B 50 3.573 -6.002 11.639 1.00 13.68 N +ATOM 1390 CA ILE B 50 2.706 -5.646 10.491 1.00 11.58 C +ATOM 1391 C ILE B 50 3.278 -6.090 9.113 1.00 13.86 C +ATOM 1392 O ILE B 50 4.400 -5.782 8.730 1.00 20.94 O +ATOM 1393 CB ILE B 50 2.409 -4.126 10.524 1.00 10.42 C +ATOM 1394 CG1 ILE B 50 1.846 -3.670 11.872 1.00 7.91 C +ATOM 1395 CG2 ILE B 50 1.502 -3.590 9.395 1.00 2.54 C +ATOM 1396 CD1 ILE B 50 0.604 -4.431 12.287 1.00 8.46 C +ATOM 1397 H ILE B 50 3.886 -5.334 12.323 1.00 15.00 H +ATOM 1398 N GLY B 51 2.506 -6.887 8.376 1.00 12.85 N +ATOM 1399 CA GLY B 51 3.070 -7.232 7.062 1.00 11.85 C +ATOM 1400 C GLY B 51 3.804 -8.561 7.004 1.00 11.64 C +ATOM 1401 O GLY B 51 3.910 -9.207 5.975 1.00 13.97 O +ATOM 1402 H GLY B 51 1.636 -7.226 8.725 1.00 15.00 H +ATOM 1403 N GLY B 52 4.281 -8.956 8.192 1.00 10.16 N +ATOM 1404 CA GLY B 52 5.063 -10.188 8.325 1.00 8.77 C +ATOM 1405 C GLY B 52 6.412 -10.082 9.085 1.00 10.56 C +ATOM 1406 O GLY B 52 6.637 -9.230 9.933 1.00 11.23 O +ATOM 1407 H GLY B 52 4.104 -8.383 8.992 1.00 15.00 H +ATOM 1408 N PHE B 53 7.281 -11.045 8.747 1.00 11.07 N +ATOM 1409 CA PHE B 53 8.617 -11.307 9.317 1.00 11.70 C +ATOM 1410 C PHE B 53 9.829 -10.842 8.488 1.00 15.80 C +ATOM 1411 O PHE B 53 9.897 -11.013 7.274 1.00 18.07 O +ATOM 1412 CB PHE B 53 8.808 -12.806 9.572 1.00 4.31 C +ATOM 1413 CG PHE B 53 8.086 -13.211 10.823 1.00 4.87 C +ATOM 1414 CD1 PHE B 53 6.707 -13.481 10.761 1.00 6.81 C +ATOM 1415 CD2 PHE B 53 8.807 -13.338 12.023 1.00 2.00 C +ATOM 1416 CE1 PHE B 53 6.043 -13.950 11.908 1.00 10.37 C +ATOM 1417 CE2 PHE B 53 8.152 -13.838 13.157 1.00 4.35 C +ATOM 1418 CZ PHE B 53 6.780 -14.160 13.088 1.00 4.36 C +ATOM 1419 H PHE B 53 6.973 -11.592 7.970 1.00 15.00 H +ATOM 1420 N ILE B 54 10.807 -10.278 9.234 1.00 16.52 N +ATOM 1421 CA ILE B 54 12.170 -10.098 8.704 1.00 10.33 C +ATOM 1422 C ILE B 54 13.260 -10.938 9.408 1.00 9.77 C +ATOM 1423 O ILE B 54 13.132 -11.362 10.558 1.00 7.99 O +ATOM 1424 CB ILE B 54 12.572 -8.613 8.634 1.00 6.25 C +ATOM 1425 CG1 ILE B 54 12.653 -7.928 10.004 1.00 9.81 C +ATOM 1426 CG2 ILE B 54 11.639 -7.857 7.703 1.00 2.00 C +ATOM 1427 CD1 ILE B 54 13.384 -6.579 9.991 1.00 2.88 C +ATOM 1428 H ILE B 54 10.591 -10.082 10.192 1.00 15.00 H +ATOM 1429 N LYS B 55 14.367 -11.147 8.652 1.00 10.99 N +ATOM 1430 CA LYS B 55 15.595 -11.645 9.329 1.00 10.11 C +ATOM 1431 C LYS B 55 16.630 -10.591 9.723 1.00 5.92 C +ATOM 1432 O LYS B 55 16.878 -9.611 9.044 1.00 6.28 O +ATOM 1433 CB LYS B 55 16.267 -12.792 8.562 1.00 12.08 C +ATOM 1434 CG LYS B 55 17.209 -13.621 9.428 1.00 18.95 C +ATOM 1435 CD LYS B 55 17.995 -14.639 8.595 1.00 26.21 C +ATOM 1436 CE LYS B 55 19.344 -14.978 9.238 1.00 30.94 C +ATOM 1437 NZ LYS B 55 20.154 -15.900 8.409 1.00 35.50 N +ATOM 1438 H LYS B 55 14.363 -10.794 7.720 1.00 15.00 H +ATOM 1439 HZ1 LYS B 55 19.567 -16.713 8.131 1.00 15.00 H +ATOM 1440 HZ2 LYS B 55 20.484 -15.400 7.560 1.00 15.00 H +ATOM 1441 HZ3 LYS B 55 20.969 -16.233 8.962 1.00 15.00 H +ATOM 1442 N VAL B 56 17.170 -10.858 10.902 1.00 8.08 N +ATOM 1443 CA VAL B 56 17.925 -9.967 11.800 1.00 8.36 C +ATOM 1444 C VAL B 56 19.180 -10.675 12.405 1.00 9.26 C +ATOM 1445 O VAL B 56 19.237 -11.905 12.504 1.00 10.25 O +ATOM 1446 CB VAL B 56 16.825 -9.604 12.832 1.00 11.67 C +ATOM 1447 CG1 VAL B 56 17.084 -9.976 14.294 1.00 12.60 C +ATOM 1448 CG2 VAL B 56 16.255 -8.214 12.568 1.00 14.41 C +ATOM 1449 H VAL B 56 16.866 -11.733 11.281 1.00 15.00 H +ATOM 1450 N ARG B 57 20.168 -9.866 12.832 1.00 8.70 N +ATOM 1451 CA ARG B 57 21.337 -10.349 13.610 1.00 10.33 C +ATOM 1452 C ARG B 57 21.395 -9.718 14.992 1.00 10.16 C +ATOM 1453 O ARG B 57 21.362 -8.504 15.149 1.00 9.24 O +ATOM 1454 CB ARG B 57 22.727 -10.090 12.937 1.00 8.35 C +ATOM 1455 CG ARG B 57 22.713 -10.404 11.425 1.00 13.65 C +ATOM 1456 CD ARG B 57 24.024 -10.465 10.619 1.00 11.84 C +ATOM 1457 NE ARG B 57 24.804 -9.225 10.674 1.00 16.18 N +ATOM 1458 CZ ARG B 57 24.649 -8.242 9.749 1.00 22.99 C +ATOM 1459 NH1 ARG B 57 23.787 -8.366 8.737 1.00 24.07 N +ATOM 1460 NH2 ARG B 57 25.371 -7.121 9.840 1.00 19.42 N +ATOM 1461 H ARG B 57 20.044 -8.904 12.610 1.00 15.00 H +ATOM 1462 HE ARG B 57 25.451 -9.064 11.420 1.00 15.00 H +ATOM 1463 HH11 ARG B 57 23.234 -9.194 8.644 1.00 15.00 H +ATOM 1464 HH12 ARG B 57 23.691 -7.628 8.068 1.00 15.00 H +ATOM 1465 HH21 ARG B 57 26.017 -7.011 10.597 1.00 15.00 H +ATOM 1466 HH22 ARG B 57 25.270 -6.397 9.158 1.00 15.00 H +ATOM 1467 N GLN B 58 21.486 -10.570 15.988 1.00 7.03 N +ATOM 1468 CA GLN B 58 21.592 -10.082 17.357 1.00 10.22 C +ATOM 1469 C GLN B 58 22.996 -9.771 17.916 1.00 13.31 C +ATOM 1470 O GLN B 58 23.802 -10.678 18.113 1.00 16.89 O +ATOM 1471 CB GLN B 58 20.886 -11.120 18.237 1.00 12.64 C +ATOM 1472 CG GLN B 58 21.070 -10.886 19.729 1.00 17.77 C +ATOM 1473 CD GLN B 58 20.058 -11.736 20.440 1.00 25.70 C +ATOM 1474 OE1 GLN B 58 19.913 -12.907 20.192 1.00 33.64 O +ATOM 1475 NE2 GLN B 58 19.283 -11.126 21.315 1.00 30.17 N +ATOM 1476 H GLN B 58 21.408 -11.533 15.773 1.00 15.00 H +ATOM 1477 HE21 GLN B 58 18.621 -11.771 21.684 1.00 15.00 H +ATOM 1478 HE22 GLN B 58 19.338 -10.167 21.559 1.00 15.00 H +ATOM 1479 N TYR B 59 23.236 -8.475 18.241 1.00 11.16 N +ATOM 1480 CA TYR B 59 24.436 -8.173 19.042 1.00 7.33 C +ATOM 1481 C TYR B 59 24.160 -7.804 20.484 1.00 7.47 C +ATOM 1482 O TYR B 59 23.241 -7.060 20.840 1.00 10.58 O +ATOM 1483 CB TYR B 59 25.371 -7.105 18.436 1.00 4.61 C +ATOM 1484 CG TYR B 59 25.778 -7.327 16.992 1.00 2.00 C +ATOM 1485 CD1 TYR B 59 24.840 -7.147 15.954 1.00 3.44 C +ATOM 1486 CD2 TYR B 59 27.113 -7.657 16.698 1.00 2.40 C +ATOM 1487 CE1 TYR B 59 25.261 -7.249 14.608 1.00 7.27 C +ATOM 1488 CE2 TYR B 59 27.540 -7.767 15.353 1.00 2.54 C +ATOM 1489 CZ TYR B 59 26.618 -7.530 14.311 1.00 7.43 C +ATOM 1490 OH TYR B 59 27.042 -7.529 12.985 1.00 11.55 O +ATOM 1491 H TYR B 59 22.548 -7.789 17.999 1.00 15.00 H +ATOM 1492 HH TYR B 59 27.983 -7.657 12.954 1.00 15.00 H +ATOM 1493 N ASP B 60 25.010 -8.383 21.321 1.00 5.52 N +ATOM 1494 CA ASP B 60 24.952 -8.043 22.752 1.00 11.07 C +ATOM 1495 C ASP B 60 25.991 -7.060 23.263 1.00 13.43 C +ATOM 1496 O ASP B 60 27.047 -6.935 22.676 1.00 20.73 O +ATOM 1497 CB ASP B 60 25.082 -9.282 23.617 1.00 15.28 C +ATOM 1498 CG ASP B 60 23.954 -10.241 23.296 1.00 18.44 C +ATOM 1499 OD1 ASP B 60 22.860 -9.744 23.015 1.00 16.85 O +ATOM 1500 OD2 ASP B 60 24.181 -11.465 23.320 1.00 19.95 O +ATOM 1501 H ASP B 60 25.741 -8.939 20.927 1.00 15.00 H +ATOM 1502 N GLN B 61 25.680 -6.359 24.359 1.00 11.99 N +ATOM 1503 CA GLN B 61 26.655 -5.387 24.929 1.00 14.03 C +ATOM 1504 C GLN B 61 27.100 -4.131 24.148 1.00 12.65 C +ATOM 1505 O GLN B 61 28.092 -3.460 24.385 1.00 9.03 O +ATOM 1506 CB GLN B 61 27.843 -6.114 25.593 1.00 24.34 C +ATOM 1507 CG GLN B 61 27.531 -6.962 26.835 1.00 35.39 C +ATOM 1508 CD GLN B 61 26.983 -6.063 27.946 1.00 47.74 C +ATOM 1509 OE1 GLN B 61 26.140 -5.195 27.786 1.00 51.02 O +ATOM 1510 NE2 GLN B 61 27.471 -6.306 29.148 1.00 55.07 N +ATOM 1511 H GLN B 61 24.795 -6.513 24.791 1.00 15.00 H +ATOM 1512 HE21 GLN B 61 27.031 -5.678 29.788 1.00 15.00 H +ATOM 1513 HE22 GLN B 61 28.160 -6.986 29.364 1.00 15.00 H +ATOM 1514 N ILE B 62 26.251 -3.796 23.179 1.00 15.70 N +ATOM 1515 CA ILE B 62 26.481 -2.555 22.443 1.00 12.03 C +ATOM 1516 C ILE B 62 26.180 -1.354 23.300 1.00 14.39 C +ATOM 1517 O ILE B 62 25.092 -1.272 23.856 1.00 12.23 O +ATOM 1518 CB ILE B 62 25.600 -2.457 21.182 1.00 5.49 C +ATOM 1519 CG1 ILE B 62 25.559 -3.776 20.432 1.00 5.59 C +ATOM 1520 CG2 ILE B 62 26.128 -1.327 20.278 1.00 3.31 C +ATOM 1521 CD1 ILE B 62 26.921 -4.324 19.958 1.00 7.41 C +ATOM 1522 H ILE B 62 25.381 -4.278 23.102 1.00 15.00 H +ATOM 1523 N PRO B 63 27.164 -0.428 23.385 1.00 15.61 N +ATOM 1524 CA PRO B 63 26.906 0.898 23.941 1.00 13.48 C +ATOM 1525 C PRO B 63 26.293 1.795 22.909 1.00 13.82 C +ATOM 1526 O PRO B 63 26.734 1.853 21.766 1.00 15.11 O +ATOM 1527 CB PRO B 63 28.303 1.391 24.340 1.00 14.26 C +ATOM 1528 CG PRO B 63 29.197 0.154 24.279 1.00 19.67 C +ATOM 1529 CD PRO B 63 28.572 -0.618 23.111 1.00 19.48 C +ATOM 1530 N VAL B 64 25.233 2.488 23.357 1.00 14.77 N +ATOM 1531 CA VAL B 64 24.634 3.508 22.485 1.00 13.40 C +ATOM 1532 C VAL B 64 24.339 4.803 23.230 1.00 15.46 C +ATOM 1533 O VAL B 64 23.944 4.810 24.387 1.00 16.60 O +ATOM 1534 CB VAL B 64 23.501 2.988 21.503 1.00 11.21 C +ATOM 1535 CG1 VAL B 64 22.926 1.611 21.779 1.00 3.55 C +ATOM 1536 CG2 VAL B 64 22.439 4.014 21.112 1.00 8.00 C +ATOM 1537 H VAL B 64 24.918 2.327 24.293 1.00 15.00 H +ATOM 1538 N GLU B 65 24.606 5.911 22.539 1.00 16.43 N +ATOM 1539 CA GLU B 65 24.175 7.152 23.161 1.00 18.66 C +ATOM 1540 C GLU B 65 22.979 7.838 22.511 1.00 19.98 C +ATOM 1541 O GLU B 65 22.969 8.218 21.351 1.00 20.05 O +ATOM 1542 CB GLU B 65 25.336 8.115 23.378 1.00 21.70 C +ATOM 1543 CG GLU B 65 24.919 9.208 24.341 1.00 29.65 C +ATOM 1544 CD GLU B 65 26.083 10.070 24.736 1.00 36.74 C +ATOM 1545 OE1 GLU B 65 26.320 11.055 24.038 1.00 38.38 O +ATOM 1546 OE2 GLU B 65 26.723 9.772 25.754 1.00 42.36 O +ATOM 1547 H GLU B 65 25.013 5.841 21.629 1.00 15.00 H +ATOM 1548 N ILE B 66 21.940 7.962 23.333 1.00 18.67 N +ATOM 1549 CA ILE B 66 20.655 8.450 22.838 1.00 21.20 C +ATOM 1550 C ILE B 66 20.204 9.728 23.515 1.00 22.01 C +ATOM 1551 O ILE B 66 20.030 9.800 24.731 1.00 17.93 O +ATOM 1552 CB ILE B 66 19.633 7.322 22.954 1.00 29.17 C +ATOM 1553 CG1 ILE B 66 18.184 7.765 22.953 1.00 29.67 C +ATOM 1554 CG2 ILE B 66 19.883 6.414 24.176 1.00 36.07 C +ATOM 1555 CD1 ILE B 66 17.378 6.470 22.919 1.00 37.39 C +ATOM 1556 H ILE B 66 22.084 7.662 24.277 1.00 15.00 H +ATOM 1557 N CYS B 67 20.130 10.773 22.653 1.00 21.67 N +ATOM 1558 CA CYS B 67 19.868 12.129 23.183 1.00 24.86 C +ATOM 1559 C CYS B 67 20.683 12.628 24.398 1.00 27.18 C +ATOM 1560 O CYS B 67 20.158 13.217 25.331 1.00 32.07 O +ATOM 1561 CB CYS B 67 18.379 12.323 23.536 1.00 26.01 C +ATOM 1562 SG CYS B 67 17.441 13.262 22.312 1.00 31.34 S +ATOM 1563 H CYS B 67 20.189 10.569 21.672 1.00 15.00 H +ATOM 1564 N GLY B 68 21.999 12.356 24.407 1.00 25.32 N +ATOM 1565 CA GLY B 68 22.716 12.679 25.663 1.00 19.59 C +ATOM 1566 C GLY B 68 22.794 11.604 26.757 1.00 19.67 C +ATOM 1567 O GLY B 68 23.457 11.726 27.772 1.00 20.47 O +ATOM 1568 H GLY B 68 22.406 11.891 23.626 1.00 15.00 H +ATOM 1569 N HIS B 69 22.110 10.491 26.512 1.00 19.22 N +ATOM 1570 CA HIS B 69 22.143 9.499 27.575 1.00 21.19 C +ATOM 1571 C HIS B 69 22.852 8.196 27.168 1.00 23.33 C +ATOM 1572 O HIS B 69 22.624 7.632 26.113 1.00 25.34 O +ATOM 1573 CB HIS B 69 20.703 9.191 28.092 1.00 25.56 C +ATOM 1574 CG HIS B 69 19.843 10.386 28.515 1.00 28.62 C +ATOM 1575 ND1 HIS B 69 19.325 10.554 29.754 1.00 28.41 N +ATOM 1576 CD2 HIS B 69 19.453 11.490 27.750 1.00 30.83 C +ATOM 1577 CE1 HIS B 69 18.641 11.738 29.777 1.00 30.39 C +ATOM 1578 NE2 HIS B 69 18.726 12.315 28.538 1.00 33.59 N +ATOM 1579 H HIS B 69 21.463 10.446 25.757 1.00 15.00 H +ATOM 1580 HD1 HIS B 69 19.357 9.932 30.504 1.00 15.00 H +ATOM 1581 N LYS B 70 23.683 7.692 28.070 1.00 26.10 N +ATOM 1582 CA LYS B 70 24.147 6.296 27.941 1.00 26.44 C +ATOM 1583 C LYS B 70 23.153 5.138 28.154 1.00 24.20 C +ATOM 1584 O LYS B 70 22.630 4.904 29.238 1.00 22.46 O +ATOM 1585 CB LYS B 70 25.305 5.947 28.897 1.00 32.97 C +ATOM 1586 CG LYS B 70 25.920 7.049 29.766 1.00 45.39 C +ATOM 1587 CD LYS B 70 27.070 7.863 29.144 1.00 55.83 C +ATOM 1588 CE LYS B 70 27.628 8.851 30.192 1.00 61.60 C +ATOM 1589 NZ LYS B 70 29.049 9.144 29.936 1.00 66.82 N +ATOM 1590 H LYS B 70 23.780 8.222 28.908 1.00 15.00 H +ATOM 1591 HZ1 LYS B 70 29.401 8.506 29.193 1.00 15.00 H +ATOM 1592 HZ2 LYS B 70 29.168 10.130 29.630 1.00 15.00 H +ATOM 1593 HZ3 LYS B 70 29.597 8.979 30.806 1.00 15.00 H +ATOM 1594 N ALA B 71 23.009 4.349 27.090 1.00 21.63 N +ATOM 1595 CA ALA B 71 22.576 2.978 27.368 1.00 18.01 C +ATOM 1596 C ALA B 71 23.596 1.930 26.894 1.00 16.20 C +ATOM 1597 O ALA B 71 24.524 2.199 26.131 1.00 17.84 O +ATOM 1598 CB ALA B 71 21.223 2.724 26.702 1.00 15.87 C +ATOM 1599 H ALA B 71 23.336 4.643 26.191 1.00 15.00 H +ATOM 1600 N ILE B 72 23.382 0.708 27.363 1.00 13.59 N +ATOM 1601 CA ILE B 72 24.104 -0.478 26.873 1.00 15.46 C +ATOM 1602 C ILE B 72 23.229 -1.722 26.797 1.00 13.71 C +ATOM 1603 O ILE B 72 22.621 -2.213 27.750 1.00 16.33 O +ATOM 1604 CB ILE B 72 25.348 -0.855 27.715 1.00 20.10 C +ATOM 1605 CG1 ILE B 72 26.167 0.377 28.088 1.00 26.26 C +ATOM 1606 CG2 ILE B 72 26.252 -1.857 26.968 1.00 20.07 C +ATOM 1607 CD1 ILE B 72 27.266 0.065 29.097 1.00 32.25 C +ATOM 1608 H ILE B 72 22.708 0.658 28.101 1.00 15.00 H +ATOM 1609 N GLY B 73 23.201 -2.239 25.596 1.00 11.67 N +ATOM 1610 CA GLY B 73 22.655 -3.574 25.482 1.00 8.87 C +ATOM 1611 C GLY B 73 22.522 -4.085 24.067 1.00 6.58 C +ATOM 1612 O GLY B 73 23.303 -3.787 23.177 1.00 5.20 O +ATOM 1613 H GLY B 73 23.670 -1.766 24.857 1.00 15.00 H +ATOM 1614 N THR B 74 21.478 -4.898 23.926 1.00 6.84 N +ATOM 1615 CA THR B 74 21.186 -5.594 22.663 1.00 11.08 C +ATOM 1616 C THR B 74 20.493 -4.851 21.500 1.00 14.36 C +ATOM 1617 O THR B 74 19.344 -4.398 21.562 1.00 14.96 O +ATOM 1618 CB THR B 74 20.471 -6.889 23.036 1.00 8.01 C +ATOM 1619 OG1 THR B 74 21.331 -7.561 23.970 1.00 8.78 O +ATOM 1620 CG2 THR B 74 20.123 -7.812 21.873 1.00 3.87 C +ATOM 1621 H THR B 74 20.903 -5.031 24.731 1.00 15.00 H +ATOM 1622 HG1 THR B 74 22.051 -7.890 23.448 1.00 15.00 H +ATOM 1623 N VAL B 75 21.280 -4.770 20.393 1.00 14.46 N +ATOM 1624 CA VAL B 75 20.635 -4.294 19.154 1.00 10.05 C +ATOM 1625 C VAL B 75 20.396 -5.411 18.134 1.00 11.79 C +ATOM 1626 O VAL B 75 21.175 -6.357 18.057 1.00 16.56 O +ATOM 1627 CB VAL B 75 21.386 -3.109 18.544 1.00 5.97 C +ATOM 1628 CG1 VAL B 75 21.650 -2.004 19.576 1.00 2.00 C +ATOM 1629 CG2 VAL B 75 22.664 -3.549 17.855 1.00 7.87 C +ATOM 1630 H VAL B 75 22.195 -5.175 20.425 1.00 15.00 H +ATOM 1631 N LEU B 76 19.274 -5.301 17.401 1.00 6.91 N +ATOM 1632 CA LEU B 76 19.017 -6.238 16.306 1.00 3.96 C +ATOM 1633 C LEU B 76 19.276 -5.547 14.995 1.00 5.63 C +ATOM 1634 O LEU B 76 18.674 -4.505 14.789 1.00 6.81 O +ATOM 1635 CB LEU B 76 17.553 -6.658 16.291 1.00 5.49 C +ATOM 1636 CG LEU B 76 17.041 -7.743 17.238 1.00 6.70 C +ATOM 1637 CD1 LEU B 76 17.919 -8.081 18.439 1.00 9.14 C +ATOM 1638 CD2 LEU B 76 15.677 -7.341 17.731 1.00 3.57 C +ATOM 1639 H LEU B 76 18.652 -4.536 17.575 1.00 15.00 H +ATOM 1640 N VAL B 77 20.185 -6.095 14.140 1.00 9.13 N +ATOM 1641 CA VAL B 77 20.380 -5.444 12.823 1.00 5.95 C +ATOM 1642 C VAL B 77 19.859 -6.220 11.609 1.00 8.66 C +ATOM 1643 O VAL B 77 19.810 -7.436 11.611 1.00 12.59 O +ATOM 1644 CB VAL B 77 21.782 -4.796 12.651 1.00 7.05 C +ATOM 1645 CG1 VAL B 77 22.481 -4.562 14.004 1.00 6.71 C +ATOM 1646 CG2 VAL B 77 22.699 -5.406 11.601 1.00 4.38 C +ATOM 1647 H VAL B 77 20.697 -6.896 14.446 1.00 15.00 H +ATOM 1648 N GLY B 78 19.381 -5.499 10.595 1.00 8.15 N +ATOM 1649 CA GLY B 78 18.603 -6.169 9.534 1.00 3.81 C +ATOM 1650 C GLY B 78 17.921 -5.111 8.659 1.00 5.65 C +ATOM 1651 O GLY B 78 18.077 -3.923 8.917 1.00 5.08 O +ATOM 1652 H GLY B 78 19.401 -4.503 10.690 1.00 15.00 H +ATOM 1653 N PRO B 79 17.158 -5.518 7.614 1.00 5.18 N +ATOM 1654 CA PRO B 79 16.657 -4.546 6.644 1.00 2.92 C +ATOM 1655 C PRO B 79 15.390 -3.757 7.007 1.00 9.24 C +ATOM 1656 O PRO B 79 14.341 -3.835 6.391 1.00 14.52 O +ATOM 1657 CB PRO B 79 16.548 -5.391 5.396 1.00 2.02 C +ATOM 1658 CG PRO B 79 16.054 -6.736 5.949 1.00 2.52 C +ATOM 1659 CD PRO B 79 16.794 -6.881 7.274 1.00 4.34 C +ATOM 1660 N THR B 80 15.532 -2.889 8.004 1.00 10.43 N +ATOM 1661 CA THR B 80 14.414 -1.968 8.250 1.00 10.86 C +ATOM 1662 C THR B 80 14.497 -0.600 7.557 1.00 13.07 C +ATOM 1663 O THR B 80 15.558 0.016 7.484 1.00 19.01 O +ATOM 1664 CB THR B 80 14.277 -1.755 9.751 1.00 9.00 C +ATOM 1665 OG1 THR B 80 13.272 -0.766 10.037 1.00 10.99 O +ATOM 1666 CG2 THR B 80 15.638 -1.318 10.308 1.00 12.20 C +ATOM 1667 H THR B 80 16.405 -2.887 8.491 1.00 15.00 H +ATOM 1668 HG1 THR B 80 13.456 -0.448 10.925 1.00 15.00 H +ATOM 1669 N PRO B 81 13.357 -0.063 7.046 1.00 12.42 N +ATOM 1670 CA PRO B 81 13.412 1.341 6.572 1.00 13.21 C +ATOM 1671 C PRO B 81 13.581 2.406 7.662 1.00 12.96 C +ATOM 1672 O PRO B 81 13.811 3.579 7.400 1.00 11.59 O +ATOM 1673 CB PRO B 81 12.105 1.495 5.796 1.00 11.64 C +ATOM 1674 CG PRO B 81 11.143 0.471 6.400 1.00 8.50 C +ATOM 1675 CD PRO B 81 12.053 -0.684 6.808 1.00 11.98 C +ATOM 1676 N VAL B 82 13.446 1.928 8.912 1.00 13.68 N +ATOM 1677 CA VAL B 82 13.561 2.838 10.064 1.00 13.36 C +ATOM 1678 C VAL B 82 14.236 2.271 11.334 1.00 13.68 C +ATOM 1679 O VAL B 82 14.088 1.127 11.760 1.00 16.22 O +ATOM 1680 CB VAL B 82 12.166 3.484 10.323 1.00 14.41 C +ATOM 1681 CG1 VAL B 82 11.063 2.448 10.552 1.00 15.43 C +ATOM 1682 CG2 VAL B 82 12.195 4.590 11.382 1.00 11.95 C +ATOM 1683 H VAL B 82 13.191 0.971 9.049 1.00 15.00 H +ATOM 1684 N ASN B 83 15.025 3.157 11.932 1.00 12.01 N +ATOM 1685 CA ASN B 83 15.666 2.791 13.194 1.00 10.29 C +ATOM 1686 C ASN B 83 14.749 2.975 14.382 1.00 10.32 C +ATOM 1687 O ASN B 83 14.326 4.076 14.683 1.00 10.57 O +ATOM 1688 CB ASN B 83 16.893 3.665 13.454 1.00 12.27 C +ATOM 1689 CG ASN B 83 18.006 3.484 12.423 1.00 15.73 C +ATOM 1690 OD1 ASN B 83 18.331 2.413 11.945 1.00 15.61 O +ATOM 1691 ND2 ASN B 83 18.625 4.608 12.090 1.00 14.21 N +ATOM 1692 H ASN B 83 15.112 4.055 11.508 1.00 15.00 H +ATOM 1693 HD21 ASN B 83 19.364 4.496 11.434 1.00 15.00 H +ATOM 1694 HD22 ASN B 83 18.324 5.482 12.478 1.00 15.00 H +ATOM 1695 N ILE B 84 14.477 1.868 15.060 1.00 9.64 N +ATOM 1696 CA ILE B 84 13.566 1.901 16.204 1.00 6.41 C +ATOM 1697 C ILE B 84 14.247 1.541 17.523 1.00 4.30 C +ATOM 1698 O ILE B 84 14.832 0.478 17.661 1.00 2.00 O +ATOM 1699 CB ILE B 84 12.385 0.935 15.879 1.00 10.02 C +ATOM 1700 CG1 ILE B 84 11.366 1.514 14.928 1.00 8.83 C +ATOM 1701 CG2 ILE B 84 11.566 0.418 17.051 1.00 13.45 C +ATOM 1702 CD1 ILE B 84 10.834 0.320 14.179 1.00 13.89 C +ATOM 1703 H ILE B 84 14.881 1.013 14.728 1.00 15.00 H +ATOM 1704 N ILE B 85 14.100 2.481 18.481 1.00 2.41 N +ATOM 1705 CA ILE B 85 14.438 2.258 19.883 1.00 2.00 C +ATOM 1706 C ILE B 85 13.254 1.658 20.664 1.00 4.79 C +ATOM 1707 O ILE B 85 12.239 2.291 20.911 1.00 7.52 O +ATOM 1708 CB ILE B 85 14.902 3.586 20.555 1.00 2.00 C +ATOM 1709 CG1 ILE B 85 16.010 4.266 19.743 1.00 5.76 C +ATOM 1710 CG2 ILE B 85 15.426 3.416 22.009 1.00 2.00 C +ATOM 1711 CD1 ILE B 85 17.379 3.572 19.680 1.00 2.00 C +ATOM 1712 H ILE B 85 13.583 3.301 18.224 1.00 15.00 H +ATOM 1713 N GLY B 86 13.433 0.396 21.043 1.00 5.77 N +ATOM 1714 CA GLY B 86 12.423 -0.340 21.815 1.00 2.16 C +ATOM 1715 C GLY B 86 12.550 -0.181 23.328 1.00 4.53 C +ATOM 1716 O GLY B 86 13.503 0.392 23.860 1.00 6.76 O +ATOM 1717 H GLY B 86 14.339 0.022 20.849 1.00 15.00 H +ATOM 1718 N ARG B 87 11.557 -0.749 24.017 1.00 3.38 N +ATOM 1719 CA ARG B 87 11.510 -0.755 25.479 1.00 2.44 C +ATOM 1720 C ARG B 87 12.725 -1.248 26.266 1.00 5.65 C +ATOM 1721 O ARG B 87 12.956 -0.806 27.381 1.00 13.25 O +ATOM 1722 CB ARG B 87 10.290 -1.528 25.906 1.00 7.47 C +ATOM 1723 CG ARG B 87 8.917 -0.959 25.491 1.00 8.87 C +ATOM 1724 CD ARG B 87 7.801 -2.039 25.487 1.00 7.94 C +ATOM 1725 NE ARG B 87 7.774 -2.654 26.794 1.00 5.94 N +ATOM 1726 CZ ARG B 87 8.189 -3.922 26.991 1.00 6.37 C +ATOM 1727 NH1 ARG B 87 8.179 -4.849 26.041 1.00 2.00 N +ATOM 1728 NH2 ARG B 87 8.637 -4.237 28.197 1.00 10.76 N +ATOM 1729 H ARG B 87 10.767 -1.026 23.480 1.00 15.00 H +ATOM 1730 HE ARG B 87 7.682 -2.071 27.601 1.00 15.00 H +ATOM 1731 HH11 ARG B 87 7.853 -4.627 25.123 1.00 15.00 H +ATOM 1732 HH12 ARG B 87 8.503 -5.772 26.246 1.00 15.00 H +ATOM 1733 HH21 ARG B 87 8.653 -3.541 28.915 1.00 15.00 H +ATOM 1734 HH22 ARG B 87 8.959 -5.165 28.391 1.00 15.00 H +ATOM 1735 N ASN B 88 13.552 -2.137 25.667 1.00 4.58 N +ATOM 1736 CA ASN B 88 14.830 -2.535 26.304 1.00 4.31 C +ATOM 1737 C ASN B 88 15.915 -1.471 26.592 1.00 6.99 C +ATOM 1738 O ASN B 88 16.718 -1.548 27.513 1.00 10.50 O +ATOM 1739 CB ASN B 88 15.458 -3.730 25.561 1.00 2.00 C +ATOM 1740 CG ASN B 88 16.103 -3.340 24.263 1.00 4.25 C +ATOM 1741 OD1 ASN B 88 15.559 -2.581 23.473 1.00 6.48 O +ATOM 1742 ND2 ASN B 88 17.308 -3.865 24.045 1.00 2.00 N +ATOM 1743 H ASN B 88 13.264 -2.501 24.783 1.00 15.00 H +ATOM 1744 HD21 ASN B 88 17.747 -3.648 23.174 1.00 15.00 H +ATOM 1745 HD22 ASN B 88 17.759 -4.444 24.722 1.00 15.00 H +ATOM 1746 N LEU B 89 15.903 -0.476 25.702 1.00 6.35 N +ATOM 1747 CA LEU B 89 16.787 0.686 25.809 1.00 2.00 C +ATOM 1748 C LEU B 89 16.077 1.846 26.476 1.00 2.18 C +ATOM 1749 O LEU B 89 16.600 2.478 27.382 1.00 4.96 O +ATOM 1750 CB LEU B 89 17.326 1.021 24.395 1.00 3.14 C +ATOM 1751 CG LEU B 89 18.799 0.609 24.116 1.00 4.86 C +ATOM 1752 CD1 LEU B 89 19.161 -0.777 24.667 1.00 8.03 C +ATOM 1753 CD2 LEU B 89 19.205 0.739 22.651 1.00 2.06 C +ATOM 1754 H LEU B 89 15.259 -0.599 24.942 1.00 15.00 H +ATOM 1755 N LEU B 90 14.800 2.061 26.082 1.00 6.66 N +ATOM 1756 CA LEU B 90 13.932 3.133 26.689 1.00 6.20 C +ATOM 1757 C LEU B 90 13.854 3.200 28.214 1.00 4.35 C +ATOM 1758 O LEU B 90 13.775 4.235 28.869 1.00 5.39 O +ATOM 1759 CB LEU B 90 12.465 3.015 26.184 1.00 8.53 C +ATOM 1760 CG LEU B 90 11.936 3.857 24.981 1.00 5.53 C +ATOM 1761 CD1 LEU B 90 13.007 4.601 24.193 1.00 2.00 C +ATOM 1762 CD2 LEU B 90 10.944 3.065 24.112 1.00 3.50 C +ATOM 1763 H LEU B 90 14.483 1.528 25.293 1.00 15.00 H +ATOM 1764 N THR B 91 13.883 2.005 28.787 1.00 5.72 N +ATOM 1765 CA THR B 91 13.936 2.005 30.248 1.00 8.62 C +ATOM 1766 C THR B 91 15.238 2.497 30.906 1.00 12.11 C +ATOM 1767 O THR B 91 15.268 3.135 31.946 1.00 12.10 O +ATOM 1768 CB THR B 91 13.563 0.625 30.757 1.00 8.36 C +ATOM 1769 OG1 THR B 91 14.488 -0.364 30.335 1.00 9.15 O +ATOM 1770 CG2 THR B 91 12.176 0.247 30.265 1.00 2.92 C +ATOM 1771 H THR B 91 13.883 1.154 28.259 1.00 15.00 H +ATOM 1772 HG1 THR B 91 13.997 -1.180 30.314 1.00 15.00 H +ATOM 1773 N GLN B 92 16.343 2.259 30.192 1.00 13.30 N +ATOM 1774 CA GLN B 92 17.639 2.763 30.654 1.00 13.01 C +ATOM 1775 C GLN B 92 17.807 4.289 30.707 1.00 16.58 C +ATOM 1776 O GLN B 92 18.555 4.840 31.504 1.00 21.33 O +ATOM 1777 CB GLN B 92 18.749 2.149 29.811 1.00 11.12 C +ATOM 1778 CG GLN B 92 18.915 0.652 30.094 1.00 7.58 C +ATOM 1779 CD GLN B 92 20.064 0.116 29.278 1.00 7.51 C +ATOM 1780 OE1 GLN B 92 21.087 0.737 29.085 1.00 9.84 O +ATOM 1781 NE2 GLN B 92 19.884 -1.074 28.761 1.00 6.92 N +ATOM 1782 H GLN B 92 16.253 1.748 29.339 1.00 15.00 H +ATOM 1783 HE21 GLN B 92 20.713 -1.454 28.349 1.00 15.00 H +ATOM 1784 HE22 GLN B 92 18.987 -1.510 28.793 1.00 15.00 H +ATOM 1785 N ILE B 93 17.045 4.968 29.837 1.00 12.87 N +ATOM 1786 CA ILE B 93 17.188 6.422 29.880 1.00 11.98 C +ATOM 1787 C ILE B 93 16.200 7.226 30.748 1.00 15.56 C +ATOM 1788 O ILE B 93 16.194 8.452 30.763 1.00 18.42 O +ATOM 1789 CB ILE B 93 17.265 6.997 28.459 1.00 13.13 C +ATOM 1790 CG1 ILE B 93 15.894 6.880 27.787 1.00 8.28 C +ATOM 1791 CG2 ILE B 93 18.397 6.268 27.707 1.00 11.44 C +ATOM 1792 CD1 ILE B 93 15.838 7.301 26.320 1.00 2.00 C +ATOM 1793 H ILE B 93 16.524 4.453 29.159 1.00 15.00 H +ATOM 1794 N GLY B 94 15.333 6.473 31.472 1.00 18.70 N +ATOM 1795 CA GLY B 94 14.292 7.114 32.314 1.00 15.92 C +ATOM 1796 C GLY B 94 12.929 7.432 31.657 1.00 20.12 C +ATOM 1797 O GLY B 94 12.145 8.270 32.096 1.00 21.88 O +ATOM 1798 H GLY B 94 15.472 5.483 31.470 1.00 15.00 H +ATOM 1799 N CYS B 95 12.677 6.696 30.551 1.00 17.65 N +ATOM 1800 CA CYS B 95 11.518 7.078 29.755 1.00 13.90 C +ATOM 1801 C CYS B 95 10.172 6.552 30.232 1.00 15.16 C +ATOM 1802 O CYS B 95 9.972 5.378 30.537 1.00 15.03 O +ATOM 1803 CB CYS B 95 11.751 6.682 28.326 1.00 17.96 C +ATOM 1804 SG CYS B 95 10.719 7.651 27.244 1.00 24.85 S +ATOM 1805 H CYS B 95 13.302 5.956 30.306 1.00 15.00 H +ATOM 1806 N THR B 96 9.255 7.512 30.304 1.00 14.17 N +ATOM 1807 CA THR B 96 7.892 7.277 30.822 1.00 10.50 C +ATOM 1808 C THR B 96 6.703 7.772 29.924 1.00 10.86 C +ATOM 1809 O THR B 96 6.776 8.715 29.137 1.00 10.68 O +ATOM 1810 CB THR B 96 7.876 7.836 32.244 1.00 7.42 C +ATOM 1811 OG1 THR B 96 7.122 7.049 33.131 1.00 18.33 O +ATOM 1812 CG2 THR B 96 7.423 9.268 32.346 1.00 7.05 C +ATOM 1813 H THR B 96 9.595 8.433 30.102 1.00 15.00 H +ATOM 1814 HG1 THR B 96 7.076 7.573 33.926 1.00 15.00 H +ATOM 1815 N LEU B 97 5.572 7.068 30.017 1.00 12.50 N +ATOM 1816 CA LEU B 97 4.381 7.555 29.292 1.00 9.08 C +ATOM 1817 C LEU B 97 3.341 8.244 30.248 1.00 10.28 C +ATOM 1818 O LEU B 97 2.995 7.752 31.323 1.00 4.98 O +ATOM 1819 CB LEU B 97 3.930 6.335 28.456 1.00 6.81 C +ATOM 1820 CG LEU B 97 2.975 6.301 27.249 1.00 2.00 C +ATOM 1821 CD1 LEU B 97 3.278 7.121 25.993 1.00 2.00 C +ATOM 1822 CD2 LEU B 97 3.030 4.874 26.782 1.00 2.00 C +ATOM 1823 H LEU B 97 5.557 6.271 30.624 1.00 15.00 H +ATOM 1824 N ASN B 98 2.906 9.456 29.840 1.00 11.81 N +ATOM 1825 CA ASN B 98 2.027 10.258 30.712 1.00 14.60 C +ATOM 1826 C ASN B 98 0.815 10.898 30.041 1.00 17.08 C +ATOM 1827 O ASN B 98 0.770 11.025 28.820 1.00 16.80 O +ATOM 1828 CB ASN B 98 2.741 11.428 31.309 1.00 15.57 C +ATOM 1829 CG ASN B 98 3.799 10.997 32.279 1.00 18.53 C +ATOM 1830 OD1 ASN B 98 4.988 11.013 32.015 1.00 14.88 O +ATOM 1831 ND2 ASN B 98 3.330 10.741 33.486 1.00 17.86 N +ATOM 1832 H ASN B 98 3.227 9.802 28.954 1.00 15.00 H +ATOM 1833 HD21 ASN B 98 4.036 10.609 34.175 1.00 15.00 H +ATOM 1834 HD22 ASN B 98 2.344 10.686 33.628 1.00 15.00 H +ATOM 1835 N PHE B 99 -0.104 11.294 30.941 1.00 20.23 N +ATOM 1836 CA PHE B 99 -1.522 10.899 31.041 1.00 20.55 C +ATOM 1837 C PHE B 99 -2.234 11.277 32.355 1.00 15.56 C +ATOM 1838 O PHE B 99 -3.448 11.150 32.489 0.00 16.69 O +ATOM 1839 CB PHE B 99 -2.373 11.019 29.759 1.00 22.25 C +ATOM 1840 CG PHE B 99 -2.820 9.586 29.541 1.00 25.51 C +ATOM 1841 CD1 PHE B 99 -1.892 8.647 29.026 1.00 25.13 C +ATOM 1842 CD2 PHE B 99 -4.113 9.170 29.940 1.00 28.47 C +ATOM 1843 CE1 PHE B 99 -2.222 7.274 28.976 1.00 21.04 C +ATOM 1844 CE2 PHE B 99 -4.446 7.799 29.894 1.00 25.86 C +ATOM 1845 CZ PHE B 99 -3.488 6.863 29.441 1.00 24.17 C +ATOM 1846 OXT PHE B 99 -1.554 11.525 33.354 0.00 16.69 O +ATOM 1847 H PHE B 99 0.193 11.604 31.840 1.00 15.00 H +TER 1848 PHE B 99 +HETATM 1849 C1 ARQ A 401 1.474 1.321 11.354 1.00 10.36 C +HETATM 1850 C2 ARQ A 401 0.562 0.252 12.036 1.00 10.59 C +HETATM 1851 C3 ARQ A 401 0.675 2.633 11.410 1.00 7.58 C +HETATM 1852 C4 ARQ A 401 1.852 1.006 9.891 1.00 4.50 C +HETATM 1853 O4 ARQ A 401 2.664 1.554 12.108 1.00 13.55 O +HETATM 1854 C30 ARQ A 401 3.511 0.571 12.400 1.00 11.18 C +HETATM 1855 O3 ARQ A 401 3.399 -0.533 11.970 1.00 9.15 O +HETATM 1856 N1 ARQ A 401 4.497 0.994 13.193 1.00 11.89 N +HETATM 1857 C5 ARQ A 401 5.716 0.269 13.558 1.00 14.02 C +HETATM 1858 C6 ARQ A 401 6.953 1.163 13.346 1.00 9.73 C +HETATM 1859 C7 ARQ A 401 6.975 1.824 11.998 1.00 9.34 C +HETATM 1860 C8 ARQ A 401 6.815 1.051 10.826 1.00 8.95 C +HETATM 1861 C9 ARQ A 401 6.791 1.701 9.574 1.00 6.26 C +HETATM 1862 C10 ARQ A 401 6.927 3.110 9.519 1.00 5.40 C +HETATM 1863 C11 ARQ A 401 7.114 3.232 11.941 1.00 8.18 C +HETATM 1864 C12 ARQ A 401 7.085 3.888 10.692 1.00 5.52 C +HETATM 1865 C13 ARQ A 401 5.642 -0.319 14.998 1.00 12.77 C +HETATM 1866 O1 ARQ A 401 5.248 0.651 15.980 1.00 8.69 O +HETATM 1867 C14 ARQ A 401 4.669 -1.525 15.008 1.00 14.15 C +HETATM 1868 N2 ARQ A 401 4.998 -2.669 15.910 1.00 16.35 N +HETATM 1869 C22 ARQ A 401 5.441 -2.219 17.249 1.00 15.50 C +HETATM 1870 C15 ARQ A 401 3.718 -3.441 16.024 1.00 12.33 C +HETATM 1871 C16 ARQ A 401 3.724 -4.695 16.883 1.00 6.95 C +HETATM 1872 C17 ARQ A 401 4.055 -5.940 16.308 1.00 9.51 C +HETATM 1873 C18 ARQ A 401 4.162 -7.106 17.109 1.00 9.70 C +HETATM 1874 C19 ARQ A 401 3.957 -7.006 18.505 1.00 3.77 C +HETATM 1875 C20 ARQ A 401 3.386 -4.632 18.248 1.00 8.21 C +HETATM 1876 C21 ARQ A 401 3.502 -5.791 19.063 1.00 7.45 C +HETATM 1877 N3 ARQ A 401 6.121 -3.333 15.291 1.00 13.41 N +HETATM 1878 C23 ARQ A 401 6.067 -4.033 14.140 1.00 20.01 C +HETATM 1879 O2 ARQ A 401 5.015 -4.224 13.523 1.00 22.49 O +HETATM 1880 C27 ARQ A 401 7.360 -4.579 13.674 1.00 23.08 C +HETATM 1881 C26 ARQ A 401 7.343 -5.490 12.582 1.00 23.69 C +HETATM 1882 C25 ARQ A 401 8.521 -6.101 12.123 1.00 18.68 C +HETATM 1883 C24 ARQ A 401 9.714 -5.796 12.796 1.00 19.95 C +HETATM 1884 C28 ARQ A 401 8.593 -4.222 14.279 1.00 25.64 C +HETATM 1885 C29 ARQ A 401 9.781 -4.839 13.838 1.00 23.32 C +HETATM 1886 HN1 ARQ A 401 4.325 1.941 13.433 0.00 0.00 H +HETATM 1887 H5 ARQ A 401 5.812 -0.555 12.861 0.00 0.00 H +HETATM 1888 H13 ARQ A 401 6.691 -0.707 15.134 0.00 0.00 H +HETATM 1889 HO1 ARQ A 401 4.272 0.697 16.063 0.00 0.00 H +HETATM 1890 HN3 ARQ A 401 7.032 -3.144 15.636 0.00 0.00 H +HETATM 1891 O HOH A 402 5.120 -2.430 11.475 1.00 17.90 O +HETATM 1892 H1 HOH A 402 4.703 -2.628 12.329 0.00 20.00 H +HETATM 1893 H2 HOH A 402 4.811 -1.521 11.387 0.00 20.00 H +HETATM 1894 O HOH A 403 8.333 -4.450 17.823 1.00 17.83 O +HETATM 1895 H1 HOH A 403 8.259 -3.544 17.504 0.00 20.00 H +HETATM 1896 H2 HOH A 403 7.430 -4.770 17.707 0.00 20.00 H +HETATM 1897 O HOH A 405 -1.392 10.401 12.400 1.00 25.70 O +HETATM 1898 H1 HOH A 405 -1.110 9.691 12.984 0.00 20.00 H +HETATM 1899 H2 HOH A 405 -1.196 11.201 12.890 0.00 20.00 H +HETATM 1900 O HOH A 406 -8.545 10.688 13.725 1.00 4.29 O +HETATM 1901 H1 HOH A 406 -8.105 11.169 13.015 0.00 20.00 H +HETATM 1902 H2 HOH A 406 -8.992 11.385 14.219 0.00 20.00 H +HETATM 1903 O HOH A 410 7.328 3.159 38.192 1.00 63.38 O +HETATM 1904 H1 HOH A 410 7.836 2.868 38.960 0.00 20.00 H +HETATM 1905 H2 HOH A 410 7.292 2.360 37.640 0.00 20.00 H +HETATM 1906 O HOH B 407 18.496 0.062 6.092 1.00 58.99 O +HETATM 1907 H1 HOH B 407 18.810 0.911 5.772 0.00 20.00 H +HETATM 1908 H2 HOH B 407 17.595 0.283 6.369 0.00 20.00 H +HETATM 1909 O HOH B 408 18.639 -4.883 26.553 1.00 13.69 O +HETATM 1910 H1 HOH B 408 19.047 -5.595 27.057 0.00 20.00 H +HETATM 1911 H2 HOH B 408 18.259 -4.326 27.243 0.00 20.00 H +HETATM 1912 O HOH B 409 10.120 3.111 32.180 1.00 13.85 O +HETATM 1913 H1 HOH B 409 10.839 3.269 32.796 0.00 20.00 H +HETATM 1914 H2 HOH B 409 10.029 3.959 31.733 0.00 20.00 H +CONECT 1849 1850 1851 1852 1853 +CONECT 1850 1849 +CONECT 1851 1849 +CONECT 1852 1849 +CONECT 1853 1849 1854 +CONECT 1854 1853 1855 1856 +CONECT 1855 1854 +CONECT 1856 1854 1857 1886 +CONECT 1857 1856 1858 1865 1887 +CONECT 1858 1857 1859 +CONECT 1859 1858 1860 1863 +CONECT 1860 1859 1861 +CONECT 1861 1860 1862 +CONECT 1862 1861 1864 +CONECT 1863 1859 1864 +CONECT 1864 1862 1863 +CONECT 1865 1857 1866 1867 1888 +CONECT 1866 1865 1889 +CONECT 1867 1865 1868 +CONECT 1868 1867 1869 1870 1877 +CONECT 1869 1868 +CONECT 1870 1868 1871 +CONECT 1871 1870 1872 1875 +CONECT 1872 1871 1873 +CONECT 1873 1872 1874 +CONECT 1874 1873 1876 +CONECT 1875 1871 1876 +CONECT 1876 1874 1875 +CONECT 1877 1868 1878 1890 +CONECT 1878 1877 1879 1880 +CONECT 1879 1878 +CONECT 1880 1878 1881 1884 +CONECT 1881 1880 1882 +CONECT 1882 1881 1883 +CONECT 1883 1882 1885 +CONECT 1884 1880 1885 +CONECT 1885 1883 1884 +CONECT 1886 1856 +CONECT 1887 1857 +CONECT 1888 1865 +CONECT 1889 1866 +CONECT 1890 1877 +MASTER 309 0 1 2 16 0 3 6 1912 2 42 16 +END diff --git a/moldesign/_tests/test_distributed.py b/moldesign/_tests/test_distributed.py deleted file mode 100644 index 9bb8b16..0000000 --- a/moldesign/_tests/test_distributed.py +++ /dev/null @@ -1,12 +0,0 @@ -import moldesign as mdt -from moldesign import units as u - - -def test_amber_tleap(): - mol = mdt.read('../data/nuc.pdb') - model = moldesign.methods.models.OpenMMPotential(implicit_solvent='obc', - cutoff=8.0*u.angstrom, - force_field='ff14SB') - mol.set_energy_model(model) - result = mol.calculate(wait=True) - assert 'potential_energy' in result and 'forces' in result \ No newline at end of file diff --git a/moldesign/_tests/test_io.py b/moldesign/_tests/test_io.py index 0728f75..35ac123 100644 --- a/moldesign/_tests/test_io.py +++ b/moldesign/_tests/test_io.py @@ -3,6 +3,7 @@ import pytest import moldesign as mdt +mdt.compute.config.engine_type = 'docker' from moldesign import units as u @@ -63,9 +64,6 @@ def test_read_bipyridine_from_format(key, request): assert len(bondorders) == 2 - - - @pytest.fixture def dna_pdb(): return mdt.read('data/ACTG.pdb') @@ -76,4 +74,9 @@ def dna_mmcif(): @pytest.fixture def dna_sequence(): - return mdt.build_bdna('ACTG') \ No newline at end of file + return mdt.build_bdna('ACTG') + + +@pytest.mark.parametrize('key', 'pdb mmcif sequence'.split()) +def test_read_dna_from_format(key, request): + mol = request.getfuncargvalue('dna_'+key) diff --git a/moldesign/_tests/test_math.py b/moldesign/_tests/test_math.py index 5e94cf6..d79938e 100644 --- a/moldesign/_tests/test_math.py +++ b/moldesign/_tests/test_math.py @@ -4,6 +4,7 @@ import numpy.testing as npt import pytest +import moldesign from moldesign import units as u registered_types = {} diff --git a/moldesign/_tests/test_openmm.py b/moldesign/_tests/test_openmm.py deleted file mode 100644 index 0875fc4..0000000 --- a/moldesign/_tests/test_openmm.py +++ /dev/null @@ -1,31 +0,0 @@ -import pytest - - -def test_openmm_retains_atom_numbering(fixture_name, request): - mol = request.getfuncargvalue(fixture_name) - assert mol.num_atoms == mol.energy_model.sim.system.getNumParticles() - for iatom, (atom, stkatom) in enumerate(zip(mol.atoms, - mol.energy_model.sim.topology.atoms())): - assert atom.elem == stkatom.element.symbol - assert iatom == atom.index == stkatom.index - - -def test_only_hydrogen_bonds_constrained(fixture_name, request): - mol = request.getfuncargvalue(fixture_name) - sim = mol.energy_model.sim - all_hydrogens = set([atom for atom in mol.atoms if atom.atnum == 1]) - for ibond in xrange(mol.num_atoms): - i, j, val = sim.system.getConstraintParameters(ibond) - ai = mol.atoms[i] - aj = mol.atoms[j] - if ai.elem == 'H': # exactly one of the atoms should be hydrogen - assert aj.elem != 'H' - h = ai - else: - assert aj.elem == 'H' - h = aj - assert h in all_hydrogens - all_hydrogens.pop(h) - assert len(all_hydrogens) == 0 - - diff --git a/moldesign/_tests/test_primary_structure.py b/moldesign/_tests/test_primary_structure.py new file mode 100644 index 0000000..b02a965 --- /dev/null +++ b/moldesign/_tests/test_primary_structure.py @@ -0,0 +1,134 @@ +import pytest + +import moldesign as mdt +from moldesign import units as u + + +registered_types = {} + + +def typedfixture(*types, **kwargs): + """This is a decorator that lets us associate fixtures with one or more arbitrary types. + We'll later use this type to determine what tests to run on the result""" + + def fixture_wrapper(func): + for t in types: + registered_types.setdefault(t, []).append(func.__name__) + return pytest.fixture(**kwargs)(func) + + return fixture_wrapper + + +@typedfixture('3AID') +def protease_pdb(): + return mdt.read('data/3aid.pdb') + + +@typedfixture('3AID', 'protein') +def protease_cif(): + return mdt.read('data/3aid.cif') + + +def test_3aid_cif_chains(protease_cif): + mol = protease_cif + assert len(mol.chains) == 5 + assert mol.chains['A'].num_residues == mol.chains['B'].num_residues == 99 + + assert mol.chains['C'].num_residues == 1 + assert mol.chains['C'].type == mol.chains['C'].residues[0].type == 'unknown' + + assert mol.chains['D'].type == mol.chains['D'].type == 'water' + + +def test_3aid_cif_separate_waters(protease_cif): + mol = protease_cif + assert mol.chains['D'].num_residues == 5 + assert mol.chains['E'].num_residues == 3 + + +@pytest.mark.parametrize('objkey', registered_types['3AID']) +def test_3aid_chain_properties(objkey, request): + mol = request.getfuncargvalue(objkey) + for chainid in 'AB': + c = mol.chains[chainid] + assert c.n_terminal == c.residues['PRO1'] + assert c.c_terminal == c.residues['PHE99'] + assert c.type == 'protein' + + +@pytest.mark.parametrize('objkey', registered_types['3AID']) +def test_3aid_atom_selection(objkey, request): + mol = request.getfuncargvalue(objkey) + + a1 = mol.chains['A'].residues['GLN2'].atoms['CB'] + a2 = mol.chains['B'].residues['LYS20'].atoms['O'] + assert abs(a1.distance(a2) - 27.206*u.angstrom) < 0.001 * u.angstrom + + +@pytest.mark.parametrize('objkey', registered_types['protein']) +def test_chain_lookup_by_name_and_index(objkey, request): + mol = request.getfuncargvalue(objkey) + + for chain in mol.chains: + assert mol.chains[chain.index] is chain + assert mol.chains[chain.name] is chain + + +@pytest.mark.parametrize('objkey', registered_types['protein']) +def test_residue_lookup_by_name_and_index(objkey, request): + mol = request.getfuncargvalue(objkey) + + for chain in mol.chains: + for residue in chain.residues: + assert mol.residues[residue.index] is residue + assert chain[residue.name] is residue + + assert residue.chain is chain + + +@pytest.mark.parametrize('objkey', registered_types['protein']) +def test_atom_lookup_by_name_and_index(objkey, request): + mol = request.getfuncargvalue(objkey) + + for residue in mol.residues: + for atom in residue.atoms: + assert residue[atom.name] is atom + assert mol.atoms[atom.index] is atom + + assert atom.chain is residue.chain + assert atom.residue is residue + + +@pytest.mark.parametrize('objkey', registered_types['protein']) +def test_chains_iterate_in_order(objkey, request): + mol = request.getfuncargvalue(objkey) + _iter_index_order_tester(mol.chains) + + +@pytest.mark.parametrize('objkey', registered_types['protein']) +def test_residues_iterate_in_order(objkey, request): + mol = request.getfuncargvalue(objkey) + _iter_index_order_tester(mol.residues) + + for chain in mol.chains: + _iter_index_order_tester(chain.residues) + + +@pytest.mark.parametrize('objkey', registered_types['protein']) +def test_atoms_iterate_in_order(objkey, request): + mol = request.getfuncargvalue(objkey) + _iter_index_order_tester(mol.atoms) + + for chain in mol.chains: + _iter_index_order_tester(chain.atoms) + + for residue in mol.residues: + _iter_index_order_tester(residue.atoms) + + +def _iter_index_order_tester(iterable): + iterator = iter(iterable) + lastitem = iterator.next() + for item in iterator: + assert item.index > lastitem.index + lastitem = item diff --git a/moldesign/_tests/test_tools.py b/moldesign/_tests/test_tools.py index 9da74f1..b91a49a 100644 --- a/moldesign/_tests/test_tools.py +++ b/moldesign/_tests/test_tools.py @@ -1,6 +1,9 @@ +import collections + import pytest import moldesign as mdt +from moldesign import units as u registered_types = {} @@ -29,15 +32,61 @@ def ammonium_charged(): @pytest.mark.parametrize('objkey', - [ammonium_nocharge, ammonium_charged]) + ['ammonium_nocharge', 'ammonium_charged']) def test_ammonium_formal_charge(objkey, request): mol = request.getfuncargvalue(objkey) mdt.assign_formal_charges(mol) - assert mol.charge == 1 + assert mol.charge == 1 * u.q_e - for atom in mol: - if atom.atnum == 6: - assert atom.formal_charge == 1 + for atom in mol.atoms: + if atom.atnum == 7: + assert atom.formal_charge == 1 * u.q_e else: assert atom.atnum == 1 - assert atom.formal_charge == 0 + assert atom.formal_charge == 0 * u.q_e + + +@pytest.fixture +def c2_no_hydrogen_from_smiles(): + mymol = mdt.from_smiles('[CH0][CH0]') + return mymol + + +def test_c2_no_hydrogen_from_smiles(c2_no_hydrogen_from_smiles): + mymol = c2_no_hydrogen_from_smiles + + atomcounts = collections.Counter(atom.element for atom in mymol.atoms) + assert atomcounts['C'] == 2 + assert len(atomcounts) == 1 + assert mymol.num_bonds == 1 + assert mymol.num_atoms == 2 + bonds = list(mymol.bonds) + assert len(bonds) == 1 + b = bonds[0] + assert b.order == 1 + assert b.a1.index == 0 + assert b.a2.index == 1 + + +def test_add_hydrogen_to_c2(c2_no_hydrogen_from_smiles): + newmol = mdt.add_hydrogen(c2_no_hydrogen_from_smiles) + atomcounts = collections.Counter(atom.element for atom in newmol.atoms) + assert newmol.num_atoms == 8 + assert atomcounts['C'] == 2 + assert atomcounts['H'] == 6 + assert len(atomcounts) == 2 + assert newmol.num_bonds == 7 + for atom, bondgraph in newmol.bond_graph.iteritems(): + if atom.atnum == 1: + assert len(bondgraph) == 1 + assert bondgraph.keys()[0].elem == 'C' + assert bondgraph.values()[0] == 1 + else: + assert atom.atnum == 6 + assert len(bondgraph) == 4 + for nbr in bondgraph: + assert bondgraph[nbr] == 1 + + + + diff --git a/moldesign/fileio.py b/moldesign/fileio.py index e954857..cff0403 100644 --- a/moldesign/fileio.py +++ b/moldesign/fileio.py @@ -230,7 +230,8 @@ def read_mmcif(f): mol = openbabel_interface.read_stream(f, 'cif') f.seek(0) assemblies = biopython_interface.get_mmcif_assemblies(f) - pdb.warn_assemblies(mol, assemblies) + if assemblies: + pdb.warn_assemblies(mol, assemblies) mol.properties.bioassemblies = assemblies return mol diff --git a/moldesign/models/base.py b/moldesign/models/base.py index b3c79e6..db76630 100644 --- a/moldesign/models/base.py +++ b/moldesign/models/base.py @@ -61,9 +61,9 @@ def get_formal_charge(self): u.Scalar[charge]: the formal charge used for this model """ if 'charge' in self.params and self.params.charge is not None: - return self.params.charge + return self.params.charge.value_in(u.q_e) elif hasattr(self.mol, 'charge'): - return self.mol.charge + return self.mol.charge.value_in(u.q_e) else: return 0 diff --git a/moldesign/molecules/chain.py b/moldesign/molecules/chain.py index d471a52..3570394 100644 --- a/moldesign/molecules/chain.py +++ b/moldesign/molecules/chain.py @@ -60,7 +60,8 @@ def type(self): unique_types = sum(bool(v) for v in counts.itervalues()) if unique_types == 1: if self.num_residues == 1: - self._type = data.CHAIN_MONOMER_NAMES[self.residues[0].type] + self._type = data.CHAIN_MONOMER_NAMES.get(self.residues[0].type, + self.residues[0].type) else: self._type = self.residues[0].type diff --git a/moldesign/molecules/residue.py b/moldesign/molecules/residue.py index a74e20b..03c67af 100644 --- a/moldesign/molecules/residue.py +++ b/moldesign/molecules/residue.py @@ -16,6 +16,7 @@ from . import Entity, AtomList, toplevel + @toplevel class Residue(Entity): """ A biomolecular residue - most often an amino acid, a nucleic base, or a solvent @@ -55,6 +56,10 @@ def __init__(self, **kwargs): self._template_name = None if self.name is None: self.name = self.pdbname + str(self.pdbindex) + @property + def atoms(self): + return self + def add(self, atom, key=None): """Deals with atom name clashes within a residue - common for small molecules""" if atom.residue is not None: From 8c0ec97512f39de785b6567954a1923f7f232f46 Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Wed, 17 Aug 2016 11:07:39 -0700 Subject: [PATCH 23/64] Continue expanding test coverage --- moldesign/_tests/test_data_structures.py | 4 + moldesign/_tests/test_geometry.py | 112 +++++++++++++++++++++ moldesign/_tests/test_io.py | 2 + moldesign/_tests/test_math.py | 3 + moldesign/_tests/test_primary_structure.py | 3 + moldesign/_tests/test_qm.py | 82 +++++++++++++++ moldesign/_tests/test_tools.py | 2 + moldesign/_tests/test_units.py | 2 + moldesign/molecules/atomcollections.py | 8 +- moldesign/orbitals/wfn.py | 5 + 10 files changed, 219 insertions(+), 4 deletions(-) create mode 100644 moldesign/_tests/test_geometry.py create mode 100644 moldesign/_tests/test_qm.py diff --git a/moldesign/_tests/test_data_structures.py b/moldesign/_tests/test_data_structures.py index 60229ff..15c5849 100644 --- a/moldesign/_tests/test_data_structures.py +++ b/moldesign/_tests/test_data_structures.py @@ -1,3 +1,6 @@ +""" Tests Molecule instances and other base classes they depend on +""" + import pickle import random @@ -12,6 +15,7 @@ registered_types = {} + def typedfixture(*types, **kwargs): """This is a decorator that lets us associate fixtures with one or more arbitrary types. We'll later use this type to determine what tests to run on the result""" diff --git a/moldesign/_tests/test_geometry.py b/moldesign/_tests/test_geometry.py new file mode 100644 index 0000000..d44b447 --- /dev/null +++ b/moldesign/_tests/test_geometry.py @@ -0,0 +1,112 @@ +""" Tests geometry routines +""" +import random + +import itertools +import pytest +import numpy as np + +import moldesign as mdt +from moldesign import units as u + +registered_types = {} + +# TODO: automated method testing based on its metadata - i.e. test to make sure parameters are +# honored, test that it calcultes what it says it does, test that properties have the right +# units and array shapes, etc. + + +def typedfixture(*types, **kwargs): + """This is a decorator that lets us associate fixtures with one or more arbitrary types. + We'll later use this type to determine what tests to run on the result""" + + def fixture_wrapper(func): + for t in types: + registered_types.setdefault(t, []).append(func.__name__) + return pytest.fixture(**kwargs)(func) + + return fixture_wrapper + + +def _make_mol_with_n_hydrogens(n): + return mdt.Molecule([mdt.Atom('H') for i in xrange(n)]) + + +def _apply_random_offsets(mol, idim): + mol.positions[:, idim] += (random.random()-0.5)*100.0*u.angstrom + + +@typedfixture('atomcontainer') +def three_particle_right_angle(): + mol = _make_mol_with_n_hydrogens(3) + mol.atoms[0].x = 1.0 * u.angstrom + mol.atoms[2].y = 1.0 * u.angstrom + + for idim in xrange(3): + _apply_random_offsets(mol, idim) + + return mol + + +@typedfixture('atomcontainer') +def four_particle_45_twist(): + mol = _make_mol_with_n_hydrogens(4) + mol.positions = u.nm*[[0.1, 0.0, -0.5], + [0.0, 0.0, -0.5], + [0.0, 0.0, 0.5], + [0.2, -0.2, 0.5]] + + for idim in xrange(3): + _apply_random_offsets(mol, idim) + + return mol + + +def test_dihedral_measure(four_particle_45_twist): + mol = four_particle_45_twist + np.testing.assert_almost_equal(mdt.dihedral(*mol.atoms).value_in(u.degrees), + 45.0, + decimal=8) + + +def test_dihedral_sign_convention(four_particle_45_twist): + mol = four_particle_45_twist + mol.atoms[-1].y += 0.4 * u.nm + np.testing.assert_almost_equal(mdt.dihedral(*mol.atoms).value_in(u.degrees), + 315.0, + decimal=8) + + +def test_angle_measure(three_particle_right_angle): + mol = three_particle_right_angle + np.testing.assert_almost_equal(mdt.angle(*mol.atoms).value_in(u.degrees), + 90.0, + decimal=8) + + +def test_distance_array(three_particle_right_angle): + mol = three_particle_right_angle + + desired_distance_array = u.angstrom*[[0.0, 1.0, np.sqrt(2)], + [1.0, 0.0, 1.0], + [np.sqrt(2), 1.0, 0.0]] + distance_array = mol.calc_distance_array() + + np.testing.assert_allclose(distance_array, + desired_distance_array, + atol=1e-8) + + +@pytest.mark.parametrize('objkey', registered_types['atomcontainer']) +def test_atomic_distance_measures_are_consistent(objkey, request): + mol = request.getfuncargvalue(objkey) + + distance_array = mol.calc_distance_array() + + for i, j in itertools.product(xrange(3), xrange(3)): + ai, aj = mol.atoms[i], mol.atoms[j] + assert ai.distance(aj) == distance_array[i, j] + assert mdt.distance(ai, aj) == distance_array[i, j] + np.testing.assert_almost_equal(np.sum((ai.position - aj.position)**2).defunits_value(), + (distance_array[i, j]**2).defunits_value(), + decimal=10) diff --git a/moldesign/_tests/test_io.py b/moldesign/_tests/test_io.py index 35ac123..ba7dd34 100644 --- a/moldesign/_tests/test_io.py +++ b/moldesign/_tests/test_io.py @@ -1,3 +1,5 @@ +""" Tests for molecule creation and file i/o +""" import collections import pytest diff --git a/moldesign/_tests/test_math.py b/moldesign/_tests/test_math.py index d79938e..62d71c9 100644 --- a/moldesign/_tests/test_math.py +++ b/moldesign/_tests/test_math.py @@ -1,3 +1,6 @@ +""" Tests internal math routines +""" + import random import numpy as np diff --git a/moldesign/_tests/test_primary_structure.py b/moldesign/_tests/test_primary_structure.py index b02a965..9edffbd 100644 --- a/moldesign/_tests/test_primary_structure.py +++ b/moldesign/_tests/test_primary_structure.py @@ -1,3 +1,6 @@ +""" Tests introspection and methods for protein primary structure +""" + import pytest import moldesign as mdt diff --git a/moldesign/_tests/test_qm.py b/moldesign/_tests/test_qm.py new file mode 100644 index 0000000..cc062d7 --- /dev/null +++ b/moldesign/_tests/test_qm.py @@ -0,0 +1,82 @@ +""" Tests basic QM functionality and data structures +""" + +import pytest +import numpy as np + +import moldesign as mdt +from moldesign import units as u + +registered_types = {} + +# TODO: automated method testing based on its metadata - i.e. test to make sure parameters are +# honored, test that it calcultes what it says it does, test that properties have the right +# units and array shapes, etc. + +def typedfixture(*types, **kwargs): + """This is a decorator that lets us associate fixtures with one or more arbitrary types. + We'll later use this type to determine what tests to run on the result""" + + def fixture_wrapper(func): + for t in types: + registered_types.setdefault(t, []).append(func.__name__) + return pytest.fixture(**kwargs)(func) + + return fixture_wrapper + + +@typedfixture('molecule') +def h2(): + mol = mdt.Molecule([mdt.Atom('H'), + mdt.Atom('H')]) + mol.atoms[1].z = 0.75 * u.angstrom + return mol + + +@typedfixture('molecule') +def heh_plus(): + mol = mdt.Molecule([mdt.Atom('H'), + mdt.Atom('He')]) + mol.atoms[1].z = 1.0 * u.angstrom + mol.charge = 1 * u.q_e + return mol + + +@pytest.mark.parametrize('objkey', registered_types['molecule']) +def test_pyscf_rhf_sto3g_properties(objkey, request): + mol = request.getfuncargvalue(objkey) + mol.set_energy_model(mdt.models.PySCFPotential, basis='sto-3g', theory='rhf') + + mol.calculate() + + assert 'potential_energy' in mol.properties + assert 'wfn' in mol.properties + assert 'canonical' in mol.wfn.orbitals + assert 'atomic' in mol.wfn.orbitals + assert mol.wfn.num_electrons == sum(mol.atoms.atnum) - mol.charge.value_in(u.q_e) + + +@pytest.mark.parametrize('objkey', registered_types['molecule']) +def test_pyscf_rhf_sto3g_matrices(objkey, request): + mol = request.getfuncargvalue(objkey) + mol.set_energy_model(mdt.models.PySCFPotential, basis='sto-3g', theory='rhf') + + mol.calculate() + basis = mol.wfn.aobasis + canonical = mol.wfn.orbitals.canonical + + assert (mol.wfn.aobasis.fock == mol.wfn.fock_ao).all() + assert (mol.wfn.orbitals.atomic.coeffs == np.identity(mol.wfn.nbasis)).all() + + np.testing.assert_allclose(canonical.to_ao(canonical.fock), mol.wfn.fock_ao, atol=1.e-9) + np.testing.assert_allclose(canonical.from_ao(basis.overlaps), canonical.overlaps, atol=1.e-9) + + +@pytest.mark.parametrize('objkey', registered_types['molecule']) +def test_pyscf_rhf_sto3g_forces(objkey, request): + mol = request.getfuncargvalue(objkey) + mol.set_energy_model(mdt.models.PySCFPotential, basis='sto-3g', theory='rhf') + forces = mol.calc_forces() + + assert forces.shape == (mol.num_atoms, 3) + diff --git a/moldesign/_tests/test_tools.py b/moldesign/_tests/test_tools.py index b91a49a..7b8c7d5 100644 --- a/moldesign/_tests/test_tools.py +++ b/moldesign/_tests/test_tools.py @@ -1,3 +1,5 @@ +""" Tests topology manipulation tools +""" import collections import pytest diff --git a/moldesign/_tests/test_units.py b/moldesign/_tests/test_units.py index 1a6f7e3..d80e65b 100644 --- a/moldesign/_tests/test_units.py +++ b/moldesign/_tests/test_units.py @@ -1,3 +1,5 @@ +""" Tests the unit system +""" import pytest import numpy as np diff --git a/moldesign/molecules/atomcollections.py b/moldesign/molecules/atomcollections.py index 1228058..57487c6 100644 --- a/moldesign/molecules/atomcollections.py +++ b/moldesign/molecules/atomcollections.py @@ -100,12 +100,12 @@ def calc_distance_array(self, other=None): """ other = utils.if_not_none(other, self) try: - other_positions = other.positions.value_in(u.ang) + other_positions = other.positions.defunits_value() except AttributeError: - other_positions = np.array([other.position.value_in(u.ang)]) + other_positions = np.array([other.position.defunits_value()]) - distances = spd.cdist(self.position.value_in(u.ang), other_positions) - return distances * u.ang + distances = spd.cdist(self.positions.defunits_value(), other_positions) + return distances * u.default.length def calc_displacements(self): """ Calculate an array of displacements between all atoms in this object diff --git a/moldesign/orbitals/wfn.py b/moldesign/orbitals/wfn.py index 64babcc..1c6e8ba 100644 --- a/moldesign/orbitals/wfn.py +++ b/moldesign/orbitals/wfn.py @@ -31,6 +31,7 @@ class ElectronicWfn(object): num_electrons (int): number of electrons in this wavefunction theory (moldesign.models.base.EnergyModelBase): The model this wavefunction was created with aobasis (moldesign.orbitals.BasisSet): The basis functions for the enclosed orbitals + nbasis (int): number of AO basis functions fock_ao (moldesign.units.Array[energy]): fock matrix in the AO basis positions (moldesign.units.Array[length]): positions of the nuclei for this wfn civectors (np.ndarray): CI vectors (if applicable) @@ -46,6 +47,10 @@ def __init__(self, mol, num_electrons, self.model = model self.civectors = civectors self.aobasis = aobasis + if aobasis: + self.nbasis = len(self.aobasis) + else: + self.nbasis = None self.orbitals = DotDict() self.fock_ao = fock_ao self.num_electrons = num_electrons From 511cb33c2bd9de6d67a767dfb57e1548bd46835d Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Wed, 24 Aug 2016 14:28:07 -0700 Subject: [PATCH 24/64] #27 consistent dihedral atom inference --- moldesign/_tests/test_geometry.py | 75 ++++++++++++++++++++++++++++++- moldesign/geom/coords.py | 3 ++ moldesign/geom/setcoord.py | 18 ++++++-- 3 files changed, 92 insertions(+), 4 deletions(-) diff --git a/moldesign/_tests/test_geometry.py b/moldesign/_tests/test_geometry.py index d44b447..363a39c 100644 --- a/moldesign/_tests/test_geometry.py +++ b/moldesign/_tests/test_geometry.py @@ -59,9 +59,15 @@ def four_particle_45_twist(): for idim in xrange(3): _apply_random_offsets(mol, idim) + for iatom in xrange(3): + mol.atoms[iatom].bond_to(mol.atoms[iatom+1], 1) + return mol +######################## +# Dihedrals # +######################## def test_dihedral_measure(four_particle_45_twist): mol = four_particle_45_twist np.testing.assert_almost_equal(mdt.dihedral(*mol.atoms).value_in(u.degrees), @@ -69,6 +75,43 @@ def test_dihedral_measure(four_particle_45_twist): decimal=8) +def test_dihedral_two_atom_selection(four_particle_45_twist): + mol = four_particle_45_twist + np.testing.assert_almost_equal(mdt.dihedral(*mol.atoms[1:3]).value_in(u.degrees), + 45.0, + decimal=8) + + with pytest.raises(ValueError): # raises exception because it's not part of a dihedral + mdt.dihedral(mol.atoms[0], mol.atoms[1]) + + +def test_set_dihedral(four_particle_45_twist): + mol = four_particle_45_twist + mdt.set_dihedral(mol.atoms[0], mol.atoms[1], mol.atoms[2], mol.atoms[3], 10.0 * u.degrees) + np.testing.assert_almost_equal(mdt.dihedral(*mol.atoms).value_in(u.degrees), + 10.0, + decimal=8) + + +def test_set_dihedral_sign_convention(four_particle_45_twist): + mol = four_particle_45_twist + mdt.set_dihedral(mol.atoms[0], mol.atoms[1], mol.atoms[2], mol.atoms[3], -23.0 * u.degrees) + np.testing.assert_almost_equal(mdt.dihedral(*mol.atoms).value_in(u.degrees), + 337.0, + decimal=8) + + +def test_set_dihedral_two_atom_selection(four_particle_45_twist): + mol = four_particle_45_twist + mdt.set_dihedral(mol.atoms[1], mol.atoms[2], 10.0 * u.degrees) + np.testing.assert_almost_equal(mdt.dihedral(*mol.atoms).value_in(u.degrees), + 10.0, + decimal=8) + + with pytest.raises(ValueError): # raises exception because it's not part of a dihedral + mdt.set_dihedral(mol.atoms[0], mol.atoms[1], 5.0 * u.degrees) + + def test_dihedral_sign_convention(four_particle_45_twist): mol = four_particle_45_twist mol.atoms[-1].y += 0.4 * u.nm @@ -76,7 +119,9 @@ def test_dihedral_sign_convention(four_particle_45_twist): 315.0, decimal=8) - +######################## +# Angles # +######################## def test_angle_measure(three_particle_right_angle): mol = three_particle_right_angle np.testing.assert_almost_equal(mdt.angle(*mol.atoms).value_in(u.degrees), @@ -84,6 +129,12 @@ def test_angle_measure(three_particle_right_angle): decimal=8) + + + +######################## +# Distances # +######################## def test_distance_array(three_particle_right_angle): mol = three_particle_right_angle @@ -110,3 +161,25 @@ def test_atomic_distance_measures_are_consistent(objkey, request): np.testing.assert_almost_equal(np.sum((ai.position - aj.position)**2).defunits_value(), (distance_array[i, j]**2).defunits_value(), decimal=10) + + +def test_center_of_mass(four_particle_45_twist): + mol = four_particle_45_twist + + mol.positions = u.nm*[[0.1, 0.0, -0.5], + [0.0, 0.0, -0.5], + [0.0, 0.0, 0.5], + [0.2, -0.2, 0.5]] + + desired_com_angstroms = np.array([0.1+0.2, -0.2, 0.0]) * 10.0 / 4.0 + np.testing.assert_almost_equal(mol.center_of_mass.defunits_value(), + desired_com_angstroms) + + mol.atoms[0].mass = 5.0 * u.ureg.kilograms + mol.atoms[1].mass = 10.0 * u.ureg.kilograms + mol.atoms[2].mass = 5.0 * u.ureg.kilograms + mol.atoms[3].mass = 10.0 * u.ureg.kilograms + + desired_com_angstroms = np.array([0.1+0.4, -0.4, 0.0]) * 10.0 / 6.0 + np.testing.assert_almost_equal(mol.center_of_mass.defunits_value(), + desired_com_angstroms) diff --git a/moldesign/geom/coords.py b/moldesign/geom/coords.py index 81850e4..5be9387 100644 --- a/moldesign/geom/coords.py +++ b/moldesign/geom/coords.py @@ -103,6 +103,9 @@ def dihedral(a1, a2, a3=None, a4=None): a1,a2 (mdt.Atom): the atoms describing the dihedral a3,a4 (mdt.Atom): (optional) if not passed, ``a1`` and ``a2`` will be treated as the central atoms in this bond, and a3 and a4 will be inferred. + + Returns: + (units.Scalar[angle]): angle - [0, 2 pi) radians """ if a3 is a4 is None: # infer the first and last atoms a1, a2, a3, a4 = _infer_dihedral(a1, a2) diff --git a/moldesign/geom/setcoord.py b/moldesign/geom/setcoord.py index 576ed74..4e2a1f9 100644 --- a/moldesign/geom/setcoord.py +++ b/moldesign/geom/setcoord.py @@ -18,6 +18,7 @@ from moldesign.mathutils import sub_angles, apply_4x4_transform from . import toplevel, angle, dihedral +from .coords import _infer_dihedral @toplevel @@ -84,10 +85,14 @@ def set_angle(a1, a2, a3, theta, adjustmol=True): @toplevel -def set_dihedral(a1, a2, a3, a4, theta, adjustmol=True): +def set_dihedral(a1, a2, a3=None, a4=None, theta=None, adjustmol=True): """ Set the twist angle of atoms a1 and a4 around the central bond a2-a3. The atoms will be - adjusted along the - gradient of the angle. + adjusted along the gradient of the angle. + + Can be called as ``set_dihedral(a1, a2, a3, a4, theta, adjustmol=True)`` + OR ``set_dihedral(a2, a2, theta, adjustmol=True) + + If ``adjustmol`` is True and the topology is unambiguous, then the entire molecule's positions will be modified as well @@ -98,6 +103,13 @@ def set_dihedral(a1, a2, a3, a4, theta, adjustmol=True): """ # TODO: deal with co-linear a1/a4, a2, a3 - the angle is ill-defined \ # (should just an arbitrary axis normal to the central bond) + if a4 is None: + if a3 is not None and theta is None: + theta, a3 = a3, theta + elif a3 is not None or a4 is not None or theta is None: + raise ValueError('Invalid number of arguments for set_dihedral') + a1, a2, a3, a4 = _infer_dihedral(a1, a2) + current = dihedral(a1, a2, a3, a4) rotation = sub_angles(theta, current) if abs(rotation) < 1.0e-6: return From 0f6e85f34ea5dd2090e781ff95f87e0fee0b917c Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Wed, 24 Aug 2016 15:31:38 -0700 Subject: [PATCH 25/64] Expand number of helix types built through NAB - this is the first pass at #88 Note: although NAB succesfully creates the PDB files, parsing them will raise an exception --- moldesign/interfaces/ambertools.py | 41 +++++++++++++++++++++++++++--- moldesign/tools/build.py | 4 +-- 2 files changed, 39 insertions(+), 6 deletions(-) diff --git a/moldesign/interfaces/ambertools.py b/moldesign/interfaces/ambertools.py index 874cbc0..bc30e4d 100644 --- a/moldesign/interfaces/ambertools.py +++ b/moldesign/interfaces/ambertools.py @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. import collections +import warnings import moldesign as mdt import pyccc @@ -130,8 +131,40 @@ def build_bdna(sequence, **kwargs): Returns: moldesign.Molecule: B-DNA double helix """ - infile = 'molecule m;\nm = bdna( "%s" );\nputpdb( "helix.pdb", m, "-wwpdb");\n'% \ - sequence.lower() + print('DeprecationWarning: build_bdna is deprecated. ' + "Use `build_dna_helix(sequence, helix_type='b')` instead") + return build_dna_helix(sequence, helix_type='b', **kwargs) + + +@utils.kwargs_from(mdt.compute.run_job) +def build_dna_helix(sequence, helix_type='B', **kwargs): + """ Uses Ambertools' Nucleic Acid Builder to build a 3D DNA double-helix. + + Args: + sequence (str): DNA sequence for one of the strands (a complementary sequence will + automatically be created) + helix_type (str): Type of helix - 'A'=Arnott A-DNA + 'B'=B-DNA from standard templates and helical params, + 'LB'=Langridge B-DNA, + 'AB'=Arnott B-DNA, + 'SB'=Sasisekharan left-handed B-DNA + **kwargs: arguments for :meth:`compute.run_job` + + All helix types except 'B' are taken from fiber diffraction data (see the refernce for details) + + Returns: + moldesign.Molecule: B-DNA double helix + + References: + See NAB / AmberTools documentation, http://ambermd.org/doc12/Amber16.pdf + """ + infile = ['molecule m;'] + if helix_type.lower() == 'b': + infile.append('m = bdna( "%s" );' % sequence.lower()) + else: + infile.append('m = fd_helix( "%sdna", "%s", "dna" );' + % (helix_type.lower(), sequence.lower())) + infile.append('putpdb( "helix.pdb", m, "-wwpdb");\n') def finish_job(job): mol = mdt.read(job.get_output('helix.pdb'), format='pdb') @@ -140,8 +173,8 @@ def finish_job(job): job = pyccc.Job(command='nab -o buildbdna build.nab && ./buildbdna', image=mdt.compute.get_image_path(IMAGE), - inputs={'build.nab': infile}, - name='NAB_build_bdna', + inputs={'build.nab': '\n'.join(infile)}, + name='NAB_build_dna', when_finished=finish_job) return mdt.compute.run_job(job, _return_result=True, **kwargs) diff --git a/moldesign/tools/build.py b/moldesign/tools/build.py index 7fcb7ad..46c57be 100644 --- a/moldesign/tools/build.py +++ b/moldesign/tools/build.py @@ -17,11 +17,11 @@ import moldesign as mdt import moldesign.molecules -from moldesign.interfaces.ambertools import build_bdna +from moldesign.interfaces.ambertools import build_bdna, build_dna_helix from . import toplevel, __all__ as _pkgall -_pkgall.append('build_bdna') +_pkgall.extend(['build_bdna', 'build_dna_helix']) @toplevel From c222ca03d57c5a0e9818dffbe5f3863e59956766 Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Thu, 25 Aug 2016 17:42:34 -0700 Subject: [PATCH 26/64] Implement #88 - all NAB helix types --- moldesign/helpers/pdb.py | 9 ++++++--- moldesign/interfaces/ambertools.py | 20 ++++++++++++++++---- moldesign/molecules/atomcollections.py | 6 ++++++ moldesign/molecules/biounits.py | 6 ------ moldesign/molecules/molecule.py | 2 +- 5 files changed, 29 insertions(+), 14 deletions(-) diff --git a/moldesign/helpers/pdb.py b/moldesign/helpers/pdb.py index 1773c62..1da3001 100644 --- a/moldesign/helpers/pdb.py +++ b/moldesign/helpers/pdb.py @@ -226,10 +226,13 @@ def assign_biopolymer_bonds(mol): """ for chain in mol.chains: - chain.assign_biopolymer_bonds() + try: + chain.assign_biopolymer_bonds() + except KeyError: + print('WARNING: failed to assign backbone bonds for %s') % str(chain) for residue in mol.residues: try: residue.assign_template_bonds() except KeyError: - print ('WARNING: failed to assign bonds for residue %s; use ' - '``residue.assign_distance.bonds`` to guess the topology') % str(residue) \ No newline at end of file + print('WARNING: failed to assign bonds for %s; use ' + '``residue.assign_distance.bonds`` to guess the topology') % str(residue) \ No newline at end of file diff --git a/moldesign/interfaces/ambertools.py b/moldesign/interfaces/ambertools.py index bc30e4d..e6a6b1e 100644 --- a/moldesign/interfaces/ambertools.py +++ b/moldesign/interfaces/ambertools.py @@ -144,7 +144,7 @@ def build_dna_helix(sequence, helix_type='B', **kwargs): sequence (str): DNA sequence for one of the strands (a complementary sequence will automatically be created) helix_type (str): Type of helix - 'A'=Arnott A-DNA - 'B'=B-DNA from standard templates and helical params, + 'B'=B-DNA (from standard templates and helical params), 'LB'=Langridge B-DNA, 'AB'=Arnott B-DNA, 'SB'=Sasisekharan left-handed B-DNA @@ -156,7 +156,7 @@ def build_dna_helix(sequence, helix_type='B', **kwargs): moldesign.Molecule: B-DNA double helix References: - See NAB / AmberTools documentation, http://ambermd.org/doc12/Amber16.pdf + See NAB / AmberTools documentation: http://ambermd.org/doc12/Amber16.pdf, pg 771-2 """ infile = ['molecule m;'] if helix_type.lower() == 'b': @@ -167,8 +167,20 @@ def build_dna_helix(sequence, helix_type='B', **kwargs): infile.append('putpdb( "helix.pdb", m, "-wwpdb");\n') def finish_job(job): - mol = mdt.read(job.get_output('helix.pdb'), format='pdb') - mol.name = 'BDNA: %s' % sequence + mol = mdt.fileio.read_pdb(job.get_output('helix.pdb').open(), assign_ccd_bonds=False) + if mol.num_chains == 1: + assert mol.num_residues % 2 == 0 + oldchain = mol.chains[0] + oldchain.name = oldchain.pdbindex = oldchain.pdbname = 'A' + newchain = mdt.Chain('B') + for residue in mol.residues[mol.num_residues//2:]: + residue.chain = newchain + for atom in residue: + atom.chain = newchain + mol = mdt.Molecule(mol) + mdt.helpers.assign_biopolymer_bonds(mol) + + mol.name = '%s-DNA Helix: %s' % (helix_type.upper(), sequence) return mol job = pyccc.Job(command='nab -o buildbdna build.nab && ./buildbdna', diff --git a/moldesign/molecules/atomcollections.py b/moldesign/molecules/atomcollections.py index 57487c6..c5fc674 100644 --- a/moldesign/molecules/atomcollections.py +++ b/moldesign/molecules/atomcollections.py @@ -55,6 +55,12 @@ def heavy_atoms(self): """ AtomList: a list of all heavy atoms (i.e., non-hydrogen) in this object """ return AtomList([a for a in self.atoms if a.atnum != 1]) + @property + def mass(self): + """ u.Scalar[mass]: total mass of this object + """ + return sum(a.mass for a in self.atoms) + def get_atoms(self, **queries): """Allows keyword-based atom queries. diff --git a/moldesign/molecules/biounits.py b/moldesign/molecules/biounits.py index 4a8798e..80dcb7b 100644 --- a/moldesign/molecules/biounits.py +++ b/moldesign/molecules/biounits.py @@ -56,12 +56,6 @@ def __init__(self, name=None, molecule=None, index=None, pdbname=None, pdbindex= for name, val in kwargs.iteritems(): setattr(self, name, val) - @property - def mass(self): - """ u.Scalar[mass]: total mass of this object - """ - return sum(self.atoms.mass) - def add(self, item, key=None): """ Add a child to this entity. diff --git a/moldesign/molecules/molecule.py b/moldesign/molecules/molecule.py index b8a4216..b243146 100644 --- a/moldesign/molecules/molecule.py +++ b/moldesign/molecules/molecule.py @@ -1102,7 +1102,7 @@ def write(self, filename=None, **kwargs): def is_small_molecule(self): """bool: True if molecule's mass is less than 500 Daltons (not mutually exclusive with :meth:`self.is_biomolecule `)""" - return sum(self.atoms.mass) <= 500.0 * u.amu + return self.mass <= 500.0 * u.amu @property def bonds(self): From c68a3227edece05d16667f0c224d11637340c3c1 Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Thu, 25 Aug 2016 21:19:43 -0700 Subject: [PATCH 27/64] Clean up biochemical data structure, fix #76 - Refactored Chains, Residues to contain a ChildList object, which stores children as both a dict AND a SortedCollection --- moldesign/_tests/test_primary_structure.py | 2 +- moldesign/fileio.py | 11 +- moldesign/molecules/biounits.py | 133 ++++++++------ moldesign/molecules/chain.py | 6 +- moldesign/molecules/residue.py | 4 +- moldesign/utils/classes.py | 201 ++++++++++++++++++++- 6 files changed, 287 insertions(+), 70 deletions(-) diff --git a/moldesign/_tests/test_primary_structure.py b/moldesign/_tests/test_primary_structure.py index 9edffbd..9403f79 100644 --- a/moldesign/_tests/test_primary_structure.py +++ b/moldesign/_tests/test_primary_structure.py @@ -22,7 +22,7 @@ def fixture_wrapper(func): return fixture_wrapper -@typedfixture('3AID') +@typedfixture('3AID', 'protein') def protease_pdb(): return mdt.read('data/3aid.pdb') diff --git a/moldesign/fileio.py b/moldesign/fileio.py index cff0403..c181a92 100644 --- a/moldesign/fileio.py +++ b/moldesign/fileio.py @@ -174,7 +174,7 @@ def write_trajectory(traj, filename=None, format=None, overwrite=True): fileobj.close() -def read_pdb(f): +def read_pdb(f, assign_ccd_bonds=True): """ Read a PDB file and return a molecule. This uses the biopython parser to get the molecular structure, but uses internal parsers @@ -186,6 +186,8 @@ def read_pdb(f): Args: f (filelike): filelike object giving access to the PDB file (must implement seek) + assign_ccd_bonds (bool): Use the PDB Chemical Component Dictionary (CCD) to create bond + topology (note that bonds from CONECT records will always be created as well) Returns: moldesign.Molecule: the parsed molecule @@ -197,8 +199,11 @@ def read_pdb(f): f.seek(0) conect_graph = pdb.get_conect_records(f) - # Assign bonds (biopython doesn't get them) - pdb.assign_biopolymer_bonds(mol) + # Assign bonds from residue templates + if assign_ccd_bonds: + pdb.assign_biopolymer_bonds(mol) + + # Create bonds from CONECT records serials = {atom.pdbindex: atom for atom in mol.atoms} for atomserial, nbrs in conect_graph.iteritems(): atom = serials[atomserial] diff --git a/moldesign/molecules/biounits.py b/moldesign/molecules/biounits.py index 80dcb7b..345c95e 100644 --- a/moldesign/molecules/biounits.py +++ b/moldesign/molecules/biounits.py @@ -11,27 +11,87 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -import collections +import operator import moldesign as mdt -from moldesign import data, utils +from moldesign import utils from . import toplevel, AtomList, AtomContainer +class ChildList(AtomContainer): + """ A list of biochemical objects that can be accessed by name or by index. + """ + __len__ = utils.Alias('_childinorder.__len__') + __iter__ = utils.Alias('_childinorder.__iter__') + + def __str__(self): + return str(self._childinorder._items) + + def __repr__(self): + try: + return '' % (self.parent, self) + except: + return '' % id(self) + + def __init__(self, parent): + super(ChildList, self).__init__() + self.parent = parent + self._childbyname = {} + self._childinorder = utils.SortedCollection(key=operator.attrgetter('pdbindex')) + + def __getitem__(self, item): + if isinstance(item, basestring): + return self._childbyname[item] + else: + return self._childinorder[item] + + def __setitem__(self, key, val): + if key in self._childbyname: + raise KeyError('%s already exists in %s' % (key, self.parent)) + self._childbyname[key] = val + self._childinorder.insert_right(val) + + def iteratoms(self): + """Iterate over all atoms + + Yields: + Atom: all atoms in this entity and/or its children + """ + for child in self: + if isinstance(child, mdt.Atom): + yield child + else: + for atom in child.iteratoms(): + yield atom + + @property + def atoms(self): + """ AtomList: a sorted list of all atoms in this entity and/or its children + """ + return AtomList(self.iteratoms()) + + @toplevel -class Entity(AtomContainer, utils.DictLike): +class Entity(AtomContainer): """ Generalized storage mechanism for hierarchical representation of biomolecules, e.g. by residue, chain, etc. Permits other groupings, provided that everything is tree-like. - All children of a given entity must have unique keys. An individual child can be retrieved with + All children of a given entity must have unique names. An individual child can be retrieved with ``entity.childname`` or ``entity['childname']`` or ``entity[index]`` Yields: Entity or mdt.Atom: this entity's children, in order """ + + __getitem__ = utils.Alias('children.__getitem__') + __len__ = utils.Alias('children.__len__') + __iter__ = utils.Alias('children.__iter__') + atoms = utils.Alias('children.atoms') + iteratoms = utils.Alias('children.iteratoms') + def __init__(self, name=None, molecule=None, index=None, pdbname=None, pdbindex=None, **kwargs): """ Initialization: @@ -44,6 +104,7 @@ def __init__(self, name=None, molecule=None, index=None, pdbname=None, pdbindex= pdbindex (str): Index of this entity in PDB format """ super(Entity, self).__init__() + self.children = ChildList(self) self.molecule = molecule self.name = name self.index = index @@ -51,8 +112,6 @@ def __init__(self, name=None, molecule=None, index=None, pdbname=None, pdbindex= self.pdbname = pdbname self.pdbindex = pdbindex - self._indexlist = None - for name, val in kwargs.iteritems(): setattr(self, name, val) @@ -66,40 +125,14 @@ def add(self, item, key=None): item (Entity or mdt.Atom): the child object to add key (str): Key to retrieve this item (default: ``item.name`` ) """ - self._indexlist = None if key is None: key = item.name - if key in self: - raise KeyError('%s already exists in %s' % (key, self)) - self[key] = item + self.children[key] = item - def __contains__(self, item): - # TODO: O(N) lookup is bad - return item in self.children + __setitem__ = add - def __getitem__(self, item): - try: - return super(Entity, self).__getitem__(item) - except (KeyError, TypeError) as orig: - try: - return self.indexlist[item] - except (TypeError, IndexError) as exc: - raise orig - - @property - def indexlist(self): - """ list: list of all children, in order - """ - if self._indexlist is None: - self._indexlist = list(self) - return self._indexlist - - def __iter__(self): - if self._indexlist is not None: - for item in self._indexlist: yield item - else: - keys = sorted(self.keys()) - for k in keys: yield self[k] + def __getattr__(self, item): + return self[item] def __hash__(self): """ Explicitly hash by object id @@ -128,33 +161,12 @@ def __call__(self, **kwargs): Allow for some simple queries, i.e. mol.chain['A'].residue(pdbname='ALA') """ retlist = [] - for child in self: + for child in self._inorder: for key, val in kwargs.iteritems(): if hasattr(child, key) and getattr(child, key) == val: retlist.append(child) return retlist - def iteratoms(self): - """Iterate over all atoms (i.e. leaf nodes) - - Yields: - Atom: all atoms in this entity and/or its children - """ - for item in self.itervalues(): - if hasattr(item,'itervalues'): - for x in item.itervalues(): yield x - else: - yield item - - @property - def atoms(self): - """ AtomList: a sorted list of all atoms in this entity and/or its children - """ - atoms = AtomList(sorted(self.iteratoms(), - key=lambda x: x.index)) - return atoms - - @toplevel class Instance(Entity): @@ -162,5 +174,8 @@ class Instance(Entity): PDB chains. Users won't ever really see this object. """ def __str__(self): - return "biounit container (chains: %s) for molecule %s" % (', '.join(self.keys()), self.molecule.name) + return str(self.children) + + def __repr__(self): + return '' % str(self.children) diff --git a/moldesign/molecules/chain.py b/moldesign/molecules/chain.py index 3570394..abdc520 100644 --- a/moldesign/molecules/chain.py +++ b/moldesign/molecules/chain.py @@ -128,7 +128,6 @@ def get_ligand(self): raise ValueError('Multiple ligands detected. Use `chain.unclassified_residues` to ' 'iterate over them') - def to_json(self): js = mdt.chemjson.jsonify(self, 'index name pdbindex'.split()) js['residues'] = [res.index for res in self.residues] @@ -147,9 +146,8 @@ def num_residues(self): @property def residues(self): - """Chain: synonym for 'self' to enhance readability, - e.g. ``molecule.chains['A'].residue[123]``""" - return self + """ChildList: list of residues in this chain """ + return self.children def add(self, residue, **kwargs): if residue.chain is None: diff --git a/moldesign/molecules/residue.py b/moldesign/molecules/residue.py index 03c67af..51ac0e7 100644 --- a/moldesign/molecules/residue.py +++ b/moldesign/molecules/residue.py @@ -58,7 +58,7 @@ def __init__(self, **kwargs): @property def atoms(self): - return self + return self.children def add(self, atom, key=None): """Deals with atom name clashes within a residue - common for small molecules""" @@ -183,7 +183,7 @@ def assign_template_bonds(self): for nbrname, order in bonds_by_name.get(atom.name, {}).iteritems(): try: nbr = self[nbrname] - except KeyError: # missing atom in this structure is normal (often hydrogen) + except KeyError: # missing atoms are normal (often hydrogen) pass else: bond_graph[atom][nbr] = bond_graph[nbr][atom] = order diff --git a/moldesign/utils/classes.py b/moldesign/utils/classes.py index bd0f726..e8e29b2 100644 --- a/moldesign/utils/classes.py +++ b/moldesign/utils/classes.py @@ -11,6 +11,9 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. +from bisect import bisect_left, bisect_right + + class Categorizer(dict): """ Create a dict of lists from an iterable, with dict keys given by keyfn @@ -126,4 +129,200 @@ def __get__(self, instance, cls): return getattr(instance, self.name) def __set__(self, instance, value): - return setattr(instance, self.name, value) \ No newline at end of file + return setattr(instance, self.name, value) + + +class SortedCollection(object): + """Sequence sorted by a key function. + + TAKEN WITHOUT MODIFICATION FROM: + https://code.activestate.com/recipes/577197-sortedcollection/ + + SortedCollection() is much easier to work with than using bisect() directly. + It supports key functions like those use in sorted(), min(), and max(). + The result of the key function call is saved so that keys can be searched + efficiently. + + Instead of returning an insertion-point which can be hard to interpret, the + five find-methods return a specific item in the sequence. They can scan for + exact matches, the last item less-than-or-equal to a key, or the first item + greater-than-or-equal to a key. + + Once found, an item's ordinal position can be located with the index() method. + New items can be added with the insert() and insert_right() methods. + Old items can be deleted with the remove() method. + + The usual sequence methods are provided to support indexing, slicing, + length lookup, clearing, copying, forward and reverse iteration, contains + checking, item counts, item removal, and a nice looking repr. + + Finding and indexing are O(log n) operations while iteration and insertion + are O(n). The initial sort is O(n log n). + + The key function is stored in the 'key' attibute for easy introspection or + so that you can assign a new key function (triggering an automatic re-sort). + + In short, the class was designed to handle all of the common use cases for + bisect but with a simpler API and support for key functions. + + >>> from pprint import pprint + >>> from operator import itemgetter + + >>> s = SortedCollection(key=itemgetter(2)) + >>> for record in [ + ... ('roger', 'young', 30), + ... ('angela', 'jones', 28), + ... ('bill', 'smith', 22), + ... ('david', 'thomas', 32)]: + ... s.insert(record) + + >>> pprint(list(s)) # show records sorted by age + [('bill', 'smith', 22), + ('angela', 'jones', 28), + ('roger', 'young', 30), + ('david', 'thomas', 32)] + + >>> s.find_le(29) # find oldest person aged 29 or younger + ('angela', 'jones', 28) + >>> s.find_lt(28) # find oldest person under 28 + ('bill', 'smith', 22) + >>> s.find_gt(28) # find youngest person over 28 + ('roger', 'young', 30) + + >>> r = s.find_ge(32) # find youngest person aged 32 or older + >>> s.index(r) # get the index of their record + 3 + >>> s[3] # fetch the record at that index + ('david', 'thomas', 32) + + >>> s.key = itemgetter(0) # now sort by first name + >>> pprint(list(s)) + [('angela', 'jones', 28), + ('bill', 'smith', 22), + ('david', 'thomas', 32), + ('roger', 'young', 30)] + + """ + + def __init__(self, iterable=(), key=None): + self._given_key = key + key = (lambda x: x) if key is None else key + decorated = sorted((key(item), item) for item in iterable) + self._keys = [k for k, item in decorated] + self._items = [item for k, item in decorated] + self._key = key + + def _getkey(self): + return self._key + + def _setkey(self, key): + if key is not self._key: + self.__init__(self._items, key=key) + + def _delkey(self): + self._setkey(None) + + key = property(_getkey, _setkey, _delkey, 'key function') + + def clear(self): + self.__init__([], self._key) + + def copy(self): + return self.__class__(self, self._key) + + def __len__(self): + return len(self._items) + + def __getitem__(self, i): + return self._items[i] + + def __iter__(self): + return iter(self._items) + + def __reversed__(self): + return reversed(self._items) + + def __repr__(self): + return '%s(%r, key=%s)' % ( + self.__class__.__name__, + self._items, + getattr(self._given_key, '__name__', repr(self._given_key)) + ) + + def __reduce__(self): + return self.__class__, (self._items, self._given_key) + + def __contains__(self, item): + k = self._key(item) + i = bisect_left(self._keys, k) + j = bisect_right(self._keys, k) + return item in self._items[i:j] + + def index(self, item): + 'Find the position of an item. Raise ValueError if not found.' + k = self._key(item) + i = bisect_left(self._keys, k) + j = bisect_right(self._keys, k) + return self._items[i:j].index(item) + i + + def count(self, item): + 'Return number of occurrences of item' + k = self._key(item) + i = bisect_left(self._keys, k) + j = bisect_right(self._keys, k) + return self._items[i:j].count(item) + + def insert(self, item): + 'Insert a new item. If equal keys are found, add to the left' + k = self._key(item) + i = bisect_left(self._keys, k) + self._keys.insert(i, k) + self._items.insert(i, item) + + def insert_right(self, item): + 'Insert a new item. If equal keys are found, add to the right' + k = self._key(item) + i = bisect_right(self._keys, k) + self._keys.insert(i, k) + self._items.insert(i, item) + + def remove(self, item): + 'Remove first occurence of item. Raise ValueError if not found' + i = self.index(item) + del self._keys[i] + del self._items[i] + + def find(self, k): + 'Return first item with a key == k. Raise ValueError if not found.' + i = bisect_left(self._keys, k) + if i != len(self) and self._keys[i] == k: + return self._items[i] + raise ValueError('No item found with key equal to: %r' % (k,)) + + def find_le(self, k): + 'Return last item with a key <= k. Raise ValueError if not found.' + i = bisect_right(self._keys, k) + if i: + return self._items[i-1] + raise ValueError('No item found with key at or below: %r' % (k,)) + + def find_lt(self, k): + 'Return last item with a key < k. Raise ValueError if not found.' + i = bisect_left(self._keys, k) + if i: + return self._items[i-1] + raise ValueError('No item found with key below: %r' % (k,)) + + def find_ge(self, k): + 'Return first item with a key >= equal to k. Raise ValueError if not found' + i = bisect_left(self._keys, k) + if i != len(self): + return self._items[i] + raise ValueError('No item found with key at or above: %r' % (k,)) + + def find_gt(self, k): + 'Return first item with a key > k. Raise ValueError if not found' + i = bisect_right(self._keys, k) + if i != len(self): + return self._items[i] + raise ValueError('No item found with key above: %r' % (k,)) \ No newline at end of file From cad2eae6700f6f1803fff47fd84d0e7b78e62119 Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Fri, 26 Aug 2016 09:17:20 -0700 Subject: [PATCH 28/64] Fix copying and pickling behavior for #78 --- moldesign/_tests/test_primary_structure.py | 96 +++++++++++++++------- moldesign/molecules/atomcollections.py | 6 +- moldesign/molecules/biounits.py | 40 ++++++++- moldesign/utils/classes.py | 5 +- 4 files changed, 108 insertions(+), 39 deletions(-) diff --git a/moldesign/_tests/test_primary_structure.py b/moldesign/_tests/test_primary_structure.py index 9403f79..a42c4cd 100644 --- a/moldesign/_tests/test_primary_structure.py +++ b/moldesign/_tests/test_primary_structure.py @@ -1,13 +1,13 @@ """ Tests introspection and methods for protein primary structure """ - +import itertools import pytest import moldesign as mdt from moldesign import units as u -registered_types = {} +fixture_types = {} def typedfixture(*types, **kwargs): @@ -16,7 +16,7 @@ def typedfixture(*types, **kwargs): def fixture_wrapper(func): for t in types: - registered_types.setdefault(t, []).append(func.__name__) + fixture_types.setdefault(t, []).append(func.__name__) return pytest.fixture(**kwargs)(func) return fixture_wrapper @@ -49,9 +49,9 @@ def test_3aid_cif_separate_waters(protease_cif): assert mol.chains['E'].num_residues == 3 -@pytest.mark.parametrize('objkey', registered_types['3AID']) -def test_3aid_chain_properties(objkey, request): - mol = request.getfuncargvalue(objkey) +@pytest.mark.parametrize('fixture', fixture_types['3AID']) +def test_3aid_chain_properties(fixture, request): + mol = request.getfuncargvalue(fixture) for chainid in 'AB': c = mol.chains[chainid] assert c.n_terminal == c.residues['PRO1'] @@ -59,67 +59,103 @@ def test_3aid_chain_properties(objkey, request): assert c.type == 'protein' -@pytest.mark.parametrize('objkey', registered_types['3AID']) -def test_3aid_atom_selection(objkey, request): - mol = request.getfuncargvalue(objkey) +@pytest.mark.parametrize('fixture', fixture_types['3AID']) +def test_3aid_primary_structure_access_methods(fixture, request): + mol = request.getfuncargvalue(fixture) + + a1 = mol.chains['A'].residues['GLN2'].atoms['CB'] + assert a1 is mol.atoms[a1.index] + assert a1 is mol.chains.A.residues.GLN2.atoms.CB + assert a1 is mol.chains.A.GLN2.CB + assert 'GLN2' in dir(mol.chains.A) + assert 'CB' in dir(mol.chains.A.GLN2) + + + +@pytest.mark.parametrize('fixture', fixture_types['3AID']) +def test_3aid_atom_selection(fixture, request): + mol = request.getfuncargvalue(fixture) a1 = mol.chains['A'].residues['GLN2'].atoms['CB'] a2 = mol.chains['B'].residues['LYS20'].atoms['O'] assert abs(a1.distance(a2) - 27.206*u.angstrom) < 0.001 * u.angstrom -@pytest.mark.parametrize('objkey', registered_types['protein']) -def test_chain_lookup_by_name_and_index(objkey, request): - mol = request.getfuncargvalue(objkey) +@pytest.mark.parametrize('fixture', fixture_types['protein']) +def test_chain_lookup_by_name_and_index(fixture, request): + mol = request.getfuncargvalue(fixture) - for chain in mol.chains: + for ic, chain in enumerate(mol.chains): assert mol.chains[chain.index] is chain assert mol.chains[chain.name] is chain + assert mol.chains[ic] is chain + assert getattr(mol.chains, chain.name) is chain -@pytest.mark.parametrize('objkey', registered_types['protein']) -def test_residue_lookup_by_name_and_index(objkey, request): - mol = request.getfuncargvalue(objkey) +@pytest.mark.parametrize('fixture', fixture_types['protein']) +def test_residue_lookup_by_name_and_index(fixture, request): + mol = request.getfuncargvalue(fixture) for chain in mol.chains: - for residue in chain.residues: + for ires, residue in enumerate(chain.residues): assert mol.residues[residue.index] is residue assert chain[residue.name] is residue + assert chain[ires] is residue + assert getattr(chain, residue.name) is residue + + assert chain.residues[residue.name] is residue + assert chain.residues[ires] is residue + assert getattr(chain.residues, residue.name) is residue assert residue.chain is chain -@pytest.mark.parametrize('objkey', registered_types['protein']) -def test_atom_lookup_by_name_and_index(objkey, request): - mol = request.getfuncargvalue(objkey) +@pytest.mark.parametrize('fixture', fixture_types['protein']) +def test_atom_lookup_by_name_and_index(fixture, request): + mol = request.getfuncargvalue(fixture) for residue in mol.residues: - for atom in residue.atoms: + for iatom, atom in enumerate(residue.atoms): assert residue[atom.name] is atom + assert residue[iatom] is atom + assert getattr(residue,atom.name) is atom + + assert residue.atoms[atom.name] is atom + assert residue.atoms[iatom] is atom + assert getattr(residue.atoms, atom.name) is atom + assert mol.atoms[atom.index] is atom assert atom.chain is residue.chain assert atom.residue is residue -@pytest.mark.parametrize('objkey', registered_types['protein']) -def test_chains_iterate_in_order(objkey, request): - mol = request.getfuncargvalue(objkey) +@pytest.mark.parametrize('fixture', fixture_types['protein']) +def test_molecule_links(fixture, request): + mol = request.getfuncargvalue(fixture) + + for obj in itertools.chain(mol.atoms, mol.residues, mol.chains): + assert obj.molecule == mol + + +@pytest.mark.parametrize('fixture', fixture_types['protein']) +def test_chains_iterate_in_order(fixture, request): + mol = request.getfuncargvalue(fixture) _iter_index_order_tester(mol.chains) -@pytest.mark.parametrize('objkey', registered_types['protein']) -def test_residues_iterate_in_order(objkey, request): - mol = request.getfuncargvalue(objkey) +@pytest.mark.parametrize('fixture', fixture_types['protein']) +def test_residues_iterate_in_order(fixture, request): + mol = request.getfuncargvalue(fixture) _iter_index_order_tester(mol.residues) for chain in mol.chains: _iter_index_order_tester(chain.residues) -@pytest.mark.parametrize('objkey', registered_types['protein']) -def test_atoms_iterate_in_order(objkey, request): - mol = request.getfuncargvalue(objkey) +@pytest.mark.parametrize('fixture', fixture_types['protein']) +def test_atoms_iterate_in_order(fixture, request): + mol = request.getfuncargvalue(fixture) _iter_index_order_tester(mol.atoms) for chain in mol.chains: diff --git a/moldesign/molecules/atomcollections.py b/moldesign/molecules/atomcollections.py index c5fc674..a5a6153 100644 --- a/moldesign/molecules/atomcollections.py +++ b/moldesign/molecules/atomcollections.py @@ -302,6 +302,8 @@ def copy(self): Returns: AtomList: list of copied atoms """ + from . import ChildList + oldatoms = self.atoms old_bond_graph = {a: {} for a in self.atoms} for atom in self.atoms: @@ -322,7 +324,7 @@ def copy(self): if atom.chain not in replaced: chain = copy.copy(atom.chain) chain.molecule = None - chain.children = {} + chain.children = ChildList(chain) replaced[atom.chain] = chain else: chain = replaced[atom.chain] @@ -334,7 +336,7 @@ def copy(self): res = copy.copy(atom.residue) res.molecule = None res.chain = atom.chain - res.children = {} + res.children = ChildList(res) res.chain.add(res) replaced[atom.residue] = res diff --git a/moldesign/molecules/biounits.py b/moldesign/molecules/biounits.py index 345c95e..7b17ecb 100644 --- a/moldesign/molecules/biounits.py +++ b/moldesign/molecules/biounits.py @@ -38,7 +38,10 @@ def __init__(self, parent): super(ChildList, self).__init__() self.parent = parent self._childbyname = {} - self._childinorder = utils.SortedCollection(key=operator.attrgetter('pdbindex')) + self._childinorder = utils.SortedCollection(key=_sortkey) + + def __dir__(self): + return self.__dict__.keys() + self.__class__.__dict__.keys() + self._childbyname.keys() def __getitem__(self, item): if isinstance(item, basestring): @@ -52,6 +55,22 @@ def __setitem__(self, key, val): self._childbyname[key] = val self._childinorder.insert_right(val) + def __contains__(self, item): + if isinstance(item, basestring): + return (item in self._childbyname) + else: + return (item in self._childinorder) + + def __getattr__(self, item): + if not hasattr(self, '_childbyname'): + raise AttributeError('Uninitialized') + + try: + return self._childbyname[item] + except KeyError: + raise AttributeError('ChildList object in %s has no attribute %s.' % ( + self.parent, item)) + def iteratoms(self): """Iterate over all atoms @@ -72,6 +91,10 @@ def atoms(self): return AtomList(self.iteratoms()) +def _sortkey(x): + return x.pdbindex + + @toplevel class Entity(AtomContainer): """ @@ -131,8 +154,18 @@ def add(self, item, key=None): __setitem__ = add + def __dir__(self): + return (self.__dict__.keys() + + self.__class__.__dict__.keys() + + [x.name for x in self]) + def __getattr__(self, item): - return self[item] + if not hasattr(self, 'children'): + raise AttributeError("Uninitialized") + try: + return self.children[item] + except KeyError: + raise AttributeError('%s has no attribute "%s"' % (self, item)) def __hash__(self): """ Explicitly hash by object id @@ -161,7 +194,7 @@ def __call__(self, **kwargs): Allow for some simple queries, i.e. mol.chain['A'].residue(pdbname='ALA') """ retlist = [] - for child in self._inorder: + for child in self: for key, val in kwargs.iteritems(): if hasattr(child, key) and getattr(child, key) == val: retlist.append(child) @@ -179,3 +212,4 @@ def __str__(self): def __repr__(self): return '' % str(self.children) + diff --git a/moldesign/utils/classes.py b/moldesign/utils/classes.py index e8e29b2..ba84f7a 100644 --- a/moldesign/utils/classes.py +++ b/moldesign/utils/classes.py @@ -137,6 +137,7 @@ class SortedCollection(object): TAKEN WITHOUT MODIFICATION FROM: https://code.activestate.com/recipes/577197-sortedcollection/ + (EDIT: removed ``__reduce__`` - better behavior with __dict__ states) SortedCollection() is much easier to work with than using bisect() directly. It supports key functions like those use in sorted(), min(), and max(). @@ -201,7 +202,6 @@ class SortedCollection(object): ('bill', 'smith', 22), ('david', 'thomas', 32), ('roger', 'young', 30)] - """ def __init__(self, iterable=(), key=None): @@ -249,9 +249,6 @@ def __repr__(self): getattr(self._given_key, '__name__', repr(self._given_key)) ) - def __reduce__(self): - return self.__class__, (self._items, self._given_key) - def __contains__(self, item): k = self._key(item) i = bisect_left(self._keys, k) From 6fbea135953355aa49728615a94c37ffabfd5cb0 Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Sun, 28 Aug 2016 13:13:23 -0700 Subject: [PATCH 29/64] Lazily import PySCF for faster initial imports (addresses #78) --- moldesign/interfaces/pyscf_interface.py | 30 +++++++-------- moldesign/models/pyscf.py | 51 ++++++++++++++++--------- 2 files changed, 49 insertions(+), 32 deletions(-) diff --git a/moldesign/interfaces/pyscf_interface.py b/moldesign/interfaces/pyscf_interface.py index 34b3048..f934631 100644 --- a/moldesign/interfaces/pyscf_interface.py +++ b/moldesign/interfaces/pyscf_interface.py @@ -14,21 +14,7 @@ from cStringIO import StringIO import numpy as np - -try: - from pyscf import gto, scf, mp, mcscf, ao2mo - import pyscf.grad - from pyscf.dft import numint -except ImportError: - force_remote = True - gto = scf = mp = mcscf = ao2mo = numint = None -except OSError as exc: # TODO: on OSX, this does ... something - print 'WARNING: PySCF error on import - %s: %s' % (type(exc), exc) - print 'WARNING: Using containerized version of PySCF, not the local installation' - force_remote = True - gto = scf = mp = mcscf = ao2mo = numint = None -else: - force_remote = False +import imp import moldesign.units as u from moldesign import compute @@ -36,8 +22,18 @@ from moldesign import orbitals +try: + imp.find_module('pyscf') +except (ImportError, OSError) as exc: + print 'PySCF not installed; using remote docker container' + force_remote = True +else: + force_remote = False + + def mol_to_pyscf(mol, basis, symmetry=None, charge=0, positions=None): """Convert an MDT molecule to a PySCF "Mole" object""" + from pyscf import gto pyscfmol = gto.Mole() positions = if_not_none(positions, mol.atoms.position) @@ -91,6 +87,8 @@ def __call__(self, info): def get_eris_in_basis(basis, orbs): """ Get electron repulsion integrals transformed in (in form eri[i,j,k,l] = (ij|kl)) """ + from pyscf import ao2mo + pmol = mol_to_pyscf(basis.wfn.molecule, basis=basis.basisname) eri = ao2mo.full(pmol, orbs.T, compact=True) * u.hartree eri.defunits_inplace() @@ -112,6 +110,8 @@ def basis_values(mol, basis, coords, coeffs=None, positions=None): Array[length]: if ``coeffs`` is not passed, an array of basis fn values at each coordinate. Otherwise, a list of orbital values at each coordinate """ + from pyscf.dft import numint + # TODO: more than just create the basis by name ... pmol = mol_to_pyscf(mol, basis=basis.basisname, positions=positions) aovals = numint.eval_ao(pmol, np.ascontiguousarray(coords.value_in(u.bohr))) diff --git a/moldesign/models/pyscf.py b/moldesign/models/pyscf.py index b513637..f7d6d9c 100644 --- a/moldesign/models/pyscf.py +++ b/moldesign/models/pyscf.py @@ -11,8 +11,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -from __future__ import absolute_import # prevent clashes between this module and the "pyscf" -# package +from __future__ import absolute_import # prevent clashes between this and the "pyscf" package from cStringIO import StringIO @@ -24,12 +23,6 @@ from moldesign import uibase from moldesign.utils import DotDict, if_not_none -if not force_remote: - from pyscf import scf, mp, mcscf - import pyscf.grad -else: - scf = mp = mcscf = None - def exports(o): __all__.append(o.__name__) @@ -37,26 +30,50 @@ def exports(o): __all__ = [] +class LazyClassMap(object): + """ For lazily importing classes from modules (when there's a lot of import overhead) + + Class names should be stored as their *absolute import strings* so that they can be imported + only when needed + + Example: + >>> myclasses = LazyClassMap({'od': 'collections.OrderedDict'}) + >>> myclasss['od']() + OrderedDict() + """ + def __init__(self, mapping): + self.mapping = mapping + + def __getitem__(self, key): + import importlib + fields = self.mapping[key].split('.') + cls = fields[-1] + modname = '.'.join(fields[:-1]) + mod = importlib.import_module(modname) + return getattr(mod, cls) + + @exports class PySCFPotential(QMBase): DEFAULT_PROPERTIES = ['potential_energy', 'wfn', 'mulliken'] + + THEORIES = LazyClassMap({'hf': 'pyscf.scf.RHF', 'rhf': 'pyscf.scf.RHF', + 'uhf': 'pyscf.scf.UHF', + 'mcscf': 'pyscf.mcscf.CASSCF', 'casscf': 'pyscf.mcscf.CASSCF', + 'casci': 'pyscf.mcscf.CASCI', + 'mp2': 'mp.MP2'}) + + FORCE_CALCULATORS = LazyClassMap({'rhf': 'pyscf.grad.RHF', 'hf': 'pyscf.grad.RHF'}) + ALL_PROPERTIES = DEFAULT_PROPERTIES + ['eri_tensor', 'forces', 'nuclear_forces', 'electronic_forces'] - # TODO: need to store theory name (and basis name) synonyms - if scf is not None: # shielding these from failed imports - THEORIES = {'hf': scf.RHF, 'rhf': scf.RHF, - 'uhf': scf.UHF, - 'mcscf': mcscf.CASSCF, 'casscf': mcscf.CASSCF, - 'casci': mcscf.CASCI, - 'mp2': mp.MP2} - FORCE_CALCULATORS = {'rhf': pyscf.grad.RHF, 'hf': pyscf.grad.RHF} - NEEDS_REFERENCE = set('mcscf casscf casci mp2') + FORCE_UNITS = u.hartree / u.bohr def __init__(self, **kwargs): From a607d3033bf0ff289481ed622473133e54e5759e Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Sun, 28 Aug 2016 13:39:51 -0700 Subject: [PATCH 30/64] Add DFT (part of #33) --- moldesign/models/pyscf.py | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/moldesign/models/pyscf.py b/moldesign/models/pyscf.py index f7d6d9c..e090fee 100644 --- a/moldesign/models/pyscf.py +++ b/moldesign/models/pyscf.py @@ -63,7 +63,8 @@ class PySCFPotential(QMBase): 'uhf': 'pyscf.scf.UHF', 'mcscf': 'pyscf.mcscf.CASSCF', 'casscf': 'pyscf.mcscf.CASSCF', 'casci': 'pyscf.mcscf.CASCI', - 'mp2': 'mp.MP2'}) + 'mp2': 'pyscf.mp.MP2', + 'dft': 'pyscf.dft.RKS', 'rks': 'pyscf.dft.RKS', 'ks': 'pyscf.dft.RKS'}) FORCE_CALCULATORS = LazyClassMap({'rhf': 'pyscf.grad.RHF', 'hf': 'pyscf.grad.RHF'}) @@ -72,7 +73,10 @@ class PySCFPotential(QMBase): 'nuclear_forces', 'electronic_forces'] - NEEDS_REFERENCE = set('mcscf casscf casci mp2') + NAME_MAP = {'b3lyp':'b3lyp'} + + NEEDS_REFERENCE = set('mcscf casscf casci mp2'.split()) + NEEDS_FUNCTIONAL = set('dft rks ks uks'.split()) FORCE_UNITS = u.hartree / u.bohr @@ -236,19 +240,34 @@ def _build_theories(self): reference = self.THEORIES[scf_ref](self.pyscfmol) if 'scf_cycles' in self.params: reference.max_cycle = self.params.scf_cycles + + self._assign_functional(reference, scf_ref, self.params.get('functional', None)) reference.callback = StatusLogger('%s/%s reference procedure:' % (scf_ref, self.params.basis), ['cycle', 'e_tot'], self.logger) else: reference = None theory = self.THEORIES[self.params.theory](self.pyscfmol) + self._assign_functional(theory, + self.params.theory, + self.params.get('functional', None)) theory.callback = StatusLogger('%s/%s procedure:' % (self.params.theory, self.params.basis), - ['cycle', 'e_tot'], self.logger) + ['cycle', 'e_tot'], + self.logger) if 'scf_cycles' in self.params: theory.max_cycle = self.params.scf_cycles return theory, reference + def _assign_functional(self, kernel, theory, fname): + if theory in self.NEEDS_FUNCTIONAL: + if fname is not None: + kernel.xc = fname + else: + raise ValueError('No functional specified for reference theory "%s"' % theory) + elif fname is not None: + raise ValueError('Functional specified for non-DFT theory "%s"' % theory) + def _get_ao_basis_functions(self): """ Convert pyscf basis functions into a list of atomic basis functions From 399feff53a7a2d29225b3014e64bf1d5b835a480 Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Sun, 28 Aug 2016 14:53:12 -0700 Subject: [PATCH 31/64] Add PySCF / MP2 methods and clean up implementation a bit --- moldesign/models/pyscf.py | 110 ++++++++++++++++++++++---------------- 1 file changed, 65 insertions(+), 45 deletions(-) diff --git a/moldesign/models/pyscf.py b/moldesign/models/pyscf.py index e090fee..cc026d9 100644 --- a/moldesign/models/pyscf.py +++ b/moldesign/models/pyscf.py @@ -15,13 +15,12 @@ from cStringIO import StringIO -from moldesign import orbitals from moldesign import units as u, compute, orbitals from moldesign.interfaces.pyscf_interface import force_remote, mol_to_pyscf, \ StatusLogger, SPHERICAL_NAMES from .base import QMBase from moldesign import uibase -from moldesign.utils import DotDict, if_not_none +from moldesign.utils import DotDict def exports(o): @@ -73,10 +72,11 @@ class PySCFPotential(QMBase): 'nuclear_forces', 'electronic_forces'] - NAME_MAP = {'b3lyp':'b3lyp'} + NAME_MAP = {'b3lyp': 'b3lyp'} NEEDS_REFERENCE = set('mcscf casscf casci mp2'.split()) NEEDS_FUNCTIONAL = set('dft rks ks uks'.split()) + IS_SCF = set('rhf uhf hf casscf mcscf dft rks ks'.split()) FORCE_UNITS = u.hartree / u.bohr @@ -107,25 +107,65 @@ def calculate(self, requests=None, guess=None): else: dm0 = None self.prep(force=True) # rebuild every time + + # Compute reference WFN + refobj = self.pyscfmol + if self.params.theory in self.NEEDS_REFERENCE: + reference = self._build_theory(self.params.get('reference', 'rhf'), + refobj) + kernel, failures = self._converge(reference, dm0=dm0) + refobj = self.reference = kernel + kwargs = {} + else: + self.reference = None + + # Compute WFN + theory = self._build_theory(self.params['theory'], + refobj) + if self.params['theory'] not in self.IS_SCF: + theory.kernel() + self.kernel = theory + else: + self.kernel, failures = self._converge(theory, **kwargs) + + # Compute forces + if do_forces: + grad = force_calculator(self.kernel) + else: + grad = None + + return self._get_properties(self.reference, self.kernel, grad) + + def _get_properties(self, ref, kernel, grad): + """ Analyze calculation results and return molecular properties + + Args: + ref (pyscf.Kernel): Reference kernel (can be None) + kernel (pyscf.Kernel): Theory kernel + grad (pyscf.Gradient): Gradient calculation + + Returns: + dict: Molecular property names and values + """ result = {} - # Compute wfn (with reference, if required) - if self.reference: - kernel, failures = self._converge(self.reference, dm0=dm0) - result['reference_energy'] = (kernel.e_tot * u.hartree).defunits() - # TODO: These objects can't be pickled ... need to fix that. - # result['_converged_kernel'] = kernel - # result['_convergence_failures'] = failures - kernel, failures = self._converge(self.kernel, dm0=dm0) - result['potential_energy'] = (kernel.e_tot * u.hartree).defunits() - # result['_converged_kernel'] = kernel - # result['_convergence_failures'] = failures - - # A little bit of wfn analysis if self.reference is not None: - orb_calc = self.reference + result['reference_energy'] = (ref.e_tot*u.hartree).defunits() + # TODO: check sign on correlation energy. Is this true for anything besides MP2? + result['correlation_energy'] = (kernel.e_corr *u.hartree).defunits() + result['potential_energy'] = result['correlation_energy'] + result['reference_energy'] + orb_calc = ref else: - orb_calc = self.kernel + result['potential_energy'] = (kernel.e_tot*u.hartree).defunits() + orb_calc = kernel + + if grad is not None: + f_e = -1.0 * grad.grad_elec() * self.FORCE_UNITS + f_n = -1.0 * grad.grad_nuc() * self.FORCE_UNITS + result['electronic_forces'] = f_e.defunits() + result['nuclear_forces'] = f_n.defunits() + result['forces'] = result['electronic_forces'] + result['nuclear_forces'] + ao_matrices = self._get_ao_matrices(orb_calc) scf_matrices = self._get_scf_matrices(orb_calc, ao_matrices) ao_pop, atom_pop = orb_calc.mulliken_pop(verbose=-1) @@ -153,15 +193,6 @@ def calculate(self, requests=None, guess=None): cmos.append(orbitals.Orbital(coeffs, wfn=el_state, occupation=occ)) el_state.add_orbitals(cmos, orbtype='canonical') - # Calculate the forces - if do_forces: - g = force_calculator(self.kernel) - f_e = -1.0 * g.grad_elec() * self.FORCE_UNITS - f_n = -1.0 * g.grad_nuc() * self.FORCE_UNITS - result['electronic_forces'] = f_e.defunits() - result['nuclear_forces'] = f_n.defunits() - result['forces'] = result['electronic_forces'] + result['nuclear_forces'] - # Return the result result['wfn'] = el_state self.last_el_state = el_state @@ -173,7 +204,6 @@ def prep(self, force=False): # TODO: spin, isotopic mass, symmetry if self._prepped and not force: return self.pyscfmol = self._build_mol() - self.kernel, self.reference = self._build_theories() self._prepped = True def _build_mol(self): @@ -234,30 +264,20 @@ def _converge(self, method, dm0=None): raise orbitals.ConvergenceError(method) - def _build_theories(self): - if self.params.theory in self.NEEDS_REFERENCE: - scf_ref = if_not_none(self.params.scf_reference, 'rhf') - reference = self.THEORIES[scf_ref](self.pyscfmol) - if 'scf_cycles' in self.params: - reference.max_cycle = self.params.scf_cycles - - self._assign_functional(reference, scf_ref, self.params.get('functional', None)) - reference.callback = StatusLogger('%s/%s reference procedure:' % (scf_ref, self.params.basis), - ['cycle', 'e_tot'], self.logger) - else: - reference = None + def _build_theory(self, name, refobj): + theory = self.THEORIES[name](refobj) - theory = self.THEORIES[self.params.theory](self.pyscfmol) - self._assign_functional(theory, - self.params.theory, - self.params.get('functional', None)) theory.callback = StatusLogger('%s/%s procedure:' % (self.params.theory, self.params.basis), ['cycle', 'e_tot'], self.logger) if 'scf_cycles' in self.params: theory.max_cycle = self.params.scf_cycles - return theory, reference + + if 'functional' in self.params: + self._assign_functional(theory, name, self.params.get('functional', None)) + + return theory def _assign_functional(self, kernel, theory, fname): if theory in self.NEEDS_FUNCTIONAL: From 5715f525d5160f66192c061cbb8937826b70935b Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Sun, 28 Aug 2016 15:59:42 -0700 Subject: [PATCH 32/64] Get method configuration UI working for QM methods --- moldesign/models/base.py | 8 ++++---- moldesign/models/models.py | 33 +++++++++++++++++++++++++++++++ moldesign/parameters.py | 13 +++++++++--- moldesign/widgets/configurator.py | 3 ++- 4 files changed, 49 insertions(+), 8 deletions(-) diff --git a/moldesign/models/base.py b/moldesign/models/base.py index db76630..c674c5d 100644 --- a/moldesign/models/base.py +++ b/moldesign/models/base.py @@ -16,7 +16,6 @@ import moldesign as mdt from moldesign import units as u -from moldesign.parameters import mm_model_parameters as mmp, qm_model_parameters as qmp from moldesign.method import Method @@ -123,7 +122,8 @@ def prep(self): class MMBase(EnergyModelBase): """Common interface for molecular mechanics""" - PARAMETERS = EnergyModelBase.PARAMETERS + mmp.values() + PARAMETERS = (EnergyModelBase.PARAMETERS + + mdt.parameters.mm_model_parameters.values()) def __init__(self, *args, **kwargs): super(MMBase, self).__init__(*args, **kwargs) @@ -133,6 +133,8 @@ def __init__(self, *args, **kwargs): class QMBase(EnergyModelBase): """Common interface for quantum mechanics""" + PARAMETERS = mdt.parameters.qm_model_parameters.values() + DEFAULT_PROPERTIES = ['potential_energy', 'nuclear_repulsion', 'dipole_moment', @@ -141,8 +143,6 @@ class QMBase(EnergyModelBase): ALL_PROPERTIES = DEFAULT_PROPERTIES # properties will be a pretty long list for most packages - PARAMETERS = qmp.values() - def set_wfn_guess(self): raise NotImplementedError diff --git a/moldesign/models/models.py b/moldesign/models/models.py index f4ec389..9411f52 100644 --- a/moldesign/models/models.py +++ b/moldesign/models/models.py @@ -13,15 +13,48 @@ # limitations under the License. # TODO: look into http://molmod.github.io/ +""" +"Generic" energy models - models that can be specified directly by name, without worrying about +which specific implementation is used. + +Currently, everything here is an alias. However, more complicated logic (including runtime +dispatch) may be used to determine the best implementation in a given situation +""" + from . import PySCFPotential +from . import OpenMMPotential + def exports(o): __all__.append(o.__name__) return o __all__ = [] + +################## +# ForceField +@exports +def ForceField(**kwargs): + return OpenMMPotential(**kwargs) + + +################## +# QM generics @exports def RHF(**kwargs): return PySCFPotential(theory='rhf', **kwargs) +@exports +def DFT(**kwargs): + return PySCFPotential(theory='dft', **kwargs) + + +@exports +def B3LYP(**kwargs): + return PySCFPotential(theory='dft', funtional='b3lyp', **kwargs) + + +@exports +def MP2(**kwargs): + return PySCFPotential(theory='mp2', **kwargs) diff --git a/moldesign/parameters.py b/moldesign/parameters.py index 36a310e..856d494 100644 --- a/moldesign/parameters.py +++ b/moldesign/parameters.py @@ -78,8 +78,7 @@ def named_dict(l): FORCEFIELDS = [] PERIODICITIES = [False, 'box'] -QMTHEORIES = [] -BASISSETS = [] + mm_model_parameters = named_dict([ Parameter('cutoff', 'Cutoff for nonbonded interactions', default=1.0*u.nm, type=u.nm), @@ -97,10 +96,18 @@ def named_dict(l): Parameter('periodic', 'Periodicity', default=False, choices=PERIODICITIES) ]) + +QMTHEORIES = ['rhf', 'rks', 'mp2', 'casscf', 'casci' 'fci'] +BASISSETS = ['3-21g', '4-31g', '6-31g', '6-31g*', '6-31g**', + '6-311g', '6-311g*', '6-311g+', '6-311g*+', + 'sto-3g', 'sto-6g', 'minao', 'weigend', + 'dz' 'dzp', 'dtz', 'dqz', + 'aug-cc-pvdz', 'aug-cc-pvtz', 'aug-cc-pvqz'] + qm_model_parameters = named_dict([ Parameter('theory', 'QM theory', choices=QMTHEORIES), Parameter('multiplicity', 'Spin multiplicity', default=1, type=int), - Parameter('basis_set', 'Basis set', choices=BASISSETS), + Parameter('basis', 'Basis set', choices=BASISSETS), Parameter('symmetry', default=None, choices=[None, 'Auto', 'Loose']), Parameter('wfn_guess', 'Starting guess method:', default='huckel', choices=['huckel', 'guess'] diff --git a/moldesign/widgets/configurator.py b/moldesign/widgets/configurator.py index ab2492c..cbbe4b2 100644 --- a/moldesign/widgets/configurator.py +++ b/moldesign/widgets/configurator.py @@ -74,7 +74,8 @@ def __init__(self, paramlist, paramdefs, title=None): def reset_values(self, *args): reset_params = set() for name, value in self.paramlist.iteritems(): - self.selectors[name].selector.value = value + if value is not None: + self.selectors[name].selector.value = value reset_params.add(name) for paramdef in self.paramdefs: From 77b3d31f5c60558379d272c921b2214b914ae47b Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Tue, 30 Aug 2016 09:01:30 -0700 Subject: [PATCH 33/64] Add lazy importing for simtk/openmm --- moldesign/integrators/openmm.py | 9 ++++-- moldesign/interfaces/openmm.py | 55 +++++++++++++++++++-------------- moldesign/models/openmm.py | 49 +++++++++++++++++------------ moldesign/molecules/residue.py | 4 +-- 4 files changed, 69 insertions(+), 48 deletions(-) diff --git a/moldesign/integrators/openmm.py b/moldesign/integrators/openmm.py index 763a045..5732d16 100644 --- a/moldesign/integrators/openmm.py +++ b/moldesign/integrators/openmm.py @@ -16,7 +16,7 @@ from moldesign import units as u from moldesign import compute -from moldesign.interfaces.openmm import OpenMMPickleMixin, force_remote, MdtReporter, pint2simtk, mm +from moldesign.interfaces.openmm import force_remote, MdtReporter, pint2simtk, OpenMMPickleMixin from .base import IntegratorBase, LangevinBase @@ -85,14 +85,17 @@ def _attach_reporters(self): @exports class OpenMMVerlet(OpenMMBaseIntegrator): def get_openmm_integrator(self): - integrator = mm.VerletIntegrator(pint2simtk(self.params.timestep)) + from simtk import openmm + integrator = openmm.VerletIntegrator(pint2simtk(self.params.timestep)) return integrator @exports class OpenMMLangevin(LangevinBase, OpenMMBaseIntegrator): def get_openmm_integrator(self): - integrator = mm.LangevinIntegrator( + from simtk import openmm + + integrator = openmm.LangevinIntegrator( pint2simtk(self.params.temperature), pint2simtk(self.params.collision_rate), pint2simtk(self.params.timestep)) diff --git a/moldesign/interfaces/openmm.py b/moldesign/interfaces/openmm.py index 783a789..8265d01 100644 --- a/moldesign/interfaces/openmm.py +++ b/moldesign/interfaces/openmm.py @@ -12,31 +12,24 @@ # See the License for the specific language governing permissions and # limitations under the License. import itertools +import imp import numpy as np import pyccc +import moldesign as mdt from moldesign.utils import from_filepath +from moldesign import units as u +from moldesign import compute try: - import simtk.openmm as mm - from simtk import unit as stku - from simtk.openmm import app -except ImportError: - mm = stku = app = None + imp.find_module('pyscf') +except (ImportError, OSError) as exc: + print 'PySCF not installed; using remote docker container' force_remote = True else: force_remote = False -from pyccc import LocalFile - -import moldesign as mdt -from moldesign import units as u - -from moldesign import compute - -from moldesign.molecules import Trajectory, Molecule - class OpenMMPickleMixin(object): def __getstate__(self): @@ -48,6 +41,7 @@ def __getstate__(self): return mystate def __setstate__(self, state): + from simtk.openmm import app if 'sim_args' in state: assert 'sim' not in state args = state.pop('sim_args') @@ -55,12 +49,12 @@ def __setstate__(self, state): self.__dict__.update(state) -# This class needs special treatment because it inherits from an -# openmm class, but OpenMM may not be present in the user's environment -if force_remote: - MdtReporter = None -else: - class MdtReporter(app.StateDataReporter): +# This is a factory for the MdtReporter class. It's here so that we don't have to import simtk.openmm.app +# at the module level +def MdtReporter(mol, report_interval): + from simtk.openmm.app import StateDataReporter + + class MdtReporter(StateDataReporter): """ We'll use this class to capture all the information we need about a trajectory It's pretty basic - the assumption is that there will be more processing on the client side @@ -70,7 +64,7 @@ class MdtReporter(app.StateDataReporter): def __init__(self, mol, report_interval): self.mol = mol self.report_interval = report_interval - self.trajectory = Trajectory(mol) + self.trajectory = mdt.Trajectory(mol) self.annotation = None self._row_format = ("{:<%d}" % 10) + 3*("{:>%d}" % self.LEN) self._printed_header = False @@ -133,6 +127,8 @@ def describeNextReport(self, simulation): steps = self.report_interval - simulation.currentStep % self.report_interval return (steps, True, True, True, True) + return MdtReporter(mol, report_interval) + PINT_NAMES = {'mole': u.avogadro, 'degree': u.degrees, @@ -146,6 +142,8 @@ def simtk2pint(quantity, flat=False): :param quantity: :param flat: if True, flatten 3xN arrays to 3N """ + from simtk import unit as stku + mag = quantity._value if quantity.unit == stku.radian: @@ -170,6 +168,8 @@ def pint2simtk(quantity): Note SimTK appears limited, esp for energy units. May need to have pint convert to SI first """ + from simtk import unit as stku + SIMTK_NAMES = {'ang': stku.angstrom, 'fs': stku.femtosecond, 'nm': stku.nanometer, @@ -187,6 +187,8 @@ def pint2simtk(quantity): @compute.runsremotely(enable=force_remote) def _amber_to_mol(prmtop_file, inpcrd_file): + from simtk.openmm import app + prmtop = from_filepath(app.AmberPrmtopFile, prmtop_file) inpcrd = from_filepath(app.AmberInpcrdFile, inpcrd_file) @@ -199,9 +201,9 @@ def _amber_to_mol(prmtop_file, inpcrd_file): if force_remote: def amber_to_mol(prmtop_file, inpcrd_file): if not isinstance(prmtop_file, pyccc.FileContainer): - prmtop_file = LocalFile(prmtop_file) + prmtop_file = pyccc.LocalFile(prmtop_file) if not isinstance(inpcrd_file, pyccc.FileContainer): - inpcrd_file = LocalFile(inpcrd_file) + inpcrd_file = pyccc.LocalFile(inpcrd_file) return _amber_to_mol(prmtop_file, inpcrd_file) else: amber_to_mol = _amber_to_mol @@ -219,6 +221,8 @@ def topology_to_mol(topo, name=None, positions=None, velocities=None, assign_bon do not store bond orders) """ + from simtk import unit as stku + # Atoms atommap = {} newatoms = [] @@ -276,7 +280,7 @@ def topology_to_mol(topo, name=None, positions=None, velocities=None, assign_bon if name is None: name = 'Unnamed molecule from OpenMM' - newmol = Molecule(newatoms, bond_graph=bonds, name=name) + newmol = mdt.Molecule(newatoms, bond_graph=bonds, name=name) if assign_bond_orders: for residue in newmol.residues: @@ -298,6 +302,8 @@ def mol_to_topology(mol): simtk.openmm.app.Topology: topology of the molecule """ + from simtk.openmm import app + top = app.Topology() chainmap = {chain: top.addChain(chain.name) for chain in mol.chains} resmap = {res: top.addResidue(res.resname, chainmap[res.chain], str(res.pdbindex)) @@ -314,5 +320,6 @@ def mol_to_topology(mol): def mol_to_modeller(mol): + from simtk.openmm import app return app.Modeller(mol_to_topology(mol), pint2simtk(mol.positions)) diff --git a/moldesign/models/openmm.py b/moldesign/models/openmm.py index 4e87231..98904c4 100644 --- a/moldesign/models/openmm.py +++ b/moldesign/models/openmm.py @@ -80,6 +80,7 @@ def prep(self, force=False): This will rebuild this OpenMM simulation if: A) it's not built yet, or B) there's a new integrator """ + from simtk.openmm import app # TODO: automatically set _prepped to false if the model or integration parameters change if not force: @@ -92,7 +93,7 @@ def prep(self, force=False): integrator = self.mol.integrator.get_openmm_integrator() self._set_constraints() - self.sim = opm.app.Simulation(self.mm_topology, self.mm_system, integrator) + self.sim = app.Simulation(self.mm_topology, self.mm_system, integrator) self._prepped = True print 'Created OpenMM kernel (Platform: %s)' % self.sim.context.getPlatform().getName() self._prep_integrator = self.mol.integrator @@ -191,8 +192,8 @@ def _set_constraints(self): elif constraint.desc == 'distance': self.mol.assert_atom(constraint.a1) self.mol.assert_atom(constraint.a2) - system.addConstraint(constraint.a1, - constraint.a2, + system.addConstraint(constraint.a1.index, + constraint.a2.index, opm.pint2simtk(constraint.value)) else: @@ -218,13 +219,17 @@ def _set_constraints(self): @staticmethod def _make_dummy_integrator(): - return opm.mm.VerletIntegrator(2.0 * opm.stku.femtoseconds) + from simtk import unit as stku + from simtk import openmm + return openmm.VerletIntegrator(2.0 * stku.femtoseconds) def _create_system(self): + from simtk.openmm import app + # Parse the stored PRMTOP file if it's available if ('amber_params' in self.mol.ff) and not hasattr(self, 'mm_prmtop'): print 'Parsing stored PRMTOP file: %s' % self.mol.ff.amber_params.prmtop - self.mm_prmtop = from_filepath(opm.app.AmberPrmtopFile, + self.mm_prmtop = from_filepath(app.AmberPrmtopFile, self.mol.ff.amber_params.prmtop) # Create the OpenMM system @@ -276,11 +281,14 @@ def _get_system_params(self): """ Translates the spec from MMBase into system parameter keywords for createSystem """ # need cmm motion - nonbonded_names = {'nocutoff': opm.app.NoCutoff, - 'ewald': opm.app.Ewald, - 'pme': opm.app.PME, - 'cutoff': opm.app.CutoffPeriodic if self.params.periodic else opm.app.CutoffNonPeriodic} - implicit_solvent_names = {'obc': opm.app.OBC2} + from simtk.openmm import app + nonbonded_names = {'nocutoff': app.NoCutoff, + 'ewald': app.Ewald, + 'pme': app.PME, + 'cutoff': app.CutoffPeriodic if self.params.periodic else app.CutoffNonPeriodic} + implicit_solvent_names = {'obc': app.OBC2, + 'obc1': app.OBC1, + None: None} system_params = dict(nonbondedMethod=nonbonded_names[self.params.nonbonded], nonbondedCutoff=opm.pint2simtk(self.params.cutoff), @@ -292,17 +300,20 @@ def _get_system_params(self): if self.mol.integrator.params.get('constrain_water', False): system_params['rigidWater'] = True if self.mol.integrator.params.get('constrain_hbonds', False): - system_params['constraints'] = opm.app.HBonds + system_params['constraints'] = app.HBonds return system_params def list_openmmplatforms(): - return [opm.mm.Platform.getPlatform(ip).getName() - for ip in xrange(opm.mm.Platform.getNumPlatforms())] + from simtk import openmm + return [openmm.Platform.getPlatform(ip).getName() + for ip in xrange(openmm.Platform.getNumPlatforms())] def _system_to_forcefield(system, mol): + from simtk import openmm + # TODO: 1-4 bond rules # TODO: constraints forces = system.getForces() @@ -311,7 +322,7 @@ def _system_to_forcefield(system, mol): ljparameters = {} for f in forces: - if type(f) == opm.mm.HarmonicBondForce: + if type(f) == openmm.HarmonicBondForce: for ibond in xrange(f.getNumBonds()): i1, i2, d0, k = f.getBondParameters(ibond) bond = ff.HarmonicBondTerm(mol.atoms[i1], mol.atoms[i2], @@ -319,7 +330,7 @@ def _system_to_forcefield(system, mol): opm.simtk2pint(d0)) bonds.append(bond) - elif type(f) == opm.mm.HarmonicAngleForce: + elif type(f) == openmm.HarmonicAngleForce: for iangle in xrange(f.getNumAngles()): i1, i2, i3, t0, k = f.getAngleParameters(iangle) angle = ff.HarmonicAngleTerm(mol.atoms[i1], mol.atoms[i2], mol.atoms[i3], @@ -327,7 +338,7 @@ def _system_to_forcefield(system, mol): opm.simtk2pint(t0)) angles.append(angle) - elif type(f) == opm.mm.PeriodicTorsionForce: + elif type(f) == openmm.PeriodicTorsionForce: for itorsion in xrange(f.getNumTorsions()): i1, i2, i3, i4, n, t0, v_n = f.getTorsionParameters(itorsion) torsion = ff.PeriodicTorsionTerm(mol.atoms[i1], mol.atoms[i2], mol.atoms[i3], mol.atoms[i4], @@ -335,7 +346,7 @@ def _system_to_forcefield(system, mol): opm.simtk2pint(t0)) dihedrals.append(torsion) - elif type(f) == opm.mm.NonbondedForce: + elif type(f) == openmm.NonbondedForce: for i, atom in enumerate(mol.atoms): q, sigma, epsilon = f.getParticleParameters(i) charges[atom] = opm.simtk2pint(q) @@ -343,10 +354,10 @@ def _system_to_forcefield(system, mol): opm.simtk2pint(sigma), opm.simtk2pint(epsilon)) - elif type(f) == opm.mm.CMMotionRemover: + elif type(f) == openmm.CMMotionRemover: continue - elif type(f) == opm.mm.GBSAOBCForce: + elif type(f) == openmm.GBSAOBCForce: continue ffparams = ff.FFParameters(bonds, angles, dihedrals, charges, ljparameters) diff --git a/moldesign/molecules/residue.py b/moldesign/molecules/residue.py index 51ac0e7..e00ed11 100644 --- a/moldesign/molecules/residue.py +++ b/moldesign/molecules/residue.py @@ -70,11 +70,11 @@ def add(self, atom, key=None): else: assert atom.chain == self.chain, "Atom's chain does not match residue's chain" - if key is not None or atom.name not in self: + if key is not None or atom.name not in self.children: return super(Residue, self).add(atom, key=key) else: return super(Residue, self).add(atom, key='%s%s' % (atom.name, len(self))) - add.__doc__ = Entity.__doc__ + add.__doc__ = Entity.add.__doc__ @property def is_n_terminal(self): From 635191b981511b92001f133062703c358e6ff5d9 Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Tue, 30 Aug 2016 09:36:22 -0700 Subject: [PATCH 34/64] Import PDBFixer lazily #78 --- moldesign/_tests/test_imports.py | 9 ++++++++ moldesign/interfaces/openmm.py | 4 ++-- moldesign/interfaces/pdbfixer_interface.py | 24 ++++++++++++++-------- moldesign/models/pyscf.py | 3 +-- 4 files changed, 27 insertions(+), 13 deletions(-) create mode 100644 moldesign/_tests/test_imports.py diff --git a/moldesign/_tests/test_imports.py b/moldesign/_tests/test_imports.py new file mode 100644 index 0000000..74327f9 --- /dev/null +++ b/moldesign/_tests/test_imports.py @@ -0,0 +1,9 @@ +import pytest +import sys + + +def test_lazy_imports(): + import moldesign + + for mod in 'simtk simtk.openmm pyscf pdbfixer': + assert mod not in sys.modules \ No newline at end of file diff --git a/moldesign/interfaces/openmm.py b/moldesign/interfaces/openmm.py index 8265d01..7659aad 100644 --- a/moldesign/interfaces/openmm.py +++ b/moldesign/interfaces/openmm.py @@ -23,9 +23,9 @@ from moldesign import compute try: - imp.find_module('pyscf') + imp.find_module('simtk.openmm') except (ImportError, OSError) as exc: - print 'PySCF not installed; using remote docker container' + print 'OpenMM could not be imported; using remote docker container' force_remote = True else: force_remote = False diff --git a/moldesign/interfaces/pdbfixer_interface.py b/moldesign/interfaces/pdbfixer_interface.py index 65779d0..243f938 100644 --- a/moldesign/interfaces/pdbfixer_interface.py +++ b/moldesign/interfaces/pdbfixer_interface.py @@ -12,15 +12,10 @@ # See the License for the specific language governing permissions and # limitations under the License. +import imp + import numpy as np -try: - import pdbfixer as pf -except ImportError: - force_remote = True - pf = None -else: - force_remote = False import moldesign as mdt from moldesign import units as u @@ -28,6 +23,14 @@ from . import openmm as opm +try: + imp.find_module('pdbfixer') +except (ImportError, OSError) as exc: + print 'PDBFixer could not be imported; using remote docker container' + force_remote = True +else: + force_remote = False + @compute.runsremotely(enable=force_remote) def add_hydrogen(mol, pH=7.4): @@ -75,6 +78,8 @@ def add_water(mol, min_box_size=None, padding=None, Returns: moldesign.Molecule: new Molecule object containing both solvent and solute """ + import pdbfixer + if padding is None and min_box_size is None: raise ValueError('Solvate arguments: must pass padding or min_box_size or both.') @@ -107,7 +112,7 @@ def add_water(mol, min_box_size=None, padding=None, # TODO: this is like 10 bad things at once. Should probably submit a # PR to PDBFixer to make this a public staticmethod instead of a private instancemethod # Alternatively, PR to create Fixers directly from Topology objs - ff = pf.PDBFixer.__dict__['_createForceField'](None, modeller.getTopology(), True) + ff = pdbfixer.PDBFixer.__dict__['_createForceField'](None, modeller.getTopology(), True) modeller.addSolvent(ff, boxSize=opm.pint2simtk(boxsize), @@ -123,8 +128,9 @@ def add_water(mol, min_box_size=None, padding=None, def _get_fixer(mol): + import pdbfixer mol.write('/tmp/tmp.pdb', format='pdb') - fixer = pf.PDBFixer('/tmp/tmp.pdb') + fixer = pdbfixer.PDBFixer('/tmp/tmp.pdb') return fixer def _get_mol(f): diff --git a/moldesign/models/pyscf.py b/moldesign/models/pyscf.py index cc026d9..51e2db4 100644 --- a/moldesign/models/pyscf.py +++ b/moldesign/models/pyscf.py @@ -115,7 +115,6 @@ def calculate(self, requests=None, guess=None): refobj) kernel, failures = self._converge(reference, dm0=dm0) refobj = self.reference = kernel - kwargs = {} else: self.reference = None @@ -126,7 +125,7 @@ def calculate(self, requests=None, guess=None): theory.kernel() self.kernel = theory else: - self.kernel, failures = self._converge(theory, **kwargs) + self.kernel, failures = self._converge(theory, dm0=dm0) # Compute forces if do_forces: From b928c9ef57aff3d4c0307b5467723505d2965ec0 Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Fri, 2 Sep 2016 16:10:44 -0700 Subject: [PATCH 35/64] Revamp parameters - add dependencies, ordering, and more QM parameter support --- moldesign/method.py | 5 ++ moldesign/parameters.py | 98 ++++++++++++++++++++++++------- moldesign/uibase/components.py | 23 +++++++- moldesign/utils/classes.py | 30 ++++++++++ moldesign/widgets/configurator.py | 50 +++++++++------- 5 files changed, 163 insertions(+), 43 deletions(-) diff --git a/moldesign/method.py b/moldesign/method.py index d36c046..2a2155c 100644 --- a/moldesign/method.py +++ b/moldesign/method.py @@ -33,6 +33,11 @@ class Method(object): """ list: list of Parameters that can be used to configure this method """ + PARAM_SUPPORT = {} + """ Mapping(str, list): List of supported values for parameters (if a parameter is not found, + it's assumed that all possible values are supported) + """ + def __reduce__(self): return _make_method, (self.__class__, self.params, self.mol) diff --git a/moldesign/parameters.py b/moldesign/parameters.py index 856d494..d9dc4d1 100644 --- a/moldesign/parameters.py +++ b/moldesign/parameters.py @@ -18,9 +18,10 @@ These are used to standardize our interfaces to other codes, and automatically generate interactive notebook interfaces to configure various techniques. """ +import operator as op from moldesign import units as u -from moldesign.utils import if_not_none, DotDict +from moldesign import utils class ForceField(object): @@ -35,27 +36,56 @@ class SymmetryGroup(object): """Generalized symmetry type (blank for now)""" +def isin(a, b): return a in b + + +class WhenParam(object): + def __init__(self, parameter, operator, checkval): + self.operator = operator + self.parameter = parameter + self.checkval = checkval + + def __call__(self, paramset): + """Returns: + bool: True if the parameter is releveant, false otherwise + """ + #TODO: anything relevant to an irrelevant parameter is also irrelevant + return self.operator(paramset[self.parameter], self.checkval) + + class Parameter(object): + """ A generic parameter for a computational method + + Args: + name (str): the arguments name (this is also its key in the method's ``params`` dictionary) + short_description (str): A more readable description of about 100 characters + type: The type of the param, including units if applicable. + This may be a type (``int``, ``str``, etc.); if the quantity has physical units, you may + also pass an example of this quantity (e.g., ``1.0 * units.angstrom``) + default: the default value, or None if the user is required to set this parameter manually + choices (list): A list of allowable values for the parameter + help_url (str): URL for detailed help (not currently implemented) + relevance (WhenParam): specifies when a given parameter will affect the dynamics + + Examples: + >>> Parameter('timestep', 'Dynamics timestep', type=1.0*u.fs, default=2.0*u.fs) + + >>> Parameter('functional', 'DFT XC functional', choices=['b3lyp', 'pbe0'], + >>> relevance=WhenParam('theory', op.eq, 'rks')) + + """ def __init__(self, name, short_description=None, type=None, default=None, choices=None, - select_multiple=False, - help_url=None): - """ - A method's parameter - :param default: the default value. If this does not match any spec in choices, it must be set. - :param choices: A list of allowable values for the parameter - :param types: a list of types for the parameter (does not check choices if parameter is one of these types) - :param number: Number of values (>1 should be passed in list). '+' indicates arbitrary list size - :return: - """ + help_url=None, + relevance=None): self.name = name - self.displayname = if_not_none(short_description, name) + self.displayname = utils.if_not_none(short_description, name) self.value = None self.default = default - self.choices = if_not_none(choices, []) + self.choices = utils.if_not_none(choices, []) self.type = type self.help_url = help_url if isinstance(type, u.MdtQuantity): @@ -65,12 +95,25 @@ def __init__(self, name, self.units = type else: self.units = None - self.select_multiple = select_multiple + self.relevance = relevance + + def __str__(self): + s = '%s "%s", type: %s' % (type(self).__name__, self.name, self.type.__name__) + if self.units is not None: + s += ', units: %s' % self.units + return s + + def __repr__(self): + try: + return '<%s>' % self + except: + return '<%s at %x - exc in __repr__>' % (type(self), id(self)) + # TODO - make this ordered as well as dotted def named_dict(l): - return DotDict({i.name: i for i in l}) + return utils.OrderedDotDict((i.name, i) for i in l) model_parameters = named_dict([ Parameter('subsystem') @@ -81,7 +124,8 @@ def named_dict(l): mm_model_parameters = named_dict([ - Parameter('cutoff', 'Cutoff for nonbonded interactions', default=1.0*u.nm, type=u.nm), + Parameter('cutoff', 'Cutoff for nonbonded interactions', + default=1.0*u.nm, type=u.nm), Parameter('nonbonded', 'Nonbonded interaction method', default='cutoff', type=str, choices=['cutoff', 'pme', 'ewald']), Parameter('implicit_solvent', @@ -103,15 +147,27 @@ def named_dict(l): 'sto-3g', 'sto-6g', 'minao', 'weigend', 'dz' 'dzp', 'dtz', 'dqz', 'aug-cc-pvdz', 'aug-cc-pvtz', 'aug-cc-pvqz'] +FUNCTIONALS = ['b3lyp', 'blyp', 'pbe0', 'x3lyp', 'mpw3lyp5'] +# This is a VERY limited set to start with; all hybrid functionals for now +# Need to think more about interface and what to offer by default +# PySCF xcs are at https://github.com/sunqm/pyscf/blob/master/dft/libxc.py for now qm_model_parameters = named_dict([ Parameter('theory', 'QM theory', choices=QMTHEORIES), - Parameter('multiplicity', 'Spin multiplicity', default=1, type=int), + Parameter('functional', 'DFT Functional', default='b3lyp', + choices=FUNCTIONALS, # TODO: allow separate x and c functionals + relevance=WhenParam('theory', isin, 'dft rks ks uks'.split())), Parameter('basis', 'Basis set', choices=BASISSETS), - Parameter('symmetry', default=None, choices=[None, 'Auto', 'Loose']), - Parameter('wfn_guess', 'Starting guess method:', default='huckel', - choices=['huckel', 'guess'] - )]) + Parameter('wfn_guess', 'Starting guess method', default='huckel', + choices=['huckel', 'minao', 'stored']), + Parameter('store_orb_guesses', 'Automatically use orbitals for next initial guess', + default=True, type=bool), + Parameter('multiplicity', 'Spin multiplicity', default=1, type=int), + Parameter('symmetry', 'Symmetry detection', + default=None, choices=[None, 'Auto', 'Loose']), + Parameter('initial_guess', 'Wfn for initial guess', + relevance=WhenParam('wfn_guess', op.eq, 'stored')) + ]) integrator_parameters = named_dict([ Parameter('timestep', 'Dynamics timestep', default=1.0*u.fs, type=u.default.time), diff --git a/moldesign/uibase/components.py b/moldesign/uibase/components.py index bc77c76..a870f88 100644 --- a/moldesign/uibase/components.py +++ b/moldesign/uibase/components.py @@ -184,6 +184,24 @@ def parse_value(self, *args): self.slider.value = f +class ReadOnlyRepr(ipy.Box): + """ When a value is assigned, displays its __repr__ instead + """ + def __init__(self, *args, **kwargs): + super(ReadOnlyRepr, self).__init__(*args, **kwargs) + self.textbox = ipy.Text() + self.textbox.disabled = True + self.children = [self.textbox] + + @property + def value(self): + return self.textbox.value + + @value.setter + def value(self, v): + self.textbox.value = repr(v) + + class UnitText(ipy.Box): """Widget for a user to input a quantity with physical units. @@ -217,7 +235,8 @@ def __init__(self, value=None, units=None, **kwargs): self.validated = ipy.HTML(self.INVALID) self.children = [self.textbox, self.validated] self._is_valid = False - if value is not None: self.value = value + if value is not None: + self.value = value def _validate(self, change): self._validated_value = None @@ -248,4 +267,4 @@ def value(self): @value.setter def value(self, v): - self.textbox.value = str(v) \ No newline at end of file + self.textbox.value = str(v) diff --git a/moldesign/utils/classes.py b/moldesign/utils/classes.py index ba84f7a..12c0de1 100644 --- a/moldesign/utils/classes.py +++ b/moldesign/utils/classes.py @@ -13,6 +13,8 @@ # limitations under the License. from bisect import bisect_left, bisect_right +import collections + class Categorizer(dict): """ @@ -57,6 +59,34 @@ def __dir__(self): return dir(self.__class__) + self.keys() +class OrderedDotDict(collections.OrderedDict): + """Dict with items accessible as attributes""" + def __getstate__(self): + retval = dict(__dict__=self.__dict__.copy(), + items=self.items()) + return retval + + def __setstate__(self, d): + self.__dict__.update(d['__dict__']) + self.update(d['items']) + + def __getattr__(self, item): + try: + return self[item] + except KeyError: + raise AttributeError("'%s' object has no attribute '%s'" + % (self.__class__.__name__, item)) + + def __setattr__(self, item, val): + if item.startswith('_OrderedDict__') or item.startswith('__'): + self.__dict__[item] = val + else: + self[item] = val + + def __dir__(self): + return dir(self.__class__) + self.keys() + + class Alias(object): """ Descriptor that calls a child object's method. diff --git a/moldesign/widgets/configurator.py b/moldesign/widgets/configurator.py index cbbe4b2..f0929c9 100644 --- a/moldesign/widgets/configurator.py +++ b/moldesign/widgets/configurator.py @@ -16,7 +16,7 @@ import ipywidgets as ipy -from moldesign.uibase import UnitText +from moldesign.uibase import UnitText, ReadOnlyRepr from moldesign import utils @@ -81,65 +81,75 @@ def reset_values(self, *args): for paramdef in self.paramdefs: if paramdef.name not in reset_params: # if it's not set already, make it the default self.selectors[paramdef.name].default() + self.show_relevant_fields() def apply_values(self, *args): for paramname, selector in self.selectors.iteritems(): self.paramlist[paramname] = selector.selector.value self.currentconfig.value = str(self.paramlist).replace(', ', ',\n ') + self.show_relevant_fields() + + def show_relevant_fields(self): + for s in self.selectors.itervalues(): + if s.paramdef.relevance is not None: + if s.paramdef.relevance(self.paramlist): + s.layout.visibility = 'visible' + else: + s.layout.visibility = 'hidden' class ParamSelector(ipy.Box): - WIDGETKWARGS = {'width':'200px'} + WIDGETKWARGS = {'width': '200px'} - def __init__(self, param): + def __init__(self, paramdef): super(ParamSelector, self).__init__(layout=ipy.Layout(display='flex', flex_flow='nowrap', align_content='baseline')) - self.param = param + self.paramdef = paramdef children = [] - self.name = ipy.HTML("

    %s:

    " % param.displayname, + self.name = ipy.HTML("

    %s:

    " % paramdef.displayname, width='200px') children.append(self.name) - if param.choices: - self.selector = ipy.Dropdown(options=param.choices, **self.WIDGETKWARGS) - elif param.type == bool: + if paramdef.choices: + self.selector = ipy.Dropdown(options=paramdef.choices, **self.WIDGETKWARGS) + elif paramdef.type == bool: self.selector = ipy.ToggleButtons(options=[True, False], **self.WIDGETKWARGS) - elif param.units: - self.selector = UnitText(units=param.units, **self.WIDGETKWARGS) - elif param.type == float: + elif paramdef.units: + self.selector = UnitText(units=paramdef.units, **self.WIDGETKWARGS) + elif paramdef.type == float: self.selector = ipy.FloatText(**self.WIDGETKWARGS) - elif param.type == int: + elif paramdef.type == int: self.selector = ipy.IntText(**self.WIDGETKWARGS) - elif param.type == str: + elif paramdef.type == str: self.selector = ipy.Text(**self.WIDGETKWARGS) else: - self.selector = ipy.HTML('unknown datatype') + self.selector = ReadOnlyRepr(**self.WIDGETKWARGS) children.append(self.selector) children = [self.name, self.selector] self.default_button = None - if param.default: + if paramdef.default: self.default_button = ipy.Button(description='Default', - tooltip='Set to default: %s' % self.param.default, + tooltip='Set to default: %s' % self.paramdef.default, width='75px') self.default_button.on_click(self.default) children.append(self.default_button) self.default() self.help_link = None - if param.help_url: - self.help_link = ipy.HTML('?' % param.help_url) + if paramdef.help_url: + self.help_link = ipy.HTML('?' % paramdef.help_url) children.append(self.help_link) self.children = children def default(self, *args): - self.selector.value = self.param.default + self.selector.value = self.paramdef.default @property def value(self): @@ -147,4 +157,4 @@ def value(self): @value.setter def value(self, v): - self.selector.value = v \ No newline at end of file + self.selector.value = v From 3cff02cd4dd2415e311adc1272e93d9a8ac5021b Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Fri, 2 Sep 2016 16:11:47 -0700 Subject: [PATCH 36/64] Clean up orbital data structures - better density mat handling, remove **kwargs --- moldesign/orbitals/orbitals.py | 30 ++++++++++++++---------------- moldesign/orbitals/wfn.py | 16 +++++++--------- 2 files changed, 21 insertions(+), 25 deletions(-) diff --git a/moldesign/orbitals/orbitals.py b/moldesign/orbitals/orbitals.py index bb7cc73..ae45ebc 100644 --- a/moldesign/orbitals/orbitals.py +++ b/moldesign/orbitals/orbitals.py @@ -62,8 +62,7 @@ class Orbital(object): :math:`\left| \mu \right \rangle` are stored at ``self.basis`` """ def __init__(self, coeffs, basis=None, wfn=None, - occupation=None, name='unnamed', - **kwargs): + occupation=None, name='unnamed'): """ Initialization: Args: @@ -90,10 +89,6 @@ def __init__(self, coeffs, basis=None, wfn=None, if self.basis is not None: assert len(self.coeffs) == len(self.basis) - # Assign arbitrary attributes - for k, v in kwargs.iteritems(): - setattr(self, k, v) - def overlap(self, other): """ Calculate overlap with another orbital @@ -114,7 +109,7 @@ def fock_element(self, other): Returns: u.Scalar[energy]: fock matrix element """ - return self.wfn.fock_ao.dot(other.coeffs).ldot(self.coeffs) # use ldot to preserve units + return self.wfn.fock_ao.dot(other.coeffs).ldot(self.coeffs) # uses ldot to preserve units @property def energy(self): @@ -149,8 +144,7 @@ class MolecularOrbitals(object): """ def __init__(self, orbitals, wfn=None, basis=None, canonical=False, - orbtype=None, - **kwargs): + orbtype=None): """ Initialization: Args: @@ -194,9 +188,6 @@ def __init__(self, orbitals, wfn=None, basis=None, if canonical: self._set_cmo_names() - for k, v in kwargs.iteritems(): - setattr(self, k, v) - def align_phases(self, other, threshold=0.5, assert_same_type=True): """ Flip the signs of these orbitals to bring them into maximum coincidence with another set of orbitals @@ -226,7 +217,7 @@ def overlap(self, other): other (MolecularOrbitals): Returns: - numpy.array: overlaps between the two sets of orbitals. + numpy.ndarray: overlaps between the two sets of orbitals Example: >>> canonical = mol.wfn.canonical @@ -235,7 +226,7 @@ def overlap(self, other): >>> overlaps[i, j] == canonical.orbitals[i].overlap(atomic.orbitals[j]) True """ - return self.dot(self.aobasis.overlaps.dot(other.T)) + return self.coeffs.dot(self.wfn.aobasis.overlaps.dot(other.coeffs.T)) def __iter__(self): return iter(self.orbitals) @@ -250,8 +241,9 @@ def __repr__(self): return '<%d %s %s in %s>' % (len(self), self.orbtype, self.__class__.__name__, str(self.wfn)) - def __getitem__(self, item): - return self.orbitals[item] + def _to_ao_density_matrix(self): + c = self.coeffs * self.occupations[:, None]/2.0 + return 2.0*c.T.dot(c) @property def energies(self): @@ -260,6 +252,12 @@ def energies(self): This is just the diagonal of the fock matrix""" return self.fock.diagonal() + @property + def occupations(self): + """ np.ndarray: orbital occupation numbers + """ + return np.array([orb.occupation for orb in self.orbitals]) + @property def fock(self): """u.Array[energy]: Fock matrix for these orbitals""" diff --git a/moldesign/orbitals/wfn.py b/moldesign/orbitals/wfn.py index 1c6e8ba..4ceaaf4 100644 --- a/moldesign/orbitals/wfn.py +++ b/moldesign/orbitals/wfn.py @@ -35,14 +35,15 @@ class ElectronicWfn(object): fock_ao (moldesign.units.Array[energy]): fock matrix in the AO basis positions (moldesign.units.Array[length]): positions of the nuclei for this wfn civectors (np.ndarray): CI vectors (if applicable) - **kwargs (dict): arbitrary metadata + density_matrix_ao (np.ndarray): density matrix in the ao basis """ def __init__(self, mol, num_electrons, model=None, aobasis=None, fock_ao=None, positions=None, - civectors=None, **kwargs): + civectors=None, + density_matrix_ao=None): self.mol = mol self.model = model self.civectors = civectors @@ -57,6 +58,7 @@ def __init__(self, mol, num_electrons, self.homo = self.num_electrons/2 - 1 self.lumo = self.homo + 1 self._has_canonical = False + self.density_matrix_ao = density_matrix_ao if positions is None: self.positions = mol.positions.copy() @@ -69,9 +71,6 @@ def __init__(self, mol, num_electrons, for orb in self.aobasis.orbitals: orb.wfn = self - for arg, val in kwargs.iteritems(): - setattr(self, arg, val) - def __repr__(self): return '' % (self.description, str(self.mol)) @@ -83,10 +82,9 @@ def description(self): return '%s/%s' % (self.model, self.aobasis.basisname) def set_canonical_mos(self, orbs): - if orbs.wfn is None: orbs.wfn = self - if self.fock_ao is None and orbs.energy is not None: - fock_cmo = orbs.energy * np.identity(len(self.aobasis)) - self.fock_ao = orbs.to_ao(fock_cmo) + if orbs.wfn is None: + orbs.wfn = self + self._has_canonical = True def align_orbital_phases(self, other, assert_same=True): From 25d0b291b28f2d599be602a36a507c33ad464b55 Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Fri, 2 Sep 2016 16:13:08 -0700 Subject: [PATCH 37/64] Add some more helpful error messages --- moldesign/molecules/molecule.py | 12 +++++++++++- moldesign/molecules/trajectory.py | 5 +++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/moldesign/molecules/molecule.py b/moldesign/molecules/molecule.py index b243146..8a6712f 100644 --- a/moldesign/molecules/molecule.py +++ b/moldesign/molecules/molecule.py @@ -690,6 +690,9 @@ def run(self, run_for): Returns: moldesign.trajectory.Trajectory """ + if self.integrator is None: + raise ValueError('Cannot simulate; no integrator set for %s' % self) + init_time = self.time traj = self.integrator.run(run_for) print 'Done - integrated "%s" from %s to %s' % (self, init_time, self.time) @@ -711,7 +714,11 @@ def calculate(self, requests=None, wait=True, use_cache=True): Returns: MolecularProperties """ - if requests is None: requests = [] + if self.energy_model is None: + raise ValueError('Cannot calculate properties; no energy model set for %s' % self) + + if requests is None: + requests = [] # Figure out what needs to be calculated, # and either launch the job or set the result @@ -807,6 +814,9 @@ def minimize(self, assert_converged=False, **kwargs): Returns: moldesign.trajectory.Trajectory """ + if self.energy_model is None: + raise ValueError('Cannot minimize molecule; no energy model set for %s' % self) + try: trajectory = self.energy_model.minimize(**kwargs) except NotImplementedError: diff --git a/moldesign/molecules/trajectory.py b/moldesign/molecules/trajectory.py index 6066d3e..433dc2b 100644 --- a/moldesign/molecules/trajectory.py +++ b/moldesign/molecules/trajectory.py @@ -178,6 +178,11 @@ def draw3d(self, **kwargs): def draw_orbitals(self, align=True): """TrajectoryOrbViewer: create a trajectory visualization""" from moldesign import widgets + for frame in self: + if 'wfn' not in frame: + raise ValueError("Can't draw orbitals - orbital information missing in at least " + "one frame. It must be calculated with a QM method.") + if align: self.align_orbital_phases() self._viz = widgets.trajectory.TrajectoryOrbViewer(self) return self._viz From 7475a8266c1f54d537b07f16af0645045658728e Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Fri, 2 Sep 2016 16:16:02 -0700 Subject: [PATCH 38/64] Clean up PySCF DFT w/ explicit wavefunction restarting #33 --- moldesign/HISTORY.rst | 2 + moldesign/interfaces/openmm.py | 6 +-- moldesign/models/models.py | 4 +- moldesign/models/pyscf.py | 84 +++++++++++++++++----------------- 4 files changed, 48 insertions(+), 48 deletions(-) diff --git a/moldesign/HISTORY.rst b/moldesign/HISTORY.rst index d19e653..527c193 100644 --- a/moldesign/HISTORY.rst +++ b/moldesign/HISTORY.rst @@ -1,6 +1,7 @@ 0.7.3 (WIP) =========== NEW MODELING FEATURES + - #33 - Add DFT and MP2 for PySCF model - GAFF parameterizer for small molecules -- ``params = mdt.parameterize(mol)`` - AM1-BCC and Gasteiger partial charge calculators: ``mdt.calc_am1_bcc_charges`` and ``mdt.calc_gasteiger_charges`` @@ -8,6 +9,7 @@ NEW MODELING FEATURES - #72 - Add ``moldesign.guess_formal_charges`` and ``moldesign.add_missing_data`` CHANGES + - #78 - ``moldesign`` now imports much more quickly - Add Example 4 on MD with a small molecule ligand - Create changelog and version check to the ``mdt.about()`` (aka ``mdt.configure``) widget - Change moldesign.tools and moldesign.helpers modules into more rationally organized subpackages diff --git a/moldesign/interfaces/openmm.py b/moldesign/interfaces/openmm.py index 7659aad..1127a97 100644 --- a/moldesign/interfaces/openmm.py +++ b/moldesign/interfaces/openmm.py @@ -23,7 +23,7 @@ from moldesign import compute try: - imp.find_module('simtk.openmm') + imp.find_module('simtk') except (ImportError, OSError) as exc: print 'OpenMM could not be imported; using remote docker container' force_remote = True @@ -49,8 +49,8 @@ def __setstate__(self, state): self.__dict__.update(state) -# This is a factory for the MdtReporter class. It's here so that we don't have to import simtk.openmm.app -# at the module level +# This is a factory for the MdtReporter class. It's here so that we don't have to import +# simtk.openmm.app at the module level def MdtReporter(mol, report_interval): from simtk.openmm.app import StateDataReporter diff --git a/moldesign/models/models.py b/moldesign/models/models.py index 9411f52..1b2f2ea 100644 --- a/moldesign/models/models.py +++ b/moldesign/models/models.py @@ -47,12 +47,12 @@ def RHF(**kwargs): @exports def DFT(**kwargs): - return PySCFPotential(theory='dft', **kwargs) + return PySCFPotential(theory='rks', **kwargs) @exports def B3LYP(**kwargs): - return PySCFPotential(theory='dft', funtional='b3lyp', **kwargs) + return PySCFPotential(theory='rks', funtional='b3lyp', **kwargs) @exports diff --git a/moldesign/models/pyscf.py b/moldesign/models/pyscf.py index 51e2db4..a39273c 100644 --- a/moldesign/models/pyscf.py +++ b/moldesign/models/pyscf.py @@ -51,32 +51,31 @@ def __getitem__(self, key): mod = importlib.import_module(modname) return getattr(mod, cls) +# PySCF metadata constants +THEORIES = LazyClassMap({'hf': 'pyscf.scf.RHF', 'rhf': 'pyscf.scf.RHF', + 'uhf': 'pyscf.scf.UHF', + 'mcscf': 'pyscf.mcscf.CASSCF', 'casscf': 'pyscf.mcscf.CASSCF', + 'casci': 'pyscf.mcscf.CASCI', + 'mp2': 'pyscf.mp.MP2', + 'dft': 'pyscf.dft.RKS', 'rks': 'pyscf.dft.RKS', 'ks': 'pyscf.dft.RKS'}) + +NEEDS_REFERENCE = set('mcscf casscf casci mp2'.split()) +NEEDS_FUNCTIONAL = set('dft rks ks uks'.split()) +IS_SCF = set('rhf uhf hf casscf mcscf dft rks ks'.split()) +FORCE_CALCULATORS = LazyClassMap({'rhf': 'pyscf.grad.RHF', 'hf': 'pyscf.grad.RHF'}) + @exports class PySCFPotential(QMBase): DEFAULT_PROPERTIES = ['potential_energy', 'wfn', 'mulliken'] - - THEORIES = LazyClassMap({'hf': 'pyscf.scf.RHF', 'rhf': 'pyscf.scf.RHF', - 'uhf': 'pyscf.scf.UHF', - 'mcscf': 'pyscf.mcscf.CASSCF', 'casscf': 'pyscf.mcscf.CASSCF', - 'casci': 'pyscf.mcscf.CASCI', - 'mp2': 'pyscf.mp.MP2', - 'dft': 'pyscf.dft.RKS', 'rks': 'pyscf.dft.RKS', 'ks': 'pyscf.dft.RKS'}) - - FORCE_CALCULATORS = LazyClassMap({'rhf': 'pyscf.grad.RHF', 'hf': 'pyscf.grad.RHF'}) - ALL_PROPERTIES = DEFAULT_PROPERTIES + ['eri_tensor', 'forces', 'nuclear_forces', 'electronic_forces'] - - NAME_MAP = {'b3lyp': 'b3lyp'} - - NEEDS_REFERENCE = set('mcscf casscf casci mp2'.split()) - NEEDS_FUNCTIONAL = set('dft rks ks uks'.split()) - IS_SCF = set('rhf uhf hf casscf mcscf dft rks ks'.split()) + PARAM_SUPPORT = {'theory': ['rhf', 'rks', 'mp2'], + 'functional': ['b3lyp', 'blyp', 'pbe0', 'x3lyp', 'MPW3LYP5']} FORCE_UNITS = u.hartree / u.bohr @@ -90,27 +89,26 @@ def __init__(self, **kwargs): self.logger = uibase.Logger('PySCF interface') @compute.runsremotely(enable=force_remote, is_imethod=True) - def calculate(self, requests=None, guess=None): + def calculate(self, requests=None): self.logger = uibase.Logger('PySCF calc') do_forces = 'forces' in requests - if do_forces and self.params.theory not in self.FORCE_CALCULATORS: + if do_forces and self.params.theory not in FORCE_CALCULATORS: raise ValueError('Forces are only available for the following theories:' - ','.join(self.FORCE_CALCULATORS)) + ','.join(FORCE_CALCULATORS)) if do_forces: - force_calculator = self.FORCE_CALCULATORS[self.params.theory] + force_calculator = FORCE_CALCULATORS[self.params.theory] + + self.prep(force=True) # rebuild every time # Set up initial guess - if guess is not None: - dm0 = guess.density_matrix - elif self.last_el_state is not None: - dm0 = self.last_el_state.density_matrix + if self.params.wfn_guess == 'stored': + dm0 = self.params.initial_guess.density_matrix_a0 else: dm0 = None - self.prep(force=True) # rebuild every time - # Compute reference WFN + # Compute reference WFN (if needed) refobj = self.pyscfmol - if self.params.theory in self.NEEDS_REFERENCE: + if self.params.theory in NEEDS_REFERENCE: reference = self._build_theory(self.params.get('reference', 'rhf'), refobj) kernel, failures = self._converge(reference, dm0=dm0) @@ -121,19 +119,25 @@ def calculate(self, requests=None, guess=None): # Compute WFN theory = self._build_theory(self.params['theory'], refobj) - if self.params['theory'] not in self.IS_SCF: + if self.params['theory'] not in IS_SCF: theory.kernel() self.kernel = theory else: self.kernel, failures = self._converge(theory, dm0=dm0) - # Compute forces + # Compute forces (if requested) if do_forces: grad = force_calculator(self.kernel) else: grad = None - return self._get_properties(self.reference, self.kernel, grad) + props = self._get_properties(self.reference, self.kernel, grad) + + if self.params.store_orb_guesses: + self.params.wfn_guess = 'stored' + self.params.initial_guess = props['wfn'] + + return props def _get_properties(self, ref, kernel, grad): """ Analyze calculation results and return molecular properties @@ -173,16 +177,11 @@ def _get_properties(self, ref, kernel, grad): basis = orbitals.basis.BasisSet(self.mol, orbitals=self._get_ao_basis_functions(), h1e=ao_matrices.h1e.defunits(), - overlaps=ao_matrices.sao, + overlaps=scf_matrices.pop('sao'), name=self.params.basis) el_state = orbitals.wfn.ElectronicWfn(self.mol, self.pyscfmol.nelectron, - theory=self.params.theory, - aobasis=basis, - ao_population=ao_pop, - nuclear_repulsion=(self.pyscfmol.energy_nuc()* - u.hartree).defunits(), - **scf_matrices) + aobasis=basis) # Build and store the canonical orbitals cmos = [] @@ -264,7 +263,7 @@ def _converge(self, method, dm0=None): raise orbitals.ConvergenceError(method) def _build_theory(self, name, refobj): - theory = self.THEORIES[name](refobj) + theory = THEORIES[name](refobj) theory.callback = StatusLogger('%s/%s procedure:' % (self.params.theory, self.params.basis), ['cycle', 'e_tot'], @@ -279,13 +278,13 @@ def _build_theory(self, name, refobj): return theory def _assign_functional(self, kernel, theory, fname): - if theory in self.NEEDS_FUNCTIONAL: + if theory in NEEDS_FUNCTIONAL: if fname is not None: kernel.xc = fname else: raise ValueError('No functional specified for reference theory "%s"' % theory) - elif fname is not None: - raise ValueError('Functional specified for non-DFT theory "%s"' % theory) + #elif fname is not None: + #raise ValueError('Functional specified for non-DFT theory "%s"' % theory) def _get_ao_basis_functions(self): """ Convert pyscf basis functions into a list of atomic basis functions @@ -347,11 +346,10 @@ def _get_ao_matrices(mf): return DotDict(h1e=h1e, sao=sao) def _get_scf_matrices(self, mf, ao_mats): - # TODO: density matrix units??? (dimensionless in this wfn, I think ...) dm = mf.make_rdm1() veff = mf.get_veff(dm=dm) * u.hartree fock = ao_mats.h1e + veff - scf_matrices = dict(density_matrix=dm, + scf_matrices = dict(density_matrix_ao=dm, h2e=veff, fock_ao=fock) scf_matrices.update(ao_mats) From 552dc7542db30555aed051d8e2af4e2ad42eac66 Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Tue, 6 Sep 2016 18:51:30 -0700 Subject: [PATCH 39/64] Add CASSCF / CASCI from PySCF --- moldesign/models/pyscf.py | 126 ++++++++++++++++++++++++++++++++------ moldesign/parameters.py | 8 ++- 2 files changed, 113 insertions(+), 21 deletions(-) diff --git a/moldesign/models/pyscf.py b/moldesign/models/pyscf.py index a39273c..0a2d007 100644 --- a/moldesign/models/pyscf.py +++ b/moldesign/models/pyscf.py @@ -15,6 +15,7 @@ from cStringIO import StringIO +import itertools from moldesign import units as u, compute, orbitals from moldesign.interfaces.pyscf_interface import force_remote, mol_to_pyscf, \ StatusLogger, SPHERICAL_NAMES @@ -61,7 +62,7 @@ def __getitem__(self, key): NEEDS_REFERENCE = set('mcscf casscf casci mp2'.split()) NEEDS_FUNCTIONAL = set('dft rks ks uks'.split()) -IS_SCF = set('rhf uhf hf casscf mcscf dft rks ks'.split()) +IS_SCF = set('rhf uhf hf dft rks ks'.split()) FORCE_CALCULATORS = LazyClassMap({'rhf': 'pyscf.grad.RHF', 'hf': 'pyscf.grad.RHF'}) @@ -102,7 +103,7 @@ def calculate(self, requests=None): # Set up initial guess if self.params.wfn_guess == 'stored': - dm0 = self.params.initial_guess.density_matrix_a0 + dm0 = self.params.initial_guess.density_matrix_ao else: dm0 = None @@ -155,8 +156,13 @@ def _get_properties(self, ref, kernel, grad): if self.reference is not None: result['reference_energy'] = (ref.e_tot*u.hartree).defunits() # TODO: check sign on correlation energy. Is this true for anything besides MP2? - result['correlation_energy'] = (kernel.e_corr *u.hartree).defunits() - result['potential_energy'] = result['correlation_energy'] + result['reference_energy'] + if hasattr(kernel, 'e_corr'): + result['correlation_energy'] = (kernel.e_corr *u.hartree).defunits() + result['potential_energy'] = result['correlation_energy'] +\ + result['reference_energy'] + else: + result['potential_energy'] = (kernel.e_tot*u.hartree).defunits() + orb_calc = ref else: result['potential_energy'] = (kernel.e_tot*u.hartree).defunits() @@ -169,9 +175,36 @@ def _get_properties(self, ref, kernel, grad): result['nuclear_forces'] = f_n.defunits() result['forces'] = result['electronic_forces'] + result['nuclear_forces'] - ao_matrices = self._get_ao_matrices(orb_calc) + if self.params.theory in ('casscf', 'mcscf'): + from pyscf.mcscf import CASCI + casobj = CASCI(ref, + self.params.active_orbitals, + self.params.active_electrons) + elif self.params.theory == 'casci': + casobj = kernel + + if self.params.theory in ('casscf', 'mcscf', 'casci'): + orb_calc = kernel # get the orbs directly from the post-HF theory + casobj.fcisolver.nroots = self.params.get('num_states', + self.params.state_average) + casresult = casobj.kernel() + result['state_energies'] = (casresult[0] * u.hartree).defunits() + result['ci_vectors'] = map(self._parse_fci_vector, casresult[2]) + + # potential_energy is ALWAYS the energy of the ground state + result['state_averaged_energy'] = result['potential_energy'] + result['potential_energy'] = result['state_energies'][0] + # TODO: add 'reference wavefunction' to result + ao_obj = ref + else: + ao_obj = orb_calc + + ao_matrices = self._get_ao_matrices(ao_obj) scf_matrices = self._get_scf_matrices(orb_calc, ao_matrices) - ao_pop, atom_pop = orb_calc.mulliken_pop(verbose=-1) + if hasattr(orb_calc, 'mulliken_pop'): + ao_pop, atom_pop = orb_calc.mulliken_pop(verbose=-1) + result['mulliken'] = DotDict({a: p for a, p in zip(self.mol.atoms, atom_pop)}) + result['mulliken'].type = 'atomic' # Build the electronic state object basis = orbitals.basis.BasisSet(self.mol, @@ -181,25 +214,31 @@ def _get_properties(self, ref, kernel, grad): name=self.params.basis) el_state = orbitals.wfn.ElectronicWfn(self.mol, self.pyscfmol.nelectron, - aobasis=basis) + aobasis=basis, + fock_ao=scf_matrices['fock_ao'], + density_matrix_ao=scf_matrices['density_matrix_ao']) # Build and store the canonical orbitals cmos = [] - for coeffs, energy, occ in zip(orb_calc.mo_coeff.T, - orb_calc.mo_energy * u.hartree, - orb_calc.get_occ()): - cmos.append(orbitals.Orbital(coeffs, wfn=el_state, occupation=occ)) + for iorb, (coeffs, energy) in enumerate(zip(orb_calc.mo_coeff.T, + orb_calc.mo_energy * u.hartree)): + cmos.append(orbitals.Orbital(coeffs, wfn=el_state)) + if hasattr(orb_calc, 'get_occ'): + for orb, occ in zip(cmos, orb_calc.get_occ()): + orb.occupation = occ el_state.add_orbitals(cmos, orbtype='canonical') # Return the result result['wfn'] = el_state self.last_el_state = el_state - result['mulliken'] = DotDict({a: p for a, p in zip(self.mol.atoms, atom_pop)}) - result['mulliken'].type = 'atomic' return result def prep(self, force=False): # TODO: spin, isotopic mass, symmetry + for p in 'basis theory'.split(): + if self.params.get(p, None) is None: + raise ValueError('Parameter "%s" is required' % p) + if self._prepped and not force: return self.pyscfmol = self._build_mol() self._prepped = True @@ -263,7 +302,16 @@ def _converge(self, method, dm0=None): raise orbitals.ConvergenceError(method) def _build_theory(self, name, refobj): - theory = THEORIES[name](refobj) + if name in ('mscscf', 'casci', 'casscf'): + theory = THEORIES[name](refobj, + self.params.active_orbitals, + self.params.active_electrons) + + if name != 'casci': + theory = theory.state_average_([1.0/self.params.state_average + for i in xrange(self.params.state_average)]) + else: + theory = THEORIES[name](refobj) theory.callback = StatusLogger('%s/%s procedure:' % (self.params.theory, self.params.basis), ['cycle', 'e_tot'], @@ -273,18 +321,56 @@ def _build_theory(self, name, refobj): theory.max_cycle = self.params.scf_cycles if 'functional' in self.params: - self._assign_functional(theory, name, self.params.get('functional', None)) + self._assign_functional(theory, name, + self.params.get('functional', None)) return theory - def _assign_functional(self, kernel, theory, fname): + _OCCMAP = {('0', '0'): '0', + ('1', '0'): 'a', + ('0', '1'): 'b', + ('1', '1'): '2'} + + def _parse_fci_vector(self, ci_vecmat): + """ Translate the PySCF FCI matrix into a dictionary of configurations and weights + + Args: + ci_vecmat (np.ndarray): ci vector from a PySCF FCI calculation + + Returns: + Mapping[str, float]: dictionary of configuration weights (normalized) organized by + configuration label. Configurations labeled by their active space orbital + occupations: 0 (unoccupied), a (alpha electron only), b (beta electron only), or '2' + (doubly occupied) + + Example: + >>> import numpy as np + >>> model = PySCFPotential(active_orbitals=2, active_electrons=2) + >>> model._parse_fci_vector(np.array([[1.0, 2.0],[3.0, 4.0]])) + {'20': 1.0, + 'ba': 2.0, + 'ab': 3.0, + '02': 4.0} + """ + from pyscf.fci import cistring + conf_bin = cistring.gen_strings4orblist(range(self.params.active_orbitals), + self.params.active_electrons/2) + civecs = {} + for i, ca in enumerate(conf_bin): + for j, cb in enumerate(conf_bin): + astring = bin(ca)[2:].zfill(self.params.active_orbitals) + bstring = bin(cb)[2:].zfill(self.params.active_orbitals) + s = ''.join(reversed([self._OCCMAP[a, b] for a, b in zip(astring, bstring)])) + civecs[s] = ci_vecmat[i, j] + return civecs + + @staticmethod + def _assign_functional(kernel, theory, fname): if theory in NEEDS_FUNCTIONAL: if fname is not None: kernel.xc = fname else: raise ValueError('No functional specified for reference theory "%s"' % theory) - #elif fname is not None: - #raise ValueError('Functional specified for non-DFT theory "%s"' % theory) def _get_ao_basis_functions(self): """ Convert pyscf basis functions into a list of atomic basis functions @@ -298,7 +384,6 @@ def _get_ao_basis_functions(self): Returns: List[moldesign.Gaussians.AtomicBasisFunction] - """ bfs = [] pmol = self.pyscfmol @@ -353,4 +438,5 @@ def _get_scf_matrices(self, mf, ao_mats): h2e=veff, fock_ao=fock) scf_matrices.update(ao_mats) - return scf_matrices \ No newline at end of file + return scf_matrices + diff --git a/moldesign/parameters.py b/moldesign/parameters.py index d9dc4d1..c0db7a6 100644 --- a/moldesign/parameters.py +++ b/moldesign/parameters.py @@ -141,7 +141,7 @@ def named_dict(l): ]) -QMTHEORIES = ['rhf', 'rks', 'mp2', 'casscf', 'casci' 'fci'] +QMTHEORIES = ['rhf', 'rks', 'mp2', 'casscf', 'casci', 'fci'] BASISSETS = ['3-21g', '4-31g', '6-31g', '6-31g*', '6-31g**', '6-311g', '6-311g*', '6-311g+', '6-311g*+', 'sto-3g', 'sto-6g', 'minao', 'weigend', @@ -157,6 +157,12 @@ def named_dict(l): Parameter('functional', 'DFT Functional', default='b3lyp', choices=FUNCTIONALS, # TODO: allow separate x and c functionals relevance=WhenParam('theory', isin, 'dft rks ks uks'.split())), + Parameter('active_electrons', 'Active electrons', type=int, + relevance=WhenParam('theory', isin, ['casscf', 'mcscf', 'casci'])), + Parameter('active_orbitals', 'Active orbitals', type=int, + relevance=WhenParam('theory', isin, ['casscf', 'mcscf', 'casci'])), + Parameter('state_average', 'States to average for SCF', type=int, default=1, + relevance=WhenParam('theory', isin, ['casscf', 'mcscf'])), Parameter('basis', 'Basis set', choices=BASISSETS), Parameter('wfn_guess', 'Starting guess method', default='huckel', choices=['huckel', 'minao', 'stored']), From 62a211492ed00d5a898df55504c659c752538645 Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Tue, 6 Sep 2016 21:46:56 -0700 Subject: [PATCH 40/64] Add constrained minimization using scipy's SLSQP implementation --- moldesign/geom/constraints.py | 2 +- moldesign/min/__init__.py | 2 +- moldesign/min/base.py | 10 ++--- moldesign/min/descent.py | 4 +- moldesign/min/{bfgs.py => scipy.py} | 63 ++++++++++++++++++++--------- moldesign/models/pyscf.py | 30 ++++++++++++-- moldesign/molecules/molecule.py | 11 +++-- moldesign/orbitals/orbitals.py | 3 ++ moldesign/units/quantity.py | 3 +- moldesign/units/unitsystem.py | 9 +++-- 10 files changed, 95 insertions(+), 42 deletions(-) rename moldesign/min/{bfgs.py => scipy.py} (59%) diff --git a/moldesign/geom/constraints.py b/moldesign/geom/constraints.py index 85bbe64..b869560 100644 --- a/moldesign/geom/constraints.py +++ b/moldesign/geom/constraints.py @@ -65,7 +65,7 @@ def gradient(self): .. math:: \nabla G(\mathbf r) """ - grad = np.zeros(self.mol.ndims) + grad = np.zeros((self.mol.num_atoms, 3)) atomvecs = self.atomgrad(*self.atoms) assert len(atomvecs) == len(self.atoms) grad = grad * atomvecs[0].get_units() diff --git a/moldesign/min/__init__.py b/moldesign/min/__init__.py index d4157df..57af6e3 100644 --- a/moldesign/min/__init__.py +++ b/moldesign/min/__init__.py @@ -4,6 +4,6 @@ def toplevel(o): __all__ = [] from . import base -from .bfgs import * +from .scipy import * from .descent import * from .smart import * diff --git a/moldesign/min/base.py b/moldesign/min/base.py index d8f324c..872f312 100644 --- a/moldesign/min/base.py +++ b/moldesign/min/base.py @@ -101,14 +101,12 @@ def grad(self, vector): self.mol.calculate(requests=self.request_list) grad = -self.mol.forces - if self.constraint_restraints: - for constraint in self.mol.constraints: - grad -= self.restraint_multiplier * constraint.restraint_penalty_force() - grad = grad.reshape(self.mol.num_atoms * 3) self._last_grad = grad - if self._strip_units: return grad.defunits().magnitude - else: return grad.defunits() + if self._strip_units: + return grad.defunits().magnitude + else: + return grad.defunits() def __call__(self): """ Run the minimization diff --git a/moldesign/min/descent.py b/moldesign/min/descent.py index 615a432..3108f95 100644 --- a/moldesign/min/descent.py +++ b/moldesign/min/descent.py @@ -42,8 +42,8 @@ class GradientDescent(MinimizerBase): _strip_units = False @utils.args_from(MinimizerBase, - inject_kwargs={'max_atom_move': 0.075*u.angstrom, - 'gamma': 0.05*(u.angstrom**2)/u.eV}) + inject_kwargs={'max_atom_move': 0.075*u.angstrom, + 'gamma': 0.05*(u.angstrom**2)/u.eV}) def __init__(self, mol, max_atom_move=0.075*u.angstrom, gamma=0.05*(u.angstrom ** 2)/u.eV, **kwargs): diff --git a/moldesign/min/bfgs.py b/moldesign/min/scipy.py similarity index 59% rename from moldesign/min/bfgs.py rename to moldesign/min/scipy.py index 993659a..816e4ca 100644 --- a/moldesign/min/bfgs.py +++ b/moldesign/min/scipy.py @@ -11,11 +11,12 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. +from __future__ import absolute_import + import scipy.optimize from .base import MinimizerBase from . import toplevel -from moldesign import utils def exports(o): @@ -24,8 +25,7 @@ def exports(o): __all__ = [] -@exports -class BFGS(MinimizerBase): +class ScipyMinimizer(MinimizerBase): """ SciPy's implementation of the BFGS method, with gradients if available. Args: @@ -35,9 +35,11 @@ class BFGS(MinimizerBase): This implementation will fail rapidly if large forces are present (>> 1 eV/angstrom). """ _strip_units = True + _METHOD_NAME = None def run(self): - print 'Starting geometry optimization: scipy.fmin_bfgs with %s gradients' % self.gradtype + print 'Starting geometry optimization: SciPy/%s with %s gradients'%( + self._METHOD_NAME, self.gradtype) options = {'disp': True} if self.nsteps is not None: options['maxiter'] = self.nsteps @@ -50,28 +52,51 @@ def run(self): result = scipy.optimize.minimize(self.objective, self._coords_to_vector(self.mol.positions), - method='bfgs', + method=self._METHOD_NAME, jac=grad, callback=self.callback, - options=options) + options=options, + constraints=self._make_constraints()) options['maxiter'] = max(options['maxiter']/5, 2) # reduce number of steps if we need to enforce constraints - for i in xrange(3): # try to satisfy constraints - if all(c.satisfied() for c in self.mol.constraints): break - self.restraint_multiplier += 0.5 - print 'Constraints not satisfied - new restraint multiplier %f ...' % \ - self.restraint_multiplier - result = scipy.optimize.minimize(self.objective, - self._coords_to_vector(self.mol.positions), - method='bfgs', - jac=grad, - callback=self.callback, - options=options) - if not all(c.satisfied() for c in self.mol.constraints): - print 'WARNING! Constraints not satisfied' self.traj.info = result + def _make_constraints(self): + constraints = [] + for constraint in self.mol.constraints: + fun, jac = self._make_constraint_funs(constraint) + constraints.append(dict(type='eq', + fun=fun, + jac=jac)) + return constraints + + def _make_constraint_funs(self, const): + def fun(v): + self._sync_positions(v) + return const.error().defunits_value() + + def jac(v): + self._sync_positions(v) + return const.gradient().defunits_value().reshape(self.mol.num_atoms*3) + + return fun, jac + + +@exports +class BFGS(ScipyMinimizer): + _METHOD_NAME = 'bfgs' + bfgs = BFGS._as_function('bfgs') exports(bfgs) toplevel(bfgs) + + +@exports +class SLSQP(ScipyMinimizer): + _METHOD_NAME = 'SLSQP' + + +slsqp = SLSQP._as_function('slsqp') +exports(slsqp) +toplevel(slsqp) diff --git a/moldesign/models/pyscf.py b/moldesign/models/pyscf.py index 0a2d007..3d9cb24 100644 --- a/moldesign/models/pyscf.py +++ b/moldesign/models/pyscf.py @@ -52,6 +52,12 @@ def __getitem__(self, key): mod = importlib.import_module(modname) return getattr(mod, cls) + def __contains__(self, item): + return item in self.mapping + + def __iter__(self): + return iter(self.mapping) + # PySCF metadata constants THEORIES = LazyClassMap({'hf': 'pyscf.scf.RHF', 'rhf': 'pyscf.scf.RHF', 'uhf': 'pyscf.scf.UHF', @@ -63,7 +69,8 @@ def __getitem__(self, key): NEEDS_REFERENCE = set('mcscf casscf casci mp2'.split()) NEEDS_FUNCTIONAL = set('dft rks ks uks'.split()) IS_SCF = set('rhf uhf hf dft rks ks'.split()) -FORCE_CALCULATORS = LazyClassMap({'rhf': 'pyscf.grad.RHF', 'hf': 'pyscf.grad.RHF'}) +FORCE_CALCULATORS = LazyClassMap({'rhf': 'pyscf.grad.RHF', 'hf': 'pyscf.grad.RHF', + 'rks': 'pyscf.grad.RKS', 'ks': 'pyscf.grad.RKS'}) @exports @@ -191,9 +198,9 @@ def _get_properties(self, ref, kernel, grad): result['state_energies'] = (casresult[0] * u.hartree).defunits() result['ci_vectors'] = map(self._parse_fci_vector, casresult[2]) - # potential_energy is ALWAYS the energy of the ground state + # potential_energy is the energy of the molecule's assigned state result['state_averaged_energy'] = result['potential_energy'] - result['potential_energy'] = result['state_energies'][0] + result['potential_energy'] = result['state_energies'][self.mol.electronic_state_index] # TODO: add 'reference wavefunction' to result ao_obj = ref else: @@ -313,7 +320,7 @@ def _build_theory(self, name, refobj): else: theory = THEORIES[name](refobj) - theory.callback = StatusLogger('%s/%s procedure:' % (self.params.theory, self.params.basis), + theory.callback = StatusLogger('%s procedure:' % self.theoryname, ['cycle', 'e_tot'], self.logger) @@ -331,6 +338,21 @@ def _build_theory(self, name, refobj): ('0', '1'): 'b', ('1', '1'): '2'} + @property + def theoryname(self): + p = self.params + if p.theory == 'rks': + th = 'RKS(%s)' % p.functional.upper() + elif p.theory in ('casscf', 'casci'): + th = '%s(%d,%d)' % (p.theory.upper(), p.active_orbitals, p.active_electrons) + if p.theory == 'casscf' and p.state_average > 1: + th += ' SA-%d' % p.state_average + else: + th = p.theory.upper() + + return '%s/%s' % (th, p.basis) + + def _parse_fci_vector(self, ci_vecmat): """ Translate the PySCF FCI matrix into a dictionary of configurations and weights diff --git a/moldesign/molecules/molecule.py b/moldesign/molecules/molecule.py index 8a6712f..caa31a0 100644 --- a/moldesign/molecules/molecule.py +++ b/moldesign/molecules/molecule.py @@ -802,9 +802,9 @@ def set_integrator(self, integrator, **params): allexcept=['self'], inject_kwargs={'assert_converged': False}) def minimize(self, assert_converged=False, **kwargs): - """ Run a minimization based on the potential model. + """Perform an energy minimization (aka geometry optimization or relaxation). - If force_tolerance is not specified, the program defaults are used. + If ``force_tolerance`` is not specified, the program defaults are used. If specified, the largest force component must be less than force_tolerance and the RMSD must be less than 1/3 of it. (based on GAMESS OPTTOL keyword) @@ -828,7 +828,6 @@ def minimize(self, assert_converged=False, **kwargs): return trajectory - def _reset_methods(self): """ Called whenever a property is changed that the energy model and/or integrator @@ -895,6 +894,8 @@ class Molecule(AtomContainer, (they will be copied automatically if they already belong to another molecule) pdbname (str): Name of the PDB file charge (units.Scalar[charge]): molecule's formal charge + electronic_state_index (int): index of the molecule's electronic state + Examples: Use the ``Molecule`` class to create copies of other molecules and substructures thereof: @@ -958,7 +959,8 @@ def __init__(self, atomcontainer, name=None, bond_graph=None, copy_atoms=False, pdbname=None, - charge=None): + charge=None, + electronic_state_index=0): # NEW_FEATURE: deal with random number generators per-geometry # NEW_FEATURE: per-geometry output logging super(Molecule, self).__init__() @@ -988,6 +990,7 @@ def __init__(self, atomcontainer, self.constraints = [] self.energy_model = None self.integrator = None + self.electronic_state_index = electronic_state_index self.charge = utils.if_not_none(charge, sum(atom.formal_charge for atom in self.atoms)) diff --git a/moldesign/orbitals/orbitals.py b/moldesign/orbitals/orbitals.py index ae45ebc..ab0501d 100644 --- a/moldesign/orbitals/orbitals.py +++ b/moldesign/orbitals/orbitals.py @@ -241,6 +241,9 @@ def __repr__(self): return '<%d %s %s in %s>' % (len(self), self.orbtype, self.__class__.__name__, str(self.wfn)) + def __getitem__(self, item): + return self.orbitals[item] + def _to_ao_density_matrix(self): c = self.coeffs * self.occupations[:, None]/2.0 return 2.0*c.T.dot(c) diff --git a/moldesign/units/quantity.py b/moldesign/units/quantity.py index 7f8d921..b1b33db 100644 --- a/moldesign/units/quantity.py +++ b/moldesign/units/quantity.py @@ -195,9 +195,8 @@ def __mod__(self, other): # backwards-compatible name value_in = ureg.Quantity.m_as - def defunits_value(self): - return self.defunits()._magnitude + return self.defunits().magnitude # defunits = ureg.Quantity.to_base_units # replacing this with the new pint implementation def defunits(self): diff --git a/moldesign/units/unitsystem.py b/moldesign/units/unitsystem.py index 58be1c6..ed10531 100644 --- a/moldesign/units/unitsystem.py +++ b/moldesign/units/unitsystem.py @@ -12,7 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -from .quantity import * from .constants import * @@ -73,8 +72,12 @@ def convert(self, quantity): @param quantity: moldesign.external.pint.Quantity """ baseunit = self.get_baseunit(quantity) - result = quantity.to(baseunit) - return result + if isinstance(baseunit, int): + assert baseunit == 1 + return quantity * ureg.dimensionless + else: + result = quantity.to(baseunit) + return result def get_baseunit(self, quantity): # TODO: this needs to deal with angles From 18f5fcef61d56986edb051d0e692d219ac1ee4b3 Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Tue, 6 Sep 2016 22:15:41 -0700 Subject: [PATCH 41/64] Default minimizer automatically handles constraints --- moldesign/min/scipy.py | 16 ++++++++++-- moldesign/min/smart.py | 56 ++++++++++++++++++++++++++++-------------- 2 files changed, 52 insertions(+), 20 deletions(-) diff --git a/moldesign/min/scipy.py b/moldesign/min/scipy.py index 816e4ca..78ece2a 100644 --- a/moldesign/min/scipy.py +++ b/moldesign/min/scipy.py @@ -15,6 +15,8 @@ import scipy.optimize +from moldesign import units as u + from .base import MinimizerBase from . import toplevel @@ -36,6 +38,8 @@ class ScipyMinimizer(MinimizerBase): """ _strip_units = True _METHOD_NAME = None + _TAKES_FTOL = False + _TAKES_GTOL = False def run(self): print 'Starting geometry optimization: SciPy/%s with %s gradients'%( @@ -48,7 +52,14 @@ def run(self): else: grad = None if self.force_tolerance is not None: - options['gtol'] = self.force_tolerance.defunits().magnitude + if self._TAKES_GTOL: + options['gtol'] = self.force_tolerance.defunits().magnitude + elif self._TAKES_FTOL: + print ('WARNING: this method does not use force to measure convergence; ' + 'approximating force_tolerance keyword') + options['ftol'] = (self.force_tolerance * u.angstrom / 50.0).defunits_value() + else: + print ('WARNING: no convergence criteria for this method; using defaults') result = scipy.optimize.minimize(self.objective, self._coords_to_vector(self.mol.positions), @@ -58,7 +69,6 @@ def run(self): options=options, constraints=self._make_constraints()) - options['maxiter'] = max(options['maxiter']/5, 2) # reduce number of steps if we need to enforce constraints self.traj.info = result def _make_constraints(self): @@ -85,6 +95,7 @@ def jac(v): @exports class BFGS(ScipyMinimizer): _METHOD_NAME = 'bfgs' + _TAKES_GTOL = True bfgs = BFGS._as_function('bfgs') @@ -95,6 +106,7 @@ class BFGS(ScipyMinimizer): @exports class SLSQP(ScipyMinimizer): _METHOD_NAME = 'SLSQP' + _TAKES_FTOL = True slsqp = SLSQP._as_function('slsqp') diff --git a/moldesign/min/smart.py b/moldesign/min/smart.py index b48b582..0fc3490 100644 --- a/moldesign/min/smart.py +++ b/moldesign/min/smart.py @@ -13,12 +13,12 @@ # limitations under the License. from .base import MinimizerBase -from . import toplevel, BFGS, GradientDescent +from . import toplevel, BFGS, GradientDescent, SLSQP from moldesign import utils from moldesign import units as u -BFGSTHRESH = 1.5 * u.eV / u.angstrom +GDTHRESH = 1.5*u.eV/u.angstrom def exports(o): __all__.append(o.__name__) @@ -29,45 +29,65 @@ def exports(o): @exports class SmartMin(MinimizerBase): """ Uses gradient descent until forces fall below a threshold, - then switches to BFGS. + then switches to BFGS (unconstrained) or SLSQP (constrained). Args: - bfgs_threshold (u.Scalar[force]): Maximum force on a single atom + gd_threshold (u.Scalar[force]): Use gradient descent if there are any forces larger + than this; use an approximate hessian method (BFGS or SLSQP) otherwise Note: Not really that smart. """ + # TODO: use non-gradient methods if forces aren't available _strip_units = True @utils.args_from(MinimizerBase, - inject_kwargs={'bfgs_threshold': BFGSTHRESH}) + inject_kwargs={'gd_threshold': GDTHRESH}) def __init__(self, *args, **kwargs): self.args = args self.kwargs = kwargs super(SmartMin, self).__init__(*args, **kwargs) - self.bfgs_threshold = kwargs.get('bfgs_threshold', BFGSTHRESH) + self.gd_threshold = kwargs.get('gd_threshold', GDTHRESH) def run(self): + # If forces are already low, go directly to the quadratic convergence methods and return + forces = self.mol.calculate_forces() + if forces.max() <= self.gd_threshold: + spmin = self._make_quadratic_method() + spmin.run() + self.traj = spmin.traj + self.current_step = spmin.current_step + return + + # Otherwise, remove large forces with gradient descent; exit if we pass the cycle limit descent_kwargs = self.kwargs.copy() - descent_kwargs['force_tolerance'] = self.bfgs_threshold + descent_kwargs['force_tolerance'] = self.gd_threshold descender = GradientDescent(*self.args, **descent_kwargs) descender.run() - if descender.current_step >= self.nsteps: self.traj = descender.traj return - bfgs_kwargs = self.kwargs.copy() - bfgs_kwargs['_restart_from'] = descender.current_step - bfgs_kwargs['_restart_energy'] = descender._initial_energy - bfgs_kwargs.setdefault('frame_interval', descender.frame_interval) - bfgsmin = BFGS(*self.args, **bfgs_kwargs) - bfgsmin.current_step = descender.current_step - bfgsmin.run() - - self.traj = descender.traj + bfgsmin.traj - self.current_step = bfgsmin.current_step + # Finally, use a quadratic method to converge the optimization + kwargs = dict(_restart_from=descender.current_step, + _restart_energy=descender._initial_energy) + kwargs['frame_interval'] = self.kwargs.get('frame_interval', + descender.frame_interval) + spmin = self._make_quadratic_method(kwargs) + spmin.current_step = descender.current_step + spmin.run() + self.traj = descender.traj + spmin.traj + self.current_step = spmin.current_step + + def _make_quadratic_method(self, kwargs): + kw = self.kwargs.copy() + kw.update(kwargs) + if self.mol.constraints: + spmin = SLSQP(*self.args, **kw) + else: + spmin = BFGS(*self.args, **kw) + return spmin minimize = SmartMin._as_function('minimize') From 9eab8ff4ea185b7c8ef4ecfcf2fdfaf9002f2feb Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Tue, 6 Sep 2016 22:18:16 -0700 Subject: [PATCH 42/64] Rename SLSQP to SequentialLeastSquares --- moldesign/min/scipy.py | 8 ++++---- moldesign/min/smart.py | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/moldesign/min/scipy.py b/moldesign/min/scipy.py index 78ece2a..310a3a6 100644 --- a/moldesign/min/scipy.py +++ b/moldesign/min/scipy.py @@ -104,11 +104,11 @@ class BFGS(ScipyMinimizer): @exports -class SLSQP(ScipyMinimizer): +class SequentialLeastSquares(ScipyMinimizer): _METHOD_NAME = 'SLSQP' _TAKES_FTOL = True -slsqp = SLSQP._as_function('slsqp') -exports(slsqp) -toplevel(slsqp) +sequential_least_squares = SequentialLeastSquares._as_function('sequential_least_squares') +exports(sequential_least_squares) +toplevel(sequential_least_squares) diff --git a/moldesign/min/smart.py b/moldesign/min/smart.py index 0fc3490..f577b26 100644 --- a/moldesign/min/smart.py +++ b/moldesign/min/smart.py @@ -13,7 +13,7 @@ # limitations under the License. from .base import MinimizerBase -from . import toplevel, BFGS, GradientDescent, SLSQP +from . import toplevel, BFGS, GradientDescent, SequentialLeastSquares from moldesign import utils from moldesign import units as u @@ -84,7 +84,7 @@ def _make_quadratic_method(self, kwargs): kw = self.kwargs.copy() kw.update(kwargs) if self.mol.constraints: - spmin = SLSQP(*self.args, **kw) + spmin = SequentialLeastSquares(*self.args, **kw) else: spmin = BFGS(*self.args, **kw) return spmin From 36d34cb036b837bf805eaea29965a38c7fafb911 Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Wed, 7 Sep 2016 09:56:11 -0700 Subject: [PATCH 43/64] Add unit system tests --- moldesign/_tests/test_units.py | 60 +++++++++++++++++++++++++++++++++- moldesign/min/smart.py | 3 +- moldesign/units/quantity.py | 8 ++--- moldesign/units/tools.py | 24 +++++++++----- moldesign/units/unitsystem.py | 7 ++-- 5 files changed, 84 insertions(+), 18 deletions(-) diff --git a/moldesign/_tests/test_units.py b/moldesign/_tests/test_units.py index d80e65b..99ad49a 100644 --- a/moldesign/_tests/test_units.py +++ b/moldesign/_tests/test_units.py @@ -66,8 +66,66 @@ def test_scalar_comparisons_to_zero_ignore_units(): assert num > 0.0 * units.angstrom assert num > 0.0 * units.nm + with pytest.raises(units.DimensionalityError): + num > 0.0 * units.fs + def test_array_comparisons_to_zero_ignore_units(): num = [1, -2, 0]*units.angstrom assert ((num > 0) == [True, False, False]).all() - assert ((num == 0) == [False, False, True]).all() \ No newline at end of file + assert ((num == 0) == [False, False, True]).all() + + +def test_dimensionless_array_operations(): + arr = np.arange(5) * units.ureg.dimensionless + assert (arr == [0, 1, 2, 3, 4]).all() + + arr[1:5] = [100, 101, 102, 103] + assert (arr == [0, 100, 101, 102, 103]).all() + + assert arr[4].units == units.ureg.dimensionless + assert arr[:3].units == units.ureg.dimensionless + + +def test_dimensionless_array_unit_checks(): + arr = np.arange(5) * units.ureg.dimensionless + + with pytest.raises(units.DimensionalityError): + arr[0] = 5.0 * units.angstrom + + with pytest.raises(units.DimensionalityError): + arr[:] = np.arange(5, 10) * units.angstrom + + arr[:] = np.arange(5, 10) + assert (arr == np.arange(5, 10)).all() + + arr[:] = np.arange(10, 15) * units.ureg.dimensionless + assert (arr == np.arange(10, 15)).all() + + +def test_array_unit_checks(): + arr = np.arange(5) * units.ureg.nm / units.ureg.fs + + with pytest.raises(units.DimensionalityError): + arr[0] = 5.0 * units.angstrom + + with pytest.raises(units.DimensionalityError): + arr[3] = 5.0 + + with pytest.raises(units.DimensionalityError): + arr[:] = np.arange(5, 10) * units.fs + + arr[2:3] = np.arange(5, 6) * units.ureg.angstrom / units.ureg.fs + np.testing.assert_allclose(arr[2:3].magnitude, + np.arange(5, 6)/10.0) + + arr[:] = np.arange(10, 15) * units.ureg.micrometers / units.ureg.picoseconds + np.testing.assert_allclose(arr.magnitude, + np.arange(10, 15)) + +def test_default_unit_conversions(): + assert abs(10.0 - (1.0*units.nm).defunits_value()) < 1e-10 + assert abs(1000.0 - (1.0*units.ps).defunits_value()) < 1e-10 + assert abs(1.0 - 6.022140857e23/((1.0*units.ureg.grams).defunits_value())) < 1e-6 + assert abs(103.642685491 - (1.0*units.angstrom**2*units.dalton/units.fs**2).defunits_value() + ) < 1e-7 diff --git a/moldesign/min/smart.py b/moldesign/min/smart.py index f577b26..150026f 100644 --- a/moldesign/min/smart.py +++ b/moldesign/min/smart.py @@ -80,7 +80,8 @@ def run(self): self.traj = descender.traj + spmin.traj self.current_step = spmin.current_step - def _make_quadratic_method(self, kwargs): + def _make_quadratic_method(self, kwargs=None): + if kwargs is None: kwargs = {} kw = self.kwargs.copy() kw.update(kwargs) if self.mol.constraints: diff --git a/moldesign/units/quantity.py b/moldesign/units/quantity.py index b1b33db..677814f 100644 --- a/moldesign/units/quantity.py +++ b/moldesign/units/quantity.py @@ -46,7 +46,7 @@ class MdtQuantity(ureg.Quantity): This is a 'patched' version of pint's quantities that can be pickled (slightly hacky) and supports more numpy operations. Users should never need to instantiate this directly - instead, construct - BuckyBall quantities by multiplying numbers/arrays with the pre-defined units + MDT quantities by multiplying numbers/arrays with the pre-defined units Examples: >>> 5.0 * units.femtoseconds @@ -96,8 +96,7 @@ def __setitem__(self, key, value): if self.dimensionless: # case 1: this is OK if self is dimensionless self.magnitude[key] = value else: # case 2: User tried to pass a number without units - raise DimensionalityError('%s cannot be assigned to array with dimensions %s' % - (value, self.units)) + raise DimensionalityError(self.units, ureg.dimensionless) else: # case 3: attribute error is unrelated to this raise @@ -156,7 +155,8 @@ def norm(self): return units * np.linalg.norm(self._magnitude) def dot(self, other): - """Compute norm but respect units + """ Dot product that correctly multiplies units + Returns: MdtQuantity """ diff --git a/moldesign/units/tools.py b/moldesign/units/tools.py index 299faff..9970115 100644 --- a/moldesign/units/tools.py +++ b/moldesign/units/tools.py @@ -17,12 +17,15 @@ def units_transfer(from_var, to_var, force=False): - """ - Give the "to_var" object the same units as "from_var" - :param from_var: - :param to_var: - :param force: Transfer the units even if from_var and to_var have incompatible units - :return: + """ Give the "to_var" object the same units as "from_var" + + Args: + from_var (MdtQuantity): use this quantities units + to_var (MdtQuantity): apply units to this quantity + force (bool): Transfer the units even if from_var and to_var have incompatible units + + Returns: + MdtQuantity: to_var with from_var's units """ # If from_var is not a Quantity-like object, return a normal python scalar @@ -63,9 +66,12 @@ def array(qlist, baseunit=None): """ Facilitates creating an array with units - like numpy.array, but it also checks units for all components of the array - :param qlist: List-like object of quantity objects - :param baseunit: (optional) unit to standardize with - :return: Quantity object + Args: + qlist (List[MdtQuantity]): List-like object of quantity objects + baseunit (MdtUnit) unit to standardize with + + Returns: + MdtQuantity: array with standardized units """ if hasattr(qlist, 'units') and hasattr(qlist, 'magnitude'): return MdtQuantity(qlist) diff --git a/moldesign/units/unitsystem.py b/moldesign/units/unitsystem.py index ed10531..1385252 100644 --- a/moldesign/units/unitsystem.py +++ b/moldesign/units/unitsystem.py @@ -67,9 +67,10 @@ def momentum(self, f): self._momentum = f def convert(self, quantity): - """ - Convert a quantity into this unit system - @param quantity: moldesign.external.pint.Quantity + """ Convert a quantity into this unit system + + Args: + quantity (MdtQuantity): quantity to convert """ baseunit = self.get_baseunit(quantity) if isinstance(baseunit, int): From 3e6cd1f8cbd654efcaa5de42dfe66184f3c8e0f6 Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Wed, 7 Sep 2016 11:08:11 -0700 Subject: [PATCH 44/64] Fix dihedral gradient sign error, add geometric gradient tests --- moldesign/_tests/test_geometry.py | 84 +++++++++++++++++++++++++++++++ moldesign/geom/grads.py | 2 +- 2 files changed, 85 insertions(+), 1 deletion(-) diff --git a/moldesign/_tests/test_geometry.py b/moldesign/_tests/test_geometry.py index 363a39c..414ce87 100644 --- a/moldesign/_tests/test_geometry.py +++ b/moldesign/_tests/test_geometry.py @@ -15,6 +15,9 @@ # honored, test that it calcultes what it says it does, test that properties have the right # units and array shapes, etc. +# step for numerical derivative testing +NUMDX = 0.0000005 * u.angstrom + def typedfixture(*types, **kwargs): """This is a decorator that lets us associate fixtures with one or more arbitrary types. @@ -119,6 +122,48 @@ def test_dihedral_sign_convention(four_particle_45_twist): 315.0, decimal=8) + +def test_dihedral_gradient(four_particle_45_twist): + mol = four_particle_45_twist + calc_grad = u.array(mdt.dihedral_gradient(*mol.atoms)).defunits() + grads = np.zeros((4, 3)) * u.radian / u.angstrom + for iatom, atom in enumerate(mol.atoms): + apos = atom.position + for idim in xrange(3): + atom.position[idim] += NUMDX + dplus = mdt.dihedral(*mol.atoms) + atom.position[idim] -= 2.0 * NUMDX + dminus = mdt.dihedral(*mol.atoms) + grads[iatom, idim] = (dplus-dminus) / (2.0*NUMDX) + atom.position = apos + + np.testing.assert_allclose(calc_grad.defunits_value(), + grads.defunits_value(), + atol=5.0*NUMDX.defunits_value()) + + +def test_dihedral_gradient_sign_convention(four_particle_45_twist): + mol = four_particle_45_twist + mol.atoms[-1].y += 0.4 * u.nm + + calc_grad = u.array(mdt.dihedral_gradient(*mol.atoms)).defunits() + grads = np.zeros((4, 3)) * u.radian / u.angstrom + for iatom, atom in enumerate(mol.atoms): + apos = atom.position + for idim in xrange(3): + atom.position[idim] += NUMDX + dplus = mdt.dihedral(*mol.atoms) + atom.position[idim] -= 2.0 * NUMDX + dminus = mdt.dihedral(*mol.atoms) + grads[iatom, idim] = (dplus-dminus) / (2.0*NUMDX) + atom.position = apos + + np.testing.assert_allclose(calc_grad.defunits_value(), + grads.defunits_value(), + atol=5.0*NUMDX.defunits_value()) + + + ######################## # Angles # ######################## @@ -129,7 +174,24 @@ def test_angle_measure(three_particle_right_angle): decimal=8) +def test_angle_gradient(three_particle_right_angle): + mol = three_particle_right_angle + + calc_grad = u.array(mdt.angle_gradient(*mol.atoms)).defunits() + grads = np.zeros((3, 3)) * u.radian / u.angstrom + for iatom, atom in enumerate(mol.atoms): + apos = atom.position + for idim in xrange(3): + atom.position[idim] += NUMDX + dplus = mdt.angle(*mol.atoms) + atom.position[idim] -= 2.0 * NUMDX + dminus = mdt.angle(*mol.atoms) + grads[iatom, idim] = (dplus-dminus) / (2.0*NUMDX) + atom.position = apos + np.testing.assert_allclose(calc_grad.defunits_value(), + grads.defunits_value(), + atol=5.0*NUMDX.defunits_value()) ######################## @@ -183,3 +245,25 @@ def test_center_of_mass(four_particle_45_twist): desired_com_angstroms = np.array([0.1+0.4, -0.4, 0.0]) * 10.0 / 6.0 np.testing.assert_almost_equal(mol.center_of_mass.defunits_value(), desired_com_angstroms) + + +def test_distance_gradient(three_particle_right_angle): + mol = three_particle_right_angle + + atoms = mol.atoms[:2] + + calc_grad = u.array(mdt.distance_gradient(*atoms)) + grads = np.zeros((2, 3)) + for iatom, atom in enumerate(atoms): + apos = atom.position + for idim in xrange(3): + atom.position[idim] += NUMDX + dplus = mdt.distance(*atoms) + atom.position[idim] -= 2.0 * NUMDX + dminus = mdt.distance(*atoms) + grads[iatom, idim] = (dplus-dminus) / (2.0*NUMDX) + atom.position = apos + + np.testing.assert_allclose(calc_grad, + grads, + atol=5.0*NUMDX.defunits_value()) \ No newline at end of file diff --git a/moldesign/geom/grads.py b/moldesign/geom/grads.py index a57e9ff..48448ac 100644 --- a/moldesign/geom/grads.py +++ b/moldesign/geom/grads.py @@ -96,4 +96,4 @@ def dihedral_gradient(a1, a2, a3, a4): vec2 = vec1 * (pijkj - 1.0) - vec4 * pklkj vec3 = vec4 * (pklkj - 1.0) - vec1 * pijkj - return vec1 * u.radians, vec2 * u.radians, vec3 * u.radians, vec4 * u.radians \ No newline at end of file + return -vec1 * u.radians, -vec2 * u.radians, -vec3 * u.radians, -vec4 * u.radians From 875be10511808c157438e4ef31f075a6527561b3 Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Thu, 8 Sep 2016 18:19:30 -0700 Subject: [PATCH 45/64] Add SHAKE solver for position constraints --- moldesign/_tests/test_constraints.py | 49 +++++++++++++ moldesign/_tests/test_geometry.py | 26 ++++++- moldesign/geom/__init__.py | 4 +- moldesign/geom/constraints.py | 94 +++++++++++++++++------- moldesign/geom/grads.py | 13 ++++ moldesign/geom/monitor.py | 69 ++++++++++++++++++ moldesign/geom/shake.py | 105 +++++++++++++++++++++++++++ moldesign/molecules/molecule.py | 3 +- 8 files changed, 332 insertions(+), 31 deletions(-) create mode 100644 moldesign/_tests/test_constraints.py create mode 100644 moldesign/geom/monitor.py create mode 100644 moldesign/geom/shake.py diff --git a/moldesign/_tests/test_constraints.py b/moldesign/_tests/test_constraints.py new file mode 100644 index 0000000..bbaf830 --- /dev/null +++ b/moldesign/_tests/test_constraints.py @@ -0,0 +1,49 @@ +""" Tests constraint routines +""" +import pytest +import numpy as np + +import moldesign as mdt +from moldesign import units as u + + +def _make_mol_with_n_hydrogens(n): + return mdt.Molecule([mdt.Atom('H') for i in xrange(n)]) + +@pytest.fixture +def four_particle_45_twist(): + mol = _make_mol_with_n_hydrogens(4) + mol.positions = u.nm*[[0.1, 0.0, -0.5], + [0.0, 0.0, -0.5], + [0.0, 0.0, 0.5], + [0.2, -0.2, 0.5]] + + for iatom in xrange(3): + mol.atoms[iatom].bond_to(mol.atoms[iatom+1], 1) + + return mol + + +def test_dihedral_constraint_errors(four_particle_45_twist): + mol = four_particle_45_twist + constraint = mol.constrain_dihedral(*mol.atoms) + + assert constraint.error() == 0.0 + + constraint.value = 30.0 * u.degrees + np.testing.assert_allclose(constraint.error().value_in(u.degrees), 15.0) + + constraint.value = 60.0 * u.degrees + np.testing.assert_allclose(constraint.error().value_in(u.degrees), -15.0) + + +def test_dihedral_constraint_errors_at_0(four_particle_45_twist): + mol = four_particle_45_twist + mol.atoms[3].position = [0.1, 0.0, 0.5] * u.angstrom + + constraint = mol.constrain_dihedral(*mol.atoms) + assert constraint.error() == 0.0 + + for angle in (0, -10, 10, 90, -90) * u.degrees: + constraint.value = angle + np.testing.assert_allclose(constraint.error().value_in(u.degrees), -angle.magnitude) diff --git a/moldesign/_tests/test_geometry.py b/moldesign/_tests/test_geometry.py index 414ce87..a2189a6 100644 --- a/moldesign/_tests/test_geometry.py +++ b/moldesign/_tests/test_geometry.py @@ -266,4 +266,28 @@ def test_distance_gradient(three_particle_right_angle): np.testing.assert_allclose(calc_grad, grads, - atol=5.0*NUMDX.defunits_value()) \ No newline at end of file + atol=5.0*NUMDX.defunits_value()) + + +######################### +# Utilities # +######################### +def test_sub_angles(): + from moldesign.geom import sub_angles + np.testing.assert_allclose(sub_angles(np.pi*u.radian, np.pi/2.0*u.radian), + np.pi/2.0 * u.radian) + + np.testing.assert_allclose(sub_angles(360*u.degrees, 179*u.degrees), + -179*u.degrees) + + np.testing.assert_allclose(sub_angles(360*u.degrees, 3*u.degrees), + -3*u.degrees) + + np.testing.assert_allclose(sub_angles(720*u.degrees, -360*u.degrees), + 0*u.degrees) + + np.testing.assert_allclose(sub_angles(180*u.degrees, 270*u.degrees), + -90*u.degrees) + + np.testing.assert_allclose(sub_angles(270*u.degrees, 0*u.degrees), + -90*u.degrees) diff --git a/moldesign/geom/__init__.py b/moldesign/geom/__init__.py index 8470103..cbdc202 100644 --- a/moldesign/geom/__init__.py +++ b/moldesign/geom/__init__.py @@ -7,4 +7,6 @@ def toplevel(o): from .grads import * from .setcoord import * from .constraints import * -from .symmetry import * \ No newline at end of file +from .symmetry import * +from .monitor import * +from .shake import * diff --git a/moldesign/geom/constraints.py b/moldesign/geom/constraints.py index b869560..06bd515 100644 --- a/moldesign/geom/constraints.py +++ b/moldesign/geom/constraints.py @@ -18,6 +18,7 @@ from moldesign.mathutils import * from .coords import * from .grads import * +from .grads import _atom_grad_to_mol_grad DIST_TOLERANCE = 1.0e-3 * u.angstrom DIST_FORCE_CONSTANT = 1000.0 * u.kcalpermol / (u.angstrom**2) @@ -26,23 +27,20 @@ class GeometryConstraint(object): - """ - Base class - Keeps track of a 3D geometry constraint. + """ Base class - Keeps track of a 3D geometry constraint. The constraint is satisfied when self.current() == self.value + + Args: + atoms (List[mdt.Atom]): atoms involved + value (u.Scalar): constrain the coordinate to this value + tolerance (u.Scalar): absolute tolerance (for iterative constraint enforcement) + force_constant (u.Scalar[force]): optional, only for minimizations and/or use in + restraints) """ desc = 'base constraint' # use this to identify the constraint in interfaces dof = 1 # number of degrees of freedom constrained (so that we can properly calculate temperature) def __init__(self, atoms, value=None, tolerance=None, force_constant=None): - """ Initialization: - - Args: - atoms (List[mdt.Atom]): atoms involved - value (u.Scalar): constrain the coordinate to this value - tolerance (u.Scalar): absolute tolerance (for iterative constraint enforcement) - force_constant (u.Scalar[force]): optional, only for minimizations and/or use in - restraints) - """ self.atoms = moldesign.molecules.atomcollections.AtomList(atoms) self.mol = self.atoms[0].molecule self.tolerance = tolerance @@ -65,13 +63,7 @@ def gradient(self): .. math:: \nabla G(\mathbf r) """ - grad = np.zeros((self.mol.num_atoms, 3)) - atomvecs = self.atomgrad(*self.atoms) - assert len(atomvecs) == len(self.atoms) - grad = grad * atomvecs[0].get_units() - for v, a in zip(atomvecs, self.atoms): - grad[a.index] = v - return grad + return _atom_grad_to_mol_grad(self.atoms, self.atomgrad(*self.atoms)) def satisfied(self): """ @@ -110,7 +102,6 @@ def __str__(self): atoms=','.join([a.name for a in self.atoms]), self=self) -@toplevel class DistanceConstraint(GeometryConstraint): desc = 'distance' atomgrad = staticmethod(distance_gradient) @@ -128,7 +119,6 @@ def current(self): current.__doc__ = GeometryConstraint.current.__doc__ -@toplevel class AngleConstraint(GeometryConstraint): desc = 'angle' atomgrad = staticmethod(angle_gradient) @@ -151,7 +141,6 @@ def error(self): error.__doc__ = GeometryConstraint.error.__doc__ -@toplevel class DihedralConstraint(GeometryConstraint): desc = 'dihedral' atomgrad = staticmethod(dihedral_gradient) @@ -175,17 +164,27 @@ def error(self): error.__doc__ = GeometryConstraint.error.__doc__ -@toplevel class FixedPosition(GeometryConstraint): - """This constraint is different than the others because it's absolute, not relative""" + """Fixes a single atom at a given location + + Note: + The gradient of this function is singular and discontinuous when the constraint is satisfied, + leading to poor results in iterative methods such as SHAKE. + + In such cases, this constraint should be automatically replaced with three + :class:`FixedCoordinate` constraints on the atom's x, y, and z coordinates. + """ desc = 'position' dof = 3 - def __init__(self, atom, point=None, value=None, + def __init__(self, atom, value=None, tolerance=DIST_TOLERANCE, force_constant=DIST_FORCE_CONSTANT): self.atom = atom - self.point = mdt.utils.if_not_none(point, atom.position.copy()) - super(FixedPosition, self).__init__([atom], value=value, + if value is None: + self.value = mdt.utils.if_not_none(value, atom.position.copy()) + else: + self.value = value.copy() + super(FixedPosition, self).__init__([atom], value=self.value, tolerance=tolerance, force_constant=force_constant) def current(self): @@ -197,11 +196,50 @@ def error(self): return np.sqrt(diff.dot(diff)) error.__doc__ = GeometryConstraint.error.__doc__ - def atomgrad(self): + def atomgrad(self, atom=None): """ + Note: + For numerical reasons, this returns a vector in the [1,1,1] direction if the + constraint is exactly met + Returns: u.Vector[length]: unit vector from the constraint location to the atom's actual location (len=3) """ + if atom: assert atom is self.atom diff = self.atom.position - self.value - return normalized(diff) \ No newline at end of file + grad = normalized(diff) + if (grad.magnitude == np.zeros(3)).all(): + grad.magnitude[:] = np.ones(3) / np.sqrt(3) + return [grad] + + +class FixedCoordinate(GeometryConstraint): + """Fixes a single, linear degree of freedom for an atom, so that it's constrained to a plane. + + Args: + atom (moldesign.Atom): atom to constrain + vector (np.ndarray): direction to constrain + value (units.Scalar[length]): constraint value (i.e., we constrain the dot product of the + atom's position and the normalized direction vector to be this value) + """ + desc = 'coordinate' + dof = 1 + + def __init__(self, atom, vector, value=None, + tolerance=DIST_TOLERANCE, force_constant=DIST_FORCE_CONSTANT): + self.atom = atom + self.vector = normalized(vector) + if value is None: + self.value = mdt.utils.if_not_none(value, self.current()) + else: + self.value = value.copy() + super(FixedCoordinate, self).__init__([atom], value=self.value, + tolerance=tolerance, force_constant=force_constant) + + def current(self): + return self.atom.position.dot(self.vector) + current.__doc__ = GeometryConstraint.current.__doc__ + + def atomgrad(self, atom=None): + return [self.vector] * u.ureg.dimensionless # that was easy diff --git a/moldesign/geom/grads.py b/moldesign/geom/grads.py index 48448ac..0b1ea8c 100644 --- a/moldesign/geom/grads.py +++ b/moldesign/geom/grads.py @@ -97,3 +97,16 @@ def dihedral_gradient(a1, a2, a3, a4): vec3 = vec4 * (pklkj - 1.0) - vec1 * pijkj return -vec1 * u.radians, -vec2 * u.radians, -vec3 * u.radians, -vec4 * u.radians + + +def _atom_grad_to_mol_grad(atoms, grads): + """ Convert list of gradients on atoms to a full-dimensional Nx3 gradient list (with 0s for + uninvolved atoms) + """ + m = atoms[0].molecule + if len(grads) != len(atoms): + raise ValueError('Number of gradients does not match number of atoms') + mol_grad = np.zeros((m.num_atoms, 3))*grads[0].get_units() + for v, a in zip(grads, atoms): + mol_grad[a.index] = v + return mol_grad diff --git a/moldesign/geom/monitor.py b/moldesign/geom/monitor.py new file mode 100644 index 0000000..9fd6585 --- /dev/null +++ b/moldesign/geom/monitor.py @@ -0,0 +1,69 @@ +# Copyright 2016 Autodesk Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import moldesign as mdt + +from . import toplevel +from . import constraints, grads, coords, setcoord + + +class Monitor(object): + def __init__(self, *atoms): + if len(atoms) != self.NUM_ATOMS: + raise ValueError('%s requires %d atoms, but %d passed' % + (type(self), self.NUM_ATOMS, len(atoms))) + self.atoms = atoms + + @property + def value(self): + return self.GETTER(*self.atoms) + + @value.setter + def value(self, val): + args = self.atoms + (val,) + self.SETTER(*args) + + def gradient(self): + return grads._atom_grad_to_mol_grad(self.atoms, self.GRAD(*self.atoms)) + + @mdt.utils.kwargs_from(constraints.GeometryConstraint) + def constrain(self, **kwargs): + return self.CONSTRAINT(*self.atoms, **kwargs) + + +@toplevel +class DistanceMonitor(Monitor): + NUM_ATOMS = 2 + GETTER = staticmethod(coords.distance) + SETTER = staticmethod(setcoord.set_distance) + GRAD = staticmethod(grads.distance_gradient) + CONSTRAINT = constraints.DistanceConstraint + + +@toplevel +class AngleMonitor(Monitor): + NUM_ATOMS = 3 + GETTER = staticmethod(coords.angle) + SETTER = staticmethod(setcoord.set_angle) + GRAD = staticmethod(grads.angle_gradient) + COSTRAINT = constraints.AngleConstraint + + +@toplevel +class DihedralMonitor(Monitor): + NUM_ATOMS = 4 + GETTER = staticmethod(coords.dihedral) + SETTER = staticmethod(setcoord.set_dihedral) + GRAD = staticmethod(grads.dihedral_gradient) + CONSTRAINT = constraints.DihedralConstraint diff --git a/moldesign/geom/shake.py b/moldesign/geom/shake.py new file mode 100644 index 0000000..d3c9276 --- /dev/null +++ b/moldesign/geom/shake.py @@ -0,0 +1,105 @@ +# Copyright 2016 Autodesk Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +import itertools +import numpy as np +import moldesign as mdt +from moldesign import units as u + +from .constraints import FixedCoordinate, FixedPosition + + +def shake_position(mol, prev_positions, max_cycles=100, use_masses=True): + """ Satisfy all molecular constraints using the SHAKE algorithm + + Args: + mol (moldesign.Molecule): molecule with unsatisfied constraints + prev_positions (mdt.units.Array[length]): positions prior to move + max_cycles (int): halt and raise an exception after this many cycles + + Note: + This algorithm does badly if constraint function gradients go to 0. + + References: + R. Elber, A. Ruymgaart, B. Hess: SHAKE Parallelization. + Eur Phys J Spec Top. 2011 Nov 1; 200(1): 211. + doi:10.1140/epjst/e2011-01525-9 + """ + constraints = [] + for c in mol.constraints: # Replace FixedPosition with 3 FixedCoordinates - it's better behaved + if isinstance(c, FixedPosition): + for i in xrange(3): + vec = np.zeros(3) + vec[i] = 1.0 + constraints.append(FixedCoordinate(c.atom, vec, value=c.value[i])) + else: + constraints.append(c) + + # ---array shapes--- + # prevgrad, currgrad: (num_constr, 3N) + # values: (num_constr,) + # A: (num_constr, num_constr) + # multipliers: (num_constr, ) + # delta: (3N,) + curr = mol.positions.copy() + prev = prev_positions.copy() + mol.positions = prev + prevgrad = np.array([_clean_grad_array(c.gradient()) for c in constraints]) + mol.positions = curr + + if use_masses: + dim_masses = mol.dim_masses + else: + dim_masses = np.ones((mol.num_atoms, 3)) * u.default.mass + flat_masses = dim_masses.defunits_value().flatten() + + for i in xrange(max_cycles): + for c in mol.constraints: + if not c.satisfied(): + break + else: + return # e.g., we're done + + print ' '.join([str(c.error()) for c in constraints]) + + # Get constraint derivatives + # Note: we remove units here because pint does not handle arrays with heterogeneous units + values = np.array([c.error().defunits_value() for c in constraints]) + currgrad = np.array([_clean_grad_array(c.gradient()) for c in constraints]) + + A = np.dot(currgrad/flat_masses, prevgrad.T) + multipliers = np.linalg.solve(A, values) + + # reapply units and adjust positions + delta = multipliers.dot(prevgrad).reshape(mol.num_atoms, 3) * \ + u.default.mass * u.default.length + + mol.positions -= delta/dim_masses + + else: + raise mdt.exceptions.NoConvergence('SHAKE did not converge after %d iterations' % + max_cycles) + + +def _clean_grad_array(a): + """ Remove units and flatten array + """ + return a.defunits_value().flatten() + + + + + + + + diff --git a/moldesign/molecules/molecule.py b/moldesign/molecules/molecule.py index caa31a0..91aa958 100644 --- a/moldesign/molecules/molecule.py +++ b/moldesign/molecules/molecule.py @@ -126,7 +126,7 @@ def constrain_dihedral(self, atom1, atom2, atom3, atom4, angle=None): angle ([angle]): angle value (default: current angle) Returns: - moldesign.geometry.AngleConstraint: constraint object + moldesign.geom.AngleConstraint: constraint object """ from moldesign import geom self.constraints.append( @@ -921,6 +921,7 @@ class Molecule(AtomContainer, accessed as ``mol.chains[list_index]`` or ``mol.chains[chain_name]`` name (str): A descriptive name for molecule charge (units.Scalar[charge]): molecule's formal charge + constraints (List[moldesign.geom.GeometryConstraint]): list of constraints ndims (int): length of the positions, momenta, and forces arrays (usually 3*self.num_atoms) num_atoms (int): number of atoms (synonym: natoms) num_bonds (int): number of bonds (synonym: nbonds) From 7d01f4195775100e2f209758ad953502a7d2b127 Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Thu, 8 Sep 2016 18:20:35 -0700 Subject: [PATCH 46/64] Misc bugfixes and import optimization --- moldesign/geom/symmetry.py | 2 +- moldesign/mathutils.py | 2 +- moldesign/min/base.py | 6 +++--- moldesign/min/scipy.py | 4 ++-- moldesign/min/smart.py | 3 ++- moldesign/molecules/atomcollections.py | 5 +++-- 6 files changed, 12 insertions(+), 10 deletions(-) diff --git a/moldesign/geom/symmetry.py b/moldesign/geom/symmetry.py index f638017..a726a15 100644 --- a/moldesign/geom/symmetry.py +++ b/moldesign/geom/symmetry.py @@ -13,7 +13,6 @@ # limitations under the License. import numpy as np -import scipy.spatial.distance import moldesign as mdt from moldesign import units as u @@ -83,6 +82,7 @@ def get_symmetrized_coords(self, elem): Symmetrize the molecule based on the symmetry operation This will work as long as the symmetry operation brings each atom closest to a symmetry relation. """ + import scipy.spatial.distance # First, apply the transformation oriented_coords = self.orientation diff --git a/moldesign/mathutils.py b/moldesign/mathutils.py index d02f23f..158948a 100644 --- a/moldesign/mathutils.py +++ b/moldesign/mathutils.py @@ -66,7 +66,7 @@ def safe_arccos(costheta): def sub_angles(a, b): - """ Subtract two angles, keeping the result within [0,360) + """ Subtract two angles, keeping the result within [-180,180) """ c = a - b return (c + 180.0 * u.degrees) % (360.0 * u.degrees) - (180.0 * u.degrees) diff --git a/moldesign/min/base.py b/moldesign/min/base.py index 872f312..b7bea4e 100644 --- a/moldesign/min/base.py +++ b/moldesign/min/base.py @@ -135,8 +135,8 @@ def callback(self, *args): self.mol.calculate(self.request_list) self.traj.new_frame(minimization_step=self.current_step, - annotation='minimization steps:%d (energy=%s)' % - (self.current_step, self.mol.potential_energy)) + annotation='minimization steps:%d (energy=%s)'% + (self.current_step, self.mol.potential_energy)) if self.nsteps is None: message = ['Minimization step %d' % self.current_step] else: @@ -150,7 +150,7 @@ def callback(self, *args): force = self._last_grad message.append(u'RMS \u2207E={rmsf.magnitude:.3e}, ' - u'max \u2207E={mf.magnitude:.3e}{mf.units}'.format( + u'max \u2207E={mf.magnitude:.3e} {mf.units}'.format( rmsf=np.sqrt(force.dot(force) / self.mol.ndims), mf=np.abs(force).max())) diff --git a/moldesign/min/scipy.py b/moldesign/min/scipy.py index 310a3a6..e321dff 100644 --- a/moldesign/min/scipy.py +++ b/moldesign/min/scipy.py @@ -13,8 +13,6 @@ # limitations under the License. from __future__ import absolute_import -import scipy.optimize - from moldesign import units as u from .base import MinimizerBase @@ -42,6 +40,8 @@ class ScipyMinimizer(MinimizerBase): _TAKES_GTOL = False def run(self): + import scipy.optimize + print 'Starting geometry optimization: SciPy/%s with %s gradients'%( self._METHOD_NAME, self.gradtype) options = {'disp': True} diff --git a/moldesign/min/smart.py b/moldesign/min/smart.py index 150026f..f0edc56 100644 --- a/moldesign/min/smart.py +++ b/moldesign/min/smart.py @@ -45,10 +45,11 @@ class SmartMin(MinimizerBase): @utils.args_from(MinimizerBase, inject_kwargs={'gd_threshold': GDTHRESH}) def __init__(self, *args, **kwargs): + self.gd_threshold = kwargs.pop('gd_threshold', GDTHRESH) self.args = args self.kwargs = kwargs super(SmartMin, self).__init__(*args, **kwargs) - self.gd_threshold = kwargs.get('gd_threshold', GDTHRESH) + def run(self): # If forces are already low, go directly to the quadratic convergence methods and return diff --git a/moldesign/molecules/atomcollections.py b/moldesign/molecules/atomcollections.py index a5a6153..b97cfe1 100644 --- a/moldesign/molecules/atomcollections.py +++ b/moldesign/molecules/atomcollections.py @@ -15,7 +15,6 @@ import copy import numpy as np -from scipy.spatial import distance as spd import moldesign as mdt from moldesign import units as u @@ -104,13 +103,15 @@ def calc_distance_array(self, other=None): >>> dists = self.calc_distance_array(other) >>> dists[i, j] == self.atoms[i].distance(other.atoms[j]) """ + from scipy.spatial.distance import cdist + other = utils.if_not_none(other, self) try: other_positions = other.positions.defunits_value() except AttributeError: other_positions = np.array([other.position.defunits_value()]) - distances = spd.cdist(self.positions.defunits_value(), other_positions) + distances = cdist(self.positions.defunits_value(), other_positions) return distances * u.default.length def calc_displacements(self): From 5e304720811412f83abe0859731907db0802a434 Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Thu, 8 Sep 2016 18:22:17 -0700 Subject: [PATCH 47/64] Add GeometryMonitor classes for easier coordinate tracking --- moldesign/geom/monitor.py | 44 +++++++++++++++++++++++++++++++++++++-- moldesign/geom/shake.py | 2 -- moldesign/min/descent.py | 13 ------------ 3 files changed, 42 insertions(+), 17 deletions(-) diff --git a/moldesign/geom/monitor.py b/moldesign/geom/monitor.py index 9fd6585..8b6645c 100644 --- a/moldesign/geom/monitor.py +++ b/moldesign/geom/monitor.py @@ -39,7 +39,47 @@ def gradient(self): @mdt.utils.kwargs_from(constraints.GeometryConstraint) def constrain(self, **kwargs): - return self.CONSTRAINT(*self.atoms, **kwargs) + """ Constrain this coordinate. + + This will add a new item to the parent molecule's constraint list. + + Args: + **kwargs (dict): kwargs for constraints.GeometryConstraint + + Returns: + constraints.GeometryConstraint: the constraint object + """ + c = self.CONSTRAINT(*self.atoms, **kwargs) + mol = self.atoms[0].molecule + for atom in mol.atoms[1:]: + if atom.molecule is not mol: + raise ValueError("Can't create constraint; atoms are not part of the same Molecule") + mol.constraints.append(c) + return c + + def __call__(self, obj): + """ Calculate this value for the given trajectory + + Args: + obj (mdt.Molecule or mdt.Trajectory): molecule or trajectory to measure + + Returns: + moldesign.units.Quantity: this coordinate's value (for a molecule), or a list of values + (for a trajectory) + + Note: + Atoms are identified by their index only; the atoms defined in the Monitor must have + the same indices as those in the passed object + """ + return self.GETTER(*(obj.atoms[a.index] for a in self.atoms)) + + def __str__(self): + return '%s: %s' % (type(self).__name__, self.value) + + def __repr__(self): + return '<%s for atoms %s: %s>' % (type(self).__name__, + ','.join(str(atom.index) for atom in self.atoms), + self.value) @toplevel @@ -57,7 +97,7 @@ class AngleMonitor(Monitor): GETTER = staticmethod(coords.angle) SETTER = staticmethod(setcoord.set_angle) GRAD = staticmethod(grads.angle_gradient) - COSTRAINT = constraints.AngleConstraint + CONSTRAINT = constraints.AngleConstraint @toplevel diff --git a/moldesign/geom/shake.py b/moldesign/geom/shake.py index d3c9276..8862b42 100644 --- a/moldesign/geom/shake.py +++ b/moldesign/geom/shake.py @@ -70,8 +70,6 @@ def shake_position(mol, prev_positions, max_cycles=100, use_masses=True): else: return # e.g., we're done - print ' '.join([str(c.error()) for c in constraints]) - # Get constraint derivatives # Note: we remove units here because pint does not handle arrays with heterogeneous units values = np.array([c.error().defunits_value() for c in constraints]) diff --git a/moldesign/min/descent.py b/moldesign/min/descent.py index 3108f95..6b89b78 100644 --- a/moldesign/min/descent.py +++ b/moldesign/min/descent.py @@ -57,19 +57,6 @@ def __init__(self, mol, max_atom_move=0.075*u.angstrom, self._last_energy = None def run(self): - self.run_once() - self.nsteps = max(self.nsteps / 5, 2) - for i in xrange(3): # try to satisfy constraints - if all(c.satisfied() for c in self.mol.constraints): break - self.restraint_multiplier += 0.5 - print '\nWarning: constraints not satisfied - new restraint multiplier %f ...' % \ - self.restraint_multiplier - self.run_once() - - if not all(c.satisfied() for c in self.mol.constraints): - print 'WARNING! Constraints not satisfied' - - def run_once(self): print 'Starting geometry optimization: built-in gradient descent' lastproperties = self.mol.calculate() lastenergy = self.objective(self._coords_to_vector(self.mol.positions)) From 76766c2738684b431338e00d44cde81bc3d28659 Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Fri, 9 Sep 2016 11:04:04 -0700 Subject: [PATCH 48/64] Constraint and geometric gradient tests --- moldesign/_tests/helpers.py | 43 ++++++++++ moldesign/_tests/test_constraints.py | 121 ++++++++++++++++++++++++++- moldesign/_tests/test_geometry.py | 87 +++++++------------ moldesign/geom/shake.py | 7 +- moldesign/models/pyscf.py | 2 - moldesign/molecules/molecule.py | 2 + 6 files changed, 195 insertions(+), 67 deletions(-) create mode 100644 moldesign/_tests/helpers.py diff --git a/moldesign/_tests/helpers.py b/moldesign/_tests/helpers.py new file mode 100644 index 0000000..269244f --- /dev/null +++ b/moldesign/_tests/helpers.py @@ -0,0 +1,43 @@ +import moldesign as mdt +from moldesign import units as u +import numpy as np + +DEFSTEP = 0.0000005*u.angstrom + + +def num_grad(mol, fn, step=DEFSTEP, fnargs=None, fnkwargs=None): + grad = None + origpos = mol.positions.copy() + if fnargs is None: + fnargs = tuple() + if fnkwargs is None: + fnkwargs = dict() + + for iatom, atom in enumerate(mol.atoms): + for idim in xrange(3): + atom.position[idim] += step + vplus = fn(*fnargs, **fnkwargs) + atom.position[idim] -= 2.0 * step + vminus = fn(*fnargs, **fnkwargs) + mol.positions = origpos # reset positions + + if grad is None: + grad = np.zeros(mol.positions.shape) * vplus.units/mol.positions.units + grad[iatom, idim] = (vplus - vminus) / (2.0*step) + + return grad + + +def _make_mol_with_n_hydrogens(n): + return mdt.Molecule([mdt.Atom('H') for i in xrange(n)]) + + +class ZeroEnergy(mdt.models.EnergyModelBase): + """ All 0, all the time + """ + def prep(self): + pass + + def calculate(self): + return dict(potential_energy=0.0*u.default.energy, + forces=np.zeros(self.mol.positions.shape)*u.default.force) \ No newline at end of file diff --git a/moldesign/_tests/test_constraints.py b/moldesign/_tests/test_constraints.py index bbaf830..71be63d 100644 --- a/moldesign/_tests/test_constraints.py +++ b/moldesign/_tests/test_constraints.py @@ -6,13 +6,25 @@ import moldesign as mdt from moldesign import units as u +from . import helpers + +registered_types = {} + +def typedfixture(*types, **kwargs): + """This is a decorator that lets us associate fixtures with one or more arbitrary types. + We'll later use this type to determine what tests to run on the result""" + + def fixture_wrapper(func): + for t in types: + registered_types.setdefault(t, []).append(func.__name__) + return pytest.fixture(**kwargs)(func) + + return fixture_wrapper -def _make_mol_with_n_hydrogens(n): - return mdt.Molecule([mdt.Atom('H') for i in xrange(n)]) @pytest.fixture def four_particle_45_twist(): - mol = _make_mol_with_n_hydrogens(4) + mol = helpers._make_mol_with_n_hydrogens(4) mol.positions = u.nm*[[0.1, 0.0, -0.5], [0.0, 0.0, -0.5], [0.0, 0.0, 0.5], @@ -24,17 +36,118 @@ def four_particle_45_twist(): return mol +@typedfixture('constraint') +def dihedral_constraint_satisfied(four_particle_45_twist): + mol = four_particle_45_twist + c = mol.constrain_dihedral(*mol.atoms) + return mol, c + + +@typedfixture('constraint') +def dihedral_constraint_unsatisfied(dihedral_constraint_satisfied): + mol, c = dihedral_constraint_satisfied + mol.atoms[0].z += 0.1*u.angstrom + mol.atoms[1].x += -1.0 * u.angstrom + mol.atoms[2].z -= -0.6 * u.angstrom + return mol, c + + +@typedfixture('constraint') +def angle_constraint_satisfied(four_particle_45_twist): + mol = four_particle_45_twist + c = mol.constrain_angle(*mol.atoms[:3]) + return mol, c + + +@typedfixture('constraint') +def angle_constraint_unsatisfied(angle_constraint_satisfied): + mol, c = angle_constraint_satisfied + mol.atoms[1].x += -1.0 * u.angstrom + mol.atoms[2].z -= -0.6 * u.angstrom + return mol, c + + +@typedfixture('constraint') +def distance_constraint_satisfied(four_particle_45_twist): + mol = four_particle_45_twist + c = mol.constrain_distance(mol.atoms[1], mol.atoms[2]) + return mol, c + + +@typedfixture('constraint') +def distance_constraint_unsatisfied(distance_constraint_satisfied): + mol, c = distance_constraint_satisfied + mol.atoms[1].x += -1.0 * u.angstrom + mol.atoms[2].z -= -0.6 * u.angstrom + return mol, c + + +@typedfixture('constraint') +def atom_position_constraint_unsatisfied(four_particle_45_twist): + mol = four_particle_45_twist + c = mol.constrain_atom(mol.atoms[2]) + mol.atoms[2].x += 1.0*u.angstrom # the gradient is singular when exactly satisfied + return mol, c + + +@typedfixture('constraint') +def atom_coordinate_constraint_satisfied(four_particle_45_twist): + mol = four_particle_45_twist + c = mdt.geom.FixedCoordinate(mol.atoms[3], vector=np.array([1,1,-1])) + return mol, c + + +@typedfixture('constraint') +def angle_constraint_unsatisfied(atom_coordinate_constraint_satisfied): + mol, c = atom_coordinate_constraint_satisfied + mol.atoms[3].x += -1.0 * u.angstrom + mol.atoms[3].y -= -1.0 * u.angstrom + return mol, c + + +def test_distance_constraint(distance_constraint_satisfied): + mol, c = distance_constraint_satisfied + + # satisfied + np.testing.assert_allclose(c.current().value_in(u.nm), + 1.0) + assert c.satisfied() + assert abs(c.error().value_in(u.nm)) <= 1e-10 + + # unsatisfied + mol.atoms[1].z = -0.6 * u.nm + assert not c.satisfied() + assert abs(c.error().value_in(u.nm) - 0.1) <= 1e-10 + + +@pytest.mark.parametrize('objkey', registered_types['constraint']) +def test_constraint_gradient(objkey, request): + mol, c = request.getfuncargvalue(objkey) + + calc_grad = c.gradient() + num_grad = helpers.num_grad(mol, c.error) + np.testing.assert_allclose(num_grad.defunits_value(), + calc_grad.defunits_value(), + atol=5.0*helpers.DEFSTEP.defunits_value()) + + + def test_dihedral_constraint_errors(four_particle_45_twist): mol = four_particle_45_twist constraint = mol.constrain_dihedral(*mol.atoms) assert constraint.error() == 0.0 + assert constraint.satisfied() constraint.value = 30.0 * u.degrees np.testing.assert_allclose(constraint.error().value_in(u.degrees), 15.0) + assert not constraint.satisfied() + constraint.value = 60.0 * u.degrees np.testing.assert_allclose(constraint.error().value_in(u.degrees), -15.0) + assert not constraint.satisfied() + def test_dihedral_constraint_errors_at_0(four_particle_45_twist): @@ -43,7 +156,9 @@ def test_dihedral_constraint_errors_at_0(four_particle_45_twist): constraint = mol.constrain_dihedral(*mol.atoms) assert constraint.error() == 0.0 + assert constraint.satisfied() for angle in (0, -10, 10, 90, -90) * u.degrees: constraint.value = angle np.testing.assert_allclose(constraint.error().value_in(u.degrees), -angle.magnitude) + diff --git a/moldesign/_tests/test_geometry.py b/moldesign/_tests/test_geometry.py index a2189a6..42c64f7 100644 --- a/moldesign/_tests/test_geometry.py +++ b/moldesign/_tests/test_geometry.py @@ -9,6 +9,8 @@ import moldesign as mdt from moldesign import units as u +from . import helpers + registered_types = {} # TODO: automated method testing based on its metadata - i.e. test to make sure parameters are @@ -16,7 +18,6 @@ # units and array shapes, etc. # step for numerical derivative testing -NUMDX = 0.0000005 * u.angstrom def typedfixture(*types, **kwargs): @@ -122,46 +123,30 @@ def test_dihedral_sign_convention(four_particle_45_twist): 315.0, decimal=8) +# TODO: test behavior at discontinuities (180, -180) def test_dihedral_gradient(four_particle_45_twist): mol = four_particle_45_twist - calc_grad = u.array(mdt.dihedral_gradient(*mol.atoms)).defunits() - grads = np.zeros((4, 3)) * u.radian / u.angstrom - for iatom, atom in enumerate(mol.atoms): - apos = atom.position - for idim in xrange(3): - atom.position[idim] += NUMDX - dplus = mdt.dihedral(*mol.atoms) - atom.position[idim] -= 2.0 * NUMDX - dminus = mdt.dihedral(*mol.atoms) - grads[iatom, idim] = (dplus-dminus) / (2.0*NUMDX) - atom.position = apos + + dihe = mdt.DihedralMonitor(*mol.atoms) + calc_grad = dihe.gradient() + num_grad = helpers.num_grad(mol, lambda: dihe.value) np.testing.assert_allclose(calc_grad.defunits_value(), - grads.defunits_value(), - atol=5.0*NUMDX.defunits_value()) + num_grad.defunits_value(), + atol=5.0*helpers.DEFSTEP.defunits_value()) def test_dihedral_gradient_sign_convention(four_particle_45_twist): mol = four_particle_45_twist mol.atoms[-1].y += 0.4 * u.nm + dihe = mdt.DihedralMonitor(*mol.atoms) + calc_grad = dihe.gradient() + num_grad = helpers.num_grad(mol, lambda: dihe.value) - calc_grad = u.array(mdt.dihedral_gradient(*mol.atoms)).defunits() - grads = np.zeros((4, 3)) * u.radian / u.angstrom - for iatom, atom in enumerate(mol.atoms): - apos = atom.position - for idim in xrange(3): - atom.position[idim] += NUMDX - dplus = mdt.dihedral(*mol.atoms) - atom.position[idim] -= 2.0 * NUMDX - dminus = mdt.dihedral(*mol.atoms) - grads[iatom, idim] = (dplus-dminus) / (2.0*NUMDX) - atom.position = apos - - np.testing.assert_allclose(calc_grad.defunits_value(), - grads.defunits_value(), - atol=5.0*NUMDX.defunits_value()) - + np.testing.assert_allclose(calc_grad, + num_grad, + atol=5.0*helpers.DEFSTEP.defunits_value()) ######################## @@ -177,21 +162,14 @@ def test_angle_measure(three_particle_right_angle): def test_angle_gradient(three_particle_right_angle): mol = three_particle_right_angle - calc_grad = u.array(mdt.angle_gradient(*mol.atoms)).defunits() - grads = np.zeros((3, 3)) * u.radian / u.angstrom - for iatom, atom in enumerate(mol.atoms): - apos = atom.position - for idim in xrange(3): - atom.position[idim] += NUMDX - dplus = mdt.angle(*mol.atoms) - atom.position[idim] -= 2.0 * NUMDX - dminus = mdt.angle(*mol.atoms) - grads[iatom, idim] = (dplus-dminus) / (2.0*NUMDX) - atom.position = apos + ang = mdt.AngleMonitor(*mol.atoms) + assert abs(ang.value.value_in(u.degrees) - 90.0) <= 1.0e-8 + calc_grad = ang.gradient() + num_grad = helpers.num_grad(mol, lambda:ang.value) np.testing.assert_allclose(calc_grad.defunits_value(), - grads.defunits_value(), - atol=5.0*NUMDX.defunits_value()) + num_grad.defunits_value(), + atol=5.0*helpers.DEFSTEP.defunits_value()) ######################## @@ -250,24 +228,15 @@ def test_center_of_mass(four_particle_45_twist): def test_distance_gradient(three_particle_right_angle): mol = three_particle_right_angle - atoms = mol.atoms[:2] - - calc_grad = u.array(mdt.distance_gradient(*atoms)) - grads = np.zeros((2, 3)) - for iatom, atom in enumerate(atoms): - apos = atom.position - for idim in xrange(3): - atom.position[idim] += NUMDX - dplus = mdt.distance(*atoms) - atom.position[idim] -= 2.0 * NUMDX - dminus = mdt.distance(*atoms) - grads[iatom, idim] = (dplus-dminus) / (2.0*NUMDX) - atom.position = apos + dist = mdt.DistanceMonitor(*mol.atoms[:2]) + assert dist.value == mol.atoms[0].distance(mol.atoms[1]) - np.testing.assert_allclose(calc_grad, - grads, - atol=5.0*NUMDX.defunits_value()) + calc_grad = dist.gradient() + num_grad = helpers.num_grad(mol, lambda:dist.value) + np.testing.assert_allclose(calc_grad.defunits_value(), + num_grad.defunits_value(), + atol=5.0*helpers.DEFSTEP.defunits_value()) ######################### # Utilities # diff --git a/moldesign/geom/shake.py b/moldesign/geom/shake.py index 8862b42..60c5bd7 100644 --- a/moldesign/geom/shake.py +++ b/moldesign/geom/shake.py @@ -19,7 +19,7 @@ from .constraints import FixedCoordinate, FixedPosition -def shake_position(mol, prev_positions, max_cycles=100, use_masses=True): +def shake_positions(mol, prev_positions, max_cycles=100, use_masses=True): """ Satisfy all molecular constraints using the SHAKE algorithm Args: @@ -35,6 +35,7 @@ def shake_position(mol, prev_positions, max_cycles=100, use_masses=True): Eur Phys J Spec Top. 2011 Nov 1; 200(1): 211. doi:10.1140/epjst/e2011-01525-9 """ + # TODO: store constraint forces in the molecule constraints = [] for c in mol.constraints: # Replace FixedPosition with 3 FixedCoordinates - it's better behaved if isinstance(c, FixedPosition): @@ -79,8 +80,8 @@ def shake_position(mol, prev_positions, max_cycles=100, use_masses=True): multipliers = np.linalg.solve(A, values) # reapply units and adjust positions - delta = multipliers.dot(prevgrad).reshape(mol.num_atoms, 3) * \ - u.default.mass * u.default.length + delta = multipliers.dot(prevgrad).reshape(mol.num_atoms, 3) * ( + u.default.mass * u.default.length) mol.positions -= delta/dim_masses diff --git a/moldesign/models/pyscf.py b/moldesign/models/pyscf.py index 3d9cb24..57e81e1 100644 --- a/moldesign/models/pyscf.py +++ b/moldesign/models/pyscf.py @@ -93,7 +93,6 @@ def __init__(self, **kwargs): self.reference = None self.kernel = None self.logs = StringIO() - self.last_el_state = None self.logger = uibase.Logger('PySCF interface') @compute.runsremotely(enable=force_remote, is_imethod=True) @@ -237,7 +236,6 @@ def _get_properties(self, ref, kernel, grad): # Return the result result['wfn'] = el_state - self.last_el_state = el_state return result def prep(self, force=False): diff --git a/moldesign/molecules/molecule.py b/moldesign/molecules/molecule.py index 91aa958..1e6f410 100644 --- a/moldesign/molecules/molecule.py +++ b/moldesign/molecules/molecule.py @@ -398,6 +398,8 @@ def draw_orbitals(self, **kwargs): mdt.orbitals.OrbitalViewer """ from moldesign.widgets.orbitals import OrbitalViewer + if 'wfn' not in self.properties: + self.calculate_wfn() return OrbitalViewer(self, **kwargs) From 7b191a69e698829470915940d8f563e4aee20e85 Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Fri, 9 Sep 2016 16:44:32 -0700 Subject: [PATCH 49/64] Allow dihedral routines to accept a bond --- moldesign/_tests/test_imports.py | 4 ++-- moldesign/geom/coords.py | 12 ++++++++++-- moldesign/geom/monitor.py | 5 +++++ moldesign/geom/setcoord.py | 15 +++++++++++---- 4 files changed, 28 insertions(+), 8 deletions(-) diff --git a/moldesign/_tests/test_imports.py b/moldesign/_tests/test_imports.py index 74327f9..5074220 100644 --- a/moldesign/_tests/test_imports.py +++ b/moldesign/_tests/test_imports.py @@ -5,5 +5,5 @@ def test_lazy_imports(): import moldesign - for mod in 'simtk simtk.openmm pyscf pdbfixer': - assert mod not in sys.modules \ No newline at end of file + for mod in 'simtk simtk.openmm pyscf pdbfixer scipy': + assert mod not in sys.modules diff --git a/moldesign/geom/coords.py b/moldesign/geom/coords.py index 5be9387..caac191 100644 --- a/moldesign/geom/coords.py +++ b/moldesign/geom/coords.py @@ -96,10 +96,15 @@ def _join_bonds(b1, b2): @toplevel #@singledispatch -def dihedral(a1, a2, a3=None, a4=None): +def dihedral(a1, a2=None, a3=None, a4=None): """Twist angle of bonds a1-a2 and a4-a3 around around the central bond a2-a3 + Can be called as ``dihedral(a1, a2, a3, a4)`` + OR ``dihedral(a2, a2)`` + OR ``dihedral(bond)`` + Args: + a1 (mdt.Bond): the central bond in the dihedral. OR a1,a2 (mdt.Atom): the atoms describing the dihedral a3,a4 (mdt.Atom): (optional) if not passed, ``a1`` and ``a2`` will be treated as the central atoms in this bond, and a3 and a4 will be inferred. @@ -147,10 +152,13 @@ def dihedral(a1, a2, a3=None, a4=None): return (theta * u.radians) % (2.0 * u.pi * u.radians) -def _infer_dihedral(a2, a3): +def _infer_dihedral(a2, a3=None): """ Given two atoms defining the central bond in a dihedral, pick the first and last atoms in a heuristic way (see :meth:`_pick_atom`) to get a unique-ish definition. """ + if a3 is None: # assume bond-like + bond = a2 + a2, a3 = bond.a1, bond.a2 a1 = _pick_atom(a2, a3) a4 = _pick_atom(a3, a2) return a1, a2, a3, a4 diff --git a/moldesign/geom/monitor.py b/moldesign/geom/monitor.py index 8b6645c..06f3987 100644 --- a/moldesign/geom/monitor.py +++ b/moldesign/geom/monitor.py @@ -102,6 +102,11 @@ class AngleMonitor(Monitor): @toplevel class DihedralMonitor(Monitor): + def __init__(self, *atoms): + if len(atoms) in (1, 2): + atoms = coords._infer_dihedral(*atoms) + super(DihedralMonitor, self).__init__(*atoms) + NUM_ATOMS = 4 GETTER = staticmethod(coords.dihedral) SETTER = staticmethod(setcoord.set_dihedral) diff --git a/moldesign/geom/setcoord.py b/moldesign/geom/setcoord.py index 4e2a1f9..0d0941f 100644 --- a/moldesign/geom/setcoord.py +++ b/moldesign/geom/setcoord.py @@ -13,6 +13,7 @@ # limitations under the License. import numpy as np +import moldesign as mdt import moldesign.molecules.atomcollections from moldesign import external from moldesign.mathutils import sub_angles, apply_4x4_transform @@ -85,25 +86,31 @@ def set_angle(a1, a2, a3, theta, adjustmol=True): @toplevel -def set_dihedral(a1, a2, a3=None, a4=None, theta=None, adjustmol=True): +def set_dihedral(a1, a2=None, a3=None, a4=None, theta=None, adjustmol=True): """ Set the twist angle of atoms a1 and a4 around the central bond a2-a3. The atoms will be adjusted along the gradient of the angle. Can be called as ``set_dihedral(a1, a2, a3, a4, theta, adjustmol=True)`` - OR ``set_dihedral(a2, a2, theta, adjustmol=True) - + OR ``set_dihedral(a2, a2, theta, adjustmol=True)`` + OR ``set_dihedral(bond, theta, adjustmol=True)`` If ``adjustmol`` is True and the topology is unambiguous, then the entire molecule's positions will be modified as well Args: - a1,a2,a3,a4 (mdt.Atom): atoms to adjust + a1 (mdt.Bond): central bond in dihedral + a1,a2 (mdt.Atom): atoms around central bond in dihedral + a3, a4 (mdt.Atom): theta (u.Scalar[angle]): new angle to set adjustmol (bool): Adjust all atoms on either side of this bond? """ # TODO: deal with co-linear a1/a4, a2, a3 - the angle is ill-defined \ # (should just an arbitrary axis normal to the central bond) if a4 is None: + if isinstance(a1, mdt.Bond): + if theta is None: + theta = a2 + a1, a2 = a1.a1, a1.a2 if a3 is not None and theta is None: theta, a3 = a3, theta elif a3 is not None or a4 is not None or theta is None: From 5bdc22dc5a5b18bf4aa2653f4180c70578dd9c1e Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Fri, 9 Sep 2016 16:47:16 -0700 Subject: [PATCH 50/64] Clean up for examples --- .../Example 1. Build and simulate DNA.ipynb | 19 +++---- ...Example 2. Running Quantum Chemistry.ipynb | 49 +++++++------------ ...le 3. Simulating a crystal structure.ipynb | 36 ++++++++------ .... HIV Protease bound to an inhibitor.ipynb | 8 +-- moldesign/molecules/molecule.py | 9 +++- moldesign/molecules/residue.py | 2 +- moldesign/molecules/trajectory.py | 2 +- 7 files changed, 58 insertions(+), 67 deletions(-) diff --git a/moldesign/_notebooks/Example 1. Build and simulate DNA.ipynb b/moldesign/_notebooks/Example 1. Build and simulate DNA.ipynb index 8b69497..c78d295 100644 --- a/moldesign/_notebooks/Example 1. Build and simulate DNA.ipynb +++ b/moldesign/_notebooks/Example 1. Build and simulate DNA.ipynb @@ -32,6 +32,8 @@ "source": [ "%matplotlib inline\n", "from matplotlib.pyplot import *\n", + "try: import seaborn #optional, makes plots nicer\n", + "except ImportError: pass\n", "\n", "import moldesign as mdt\n", "from moldesign import units as u" @@ -69,7 +71,7 @@ }, "outputs": [], "source": [ - "dna_structure = mdt.build_bdna('ACTGACTG')\n", + "dna_structure = mdt.build_dna_helix('ACTGACTG', helix_type='b')\n", "dna_structure.draw()" ] }, @@ -136,10 +138,10 @@ }, "outputs": [], "source": [ - "rs.selected_residues\n", - "\n", "if len(rs.selected_atoms) == 0:\n", - " raise ValueError(\"You didn't click on anything!\")" + " raise ValueError(\"You didn't click on anything!\")\n", + " \n", + "rs.selected_residues" ] }, { @@ -327,15 +329,6 @@ "interact_manual(plot_rmsd)\n", "rs" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] } ], "metadata": { diff --git a/moldesign/_notebooks/Example 2. Running Quantum Chemistry.ipynb b/moldesign/_notebooks/Example 2. Running Quantum Chemistry.ipynb index 295e97e..b28b058 100644 --- a/moldesign/_notebooks/Example 2. Running Quantum Chemistry.ipynb +++ b/moldesign/_notebooks/Example 2. Running Quantum Chemistry.ipynb @@ -37,6 +37,9 @@ "import numpy as np\n", "from matplotlib.pylab import *\n", "\n", + "try: import seaborn #optional, makes plots look nicer\n", + "except ImportError: pass\n", + "\n", "import moldesign as mdt\n", "from moldesign import units as u" ] @@ -110,17 +113,6 @@ " * Get a list of other available energy models (type `mdt.models.` and then hit the `[tab]` key)" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "mdt.configure()" - ] - }, { "cell_type": "code", "execution_count": null, @@ -176,17 +168,6 @@ "minimization.draw_orbitals()" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "minimization" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -230,12 +211,12 @@ "outputs": [], "source": [ "plot(distances, scan.potential_energy)\n", - "grid(); xlabel('separation / ang'); ylabel('energy / eV')\n", + "xlabel('separation / ang'); ylabel('energy / eV')\n", "\n", "figure()\n", "plot(distances, scan.atoms[0].mulliken, label='atom 1 partial charge')\n", "plot(distances, scan.atoms[1].mulliken, label='atom 2 partial charge')\n", - "grid(); xlabel('separation / ang'); ylabel('partial charge'); legend()" + "xlabel('separation / ang'); ylabel('partial charge'); legend()" ] }, { @@ -319,11 +300,8 @@ }, "outputs": [], "source": [ - "bond = selector.selected_bonds[0]\n", - "a1 = bond.a1\n", - "a2 = bond.a2\n", - "\n", - "print 'Dihedral:', mdt.dihedral(bond.a1, bond.a2).to(u.degrees)" + "dihedral = mdt.DihedralMonitor(selector.selected_bonds[0])\n", + "print 'Dihedral:', dihedral.value" ] }, { @@ -346,7 +324,7 @@ "traj = mdt.Trajectory(mol)\n", "traj.new_frame()\n", "for angle in np.arange(180, 360.0, 15.0)*u.degrees:\n", - " mdt.set_dihedral(bond.a1, bond.a2, angle)\n", + " dihedral.value = angle\n", " mol.calculate()\n", " traj.new_frame(annotation='dihedral:%s' % angle) " ] @@ -392,7 +370,7 @@ }, "outputs": [], "source": [ - "plot(mintraj.potential_energy); ylabel('energy / eV'); grid()\n", + "plot(mintraj.potential_energy); ylabel('energy / eV')\n", "mintraj.draw_orbitals()" ] }, @@ -413,6 +391,15 @@ "First, let's look at the simplest possible organic molecule, methane. Its simplicity actually leads to some very complex symmetry." ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [] + }, { "cell_type": "code", "execution_count": null, diff --git a/moldesign/_notebooks/Example 3. Simulating a crystal structure.ipynb b/moldesign/_notebooks/Example 3. Simulating a crystal structure.ipynb index f653818..58dece5 100644 --- a/moldesign/_notebooks/Example 3. Simulating a crystal structure.ipynb +++ b/moldesign/_notebooks/Example 3. Simulating a crystal structure.ipynb @@ -201,7 +201,7 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": true }, "outputs": [], "source": [ @@ -216,18 +216,6 @@ "The structure is ready. We'll associate an integrator with the molecule, then do a 2 step equilibration - first freezing the peptide backbone and running 300K dynamics, then unfreezing and continuing dyanmics." ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "for atom in dna.get_atoms(name=\"HO3'\"):\n", - " dna.constrain_atom(atom)" - ] - }, { "cell_type": "code", "execution_count": null, @@ -275,6 +263,24 @@ "equil1 = dna.run(20.0*u.ps)" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "equil1.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Next**, we'll remove the constraints and do full dynamics:" + ] + }, { "cell_type": "code", "execution_count": null, @@ -365,7 +371,7 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": false }, "outputs": [], "source": [ @@ -383,7 +389,7 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": false }, "outputs": [], "source": [ diff --git a/moldesign/_notebooks/Example 4. HIV Protease bound to an inhibitor.ipynb b/moldesign/_notebooks/Example 4. HIV Protease bound to an inhibitor.ipynb index 8c65bf1..608ece8 100644 --- a/moldesign/_notebooks/Example 4. HIV Protease bound to an inhibitor.ipynb +++ b/moldesign/_notebooks/Example 4. HIV Protease bound to an inhibitor.ipynb @@ -159,7 +159,7 @@ "outputs": [], "source": [ "drugres = mdt.Molecule(sel.selected_residues[0])\n", - "drugres.draw2d(width=700)" + "drugres.draw2d(width=700, show_hydrogens=True)" ] }, { @@ -167,7 +167,7 @@ "metadata": {}, "source": [ "### B. Assign bond orders and hydrogens\n", - "A PDB file provides only limited information crystal structure doesn't provide indicate bond orders, hydrogen locations, or formal charges, but we can add those with the the `clean_pdb` tool:" + "A PDB file provides only limited information; they often don't provide indicate bond orders, hydrogen locations, or formal charges. These can be added, however, with the `add_missing_pdb_data` tool:" ] }, { @@ -190,7 +190,7 @@ }, "outputs": [], "source": [ - "drugmol" + "drugmol.draw2d(width=700, show_hydrogens=True)" ] }, { @@ -333,7 +333,7 @@ }, "outputs": [], "source": [ - "traj = sim_mol.run(40*u.ps)" + "traj = sim_mol.run(20*u.ps)" ] }, { diff --git a/moldesign/molecules/molecule.py b/moldesign/molecules/molecule.py index 1e6f410..b7e48f4 100644 --- a/moldesign/molecules/molecule.py +++ b/moldesign/molecules/molecule.py @@ -205,7 +205,7 @@ def dynamic_dof(self): for constraint in self.constraints: # TODO: deal with more double-counting cases if const_hbonds: - if isinstance(constraint, mdt.DistanceConstraint): + if isinstance(constraint, mdt.geom.DistanceConstraint): # don't double-count constrained hbonds if constraint.a1.atnum == 1 or constraint.a2.atnum == 1: continue df -= constraint.dof @@ -995,7 +995,12 @@ def __init__(self, atomcontainer, self.integrator = None self.electronic_state_index = electronic_state_index - self.charge = utils.if_not_none(charge, sum(atom.formal_charge for atom in self.atoms)) + if charge is not None: + self.charge = charge + if not hasattr(charge, 'units'): # assume fundamental charge units if not explicitly set + self.charge *= u.q_e + else: + self.charge = sum(atom.formal_charge for atom in self.atoms) # Builds the internal memory structures self.chains = Instance(molecule=self) diff --git a/moldesign/molecules/residue.py b/moldesign/molecules/residue.py index e00ed11..f9e1dfc 100644 --- a/moldesign/molecules/residue.py +++ b/moldesign/molecules/residue.py @@ -153,7 +153,7 @@ def assign_template_bonds(self): The topologies here assume pH7.4 and may need to be corrected for other pHs See Also: - :ref:`moldesign.Chain.assign_biopolymer_bonds` + :ref:`moldesign.Chain.assign_biopolymer_bonds` for assigning inter-residue bonds Raises: ValueError: if ``residue.resname`` is not in bioresidue templates diff --git a/moldesign/molecules/trajectory.py b/moldesign/molecules/trajectory.py index 433dc2b..9264c9d 100644 --- a/moldesign/molecules/trajectory.py +++ b/moldesign/molecules/trajectory.py @@ -401,7 +401,7 @@ def apply_frame(self, frame): # allexcept=['traj'], # append_docstring_description=True) def write(self, *args, **kwargs): - return mdt.converters.write_trajectory(self, *args, **kwargs) + return mdt.fileio.write_trajectory(self, *args, **kwargs) def plot(self, x, y, **kwargs): """ Create a matplotlib plot of property x against property y From 7970e3e73d3fe50ef12ff9e14b5935aaa2b305f8 Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Fri, 9 Sep 2016 16:48:58 -0700 Subject: [PATCH 51/64] Fix bugs that show up if a non-standard residue is found in CCD - assign hydrogen names from CCD if possible; uniquely if not - Don't overwrite CCD bond orders with CONECT records --- moldesign/fileio.py | 3 +- moldesign/helpers/pdb.py | 67 +++++++++++++++++++++++++++++-- moldesign/interfaces/openbabel.py | 9 +++-- moldesign/molecules/biounits.py | 4 ++ moldesign/utils/databases.py | 4 ++ 5 files changed, 78 insertions(+), 9 deletions(-) diff --git a/moldesign/fileio.py b/moldesign/fileio.py index c181a92..09967f5 100644 --- a/moldesign/fileio.py +++ b/moldesign/fileio.py @@ -209,7 +209,8 @@ def read_pdb(f, assign_ccd_bonds=True): atom = serials[atomserial] for nbrserial, order in nbrs.iteritems(): nbr = serials[nbrserial] - mol.newbond(atom, nbr, order) + if nbr not in atom.bond_graph: # we already got it from CCD + mol.newbond(atom, nbr, order) if assemblies: pdb.warn_assemblies(mol, assemblies) diff --git a/moldesign/helpers/pdb.py b/moldesign/helpers/pdb.py index 1da3001..71a3c43 100644 --- a/moldesign/helpers/pdb.py +++ b/moldesign/helpers/pdb.py @@ -21,6 +21,8 @@ import numpy as np +import moldesign as mdt + BioAssembly = collections.namedtuple('BioAssembly', 'desc chains transforms') @@ -133,8 +135,10 @@ def get_conect_records(pdbfile): conect = {} for line in pdbfile: fields = line.split() - if len(fields) == 0: continue - if fields[0] != 'CONECT': continue + if len(fields) == 0: + continue + if fields[0] != 'CONECT': + continue atombonds = conect.setdefault(int(fields[1]), {}) for f in fields[2:6]: # TODO: check the end bound @@ -224,7 +228,6 @@ def assign_biopolymer_bonds(mol): References: http://www.wwpdb.org/data/ccd """ - for chain in mol.chains: try: chain.assign_biopolymer_bonds() @@ -235,4 +238,60 @@ def assign_biopolymer_bonds(mol): residue.assign_template_bonds() except KeyError: print('WARNING: failed to assign bonds for %s; use ' - '``residue.assign_distance.bonds`` to guess the topology') % str(residue) \ No newline at end of file + '``residue.assign_distance.bonds`` to guess the topology') % str(residue) + + +def assign_unique_hydrogen_names(mol): + """ Assign unique names to all hydrogens, based on either: + 1) information in the Chemical Component Database, or + 2) newly generated, unique names + + Args: + mol (moldesign.Molecule): + """ + + for residue in mol.residues: + if residue.resname in mdt.data.RESIDUE_BONDS: + _assign_hydrogen_names_from_ccd(residue) + else: + _assign_unique_hydrogen_names_in_order(residue) + + residue.rebuild() + + +def _assign_hydrogen_names_from_ccd(residue): + ccd_bonds = mdt.data.RESIDUE_BONDS[residue.resname] + taken = set(atom.name for atom in residue.atoms) + + if 'H' not in taken: + return # nothing to do + if 'H' in ccd_bonds: + taken.remove('H') # someone will actually need to be named "H' + + for atom in residue: + if atom.atnum != 1 or atom.name != 'H': + continue + assert atom.num_bonds == 1, 'Hydrogen has more than one bond' + bond = atom.bonds[0] + other = bond.partner(atom).name + for partner in ccd_bonds[other]: + if partner[0] == 'H' and partner not in taken: + assert ccd_bonds[other][partner] == 1, 'Hydrogen bond order is not 1' + atom.name = partner + taken.add(partner) + break + + +def _assign_unique_hydrogen_names_in_order(residue): + n_hydrogen = 1 + namecounts = collections.Counter(x.name for x in residue.atoms) + if namecounts.get('H', 0) > 1: + used_names = set(atom.name for atom in residue.atoms) + for atom in residue.atoms: + if atom.name == 'H': + name = 'H%d' % n_hydrogen + while name in used_names: + n_hydrogen += 1 + name = 'H%d' % n_hydrogen + atom.name = name + used_names.add(name) diff --git a/moldesign/interfaces/openbabel.py b/moldesign/interfaces/openbabel.py index 83061c9..14e94d0 100644 --- a/moldesign/interfaces/openbabel.py +++ b/moldesign/interfaces/openbabel.py @@ -15,6 +15,7 @@ import os import string +import collections import moldesign.molecules.atomcollections @@ -164,10 +165,10 @@ def add_hydrogen(mol): Returns: moldesign.Molecule: New molecule with all valences saturated """ - # TODO: pH, formal charges pbmol = mol_to_pybel(mol) pbmol.addh() newmol = pybel_to_mol(pbmol) + mdt.helpers.assign_unique_hydrogen_names(newmol) return newmol @@ -198,15 +199,15 @@ def mol_to_pybel(mdtmol): if atom.residue and atom.residue not in resmap: obres = obmol.NewResidue() resmap[atom.residue] = obres - obres.SetChain(atom.chain.name[0]) - obres.SetName(atom.residue.pdbname) + obres.SetChain(bytes(atom.chain.name[0])) + obres.SetName(bytes(atom.residue.pdbname)) obres.SetNum(atom.residue.pdbindex) else: obres = resmap[atom.residue] obres.AddAtom(obatom) obres.SetHetAtom(obatom, not atom.residue.is_standard_residue) - obres.SetAtomID(obatom, atom.name) + obres.SetAtomID(obatom, bytes(atom.name)) obres.SetSerialNum(obatom, mdt.utils.if_not_none(atom.pdbindex, atom.index+1)) diff --git a/moldesign/molecules/biounits.py b/moldesign/molecules/biounits.py index 7b17ecb..4c31345 100644 --- a/moldesign/molecules/biounits.py +++ b/moldesign/molecules/biounits.py @@ -90,6 +90,9 @@ def atoms(self): """ return AtomList(self.iteratoms()) + def rebuild(self): + self._childbyname = {obj.name: obj for obj in self._childinorder} + def _sortkey(x): return x.pdbindex @@ -114,6 +117,7 @@ class Entity(AtomContainer): __iter__ = utils.Alias('children.__iter__') atoms = utils.Alias('children.atoms') iteratoms = utils.Alias('children.iteratoms') + rebuild = utils.Alias('children.rebuild') def __init__(self, name=None, molecule=None, index=None, pdbname=None, pdbindex=None, **kwargs): diff --git a/moldesign/utils/databases.py b/moldesign/utils/databases.py index 2864d2a..ab74b41 100644 --- a/moldesign/utils/databases.py +++ b/moldesign/utils/databases.py @@ -16,6 +16,8 @@ import json import zlib +from . import Alias + class CompressedJsonDbm(object): """ Quick-and-dirty interface to a DBM file @@ -44,6 +46,8 @@ def __setitem__(self, key, value): gzvalue = zlib.compress(json.dumps(value)) self.db[key] = gzvalue + __contains__ = Alias('db.__contains__') + class ReadOnlyDumb(dumbdbm._Database): """ A read-only subclass of dumbdbm From 342a0ac4a0ff0993c834385c9ad9a56090a5fc9b Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Wed, 21 Sep 2016 16:52:37 -0700 Subject: [PATCH 52/64] Clean up QM data structures and reogranize QM tutorials --- moldesign/__init__.py | 1 + ...Example 2. Running Quantum Chemistry.ipynb | 216 ++++++------------ .../Tutorial 1. Making a molecule.ipynb | 5 +- .../Tutorial 2. Biochemical basics.ipynb | 15 +- moldesign/exceptions.py | 9 +- moldesign/models/models.py | 34 ++- moldesign/models/pyscf.py | 10 +- moldesign/orbitals/basis.py | 7 +- moldesign/orbitals/orbitals.py | 3 - moldesign/orbitals/wfn.py | 9 +- moldesign/parameters.py | 12 - moldesign/units/quantity.py | 3 + 12 files changed, 134 insertions(+), 190 deletions(-) diff --git a/moldesign/__init__.py b/moldesign/__init__.py index 1cfa0ac..9136ca8 100644 --- a/moldesign/__init__.py +++ b/moldesign/__init__.py @@ -50,6 +50,7 @@ # Populate the top-level namespace (imports everything from each .__all__ variable) +from .exceptions import * from .fileio import * from .forcefields import * from .geom import * diff --git a/moldesign/_notebooks/Example 2. Running Quantum Chemistry.ipynb b/moldesign/_notebooks/Example 2. Running Quantum Chemistry.ipynb index b28b058..2e02282 100644 --- a/moldesign/_notebooks/Example 2. Running Quantum Chemistry.ipynb +++ b/moldesign/_notebooks/Example 2. Running Quantum Chemistry.ipynb @@ -13,11 +13,11 @@ "\n", "![Molecular Design Toolkit](img/Top.png)\n", "
    \n", - "

    Example 2: Orbitals, Wavefunctions, and Potential Energy Surfaces

    \n", + "

    Example 2: Calculating a torsional barrier

    \n", "\n", "---\n", "\n", - "This notebook shows a few different ways that Molecular Design Toolkit can be used to run and visualize electronic structure calculations.\n", + "This notebook shows how to use constrained minimizations to calculate barriers to torsional rotation.\n", "\n", " - _Author_: [Aaron Virshup](https://github.com/avirshup), Autodesk Research
    \n", " - _Created on_: July 1, 2016\n", @@ -51,37 +51,18 @@ "

    Contents

    \n", "\n", "---\n", - "\n", - " - [I. Molecular hydrogen](#I.-Molecular-hydrogen)\n", - " - [A. Build the molecule](#A.-Build-the-molecule)\n", - " - [B. Run a hartree-fock calculation](#B.-Run-a-hartree-fock-calculation)\n", - " - [C. Visualize the orbitals](#C.-Visualize-the-orbitals)\n", - " - [D. Minimize the energy](#D.-Minimize-the-energy)\n", - " - [E. Scan the potential energy surface](#E.-Scan-the-potential-energy-surface)\n", - " - [II. Butadiene](#II.-Butadiene)\n", - " - [A. Build the molecule and calculate its energy](#A.-Build-the-molecule-and-calculate-its-energy)\n", - " - [B. Select a bond](#B.-Select-a-bond)\n", - " - [C. Calculate the initial dihedral angle](#C.-Calculate-the-initial-dihedral-angle)\n", - " - [D. Scan over the dihedral angle](#D.-Scan-over-the-dihedral-angle)\n", - " - [E. Minimize the new form](#E.-Minimize-the-new-form)\n", - " - [III. Advanced topics](#III.-Advanced-topics)\n", - " - [A. Symmetry](#A.-Symmetry)\n", - " - [B. Examining the wavefunction](#B.-Examining-the-wavefunction)" + "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## I. Molecular hydrogen\n", - "\n", - "### A. Build the molecule\n", - "This cell builds H2 by creating the two atoms, and explicitly setting their positions.\n", + "## I. Build butadiene\n", + "This example deals with butadiene, a slightly larger molecule. Here, we'll scan its potential energy surface over its central dihedral angle.\n", "\n", - "**Try editing this cell to**:\n", - " * Create HeH+\n", - " * Create H3+\n", - " * Change the atoms' initial positions" + "### A. Build the molecule and calculate its energy\n", + "The following code cell uses a SMILES string to create the molecule." ] }, { @@ -92,48 +73,27 @@ }, "outputs": [], "source": [ - "atom1 = mdt.Atom('H')\n", - "atom2 = mdt.Atom('H')\n", - "atom1.bond_to(atom2,1)\n", - "atom2.x = 2.0 * u.angstrom\n", - "\n", - "h2 = mdt.Molecule([atom1,atom2], name='H2', charge=0)\n", - "h2.draw(height=300)" + "mol = mdt.from_smiles('C=CC=C')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### B. Run a hartree-fock calculation\n", - "The next cell adds the RHF energy model to our molecule, then triggers a calculation.\n", + "### B. Break symmetry\n", "\n", - "**Try editing this cell to**:\n", - " * Change the atomic basis\n", - " * Get a list of other available energy models (type `mdt.models.` and then hit the `[tab]` key)" + "Note that there's a fair amount of symmetry in this molecule, which can prevent the optimizer from finding the correct minimum. It's often necessary to introduce a little geometric noise into the geometry before minimizing. In the case, I recommend adjusting the dihedral angles around the two double bonds." ] }, { "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": true }, "outputs": [], "source": [ - "h2.set_energy_model(mdt.models.RHF, basis='3-21g')\n", - "h2.calculate()\n", - "\n", - "print 'Calculated properties:', h2.properties.keys()\n", - "print 'Potential energy:', h2.potential_energy" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### C. Visualize the orbitals\n", - "After running the calculation, we have enough information to visualize the molecular orbitals." + "mdt.widgets.GeometryBuilder(mol)" ] }, { @@ -144,36 +104,28 @@ }, "outputs": [], "source": [ - "h2.draw_orbitals()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### D. Minimize the energy\n", - "Here, we'll run a quick energy minimization then visualize how the hydrogen nuclei AND the atomic wavefunctions changed." + "mol.set_energy_model(mdt.models.RHF, basis='sto-3g')\n", + "min_traj = mol.minimize(nsteps=100)\n", + "min_traj.draw_orbitals()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false, - "scrolled": true + "collapsed": false }, "outputs": [], "source": [ - "minimization = h2.minimize(frame_interval=1, nsteps=10)\n", - "minimization.draw_orbitals()" + "selector = mdt.widgets.BondSelector(mol)\n", + "selector" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### E. Scan the potential energy surface\n", - "This cell calculates the potential energy at a series of interatomic separations, from 0.3 to 7.0 Ã…; the results are collections in a `Trajectory` object, named `scan` here." + "We've stored this bond to use in the next step - it can be programatically accessed using `selector.selected_bonds`:" ] }, { @@ -184,50 +136,25 @@ }, "outputs": [], "source": [ - "distances = np.arange(0.3,7.0,0.5)*u.angstrom\n", - "scan = mdt.Trajectory(h2)\n", - "h2.atoms[0].x = 0.0*u.angstrom\n", - "for r in distances:\n", - " h2.atoms[1].x = r\n", - " h2.calc_potential_energy()\n", - " scan.new_frame(annotation='Separation: %s'%r)\n", - "\n", - "scan.draw_orbitals()" + "bond = selector.selected_bonds[0]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "The results can also be plotted directly in `matplotlib`:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "plot(distances, scan.potential_energy)\n", - "xlabel('separation / ang'); ylabel('energy / eV')\n", + "# II. Rigid torsion scan\n", "\n", - "figure()\n", - "plot(distances, scan.atoms[0].mulliken, label='atom 1 partial charge')\n", - "plot(distances, scan.atoms[1].mulliken, label='atom 2 partial charge')\n", - "xlabel('separation / ang'); ylabel('partial charge'); legend()" + "First, we'll rotate the molecule around the selected bond WITHOUT allowing the molecule to relax. This will produce an upper limit on the size of the torsional barrier." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## II. Butadiene\n", - "This example deals with butadiene, a slightly larger molecule. Here, we'll scan its potential energy surface over its central dihedral angle.\n", + "### A. Create a dihedral object\n", "\n", - "### A. Build the molecule and calculate its energy\n", - "The following code cell uses a SMILES string to create the molecule." + "To make this easier, we'll create a `DihedralMonitor` object to keep track of this dihedral angle." ] }, { @@ -238,20 +165,17 @@ }, "outputs": [], "source": [ - "mol = mdt.from_smiles('C=CC=C')\n", - "mol.set_energy_model(mdt.models.RHF(basis='sto-3g'))\n", - "result = mol.calculate(['potential_energy','orbitals'], wait=True)\n", - "\n", - "print 'Potential energy:',result.potential_energy.to(u.kcalpermol)\n", - "mol.draw_orbitals()" + "dihedral = mdt.DihedralMonitor(selector.selected_bonds[0])\n", + "print 'Dihedral:', dihedral.value" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### B. Select a bond\n", - "Next, we pull up an interactive widget to select a specific bond." + "### B. Scan over the dihedral angle\n", + "\n", + "Next, we'll rotate the dihedral from 0 to 180º, calculating the potential energy as we do:" ] }, { @@ -262,15 +186,13 @@ }, "outputs": [], "source": [ - "selector = mdt.widgets.BondSelector(mol)\n", - "selector" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Click on any bond you like in the above widget. We can programatically access that selection using `selector.selected_bonds`:" + "rigid = mdt.Trajectory(mol)\n", + "\n", + "angles = np.linspace(0, 180, 8)*u.degrees\n", + "for angle in angles:\n", + " dihedral.value = angle\n", + " mol.calculate()\n", + " rigid.new_frame(annotation='dihedral:%s' % angle) " ] }, { @@ -281,15 +203,14 @@ }, "outputs": [], "source": [ - "selector.selected_bonds" + "rigid.draw_orbitals()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### C. Calculate the initial dihedral angle\n", - "Next, we'll gather the four atoms involved in the central dihedral and calculate the current angle." + "Here's the potential energy as a function of the twist angle. Note that the molecule is symmetric around 180º." ] }, { @@ -300,55 +221,64 @@ }, "outputs": [], "source": [ - "dihedral = mdt.DihedralMonitor(selector.selected_bonds[0])\n", - "print 'Dihedral:', dihedral.value" + "plot(angles, rigid.potential_energy)" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "collapsed": false + }, "source": [ - "### D. Scan over the dihedral angle\n", + "# III. Relaxed scan\n", "\n", - "This code loops over values of the dihedral angle from 180º to 360º, calcualting the wavefunction along the way." + "The previous calculation didn't allow the molecule to relax during the calculation. Here, we'll repeat the process, but doing a _constrained minimization_ at every step - we'll allow all degrees of freedom *except the dihedral angle* to relax.\n", + "\n", + "This will take a lot longer than before. We also need to break symmetry; and so add a small amount of gaussian noise before each minimization." ] }, { "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": true }, "outputs": [], "source": [ - "traj = mdt.Trajectory(mol)\n", - "traj.new_frame()\n", - "for angle in np.arange(180, 360.0, 15.0)*u.degrees:\n", - " dihedral.value = angle\n", - " mol.calculate()\n", - " traj.new_frame(annotation='dihedral:%s' % angle) " + "mdt.widgets.GeometryBuilder(mol)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": false + "collapsed": true }, "outputs": [], "source": [ - "traj.draw_orbitals()" + "mol.positions = rigid.positions[0]\n", + "mol.clear_constraints()" ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": null, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": false }, + "outputs": [], "source": [ - "### E. Minimize the new form\n", + "relax = mdt.Trajectory(mol)\n", + "constraint = dihedral.constrain()\n", "\n", - "In the new *cis* form, we search for a new energy minimum:" + "angles = np.linspace(0, 180, 6)*u.degrees\n", + "for angle in angles:\n", + " dihedral.value = angle\n", + " constraint.value = angle\n", + " mol.minimize()\n", + " \n", + " relax.new_frame(annotation='dihedral:%s' % angle) " ] }, { @@ -359,7 +289,7 @@ }, "outputs": [], "source": [ - "mintraj = mol.minimize(frame_interval=1)" + "relax.draw_orbitals()" ] }, { @@ -370,8 +300,9 @@ }, "outputs": [], "source": [ - "plot(mintraj.potential_energy); ylabel('energy / eV')\n", - "mintraj.draw_orbitals()" + "plot(np.linspace(0, 180, 6), relax.potential_energy, label='relax')\n", + "plot(np.linspace(0, 180, 8), rigid.potential_energy, label='rigid')\n", + "legend()" ] }, { @@ -391,15 +322,6 @@ "First, let's look at the simplest possible organic molecule, methane. Its simplicity actually leads to some very complex symmetry." ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [] - }, { "cell_type": "code", "execution_count": null, diff --git a/moldesign/_notebooks/Tutorial 1. Making a molecule.ipynb b/moldesign/_notebooks/Tutorial 1. Making a molecule.ipynb index e72d771..95d7fd6 100644 --- a/moldesign/_notebooks/Tutorial 1. Making a molecule.ipynb +++ b/moldesign/_notebooks/Tutorial 1. Making a molecule.ipynb @@ -4,7 +4,6 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", "About      Forum      Issues      Tutorials      Documentation\n", "\n", "![Molecular Design Toolkit](img/Top.png)\n", @@ -12,7 +11,7 @@ "\n", "

    Tutorial 1: Making a molecule

    \n", "\n", - "This notebook gets you started with MDT - you'll build a molecule, visualize it, and look inside." + "This notebook gets you started with MDT - you'll build a small molecule, visualize it, and run a basic calculation." ] }, { @@ -293,4 +292,4 @@ }, "nbformat": 4, "nbformat_minor": 0 -} +} \ No newline at end of file diff --git a/moldesign/_notebooks/Tutorial 2. Biochemical basics.ipynb b/moldesign/_notebooks/Tutorial 2. Biochemical basics.ipynb index 2f5ae80..ad8d731 100644 --- a/moldesign/_notebooks/Tutorial 2. Biochemical basics.ipynb +++ b/moldesign/_notebooks/Tutorial 2. Biochemical basics.ipynb @@ -13,7 +13,7 @@ "\n", "

    Tutorial 2: Playing with proteins

    \n", "\n", - "Here, you'll see how to get, visualize, and analyze static protein structures." + "Here, you'll see how to build, visualize, and simulate a protein structure from the PDB." ] }, { @@ -137,11 +137,11 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": false }, "outputs": [], "source": [ - "mintraj.draw()" + "mintraj.draw(display=False)" ] }, { @@ -231,6 +231,15 @@ "plt.figure()\n", "plt.plot(traj.time, traj.distance(myres['CG'], myres['CB'])); plt.title('bond length vs time')" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/moldesign/exceptions.py b/moldesign/exceptions.py index b14ec60..9382481 100644 --- a/moldesign/exceptions.py +++ b/moldesign/exceptions.py @@ -12,8 +12,9 @@ # See the License for the specific language governing permissions and # limitations under the License. -class NoConvergence(Exception): - """ Raised when an iterative property calculation fails to converge """ + +class ConvergenceFailure(Exception): + """ Raised when an iterative calculation fails to converge """ pass @@ -27,3 +28,7 @@ def __init__(self, atom): self.message = 'Atom %s has unhandled valence: %d' % (atom, atom.valence) +class QMConvergenceError(Exception): + """ Raised when an iterative QM calculation (typically SCF) fails to converge + """ + pass diff --git a/moldesign/models/models.py b/moldesign/models/models.py index 1b2f2ea..12c9b74 100644 --- a/moldesign/models/models.py +++ b/moldesign/models/models.py @@ -20,6 +20,7 @@ Currently, everything here is an alias. However, more complicated logic (including runtime dispatch) may be used to determine the best implementation in a given situation """ +from moldesign import utils from . import PySCFPotential from . import OpenMMPotential @@ -34,27 +35,40 @@ def exports(o): ################## # ForceField @exports -def ForceField(**kwargs): - return OpenMMPotential(**kwargs) +class ForceField(OpenMMPotential): + pass # currently an alias ################## # QM generics @exports -def RHF(**kwargs): - return PySCFPotential(theory='rhf', **kwargs) +class RHF(PySCFPotential): + @utils.doc_inherit + def __init__(self, *args, **kwargs): + kwargs['theory'] = 'rhf' + super(RHF, self).__init__(*args, **kwargs) @exports -def DFT(**kwargs): - return PySCFPotential(theory='rks', **kwargs) +class DFT(PySCFPotential): + @utils.doc_inherit + def __init__(self, *args, **kwargs): + kwargs['theory'] = 'rks' + super(DFT, self).__init__(*args, **kwargs) @exports -def B3LYP(**kwargs): - return PySCFPotential(theory='rks', funtional='b3lyp', **kwargs) +class B3LYP(PySCFPotential): + @utils.doc_inherit + def __init__(self, *args, **kwargs): + kwargs['theory'] = 'rks' + kwargs['functional'] = 'b3lyp' + super(B3LYP, self).__init__(*args, **kwargs) @exports -def MP2(**kwargs): - return PySCFPotential(theory='mp2', **kwargs) +class MP2(PySCFPotential): + @utils.doc_inherit + def __init__(self, *args, **kwargs): + kwargs['theory'] = 'mp2' + super(MP2, self).__init__(*args, **kwargs) diff --git a/moldesign/models/pyscf.py b/moldesign/models/pyscf.py index 57e81e1..6ea5ca9 100644 --- a/moldesign/models/pyscf.py +++ b/moldesign/models/pyscf.py @@ -15,8 +15,9 @@ from cStringIO import StringIO -import itertools -from moldesign import units as u, compute, orbitals +import moldesign as mdt +from moldesign import units as u +from moldesign import compute, orbitals from moldesign.interfaces.pyscf_interface import force_remote, mol_to_pyscf, \ StatusLogger, SPHERICAL_NAMES from .base import QMBase @@ -222,7 +223,8 @@ def _get_properties(self, ref, kernel, grad): self.pyscfmol.nelectron, aobasis=basis, fock_ao=scf_matrices['fock_ao'], - density_matrix_ao=scf_matrices['density_matrix_ao']) + density_matrix_ao=scf_matrices['density_matrix_ao'], + description=self.theoryname) # Build and store the canonical orbitals cmos = [] @@ -304,7 +306,7 @@ def _converge(self, method, dm0=None): if method.converged: return method, failed - raise orbitals.ConvergenceError(method) + raise mdt.QMConvergenceError(method) def _build_theory(self, name, refobj): if name in ('mscscf', 'casci', 'casscf'): diff --git a/moldesign/orbitals/basis.py b/moldesign/orbitals/basis.py index 4a24580..090b13f 100644 --- a/moldesign/orbitals/basis.py +++ b/moldesign/orbitals/basis.py @@ -96,4 +96,9 @@ def __repr__(self): @property def fock(self): - return self.wfn.fock_ao \ No newline at end of file + return self.wfn.fock_ao + + @property + def density_matrix(self): + return self.wfn.density_matrix_ao + diff --git a/moldesign/orbitals/orbitals.py b/moldesign/orbitals/orbitals.py index ab0501d..188db9b 100644 --- a/moldesign/orbitals/orbitals.py +++ b/moldesign/orbitals/orbitals.py @@ -46,9 +46,6 @@ 'yz^2': (3, -1)} -class ConvergenceError(Exception): pass - - class Orbital(object): r""" Stores a single orbital and its meta-data diff --git a/moldesign/orbitals/wfn.py b/moldesign/orbitals/wfn.py index 4ceaaf4..ca34158 100644 --- a/moldesign/orbitals/wfn.py +++ b/moldesign/orbitals/wfn.py @@ -29,12 +29,13 @@ class ElectronicWfn(object): Args: mol (moldesign.Molecule): Molecule this wavefunction belongs to num_electrons (int): number of electrons in this wavefunction - theory (moldesign.models.base.EnergyModelBase): The model this wavefunction was created with + model (moldesign.models.base.EnergyModelBase): The model this wavefunction was created with aobasis (moldesign.orbitals.BasisSet): The basis functions for the enclosed orbitals nbasis (int): number of AO basis functions fock_ao (moldesign.units.Array[energy]): fock matrix in the AO basis positions (moldesign.units.Array[length]): positions of the nuclei for this wfn civectors (np.ndarray): CI vectors (if applicable) + description (str): text describing the wfn (e.g. 'RHF/STO-3G', 'CAS(2,2)/SA3/6-31G**') density_matrix_ao (np.ndarray): density matrix in the ao basis """ @@ -43,6 +44,7 @@ def __init__(self, mol, num_electrons, aobasis=None, fock_ao=None, positions=None, civectors=None, + description=None, density_matrix_ao=None): self.mol = mol self.model = model @@ -59,6 +61,7 @@ def __init__(self, mol, num_electrons, self.lumo = self.homo + 1 self._has_canonical = False self.density_matrix_ao = density_matrix_ao + self.description = description if positions is None: self.positions = mol.positions.copy() @@ -77,10 +80,6 @@ def __repr__(self): def __str__(self): return '%s wfn' % self.description - @property - def description(self): - return '%s/%s' % (self.model, self.aobasis.basisname) - def set_canonical_mos(self, orbs): if orbs.wfn is None: orbs.wfn = self diff --git a/moldesign/parameters.py b/moldesign/parameters.py index c0db7a6..25ec4ed 100644 --- a/moldesign/parameters.py +++ b/moldesign/parameters.py @@ -24,18 +24,6 @@ from moldesign import utils -class ForceField(object): - """Generalized force field type (blank for now)""" -class BasisSet(object): - """Generalized basis set type (blank for now""" -class ElectronicWfn(object): - """Generalized orbital storage (blank for now)""" -class QMTheory(object): - """Generalized QM type (blank for now)""" -class SymmetryGroup(object): - """Generalized symmetry type (blank for now)""" - - def isin(a, b): return a in b diff --git a/moldesign/units/quantity.py b/moldesign/units/quantity.py index 677814f..643ff05 100644 --- a/moldesign/units/quantity.py +++ b/moldesign/units/quantity.py @@ -154,6 +154,9 @@ def norm(self): units = self.get_units() return units * np.linalg.norm(self._magnitude) + def normalized(self): + return self/self.norm() + def dot(self, other): """ Dot product that correctly multiplies units From 66837c3b29c5416c94397af768a26ba8d0580269 Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Wed, 21 Sep 2016 17:52:18 -0700 Subject: [PATCH 53/64] Add constraints and backtracking line search to steepest descent --- moldesign/geom/constraints.py | 4 +- moldesign/geom/shake.py | 7 +- moldesign/min/base.py | 19 +++--- moldesign/min/descent.py | 120 ++++++++++++++++++++++++---------- moldesign/min/smart.py | 3 +- 5 files changed, 102 insertions(+), 51 deletions(-) diff --git a/moldesign/geom/constraints.py b/moldesign/geom/constraints.py index 06bd515..e75fe62 100644 --- a/moldesign/geom/constraints.py +++ b/moldesign/geom/constraints.py @@ -20,9 +20,9 @@ from .grads import * from .grads import _atom_grad_to_mol_grad -DIST_TOLERANCE = 1.0e-3 * u.angstrom +DIST_TOLERANCE = 1.0e-6 * u.angstrom DIST_FORCE_CONSTANT = 1000.0 * u.kcalpermol / (u.angstrom**2) -ANGLE_TOLERANCE = 0.75 * u.degrees +ANGLE_TOLERANCE = 1.0e-4 * u.degrees ANGLE_FORCE_CONSTANT = 1500.0 * u.kcalpermol / (u.radians**2) diff --git a/moldesign/geom/shake.py b/moldesign/geom/shake.py index 60c5bd7..4030cd5 100644 --- a/moldesign/geom/shake.py +++ b/moldesign/geom/shake.py @@ -18,6 +18,8 @@ from .constraints import FixedCoordinate, FixedPosition +# TODO: create dynamics wrapper that uses timestep to explicitly calculate constraint forces + def shake_positions(mol, prev_positions, max_cycles=100, use_masses=True): """ Satisfy all molecular constraints using the SHAKE algorithm @@ -35,7 +37,6 @@ def shake_positions(mol, prev_positions, max_cycles=100, use_masses=True): Eur Phys J Spec Top. 2011 Nov 1; 200(1): 211. doi:10.1140/epjst/e2011-01525-9 """ - # TODO: store constraint forces in the molecule constraints = [] for c in mol.constraints: # Replace FixedPosition with 3 FixedCoordinates - it's better behaved if isinstance(c, FixedPosition): @@ -86,8 +87,8 @@ def shake_positions(mol, prev_positions, max_cycles=100, use_masses=True): mol.positions -= delta/dim_masses else: - raise mdt.exceptions.NoConvergence('SHAKE did not converge after %d iterations' % - max_cycles) + raise mdt.ConvergenceFailure('SHAKE did not converge after %d iterations'% + max_cycles) def _clean_grad_array(a): diff --git a/moldesign/min/base.py b/moldesign/min/base.py index b7bea4e..2cd367a 100644 --- a/moldesign/min/base.py +++ b/moldesign/min/base.py @@ -23,12 +23,10 @@ class MinimizerBase(object): _strip_units = True # callbacks expect and return dimensionless quantities scaled to default unit system - constraint_restraints = True # if True, add restraint penalties for both constraints and restraints def __init__(self, mol, nsteps=20, force_tolerance=data.DEFAULT_FORCE_TOLERANCE, frame_interval=None, - restraint_multiplier=1.0, _restart_from=0, _restart_energy=None): self.mol = mol @@ -51,7 +49,6 @@ def __init__(self, mol, nsteps=20, # Figure out whether we'll use gradients self.request_list = ['potential_energy'] - self.restraint_multiplier = restraint_multiplier if 'forces' in mol.energy_model.ALL_PROPERTIES: self.gradtype = 'analytical' self.request_list.append('forces') @@ -72,7 +69,7 @@ def _sync_positions(self, vector): def _coords_to_vector(self, coords): """ Convert position array to a flat vector """ - vec = coords.reshape(self.mol.num_atoms * 3) + vec = coords.reshape(self.mol.num_atoms * 3).copy() if self._strip_units: return vec.magnitude else: @@ -82,12 +79,12 @@ def objective(self, vector): """ Callback function to calculate the objective function """ self._sync_positions(vector) - self.mol.calculate(requests=self.request_list) - pot = self.mol.potential_energy + try: + self.mol.calculate(requests=self.request_list) + except mdt.QMConvergenceError: # returning infinity can help rescue some line searches + return np.inf - if self.constraint_restraints: - for constraint in self.mol.constraints: - pot += self.restraint_multiplier * constraint.restraint_penalty() + pot = self.mol.potential_energy if self._initial_energy is None: self._initial_energy = pot self._last_energy = pot @@ -154,13 +151,13 @@ def callback(self, *args): rmsf=np.sqrt(force.dot(force) / self.mol.ndims), mf=np.abs(force).max())) - if self.constraint_restraints and self.mol.constraints: + if self.mol.constraints: nsatisfied = 0 for c in self.mol.constraints: if c.satisfied(): nsatisfied += 1 message.append('constraints:%d/%d' % (nsatisfied, len(self.mol.constraints))) - print ', '.join(message) + print(', '.join(message)) sys.stdout.flush() @classmethod diff --git a/moldesign/min/descent.py b/moldesign/min/descent.py index 6b89b78..634569e 100644 --- a/moldesign/min/descent.py +++ b/moldesign/min/descent.py @@ -13,6 +13,7 @@ # limitations under the License. import numpy as np +import moldesign as mdt from moldesign import utils from moldesign import units as u from .base import MinimizerBase @@ -30,64 +31,117 @@ class GradientDescent(MinimizerBase): """ A careful (perhaps overly careful) gradient descent implementation designed to relax structures far from equilibrium. - The structure is adjusted along the force direction, but the step size is capped by - ``max_atom_move`` (.075 angstrom by default). If the energy increases after a move, - the move is repeated with half the step size. + A backtracking line search is performed along the steepest gradient direction. + + The maximum move for any single atom is also limited by ``max_atom_move`` Note: This algorithm is good at stably removing large forces, but it's very poorly suited to - locating any type of critical point. + locating any type of critical point; don't use this to find a minimum! + + References: + https://www.math.washington.edu/~burke/crs/408/lectures/L7-line-search.pdf + + Args: + mol (moldesign.Molecule): molecule to minimize + max_atom_move (Scalar[length]): maximum displacement of a single atom + scaling (Scalar[length/force]): unit of displacement per unit force + gamma (float): number between 0 and 1 indicating scale factor for backtracking search + control (float): threshold for terminating line search; this is a proportion + (0<=``control``<=1) of the expected function decrease + **kwargs (dict): kwargs from :class:`MinimizerBase` """ _strip_units = False - @utils.args_from(MinimizerBase, - inject_kwargs={'max_atom_move': 0.075*u.angstrom, - 'gamma': 0.05*(u.angstrom**2)/u.eV}) - def __init__(self, mol, max_atom_move=0.075*u.angstrom, - gamma=0.05*(u.angstrom ** 2)/u.eV, + def __init__(self, mol, + max_atom_move=0.05*u.angstrom, + scaling=0.01*u.angstrom**2/u.eV, + gamma=0.4, control=0.25, **kwargs): - """ - :param max_atom_move: Maximum amount to move an atom - """ super(GradientDescent, self).__init__(mol, **kwargs) assert 'forces' in self.request_list, 'Gradient descent built-in gradients' self.max_atom_move = max_atom_move + self.scaling = scaling self.gamma = gamma + self.control = control self._last_energy = None def run(self): print 'Starting geometry optimization: built-in gradient descent' - lastproperties = self.mol.calculate() lastenergy = self.objective(self._coords_to_vector(self.mol.positions)) current = self._coords_to_vector(self.mol.positions) for i in xrange(self.nsteps): grad = self.grad(current) - if np.abs(grad.max()) < self.force_tolerance: + if np.abs(grad.max()) < self.force_tolerance: # converged return - move = -self.gamma * grad - mmax = np.abs(move).max() - if mmax > self.max_atom_move: # rescale the move - scale = self.max_atom_move / mmax - #print 'Move too big: scaling step by {scale.magnitude:.6f}'.format(scale=scale) - move *= scale - current += move - newenergy = self.objective(current) - if newenergy > lastenergy: - print 'Energy increased by {x.magnitude:.3e} {x.units}!'.format( - x=(newenergy-lastenergy)) + \ - ' Reverting to previous step and reducing step size.' - self.gamma /= 2.0 - self.max_atom_move /= 2.0 - self.mol.positions = lastproperties.positions - self.mol.properties = lastproperties - else: # update with new positions - self._sync_positions(current) - lastproperties = self.mol.calculate(self.request_list) + + move = self.scale_move(grad) + armijo_goldstein_prefac = self.control * move.norm() + + for icycle in xrange(0, 10): + g = self.gamma**icycle + newpos = self._make_move(current, g * move) + + # move direction may be different than gradient direction due to constraints + move_vec = (newpos-current).normalized() + if grad.dot(move_vec) >= 0.0: # move flipped direction! Why? + if self._constraint_convergence(newpos, current, grad): + return # we're converged + else: # move was too big, keep going + newenergy = np.inf * u.default.energy + continue + + try: + newenergy = self.objective(newpos) + except mdt.QMConvergenceError: + continue + + if newenergy <= lastenergy + g * armijo_goldstein_prefac * grad.dot(move_vec): + break + else: + if newenergy >= lastenergy: + raise mdt.ConvergenceFailure('Line search failed') + + if self._constraint_convergence(newpos, current, grad): + return + else: + current = newpos lastenergy = newenergy + self._sync_positions(current) + self.callback() + def scale_move(self, grad): + move = -self.scaling*grad + mmax = np.abs(move).max() + if mmax > self.max_atom_move: # rescale the move + move *= self.max_atom_move/mmax + return move + + def _make_move(self, current, move): + if self.mol.constraints: + # TODO: get constraint forces from lagrange multipliers and use them to check for convergence + self._sync_positions(current) + prev = self.mol.positions.copy() + self._sync_positions(current+move) + + mdt.geom.shake_positions(self.mol, prev) + return self._coords_to_vector(self.mol.positions) + else: + return current + move + + def _constraint_convergence(self, pos, lastpos, energygrad): + """ Test for force-based convergence after projecting out constraint forces + + Until the shake method starts explicitly storing constraint forces, we calculate this + direction as the SHAKE-adjusted displacement vector from the current descent step + """ + direction = mdt.mathutils.normalized((pos - lastpos).flatten()) + proj_grad = energygrad.dot(direction) + return abs(proj_grad) < self.force_tolerance + gradient_descent = GradientDescent._as_function('gradient_descent') exports(gradient_descent) diff --git a/moldesign/min/smart.py b/moldesign/min/smart.py index f0edc56..a667f6b 100644 --- a/moldesign/min/smart.py +++ b/moldesign/min/smart.py @@ -50,11 +50,10 @@ def __init__(self, *args, **kwargs): self.kwargs = kwargs super(SmartMin, self).__init__(*args, **kwargs) - def run(self): # If forces are already low, go directly to the quadratic convergence methods and return forces = self.mol.calculate_forces() - if forces.max() <= self.gd_threshold: + if abs(forces).max() <= self.gd_threshold: spmin = self._make_quadratic_method() spmin.run() self.traj = spmin.traj From 0a17eb3686424570a67cccef15e8727fc66b6bcc Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Wed, 21 Sep 2016 23:09:49 -0700 Subject: [PATCH 54/64] Add GAFF / constrained minimization example, many tiny updates to support it --- .../Example 1. Build and simulate DNA.ipynb | 12 +- .../Example 5. Enthalpic barriers.ipynb | 268 ++++++++++++++++++ moldesign/geom/monitor.py | 1 + moldesign/integrators/openmm.py | 12 +- moldesign/interfaces/ambertools.py | 29 +- moldesign/min/descent.py | 6 +- moldesign/models/__init__.py | 1 + moldesign/models/amber.py | 56 ++++ moldesign/models/openmm.py | 24 +- 9 files changed, 382 insertions(+), 27 deletions(-) create mode 100644 moldesign/_notebooks/Example 5. Enthalpic barriers.ipynb create mode 100644 moldesign/models/amber.py diff --git a/moldesign/_notebooks/Example 1. Build and simulate DNA.ipynb b/moldesign/_notebooks/Example 1. Build and simulate DNA.ipynb index c78d295..2ecfa0a 100644 --- a/moldesign/_notebooks/Example 1. Build and simulate DNA.ipynb +++ b/moldesign/_notebooks/Example 1. Build and simulate DNA.ipynb @@ -4,7 +4,6 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", "About      Forum      Issues      Tutorials      Documentation\n", "\n", "![Molecular Design Toolkit](img/Top.png)\n", @@ -288,7 +287,7 @@ "plot(traj.time, traj.potential_energy - traj.potential_energy[0], label='potential_energy')\n", "xlabel('time / {time.units}'.format(time=traj.time))\n", "ylabel('energy / {energy.units}'.format(energy=traj.kinetic_energy))\n", - "title('Energy vs. time'); grid()\n", + "title('Energy vs. time')\n", "legend(loc='center right')" ] }, @@ -329,6 +328,15 @@ "interact_manual(plot_rmsd)\n", "rs" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/moldesign/_notebooks/Example 5. Enthalpic barriers.ipynb b/moldesign/_notebooks/Example 5. Enthalpic barriers.ipynb new file mode 100644 index 0000000..be4b237 --- /dev/null +++ b/moldesign/_notebooks/Example 5. Enthalpic barriers.ipynb @@ -0,0 +1,268 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "About      \n", + "Forum      \n", + "Issues      \n", + "Tutorials      \n", + "Documentation\n", + "\n", + "![Molecular Design Toolkit](img/Top.png)\n", + "
    \n", + "

    Example 5: Calculating enthalpic barriers with constraints minimizations

    \n", + "\n", + "---\n", + "\n", + "Here, we calculate a torsional rotation barrier of a common amino acid.\n", + "\n", + " - _Author_: [Aaron Virshup](https://github.com/avirshup), Autodesk Research
    \n", + " - _Created on_: July 1, 2016\n", + " - _Tags_: quantum chemistry, PES, isomerization, reaction coordinate\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import moldesign as mdt\n", + "from moldesign import units as u\n", + "\n", + "%matplotlib notebook\n", + "from matplotlib.pyplot import *\n", + "try: import seaborn # optional, makes graphs look better\n", + "except ImportError: pass" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "mol = mdt.from_name('butane')\n", + "mol.draw()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "mol.set_energy_model(mdt.models.GAFF)\n", + "mol.energy_model.configure()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "minimization = mol.minimize(nsteps=40)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "minimization.draw()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "bs = mdt.widgets.BondSelector(mol)\n", + "bs" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "twist = mdt.DihedralMonitor(bs.selected_bonds[0])\n", + "twist" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "rigid = mdt.Trajectory(mol)\n", + "for angle in np.arange(0.0, 360, 5) * u.degree:\n", + " twist.value = angle\n", + " mol.calculate()\n", + " rigid.new_frame(annotation='angle: %s' % twist.value.to(u.degrees))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "rigid.draw()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "figure()\n", + "plot(twist(rigid).to(u.degrees), rigid.potential_energy)\n", + "xlabel(u'dihedral / º'); ylabel('energy / eV')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "mol.clear_constraints()\n", + "mol.positions = rigid.positions[0]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "constraint = twist.constrain()\n", + "relaxed = mdt.Trajectory(mol)\n", + "for angle in np.arange(0, 360, 5) * u.degree:\n", + " print angle,':',\n", + " \n", + " #add random noise to break symmetry\n", + " mol.positions += np.random.random(mol.positions.shape) * 0.01*u.angstrom\n", + " mol.positions -= mol.center_of_mass\n", + " \n", + " twist.value = angle\n", + " constraint.value = angle\n", + " \n", + " t = mol.minimize(nsteps=100)\n", + " relaxed.new_frame(annotation='angle: %s' % twist.value.to(u.degrees))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "relaxed.draw()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "figure()\n", + "x_axis = twist(rigid).to(u.degrees) \n", + "plot(x_axis, rigid.potential_energy, label='rigid')\n", + "plot(x_axis, relaxed.potential_energy, label='relaxed')\n", + "plot(x_axis, rigid.potential_energy - relaxed.potential_energy, label='rigid - relaxed')\n", + "xlabel(u'dihedral / º'); ylabel('energy / eV'); legend()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "from ipywidgets import interact_manual\n", + "\n", + "bs = mdt.widgets.BondSelector(mol)\n", + "def show_dihedral():\n", + " figure()\n", + " for bond in bs.selected_bonds:\n", + " dihemon = mdt.DihedralMonitor(bond)\n", + " plot(twist(relaxed).to(u.degrees), dihemon(relaxed).to(u.degrees), label=str(bond))\n", + " legend(); xlabel(u'central twist / º'); ylabel(u'bond twist / º')\n", + "interact_manual(show_dihedral)\n", + "bs" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.12" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} \ No newline at end of file diff --git a/moldesign/geom/monitor.py b/moldesign/geom/monitor.py index 06f3987..241ed3c 100644 --- a/moldesign/geom/monitor.py +++ b/moldesign/geom/monitor.py @@ -55,6 +55,7 @@ def constrain(self, **kwargs): if atom.molecule is not mol: raise ValueError("Can't create constraint; atoms are not part of the same Molecule") mol.constraints.append(c) + mol._reset_methods() return c def __call__(self, obj): diff --git a/moldesign/integrators/openmm.py b/moldesign/integrators/openmm.py index 5732d16..1f406e4 100644 --- a/moldesign/integrators/openmm.py +++ b/moldesign/integrators/openmm.py @@ -39,14 +39,16 @@ def prep(self): self._prepped = True def run(self, run_for, wait=False): - # TODO: like model.minimize, this is a hacky wrapper that we need to replace with - # something more generalizable + if not self.model._constraints_ok: + raise NotImplementedError('OpenMM only supports position and bond constraints') + try: traj = self._run(run_for) except pyccc.exceptions.ProgramFailure: - raise pyccc.exceptions.ProgramFailure('OpenMM crashed silently. Please examine the output. ' - 'This may be due to large forces from, for example, ' - 'an insufficiently minimized starting geometry.') + raise pyccc.exceptions.ProgramFailure( + 'OpenMM crashed silently. Please examine the output. ' + 'This may be due to large forces from, for example, ' + 'an insufficiently minimized starting geometry.') if force_remote or (not wait): self.mol.energy_model._sync_remote(traj.mol) traj.mol = self.mol diff --git a/moldesign/interfaces/ambertools.py b/moldesign/interfaces/ambertools.py index e6a6b1e..e546fbb 100644 --- a/moldesign/interfaces/ambertools.py +++ b/moldesign/interfaces/ambertools.py @@ -272,18 +272,25 @@ def assign_forcefield(mol, **kwargs): def parameterize(mol, charges='esp', ffname='gaff2', **kwargs): """Parameterize ``mol``, typically using GAFF parameters. - Note: this requires partial charges to alread + This will both assign a forcefield to the molecule (at ``mol.ff``) and produce the parameters + so that they can be used in other systems (e.g., so that this molecule can be simulated + embedded in a larger protein) + + Note: + 'am1-bcc' and 'gasteiger' partial charges will be automatically computed if necessary. + Other charge types must be precomputed. Args: mol (moldesign.Molecule): - charges (str): what kind of partial charges to use? These will be taken from + charges (str or dict): what partial charges to use? Can be a dict (``{atom:charge}``) OR + a string, in which case charges will be read from ``mol.properties.[charges name]``; typical values will be 'esp', 'mulliken', 'am1-bcc', etc. Use 'zero' to set all charges to 0 (for QM/MM and testing) - 'am1-bcc' will be calculated automatically if not available. ffname (str): Name of the gaff-like forcefield file (default: gaff2) Returns: - ExtraAmberParameters: Parameters for the molecule + ExtraAmberParameters: Parameters for the molecule; this object can be used to create + forcefield parameters for other systems that contain this molecule """ assert mol.num_residues == 1 resname = mol.residues[0].resname @@ -294,14 +301,16 @@ def parameterize(mol, charges='esp', ffname='gaff2', **kwargs): calc_gasteiger_charges(mol) if charges == 'zero': - charges = [0.0 for atom in mol.atoms] + charge_array = [0.0 for atom in mol.atoms] + elif isinstance(charges, basestring): + charge_array = u.array([mol.properties[charges][atom] for atom in mol.atoms]) + if not charge_array.dimensionless: # implicitly convert floats to fundamental charge units + charge_array = charge_array.to(u.q_e).magnitude else: - charges = u.array([mol.properties[charges][atom] for atom in mol.atoms]) - if not charges.dimensionless: # implicitly convert floats to fundamental charge units - charges = charges.to(u.q_e).magnitude + charge_array = [charges[atom] for atom in mol.atoms] inputs = {'mol.mol2': mol.write(format='mol2'), - 'mol.charges': '\n'.join(map(str, charges))} + 'mol.charges': '\n'.join(map(str, charge_array))} cmds = ['antechamber -i mol.mol2 -fi mol2 -o mol_charged.mol2 -fo mol2 -c rc -cf mol.charges', 'parmchk -i mol_charged.mol2 -f mol2 -o mol.frcmod', 'tleap -f leap.in'] @@ -318,6 +327,8 @@ def finish_job(j): param = ExtraAmberParameters(j.get_output('mol.lib'), j.get_output('mol.frcmod'), j) + tempmol = mdt.assign_forcefield(mol, parameters=param) + mol.ff = tempmol.ff return param job = pyccc.Job(image=mdt.compute.get_image_path(IMAGE), diff --git a/moldesign/min/descent.py b/moldesign/min/descent.py index 634569e..342cbd3 100644 --- a/moldesign/min/descent.py +++ b/moldesign/min/descent.py @@ -86,10 +86,10 @@ def run(self): # move direction may be different than gradient direction due to constraints move_vec = (newpos-current).normalized() - if grad.dot(move_vec) >= 0.0: # move flipped direction! Why? + if grad.dot(move_vec) >= 0.0: # move flipped direction! if self._constraint_convergence(newpos, current, grad): - return # we're converged - else: # move was too big, keep going + return # flip was because we're converged + else: # flip was because move was too big newenergy = np.inf * u.default.energy continue diff --git a/moldesign/models/__init__.py b/moldesign/models/__init__.py index e58e863..0ae4e59 100644 --- a/moldesign/models/__init__.py +++ b/moldesign/models/__init__.py @@ -2,4 +2,5 @@ from .pyscf import * from .models import * from .toys import * +from .amber import * diff --git a/moldesign/models/amber.py b/moldesign/models/amber.py new file mode 100644 index 0000000..050438b --- /dev/null +++ b/moldesign/models/amber.py @@ -0,0 +1,56 @@ +# Copyright 2016 Autodesk Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import operator as op + +import moldesign as mdt +from moldesign.parameters import Parameter, WhenParam + +from . import ForceField + + +def exports(o): + __all__.append(o.__name__) + return o +__all__ = [] + + +@exports +class GAFF(ForceField): + """ Model the energy using the GAFF forcefield + + This is implemented as a special case of the ForceField energy model; it automates small + parameterization process + """ + PARAMETERS = [Parameter('partial_charges', + 'Partial charge model', + type=str, + default='am1-bcc', + choices=['am1-bcc', 'gasteiger', 'esp']), + Parameter('gaff_version', + 'GAFF version', + type=str, + choices='gaff gaff2'.split(), + default='gaff2') + ] + ForceField.PARAMETERS + + def prep(self, force=False): + if not self.mol.ff: + mdt.parameterize(self.mol, + charges=self.params.partial_charges, + ffname=self.params.gaff_version) + + super(GAFF, self).prep() + + # TODO: mechanism to store partial charges so they don't need to be constantly recomputed diff --git a/moldesign/models/openmm.py b/moldesign/models/openmm.py index 98904c4..26ef86a 100644 --- a/moldesign/models/openmm.py +++ b/moldesign/models/openmm.py @@ -46,6 +46,7 @@ class OpenMMPotential(MMBase, opm.OpenMMPickleMixin): def __init__(self, **kwargs): super(OpenMMPotential, self).__init__(**kwargs) self.sim = None + self._constraints_ok = True # can OpenMM support these constraints? def get_openmm_simulation(self): if opm.force_remote: @@ -98,14 +99,20 @@ def prep(self, force=False): print 'Created OpenMM kernel (Platform: %s)' % self.sim.context.getPlatform().getName() self._prep_integrator = self.mol.integrator + def reset_constraints(self): + self._set_constraints() + def minimize(self, **kwargs): - traj = self._minimize(**kwargs) + if self._constraints_ok: + traj = self._minimize(**kwargs) - if opm.force_remote or (not kwargs.get('wait', False)): - self._sync_remote(traj.mol) - traj.mol = self.mol + if opm.force_remote or (not kwargs.get('wait', False)): + self._sync_remote(traj.mol) + traj.mol = self.mol - return traj + return traj + else: + return super(OpenMMPotential, self).minimize(**kwargs) def _sync_remote(self, mol): # TODO: this is a hack to update the object after a minimization @@ -178,6 +185,7 @@ def get_forcefield(self): ################################################# # "Private" methods for managing OpenMM are below def _set_constraints(self): + self._constraints_ok = True system = self.mm_system fixed_atoms = set() @@ -197,7 +205,7 @@ def _set_constraints(self): opm.pint2simtk(constraint.value)) else: - raise ValueError('OpenMM interface does not support "%s" constraints.' % constraint.desc) + self._constraints_ok = False # Workaround for OpenMM issue: can't have an atom that's both fixed *and* has a distance constraint. # If both atoms in the distance constraint are also fixed, then we can just remove the constraint @@ -211,9 +219,9 @@ def _set_constraints(self): if (ai in fixed_atoms) and (aj in fixed_atoms): system.removeConstraint(ic) num_constraints -= 1 - elif (ai in fixed_atoms) or (aj in fixed_atoms): #only one is fixed + elif (ai in fixed_atoms) or (aj in fixed_atoms): # only one is fixed raise ValueError('In OpenMM, fixed atoms cannot be part of a constrained ' - 'bond (%s)'%moldesign.molecules.bonds.Bond(ai, aj)) + 'bond (%s)' % moldesign.molecules.bonds.Bond(ai, aj)) else: ic += 1 From 578783159098ab2e30b894e49e27309c20e4c29a Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Wed, 21 Sep 2016 23:11:21 -0700 Subject: [PATCH 55/64] Prevent duplicate constraints using new ExclusiveList class --- moldesign/geom/constraints.py | 9 +++++ moldesign/molecules/molecule.py | 11 ++++-- moldesign/utils/classes.py | 61 +++++++++++++++++++++++++++++++++ 3 files changed, 79 insertions(+), 2 deletions(-) diff --git a/moldesign/geom/constraints.py b/moldesign/geom/constraints.py index e75fe62..3129852 100644 --- a/moldesign/geom/constraints.py +++ b/moldesign/geom/constraints.py @@ -101,6 +101,12 @@ def __str__(self): return 'Constraint: {self.desc}({atoms}) -> {self.value})>'.format( atoms=','.join([a.name for a in self.atoms]), self=self) + def _constraintsig(self): + """ Returns a unique key that lets us figure out if we have duplicate or conflicting + constraints + """ + return tuple([self.desc] + [atom.index for atom in self.atoms]) + class DistanceConstraint(GeometryConstraint): desc = 'distance' @@ -243,3 +249,6 @@ def current(self): def atomgrad(self, atom=None): return [self.vector] * u.ureg.dimensionless # that was easy + + def _constraintsig(self): + return super(FixedCoordinate, self)._constraintsig() + (self.vector,) diff --git a/moldesign/molecules/molecule.py b/moldesign/molecules/molecule.py index b7e48f4..a2437e2 100644 --- a/moldesign/molecules/molecule.py +++ b/moldesign/molecules/molecule.py @@ -15,6 +15,7 @@ import numpy as np import moldesign as mdt +import operator from moldesign import helpers, utils, data from moldesign.exceptions import NotCalculatedError from moldesign import units as u @@ -62,7 +63,7 @@ def clear_constraints(self): Note: This does NOT clear integrator options - such as "constrain H bonds" """ - self.constraints = [] + self.constraints.clear() self._reset_methods() def constrain_atom(self, atom, pos=None): @@ -557,6 +558,11 @@ def assert_atom(self, atom): assert atom.molecule is self, "Atom %s does not belong to %s" % (atom, self) return atom + def rebuild(self): + self.chains = Instance(molecule=self) + self.residues = [] + self._rebuild_topology() + def _rebuild_topology(self, bond_graph=None): """ Build the molecule's bond graph based on its atoms' bonds @@ -836,6 +842,7 @@ def _reset_methods(self): need to know about """ # TODO: what should this do with the property object? + # TODO: handle duplicate constraints (this happens a lot, and is bad) if self.energy_model is not None: self.energy_model._prepped = False if self.integrator is not None: @@ -990,7 +997,7 @@ def __init__(self, atomcontainer, self._defres = None self._defchain = None self.pdbname = pdbname - self.constraints = [] + self.constraints = utils.ExclusiveList(key=operator.methodcaller('_constraintsig')) self.energy_model = None self.integrator = None self.electronic_state_index = electronic_state_index diff --git a/moldesign/utils/classes.py b/moldesign/utils/classes.py index 12c0de1..35cd2b0 100644 --- a/moldesign/utils/classes.py +++ b/moldesign/utils/classes.py @@ -34,6 +34,67 @@ def add(self, item): self[key].append(item) +class ExclusiveList(object): + """ Behaves like a list, but won't allow duplicate items with duplicate keys to be added. + """ + def __init__(self, iterable=None, key=None): + self._keys = collections.OrderedDict() + if key is None: + self._keyfn = self._identity + else: + self._keyfn = key + + if iterable is not None: + self.extend(iterable) + + def append(self, obj): + k = self._keyfn(obj) + if k in self._keys: + raise KeyError("'%s' can't be added because its key '%s' already exists" % (obj, k)) + else: + self._keys[k] = obj + + def clear(self): + self._keys = collections.OrderedDict() + + @staticmethod + def _identity(obj): + return obj + + def __iter__(self): + return self._keys.itervalues() + + def __len__(self): + return len(self._keys) + + def __getitem__(self, item): + return self._keys.values()[item] + + def remove(self, obj): + k = self._keyfn(obj) + stored = self._keys[k] + if obj is not stored: + raise KeyError(obj) + else: + self._keys.pop(k) + + def extend(self, iterable): + for item in iterable: + self.append(item) + + def pop(self, index=None): + if index is None: + return self._keys.popitem()[1] + else: + k = self._keys.keys()[index] + return self._keys.pop(k) + + def __repr__(self): + return '%s(%s)' % (type(self).__name__, self._keys.values()) + + __str__ = __repr__ + + class DotDict(dict): """Dict with items accessible as attributes""" def __getstate__(self): From 1106e7bd05169b8fadd205c80a46bfc47323dc78 Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Fri, 23 Sep 2016 20:29:51 -0700 Subject: [PATCH 56/64] Fix `add_hydrogens` so that the new hydrogen atoms are grouped with the rest of their residues --- moldesign/interfaces/openbabel.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/moldesign/interfaces/openbabel.py b/moldesign/interfaces/openbabel.py index 14e94d0..73f10c3 100644 --- a/moldesign/interfaces/openbabel.py +++ b/moldesign/interfaces/openbabel.py @@ -15,8 +15,8 @@ import os import string -import collections +import collections import moldesign.molecules.atomcollections try: @@ -167,7 +167,7 @@ def add_hydrogen(mol): """ pbmol = mol_to_pybel(mol) pbmol.addh() - newmol = pybel_to_mol(pbmol) + newmol = pybel_to_mol(pbmol, reorder_atoms_by_residue=True) mdt.helpers.assign_unique_hydrogen_names(newmol) return newmol @@ -227,7 +227,7 @@ def mol_to_pybel(mdtmol): return pbmol -def pybel_to_mol(pbmol, atom_names=True, **kwargs): +def pybel_to_mol(pbmol, atom_names=True, reorder_atoms_by_residue=False, **kwargs): """ Translate a pybel molecule object into a moldesign object. Note: @@ -236,6 +236,8 @@ def pybel_to_mol(pbmol, atom_names=True, **kwargs): Args: pbmol (pybel.Molecule): molecule to translate atom_names (bool): use pybel's atom names (default True) + reorder_atoms_by_residue (bool): change atom order so that all atoms in a residue are stored + contiguously **kwargs (dict): keyword arguments to moldesign.Molecule __init__ method Returns: @@ -317,6 +319,12 @@ def pybel_to_mol(pbmol, atom_names=True, **kwargs): newtopo[a1][a2] = order newtopo[a2][a1] = order + if reorder_atoms_by_residue: + resorder = {} + for atom in newatoms: + resorder.setdefault(atom.residue, len(resorder)) + newatoms.sort(key=lambda a: resorder[a.residue]) + return mdt.Molecule(newatoms, bond_graph=newtopo, **kwargs) From df12ce947608870ca6ebfd8462f273915fe523cd Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Fri, 23 Sep 2016 20:53:38 -0700 Subject: [PATCH 57/64] Workaround for pickling bugs in cpython (https://bugs.python.org/issue22955) --- NOTICES | 14 +- moldesign/external/licenses/PYTHON | 261 +++++++++++++++++++++++++++++ moldesign/molecules/molecule.py | 11 +- moldesign/utils/utils.py | 47 ++++++ 4 files changed, 323 insertions(+), 10 deletions(-) create mode 100644 moldesign/external/licenses/PYTHON diff --git a/NOTICES b/NOTICES index ae66806..7059221 100644 --- a/NOTICES +++ b/NOTICES @@ -5,6 +5,7 @@ The Molecular Design Toolkit incorporates code from the following sources: Copyright (c) 2006-2015, Christoph Gohlke Copyright (c) 2006-2015, The Regents of the University of California SOURCE CODE: moldesign/external/transformations.py +DESCRIPTION: Included in its entirety, with minor modifications to imports LICENSE: moldesign/external/transformations.py WEBSITE: http://www.lfd.uci.edu/~gohlke/ @@ -13,7 +14,18 @@ WEBSITE: http://www.lfd.uci.edu/~gohlke/ ------------------------- Copyright (c) 2007-2016 by the Sphinx team SOURCE CODE: moldesign/utils/docparsers/google.py -Note that this source code has been heavily modified. Modifications are described in the file. +DESCRIPTION: Includes code derived from the Napoleon Google-style docstring parsers. +Note that these routines have been heavily modified as described in the file. LICENSE: moldesign/utils/docparsers/sphinxlicense WEBSITE: http://sphinx-doc.org + + Python +-------------------------------- +Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +2011, 2012, 2013, 2014, 2015, 2016 Python Software Foundation; All Rights +Reserved +SOURCE CODE: moldesign/utils/utils.py (`methodcaller` class) +DESCRIPTION: unmodified copy of the pure-python `methodcaller` class +LICENSE: moldesign/external/licenses/python +WEBSITE: https://www.python.org diff --git a/moldesign/external/licenses/PYTHON b/moldesign/external/licenses/PYTHON new file mode 100644 index 0000000..e374ded --- /dev/null +++ b/moldesign/external/licenses/PYTHON @@ -0,0 +1,261 @@ +NOTE: +See molecular-design-toolkit/NOTICES for a description of the components +this license applies to. + +_______________________________________________________________________ + +A. HISTORY OF THE SOFTWARE +========================== + +Python was created in the early 1990s by Guido van Rossum at Stichting +Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands +as a successor of a language called ABC. Guido remains Python's +principal author, although it includes many contributions from others. + +In 1995, Guido continued his work on Python at the Corporation for +National Research Initiatives (CNRI, see http://www.cnri.reston.va.us) +in Reston, Virginia where he released several versions of the +software. + +In May 2000, Guido and the Python core development team moved to +BeOpen.com to form the BeOpen PythonLabs team. In October of the same +year, the PythonLabs team moved to Digital Creations (now Zope +Corporation, see http://www.zope.com). In 2001, the Python Software +Foundation (PSF, see http://www.python.org/psf/) was formed, a +non-profit organization created specifically to own Python-related +Intellectual Property. Zope Corporation is a sponsoring member of +the PSF. + +All Python releases are Open Source (see http://www.opensource.org for +the Open Source Definition). Historically, most, but not all, Python +releases have also been GPL-compatible; the table below summarizes +the various releases. + + Release Derived Year Owner GPL- + from compatible? (1) + + 0.9.0 thru 1.2 1991-1995 CWI yes + 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes + 1.6 1.5.2 2000 CNRI no + 2.0 1.6 2000 BeOpen.com no + 1.6.1 1.6 2001 CNRI yes (2) + 2.1 2.0+1.6.1 2001 PSF no + 2.0.1 2.0+1.6.1 2001 PSF yes + 2.1.1 2.1+2.0.1 2001 PSF yes + 2.1.2 2.1.1 2002 PSF yes + 2.1.3 2.1.2 2002 PSF yes + 2.2 and above 2.1.1 2001-now PSF yes + +Footnotes: + +(1) GPL-compatible doesn't mean that we're distributing Python under + the GPL. All Python licenses, unlike the GPL, let you distribute + a modified version without making your changes open source. The + GPL-compatible licenses make it possible to combine Python with + other software that is released under the GPL; the others don't. + +(2) According to Richard Stallman, 1.6.1 is not GPL-compatible, + because its license has a choice of law clause. According to + CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1 + is "not incompatible" with the GPL. + +Thanks to the many outside volunteers who have worked under Guido's +direction to make these releases possible. + + +B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON +=============================================================== + +PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 +-------------------------------------------- + +1. This LICENSE AGREEMENT is between the Python Software Foundation +("PSF"), and the Individual or Organization ("Licensee") accessing and +otherwise using this software ("Python") in source or binary form and +its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, PSF hereby +grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, +analyze, test, perform and/or display publicly, prepare derivative works, +distribute, and otherwise use Python alone or in any derivative version, +provided, however, that PSF's License Agreement and PSF's notice of copyright, +i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +2011, 2012, 2013, 2014, 2015, 2016 Python Software Foundation; All Rights +Reserved" are retained in Python alone or in any derivative version prepared by +Licensee. + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python. + +4. PSF is making Python available to Licensee on an "AS IS" +basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. Nothing in this License Agreement shall be deemed to create any +relationship of agency, partnership, or joint venture between PSF and +Licensee. This License Agreement does not grant permission to use PSF +trademarks or trade name in a trademark sense to endorse or promote +products or services of Licensee, or any third party. + +8. By copying, installing or otherwise using Python, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + + +BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0 +------------------------------------------- + +BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1 + +1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an +office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the +Individual or Organization ("Licensee") accessing and otherwise using +this software in source or binary form and its associated +documentation ("the Software"). + +2. Subject to the terms and conditions of this BeOpen Python License +Agreement, BeOpen hereby grants Licensee a non-exclusive, +royalty-free, world-wide license to reproduce, analyze, test, perform +and/or display publicly, prepare derivative works, distribute, and +otherwise use the Software alone or in any derivative version, +provided, however, that the BeOpen Python License is retained in the +Software, alone or in any derivative version prepared by Licensee. + +3. BeOpen is making the Software available to Licensee on an "AS IS" +basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE +SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS +AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY +DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +5. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +6. This License Agreement shall be governed by and interpreted in all +respects by the law of the State of California, excluding conflict of +law provisions. Nothing in this License Agreement shall be deemed to +create any relationship of agency, partnership, or joint venture +between BeOpen and Licensee. This License Agreement does not grant +permission to use BeOpen trademarks or trade names in a trademark +sense to endorse or promote products or services of Licensee, or any +third party. As an exception, the "BeOpen Python" logos available at +http://www.pythonlabs.com/logos.html may be used according to the +permissions granted on that web page. + +7. By copying, installing or otherwise using the software, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + + +CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1 +--------------------------------------- + +1. This LICENSE AGREEMENT is between the Corporation for National +Research Initiatives, having an office at 1895 Preston White Drive, +Reston, VA 20191 ("CNRI"), and the Individual or Organization +("Licensee") accessing and otherwise using Python 1.6.1 software in +source or binary form and its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, CNRI +hereby grants Licensee a nonexclusive, royalty-free, world-wide +license to reproduce, analyze, test, perform and/or display publicly, +prepare derivative works, distribute, and otherwise use Python 1.6.1 +alone or in any derivative version, provided, however, that CNRI's +License Agreement and CNRI's notice of copyright, i.e., "Copyright (c) +1995-2001 Corporation for National Research Initiatives; All Rights +Reserved" are retained in Python 1.6.1 alone or in any derivative +version prepared by Licensee. Alternately, in lieu of CNRI's License +Agreement, Licensee may substitute the following text (omitting the +quotes): "Python 1.6.1 is made available subject to the terms and +conditions in CNRI's License Agreement. This Agreement together with +Python 1.6.1 may be located on the Internet using the following +unique, persistent identifier (known as a handle): 1895.22/1013. This +Agreement may also be obtained from a proxy server on the Internet +using the following URL: http://hdl.handle.net/1895.22/1013". + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python 1.6.1 or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python 1.6.1. + +4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS" +basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. This License Agreement shall be governed by the federal +intellectual property law of the United States, including without +limitation the federal copyright law, and, to the extent such +U.S. federal law does not apply, by the law of the Commonwealth of +Virginia, excluding Virginia's conflict of law provisions. +Notwithstanding the foregoing, with regard to derivative works based +on Python 1.6.1 that incorporate non-separable material that was +previously distributed under the GNU General Public License (GPL), the +law of the Commonwealth of Virginia shall govern this License +Agreement only as to issues arising under or with respect to +Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this +License Agreement shall be deemed to create any relationship of +agency, partnership, or joint venture between CNRI and Licensee. This +License Agreement does not grant permission to use CNRI trademarks or +trade name in a trademark sense to endorse or promote products or +services of Licensee, or any third party. + +8. By clicking on the "ACCEPT" button where indicated, or by copying, +installing or otherwise using Python 1.6.1, Licensee agrees to be +bound by the terms and conditions of this License Agreement. + + ACCEPT + + +CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2 +-------------------------------------------------- + +Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, +The Netherlands. All rights reserved. + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Stichting Mathematisch +Centrum or CWI not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE +FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. \ No newline at end of file diff --git a/moldesign/molecules/molecule.py b/moldesign/molecules/molecule.py index a2437e2..817bade 100644 --- a/moldesign/molecules/molecule.py +++ b/moldesign/molecules/molecule.py @@ -15,8 +15,7 @@ import numpy as np import moldesign as mdt -import operator -from moldesign import helpers, utils, data +from moldesign import helpers, utils from moldesign.exceptions import NotCalculatedError from moldesign import units as u from moldesign.compute import DummyJob @@ -960,8 +959,6 @@ class Molecule(AtomContainer, - :class:`moldesign.molecules.MolConstraintMixin` - :class:`moldesign.molecules.MolReprMixin` """ - - # TODO: UML diagrams, describe structure positions = ProtectedArray('_positions') momenta = ProtectedArray('_momenta') @@ -971,8 +968,6 @@ def __init__(self, atomcontainer, pdbname=None, charge=None, electronic_state_index=0): - # NEW_FEATURE: deal with random number generators per-geometry - # NEW_FEATURE: per-geometry output logging super(Molecule, self).__init__() # copy atoms from another object (i.e., a molecule) @@ -997,7 +992,7 @@ def __init__(self, atomcontainer, self._defres = None self._defchain = None self.pdbname = pdbname - self.constraints = utils.ExclusiveList(key=operator.methodcaller('_constraintsig')) + self.constraints = utils.ExclusiveList(key=utils.methodcaller('_constraintsig')) self.energy_model = None self.integrator = None self.electronic_state_index = electronic_state_index @@ -1024,7 +1019,6 @@ def __init__(self, atomcontainer, self._properties = MolecularProperties(self) self.ff = utils.DotDict() - # TODO: underscores or not? Buckyball needs a global rule def newbond(self, a1, a2, order): """ Create a new bond @@ -1036,7 +1030,6 @@ def newbond(self, a1, a2, order): Returns: moldesign.Bond """ - # TODO: this should signal to the energy model that the bond structure has changed assert a1.molecule == a2.molecule == self return a1.bond_to(a2, order) diff --git a/moldesign/utils/utils.py b/moldesign/utils/utils.py index 6394ca6..909e505 100644 --- a/moldesign/utils/utils.py +++ b/moldesign/utils/utils.py @@ -54,6 +54,53 @@ def printflush(s, newline=True): sys.stdout.flush() +class methodcaller: + """The pickleable implementation of the standard library operator.methodcaller. + + This was copied without modification from: + https://github.com/python/cpython/blob/065990fa5bd30fb3ca61b90adebc7d8cb3f16b5a/Lib/operator.py + + The c-extension version is not pickleable, so we keep a copy of the pure-python standard library + code here. See https://bugs.python.org/issue22955 + + Original documentation: + Return a callable object that calls the given method on its operand. + After f = methodcaller('name'), the call f(r) returns r.name(). + After g = methodcaller('name', 'date', foo=1), the call g(r) returns + r.name('date', foo=1). + """ + __slots__ = ('_name', '_args', '_kwargs') + + def __init__(*args, **kwargs): + if len(args) < 2: + msg = "methodcaller needs at least one argument, the method name" + raise TypeError(msg) + self = args[0] + self._name = args[1] + if not isinstance(self._name, str): + raise TypeError('method name must be a string') + self._args = args[2:] + self._kwargs = kwargs + + def __call__(self, obj): + return getattr(obj, self._name)(*self._args, **self._kwargs) + + def __repr__(self): + args = [repr(self._name)] + args.extend(map(repr, self._args)) + args.extend('%s=%r' % (k, v) for k, v in self._kwargs.items()) + return '%s.%s(%s)' % (self.__class__.__module__, + self.__class__.__name__, + ', '.join(args)) + + def __reduce__(self): + if not self._kwargs: + return self.__class__, (self._name,) + self._args + else: + from functools import partial + return partial(self.__class__, self._name, **self._kwargs), self._args + + class textnotify(object): """ Print a single, immediately flushed line to log the execution of a block. From 86224e9f41f1feb5896799477e4d0cb8679e44b0 Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Tue, 27 Sep 2016 15:10:18 -0700 Subject: [PATCH 58/64] Add transition dipoles, oscillator strengths, and associated example --- ...Example 2. Running Quantum Chemistry.ipynb | 416 ------------------ ...Example 2. UV-vis absorption spectra.ipynb | 252 +++++++++++ moldesign/models/models.py | 7 + moldesign/models/pyscf.py | 70 ++- moldesign/molecules/trajectory.py | 2 +- moldesign/orbitals/gaussians.py | 3 + moldesign/parameters.py | 10 +- moldesign/units/constants.py | 1 + 8 files changed, 339 insertions(+), 422 deletions(-) delete mode 100644 moldesign/_notebooks/Example 2. Running Quantum Chemistry.ipynb create mode 100644 moldesign/_notebooks/Example 2. UV-vis absorption spectra.ipynb diff --git a/moldesign/_notebooks/Example 2. Running Quantum Chemistry.ipynb b/moldesign/_notebooks/Example 2. Running Quantum Chemistry.ipynb deleted file mode 100644 index 2e02282..0000000 --- a/moldesign/_notebooks/Example 2. Running Quantum Chemistry.ipynb +++ /dev/null @@ -1,416 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "About      \n", - "Forum      \n", - "Issues      \n", - "Tutorials      \n", - "Documentation\n", - "\n", - "![Molecular Design Toolkit](img/Top.png)\n", - "
    \n", - "

    Example 2: Calculating a torsional barrier

    \n", - "\n", - "---\n", - "\n", - "This notebook shows how to use constrained minimizations to calculate barriers to torsional rotation.\n", - "\n", - " - _Author_: [Aaron Virshup](https://github.com/avirshup), Autodesk Research
    \n", - " - _Created on_: July 1, 2016\n", - " - _Tags_: RHF, quantum chemistry, PES, scan\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "scrolled": true - }, - "outputs": [], - "source": [ - "%matplotlib inline\n", - "import numpy as np\n", - "from matplotlib.pylab import *\n", - "\n", - "try: import seaborn #optional, makes plots look nicer\n", - "except ImportError: pass\n", - "\n", - "import moldesign as mdt\n", - "from moldesign import units as u" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

    Contents

    \n", - "\n", - "---\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## I. Build butadiene\n", - "This example deals with butadiene, a slightly larger molecule. Here, we'll scan its potential energy surface over its central dihedral angle.\n", - "\n", - "### A. Build the molecule and calculate its energy\n", - "The following code cell uses a SMILES string to create the molecule." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "mol = mdt.from_smiles('C=CC=C')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### B. Break symmetry\n", - "\n", - "Note that there's a fair amount of symmetry in this molecule, which can prevent the optimizer from finding the correct minimum. It's often necessary to introduce a little geometric noise into the geometry before minimizing. In the case, I recommend adjusting the dihedral angles around the two double bonds." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "mdt.widgets.GeometryBuilder(mol)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "mol.set_energy_model(mdt.models.RHF, basis='sto-3g')\n", - "min_traj = mol.minimize(nsteps=100)\n", - "min_traj.draw_orbitals()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "selector = mdt.widgets.BondSelector(mol)\n", - "selector" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We've stored this bond to use in the next step - it can be programatically accessed using `selector.selected_bonds`:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "bond = selector.selected_bonds[0]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# II. Rigid torsion scan\n", - "\n", - "First, we'll rotate the molecule around the selected bond WITHOUT allowing the molecule to relax. This will produce an upper limit on the size of the torsional barrier." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### A. Create a dihedral object\n", - "\n", - "To make this easier, we'll create a `DihedralMonitor` object to keep track of this dihedral angle." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "dihedral = mdt.DihedralMonitor(selector.selected_bonds[0])\n", - "print 'Dihedral:', dihedral.value" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### B. Scan over the dihedral angle\n", - "\n", - "Next, we'll rotate the dihedral from 0 to 180º, calculating the potential energy as we do:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "rigid = mdt.Trajectory(mol)\n", - "\n", - "angles = np.linspace(0, 180, 8)*u.degrees\n", - "for angle in angles:\n", - " dihedral.value = angle\n", - " mol.calculate()\n", - " rigid.new_frame(annotation='dihedral:%s' % angle) " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "rigid.draw_orbitals()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Here's the potential energy as a function of the twist angle. Note that the molecule is symmetric around 180º." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "plot(angles, rigid.potential_energy)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "# III. Relaxed scan\n", - "\n", - "The previous calculation didn't allow the molecule to relax during the calculation. Here, we'll repeat the process, but doing a _constrained minimization_ at every step - we'll allow all degrees of freedom *except the dihedral angle* to relax.\n", - "\n", - "This will take a lot longer than before. We also need to break symmetry; and so add a small amount of gaussian noise before each minimization." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "mdt.widgets.GeometryBuilder(mol)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "mol.positions = rigid.positions[0]\n", - "mol.clear_constraints()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "scrolled": false - }, - "outputs": [], - "source": [ - "relax = mdt.Trajectory(mol)\n", - "constraint = dihedral.constrain()\n", - "\n", - "angles = np.linspace(0, 180, 6)*u.degrees\n", - "for angle in angles:\n", - " dihedral.value = angle\n", - " constraint.value = angle\n", - " mol.minimize()\n", - " \n", - " relax.new_frame(annotation='dihedral:%s' % angle) " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "relax.draw_orbitals()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "plot(np.linspace(0, 180, 6), relax.potential_energy, label='relax')\n", - "plot(np.linspace(0, 180, 8), rigid.potential_energy, label='rigid')\n", - "legend()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## III. Advanced topics" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### A. Symmetry\n", - "You can use buckyball's symmetrization tools to build symmetric molecules, which can often lead to huge improvements in computational efficiency.\n", - "\n", - "First, let's look at the simplest possible organic molecule, methane. Its simplicity actually leads to some very complex symmetry." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "methane = mdt.from_name('methane')\n", - "mdt.widgets.Symmetrizer(methane)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The list of items on the right is the list of individual symmetry elements - for methane, there are a lot. Click on one to see it illustrated in 3D. Larger molecules will generally have far less symmetry.\n", - "\n", - "Let's take a look at ethane. We'll add some noise to the molecule's coordinates to destroy exact symmetry." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "ethane = mdt.from_smiles('CC')\n", - "for atom in ethane.atoms: atom.position += 0.1 * u.angstrom * np.random.random(3)\n", - "mdt.widgets.Symmetrizer(ethane)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You can use the \"symmetrize\" button to impose individual symmetry elements exactly." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### B. Examining the wavefunction\n", - "You can dive deeply into the quantum wavefunction results by examining the `h2.electronic_state` object. For instance, we can verify that the MO basis diagonalizes the Fock matrix:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "fock_ao = h2.wfn.fock_ao\n", - "mos_in_ao = h2.wfn.molecular_orbitals\n", - "\n", - "matshow( h2.wfn.orbitals.canonical.fock )\n", - "title('Fock matrix in canonical MO basis'); cb = colorbar()\n", - "cb.set_label('energy / eV')\n", - "\n", - "matshow( h2.wfn.orbitals.atomic.fock )\n", - "title('Fock matrix in atomic orbital basis'); cb = colorbar()\n", - "cb.set_label('energy / eV')" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 2", - "language": "python", - "name": "python2" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 2 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.12" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} \ No newline at end of file diff --git a/moldesign/_notebooks/Example 2. UV-vis absorption spectra.ipynb b/moldesign/_notebooks/Example 2. UV-vis absorption spectra.ipynb new file mode 100644 index 0000000..35d4708 --- /dev/null +++ b/moldesign/_notebooks/Example 2. UV-vis absorption spectra.ipynb @@ -0,0 +1,252 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "About      \n", + "Forum      \n", + "Issues      \n", + "Tutorials      \n", + "Documentation\n", + "\n", + "![Molecular Design Toolkit](img/Top.png)\n", + "
    \n", + "

    Example 2: Using MD sampling to calculate UV-Vis spectra

    \n", + "\n", + "---\n", + "\n", + "This notebook uses basic quantum chemical calculations to calculate the absorption spectra of a small molecule.\n", + "\n", + " - _Author_: [Aaron Virshup](https://github.com/avirshup), Autodesk Research
    \n", + " - _Created on_: September 23, 2016\n", + " - _Tags_: excited states, CASSCF, absorption, sampling\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "import numpy as np\n", + "from matplotlib.pylab import *\n", + "\n", + "try: import seaborn #optional, makes plots look nicer\n", + "except ImportError: pass\n", + "\n", + "import moldesign as mdt\n", + "from moldesign import units as u" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Contents\n", + "=======\n", + "---\n", + " - [Single point](#Single-point)\n", + " - [Sampling](#Sampling)\n", + " - [Post-processing](#Post-processing)\n", + " - [Create spectrum](#Create-spectrum)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Single point\n", + "\n", + "Let's start with calculating the vertical excitation energy and oscillator strengths at the ground state minimum (aka Franck-Condon) geometry.\n", + "\n", + "Note that the active space and number of included states here is system-specific." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "qmmol = mdt.from_name('benzene')\n", + "qmmol.set_energy_model(mdt.models.CASSCF, active_electrons=6, active_orbitals=6, state_average=6, basis='sto-3g')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "properties = qmmol.calculate()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This cell print a summary of the possible transitions. \n", + "\n", + "Note: you can convert excitation energies directly to nanometers using [Pint](https://pint.readthedocs.io) by calling `energy.to('nm', 'spectroscopy')`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "for fstate in xrange(1, len(qmmol.properties.state_energies)):\n", + " excitation_energy = properties.state_energies[fstate] - properties.state_energies[0]\n", + " \n", + " print '--- Transition from S0 to S%d ---' % fstate \n", + " print 'Excitation wavelength: %s' % excitation_energy.to('nm', 'spectroscopy')\n", + " print 'Oscillator strength: %s' % qmmol.properties.oscillator_strengths[0,fstate]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Sampling\n", + "\n", + "Of course, molecular spectra aren't just a set of discrete lines - they're broadened by several mechanisms. We'll treat vibrations here by sampling the molecule's motion on the ground state at 300 Kelvin.\n", + "\n", + "To do this, we'll sample its geometries as it moves on the ground state by:\n", + " 1. Create a copy of the molecule\n", + " 2. Assign a forcefield (GAFF2/AM1-BCC)\n", + " 3. Run dynamics for 5 ps, taking a snapshot every 250 fs, for a total of 20 separate geometries." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "mdmol = mdt.Molecule(qmmol)\n", + "mdmol.set_energy_model(mdt.models.GAFF)\n", + "mdmol.minimize()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "mdmol.set_integrator(mdt.integrators.OpenMMLangevin, frame_interval=250*u.fs,\n", + " timestep=0.5*u.fs, constrain_hbonds=False, remove_rotation=True,\n", + " remove_translation=True, constrain_water=False)\n", + "mdtraj = mdmol.run(5.0 * u.ps)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Post-processing\n", + "\n", + "Next, we calculate the spectrum at each sampled geometry." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "post_traj = mdt.Trajectory(qmmol)\n", + "for frame in mdtraj:\n", + " qmmol.positions = frame.positions\n", + " qmmol.calculate()\n", + " post_traj.new_frame()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This cell plots the results - wavelength vs. oscillator strength at each geometry for each transition:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "wavelengths_to_state = []\n", + "oscillators_to_state = []\n", + "for i in xrange(1, len(qmmol.properties.state_energies)):\n", + " wavelengths_to_state.append( (post_traj.state_energies[:,i] - post_traj.potential_energy).to('nm', 'spectroscopy'))\n", + " oscillators_to_state.append([o[0,i] for o in post_traj.oscillator_strengths])\n", + "\n", + " \n", + "for istate, (w,o) in enumerate(zip(wavelengths_to_state, oscillators_to_state)):\n", + " plot(w,o, label='S0 -> S%d'%(istate+1),\n", + " marker='o', linestyle='none')\n", + "xlabel('wavelength / nm'); ylabel('oscillator strength'); legend()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Create spectrum\n", + "\n", + "We're finally ready to calculate a spectrum - we'll create a histogram of all calculated transition wavelengths over all states, weighted by the oscillator strengths." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from itertools import chain\n", + "all_wavelengths = u.array(list(chain(*wavelengths_to_state)))\n", + "all_oscs = u.array(list(chain(*oscillators_to_state)))\n", + "hist(all_wavelengths, weights=all_oscs, bins=50)\n", + "xlabel('wavelength / nm')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.12" + }, + "nav_menu": { + "height": "95px", + "width": "327px" + }, + "toc": { + "navigate_menu": true, + "number_sections": true, + "sideBar": true, + "threshold": 6, + "toc_cell": false, + "toc_section_display": "block", + "toc_window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/moldesign/models/models.py b/moldesign/models/models.py index 12c9b74..23ab114 100644 --- a/moldesign/models/models.py +++ b/moldesign/models/models.py @@ -72,3 +72,10 @@ class MP2(PySCFPotential): def __init__(self, *args, **kwargs): kwargs['theory'] = 'mp2' super(MP2, self).__init__(*args, **kwargs) + +@exports +class CASSCF(PySCFPotential): + @utils.doc_inherit + def __init__(self, *args, **kwargs): + kwargs['theory'] = 'casscf' + super(CASSCF, self).__init__(*args, **kwargs) \ No newline at end of file diff --git a/moldesign/models/pyscf.py b/moldesign/models/pyscf.py index 6ea5ca9..47a84f3 100644 --- a/moldesign/models/pyscf.py +++ b/moldesign/models/pyscf.py @@ -12,9 +12,10 @@ # See the License for the specific language governing permissions and # limitations under the License. from __future__ import absolute_import # prevent clashes between this and the "pyscf" package - from cStringIO import StringIO +import numpy as np + import moldesign as mdt from moldesign import units as u from moldesign import compute, orbitals @@ -203,6 +204,22 @@ def _get_properties(self, ref, kernel, grad): result['potential_energy'] = result['state_energies'][self.mol.electronic_state_index] # TODO: add 'reference wavefunction' to result ao_obj = ref + dips, tdips = _get_multiconf_dipoles(self.pyscfmol, casobj, len(casobj.ci)) + result['state_dipole_moments'] = dips + result['transition_dipole_moments'] = tdips + result['dipole_moment'] = dips[0] + + # TODO: this is general, put it somewhere else + oscs = {} + nstates = len(result['state_energies']) + for i in xrange(nstates): + for j in xrange(i+1, nstates): + excitation_energy = result['state_energies'][j]-result['state_energies'][i] + tdip = result['transition_dipole_moments'][i, j].norm() + oscs[i, j] = (2.0*tdip ** 2*u.m_e*excitation_energy/ + (3.0*u.q_e ** 2*u.hbar ** 2)).to(u.ureg.dimensionless).magnitude + oscs[j, i] = -oscs[i, j] + result['oscillator_strengths'] = oscs else: ao_obj = orb_calc @@ -213,6 +230,9 @@ def _get_properties(self, ref, kernel, grad): result['mulliken'] = DotDict({a: p for a, p in zip(self.mol.atoms, atom_pop)}) result['mulliken'].type = 'atomic' + if hasattr(orb_calc, 'dip_moment'): + result['dipole_moment'] = orb_calc.dip_moment() * u.debye + # Build the electronic state object basis = orbitals.basis.BasisSet(self.mol, orbitals=self._get_ao_basis_functions(), @@ -352,7 +372,6 @@ def theoryname(self): return '%s/%s' % (th, p.basis) - def _parse_fci_vector(self, ci_vecmat): """ Translate the PySCF FCI matrix into a dictionary of configurations and weights @@ -462,3 +481,50 @@ def _get_scf_matrices(self, mf, ao_mats): scf_matrices.update(ao_mats) return scf_matrices + +def _get_multiconf_dipoles(basis, mcstate, nstates): + """ Compute dipoles and transition dipoles. Adapted from PySCF examples + + Note: + Dipole moments are computed using the center of the nuclear charge as the origin. Dipole + moments will need to be annotated or translated appropriately for charges systems. + + Args: + basis (): + mcstate (): + nstates (): + + Returns: + List[u.Vector[dipole]]: Dipole moments for each state + Mapping[Tuple[int, int], u.Vector[dipole]]: mapping from pairs of state ids to transition + dipole moments + + References: + https://github.com/sunqm/pyscf/blob/e4d824853c49b7c19eb35cd6f9fe6ea675de932d/examples/1-advanced/030-transition_dipole.py + """ + nuc_charges = [basis.atom_charge(i) for i in xrange(basis.natm)] + nuc_coords = [basis.atom_coord(i) for i in xrange(basis.natm)] + nuc_charge_center = np.einsum('z,zx->x', nuc_charges, nuc_coords)/sum(nuc_charges) + basis.set_common_orig_(nuc_charge_center) + nuc_dip = np.einsum('i,ix->x', nuc_charges, nuc_coords-nuc_charge_center) * u.a0 * u.q_e + + dip_ints = basis.intor('cint1e_r_sph', comp=3) + orbcas = mcstate.mo_coeff[:, mcstate.ncore:mcstate.ncore+mcstate.ncas] + + dipoles, transitions = [], {} + for istate in xrange(nstates): + for fstate in xrange(istate, nstates): + t_dm1 = mcstate.fcisolver.trans_rdm1(mcstate.ci[istate], mcstate.ci[fstate], + mcstate.ncas, mcstate.nelecas) + t_dm1_ao = reduce(np.dot, (orbcas, t_dm1, orbcas.T)) + moment = np.einsum('xij,ji->x', dip_ints, t_dm1_ao) * u.a0 * u.q_e + + if istate == fstate: + dipoles.append(moment) + else: + transitions[istate, fstate] = transitions[fstate, istate] = moment + + for idip, d in enumerate(dipoles): + dipoles[idip] = nuc_dip - d + + return dipoles, transitions diff --git a/moldesign/molecules/trajectory.py b/moldesign/molecules/trajectory.py index 9264c9d..9143264 100644 --- a/moldesign/molecules/trajectory.py +++ b/moldesign/molecules/trajectory.py @@ -283,7 +283,7 @@ def __getattr__(self, item): if item in self._property_keys: # return a list of properties for each frame return self.slice_frames(item) else: - raise AttributeError + raise AttributeError('Frame %s has no attribute %s' % (self, item)) def rmsd(self, atoms=None, reference=None): r""" Calculate root-mean-square displacement for each frame in the trajectory. diff --git a/moldesign/orbitals/gaussians.py b/moldesign/orbitals/gaussians.py index 893db5e..7e25c39 100644 --- a/moldesign/orbitals/gaussians.py +++ b/moldesign/orbitals/gaussians.py @@ -11,12 +11,15 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. +"""Note: this code is currently unused and untested and will be refactored soon""" import numpy as np from .orbitals import Orbital, SHELLS, SPHERICALNAMES class AbstractFunction(object): + """ Abstract base class for basis functions + """ def normalize(self): """ Give this function unit norm by adjusting its coefficient """ diff --git a/moldesign/parameters.py b/moldesign/parameters.py index 25ec4ed..eef0aac 100644 --- a/moldesign/parameters.py +++ b/moldesign/parameters.py @@ -34,7 +34,11 @@ def __init__(self, parameter, operator, checkval): self.checkval = checkval def __call__(self, paramset): - """Returns: + """ + Args: + paramset (dict): + + Returns: bool: True if the parameter is releveant, false otherwise """ #TODO: anything relevant to an irrelevant parameter is also irrelevant @@ -145,9 +149,9 @@ def named_dict(l): Parameter('functional', 'DFT Functional', default='b3lyp', choices=FUNCTIONALS, # TODO: allow separate x and c functionals relevance=WhenParam('theory', isin, 'dft rks ks uks'.split())), - Parameter('active_electrons', 'Active electrons', type=int, + Parameter('active_electrons', 'Active electrons', type=int, default=2, relevance=WhenParam('theory', isin, ['casscf', 'mcscf', 'casci'])), - Parameter('active_orbitals', 'Active orbitals', type=int, + Parameter('active_orbitals', 'Active orbitals', type=int, default=2, relevance=WhenParam('theory', isin, ['casscf', 'mcscf', 'casci'])), Parameter('state_average', 'States to average for SCF', type=int, default=1, relevance=WhenParam('theory', isin, ['casscf', 'mcscf'])), diff --git a/moldesign/units/constants.py b/moldesign/units/constants.py index e146228..59c8b0c 100644 --- a/moldesign/units/constants.py +++ b/moldesign/units/constants.py @@ -48,6 +48,7 @@ nm = ureg.nanometers ang = angstrom = ureg.ang molar = ureg.mole / ureg.liter +debye = ureg.debye # sets default unit systems def_length = angstrom From 74ef11e070d87eb622a31f15d8af8eec56564097 Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Tue, 27 Sep 2016 16:35:51 -0700 Subject: [PATCH 59/64] Verify and clean up examples for 0.7.3 release --- .../Example 3. Simulate HIV Protease.ipynb | 537 ------------------ .../Example 1. Build and simulate DNA.ipynb | 80 +-- ...Example 2. UV-vis absorption spectra.ipynb | 3 +- ...le 3. Simulating a crystal structure.ipynb | 89 +-- .... HIV Protease bound to an inhibitor.ipynb | 90 ++- .../Example 5. Enthalpic barriers.ipynb | 193 ++++--- moldesign/_notebooks/Getting Started.ipynb | 23 +- .../Tutorial 1. Making a molecule.ipynb | 56 +- .../Tutorial 2. Biochemical basics.ipynb | 93 +-- .../Tutorial 3. Quantum Chemistry.ipynb | 378 ++++++++++++ .../_notebooks/nbscripts/gen_example_md.py | 11 + .../_notebooks/nbscripts/strip_nb_output.py | 2 + 12 files changed, 653 insertions(+), 902 deletions(-) delete mode 100644 moldesign/_notebooks/.building/Example 3. Simulate HIV Protease.ipynb create mode 100644 moldesign/_notebooks/Tutorial 3. Quantum Chemistry.ipynb create mode 100755 moldesign/_notebooks/nbscripts/gen_example_md.py diff --git a/moldesign/_notebooks/.building/Example 3. Simulate HIV Protease.ipynb b/moldesign/_notebooks/.building/Example 3. Simulate HIV Protease.ipynb deleted file mode 100644 index efe8801..0000000 --- a/moldesign/_notebooks/.building/Example 3. Simulate HIV Protease.ipynb +++ /dev/null @@ -1,537 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "About      Forum      Issues      Tutorials      Documentation\n", - "\n", - "![Molecular Design Toolkit](img/Top.png)\n", - "
    \n", - "\n", - "

    Example 3: Simulating HIV Protease

    \n", - "\n", - "This notebook prepares a co-crystallized protein / small molecule ligand structure from [the PDB database](http://www.rcsb.org/pdb/home/home.do) and prepares it for molecular dynamics simulation. \n", - "\n", - "---" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "import moldesign as mdt\n", - "import moldesign.units as u" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "## I. The crystal structure\n", - "\n", - "First, we'll download and investigate the [3AID crystal structure](http://www.rcsb.org/pdb/explore.do?structureId=3aid).\n", - "\n", - "### A. Download and visualize" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "mol = mdt.read('../data/3AID.pdb')\n", - "mol" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### B. Try assigning a forcefield" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This structure is not ready for MD - this command will raise a `ParameterizationError` Exception. After running this calculation, click on the **Errors/Warnings** tab to see why." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "newmol = mdt.assign_forcefield(mol)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You should see 3 errors: \n", - " * The residue name `ARQ` not recognized\n", - " * Atom `HD1` in residue `HIS69`, chain `A` was not recognized\n", - " * Atom `HD1` in residue `HIS69`, chain `B` was not recognized\n", - " \n", - "(There's also a warning about bond distances, but these can be generally be fixed with an energy minimization before running dynamics)\n", - "\n", - "We'll deal with the histidine residues first." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## II. Prepping the protein\n", - "\n", - "### A. Assign histidine's protonation\n", - "Histidine is notoriously tricky, because it exists in no less than three different protonation states at biological pH (7.4) - the \"delta-protonated\" form, referred to with residue name `HID`; the \"epsilon-protonated\" form aka `HIE`; and the doubly-protonated form `HIP`, which has a +1 charge. These are drawn below." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "hid = mdt.from_smiles('O=C(O)[C@@H](N)Cc1c[nH]cn1')\n", - "hid.draw3d()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "hie = mdt.from_smiles('O=C(O)[C@@H](N)Cc1cnc[nH]1')\n", - "hie.draw3d()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Crystallographers usually can't resolve hydrogen positions, and so can't tell you which form of histidine you have. PDB files thus refer to histidine as `HIS`, which leaves the protonation state ambiguous. In general, picking the right protontation is both extremely important and extremely difficult.\n", - "\n", - "We're in luck for this simulation, however - the histidines are located on the surface of the protein, quite far from the drug binding site, and so their state is not likely to be important for a drug binding calculation. Further, the presence of the `HD1` atoms in the crystal structure indicates that we should probably go ahead and change our `HIS` residues to `HID`.\n", - "\n", - "The fix is easy - just change the name. We'll rerun the paramterization to confirm that the histidine errors disappeared (although the small molecule errors remain)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "for residue in mol.residues:\n", - " if residue.resname == 'HIS':\n", - " residue.resname = 'HID'\n", - " print 'I changed %s in chain %s to HID' % (residue.name, residue.chain.name)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "md_ready_molecule = mdt.assign_forcefield(mol)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### B. Remove the ligand\n", - "The following cell creates a new ``Molecule`` with only the protein - no solvent or bound ligand." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "receptor_structure = mdt.Molecule([atom for atom in mol.atoms if atom.residue.type == 'protein'])\n", - "receptor = mdt.assign_forcefield(receptor_structure)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### C. Prep for dynamics" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "receptor.set_energy_model(mdt.models.OpenMMPotential, implicit_solvent='obc', cutoff=8.0*u.angstrom)\n", - "receptor.set_integrator(mdt.integrators.OpenMMLangevin, timestep=2.0*u.fs)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "receptor.configure_methods()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### D. Equilibrate the protein\n", - "The next series of cells first minimize the crystal structure to remove clashes, then heats the system to 300K." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "mintraj = receptor.minimize()\n", - "mintraj.draw()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "scrolled": true - }, - "outputs": [], - "source": [ - "# Restrain the peptide backbone:\n", - "for residue in receptor.residues:\n", - " for atom in residue.backbone:\n", - " receptor.constrain_atom(atom)\n", - "print 'Constrained %d atoms' % len(receptor.constraints)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "scrolled": false - }, - "outputs": [], - "source": [ - "warmup = receptor.run(20.0*u.ps)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "receptor.clear_constraints()\n", - "receptor.integrator.params.frame_interval=0.1*u.ps\n", - "equil = receptor.run(5.0*u.ps)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "fulltraj = mintraj + warmup + equil\n", - "fulltraj.draw()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## III. Parameterizing a small molecule\n", - "We'll use the GAFF (generalized Amber force field) to create force field parameters for the small ligand.\n", - "\n", - "### A. Isolate the small molecule\n", - "Click on the ligand to select it, then we'll use that selection to create a new molecule." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "sel = mdt.widgets.ResidueSelector(mol)\n", - "sel" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "drugres = mdt.Molecule(sel.selected_residues[0])\n", - "drugres.draw2d()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### B. Assign bond orders and hydrogens\n", - "The crystal structure doesn't provide indicate bond orders or hydrogens, but we can add those:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "drugmol = mdt.add_hydrogen(mdt.guess_bond_orders((drugres)))\n", - "drugmol.draw2d()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "drugmol.draw()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### C. Assign partial charges and a GAFF forcefield" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To assign force field parameters to this molecule, each atom will need 1) a GAFF atom type, and 2) a partial charge.\n", - "\n", - "For the charges, we'll use the fast (but not particularly accurate) AM1-BCC method to compute partial charges for the atoms." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "assert drugmol.charge == +1" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "result = drugmol.get_gaff_parameters(charge='am1-bcc', )" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "print drugmol.write(format='pdb')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "mol = bb.from_smiles('C1=CCNOC1')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "#include commands as file ... stdout, stderr in main display" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "reload(bb.interfaces.ambertools)\n", - "bb.interfaces.ambertools.am1_bcc_charges(mol)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "mol = mdt.from_name('bipyridine')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "mol.draw(height=300, width=300, show_2dhydrogens=True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "mdt.widgets.Symmetrizer(mdt.from_smiles('CC'))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 2", - "language": "python", - "name": "python2" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 2 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.12" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} \ No newline at end of file diff --git a/moldesign/_notebooks/Example 1. Build and simulate DNA.ipynb b/moldesign/_notebooks/Example 1. Build and simulate DNA.ipynb index 2ecfa0a..3625038 100644 --- a/moldesign/_notebooks/Example 1. Build and simulate DNA.ipynb +++ b/moldesign/_notebooks/Example 1. Build and simulate DNA.ipynb @@ -24,9 +24,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", @@ -64,10 +62,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false, - "scrolled": true - }, + "metadata": {}, "outputs": [], "source": [ "dna_structure = mdt.build_dna_helix('ACTGACTG', helix_type='b')\n", @@ -77,9 +72,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "dna_structure" @@ -98,9 +91,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "mol = mdt.assign_forcefield(dna_structure)" @@ -119,10 +110,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false, - "scrolled": true - }, + "metadata": {}, "outputs": [], "source": [ "rs = mdt.widgets.ResidueSelector(mol)\n", @@ -132,9 +120,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "if len(rs.selected_atoms) == 0:\n", @@ -146,9 +132,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "for residue in rs.selected_residues:\n", @@ -176,9 +160,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "mol.set_energy_model(mdt.models.OpenMMPotential,\n", @@ -201,9 +183,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "mol.configure_methods()" @@ -221,10 +201,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false, - "scrolled": false - }, + "metadata": {}, "outputs": [], "source": [ "trajectory = mol.minimize(nsteps=200)\n", @@ -234,16 +211,13 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "plot(trajectory.potential_energy)\n", "\n", "xlabel('steps');ylabel('energy / %s' % trajectory.unit_system.energy)\n", - "title('Energy relaxation')\n", - "grid()" + "title('Energy relaxation'); grid('on')" ] }, { @@ -257,10 +231,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false, - "scrolled": true - }, + "metadata": {}, "outputs": [], "source": [ "traj = mol.run(run_for=25.0*u.ps)\n", @@ -278,30 +249,25 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "plot(traj.time, traj.kinetic_energy, label='kinetic energy')\n", "plot(traj.time, traj.potential_energy - traj.potential_energy[0], label='potential_energy')\n", "xlabel('time / {time.units}'.format(time=traj.time))\n", "ylabel('energy / {energy.units}'.format(energy=traj.kinetic_energy))\n", - "title('Energy vs. time')\n", - "legend(loc='center right')" + "title('Energy vs. time'); legend(); grid('on')" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "# Using the trajectory's 'plot' method will autogenerate axes labels with the appropriate units\n", "traj.plot('time','kinetic_temperature')\n", - "title('Temperature')" + "title('Temperature'); grid('on')" ] }, { @@ -315,16 +281,16 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "from ipywidgets import interact_manual\n", "from IPython.display import display\n", "\n", "rs = mdt.widgets.ResidueSelector(mol)\n", - "def plot_rmsd(): plot(traj.time, traj.rmsd(rs.selected_atoms))\n", + "def plot_rmsd(): \n", + " plot(traj.time, traj.rmsd(rs.selected_atoms))\n", + " xlabel('time / fs'); ylabel(u'RMSD / Ã…')\n", "interact_manual(plot_rmsd)\n", "rs" ] @@ -332,9 +298,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [] } diff --git a/moldesign/_notebooks/Example 2. UV-vis absorption spectra.ipynb b/moldesign/_notebooks/Example 2. UV-vis absorption spectra.ipynb index 35d4708..67ac5e6 100644 --- a/moldesign/_notebooks/Example 2. UV-vis absorption spectra.ipynb +++ b/moldesign/_notebooks/Example 2. UV-vis absorption spectra.ipynb @@ -72,7 +72,8 @@ "outputs": [], "source": [ "qmmol = mdt.from_name('benzene')\n", - "qmmol.set_energy_model(mdt.models.CASSCF, active_electrons=6, active_orbitals=6, state_average=6, basis='sto-3g')" + "qmmol.set_energy_model(mdt.models.CASSCF, active_electrons=6,\n", + " active_orbitals=6, state_average=6, basis='sto-3g')" ] }, { diff --git a/moldesign/_notebooks/Example 3. Simulating a crystal structure.ipynb b/moldesign/_notebooks/Example 3. Simulating a crystal structure.ipynb index 58dece5..4bfd966 100644 --- a/moldesign/_notebooks/Example 3. Simulating a crystal structure.ipynb +++ b/moldesign/_notebooks/Example 3. Simulating a crystal structure.ipynb @@ -27,9 +27,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", @@ -68,10 +66,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false, - "scrolled": true - }, + "metadata": {}, "outputs": [], "source": [ "xtal = mdt.from_pdb('1kbu')\n", @@ -90,9 +85,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "assembly = mdt.build_assembly(xtal,'1')\n", @@ -109,9 +102,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "assembly" @@ -141,9 +132,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "query = {'residue.type':'dna'}\n", @@ -155,9 +144,7 @@ }, { "cell_type": "markdown", - "metadata": { - "collapsed": false - }, + "metadata": {}, "source": [ "## D. Prep for simulation\n", "Next, we'll assign a forcefield and energy model, then minimize the structure." @@ -166,9 +153,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "dna = mdt.assign_forcefield(dna_only)" @@ -177,9 +162,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "dna.set_energy_model(mdt.models.OpenMMPotential, implicit_solvent='obc')\n", @@ -189,9 +172,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "minimization = dna.minimize()" @@ -200,9 +181,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "minimization.draw()" @@ -219,9 +198,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "# Freeze the backbone:\n", @@ -233,9 +210,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "dna.set_integrator(mdt.integrators.OpenMMLangevin,\n", @@ -255,9 +230,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "equil1 = dna.run(20.0*u.ps)" @@ -266,9 +239,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "equil1.draw()" @@ -284,9 +255,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "dna.clear_constraints()\n", @@ -296,9 +265,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "equil = equil1 + equil2\n", @@ -308,9 +275,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "plot(equil2.time, equil2.rmsd())\n", @@ -338,9 +303,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "trajectory = dna.run(40.0*u.ps)" @@ -349,9 +312,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "trajectory.draw()" @@ -370,9 +331,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "trajectory.write('holliday_traj.P.gz')" @@ -388,9 +347,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "traj = mdt.read('holliday_traj.P.gz')" @@ -399,9 +356,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "traj.draw()" diff --git a/moldesign/_notebooks/Example 4. HIV Protease bound to an inhibitor.ipynb b/moldesign/_notebooks/Example 4. HIV Protease bound to an inhibitor.ipynb index 608ece8..9e9c13d 100644 --- a/moldesign/_notebooks/Example 4. HIV Protease bound to an inhibitor.ipynb +++ b/moldesign/_notebooks/Example 4. HIV Protease bound to an inhibitor.ipynb @@ -21,9 +21,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "import moldesign as mdt\n", @@ -68,9 +66,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "protease = mdt.from_pdb('3AID')\n", @@ -80,9 +76,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "protease.draw()" @@ -105,9 +99,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "newmol = mdt.assign_forcefield(protease)" @@ -141,9 +133,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "sel = mdt.widgets.ResidueSelector(protease)\n", @@ -153,9 +143,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "drugres = mdt.Molecule(sel.selected_residues[0])\n", @@ -173,9 +161,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "drugmol = mdt.add_missing_data(drugres)\n", @@ -185,9 +171,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "drugmol.draw2d(width=700, show_hydrogens=True)" @@ -207,9 +191,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "drug_parameters = mdt.parameterize(drugmol, charges='gasteiger')" @@ -231,9 +213,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "dehydrated = mdt.Molecule([atom for atom in protease.atoms if atom.residue.type != 'water'])" @@ -252,9 +232,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "mdt.guess_histidine_states(dehydrated)" @@ -275,9 +253,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "sim_mol = mdt.assign_forcefield(dehydrated, parameters=drug_parameters)" @@ -295,9 +271,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "sim_mol.set_energy_model(mdt.models.OpenMMPotential, implicit_solvent='obc', cutoff=8.0*u.angstrom)\n", @@ -309,16 +283,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### D. Equilibrate the protein\n", + "### C. Equilibrate the protein\n", "The next series of cells first minimize the crystal structure to remove clashes, then heats the system to 300K." ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "mintraj = sim_mol.minimize()\n", @@ -328,9 +300,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "traj = sim_mol.run(20*u.ps)" @@ -339,14 +309,19 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "viewer = traj.draw(display=True)\n", "viewer.autostyle()" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { @@ -366,6 +341,23 @@ "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.12" + }, + "nav_menu": {}, + "toc": { + "navigate_menu": true, + "number_sections": false, + "sideBar": true, + "threshold": 6, + "toc_cell": true, + "toc_section_display": "block", + "toc_window_display": false + }, + "toc_position": { + "height": "974px", + "left": "0px", + "right": "1166px", + "top": "106px", + "width": "212px" } }, "nbformat": 4, diff --git a/moldesign/_notebooks/Example 5. Enthalpic barriers.ipynb b/moldesign/_notebooks/Example 5. Enthalpic barriers.ipynb index be4b237..e49a2fe 100644 --- a/moldesign/_notebooks/Example 5. Enthalpic barriers.ipynb +++ b/moldesign/_notebooks/Example 5. Enthalpic barriers.ipynb @@ -13,23 +13,21 @@ "\n", "![Molecular Design Toolkit](img/Top.png)\n", "
    \n", - "

    Example 5: Calculating enthalpic barriers with constraints minimizations

    \n", + "

    Example 5: Calculating torsional barriers with relaxation

    \n", "\n", "---\n", "\n", - "Here, we calculate a torsional rotation barrier of a common amino acid.\n", + "This workflow calculates the enthalpic barrier of a small alkane.\n", "\n", " - _Author_: [Aaron Virshup](https://github.com/avirshup), Autodesk Research
    \n", - " - _Created on_: July 1, 2016\n", - " - _Tags_: quantum chemistry, PES, isomerization, reaction coordinate\n" + " - _Created on_: September 23, 2016\n", + " - _Tags_: reaction path, constrained minimization, torsion, enthalpic\n" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "import moldesign as mdt\n", @@ -38,27 +36,47 @@ "%matplotlib notebook\n", "from matplotlib.pyplot import *\n", "try: import seaborn # optional, makes graphs look better\n", - "except ImportError: pass" + "except ImportError: pass\n", + "\n", + "u.default.energy = u.kcalpermol # use kcal/mol for energy" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Contents\n", + "=======\n", + "---\n", + " - [I. Create and minimize the molecule](#I.-Create-and-minimize-the-molecule)\n", + " - [II. Select the torsional bond](#II.-Select-the-torsional-bond)\n", + " - [III. Rigid rotation scan](#III.-Rigid-rotation-scan)\n", + " - [IV. Relaxed rotation scan](#IV.-Relaxed-rotation-scan)\n", + " - [V. Plot the potential energy surfaces](#V.-Plot-the-potential-energy-surfaces)\n", + " - [VI. Investigate conformational changes](#VI.-Investigate-conformational-changes)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# I. Create and minimize the molecule" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ - "mol = mdt.from_name('butane')\n", + "mol = mdt.from_smiles('CCCC')\n", "mol.draw()" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "mol.set_energy_model(mdt.models.GAFF)\n", @@ -68,31 +86,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ - "minimization = mol.minimize(nsteps=40)" + "minimization = mol.minimize(nsteps=40)\n", + "minimization.draw()" ] }, { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "cell_type": "markdown", + "metadata": {}, "source": [ - "minimization.draw()" + "# II. Select the torsional bond\n", + "\n", + "Next, we use the `BondSelector` to pick the bond that we'll rotate around." ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "bs = mdt.widgets.BondSelector(mol)\n", @@ -102,36 +115,50 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "twist = mdt.DihedralMonitor(bs.selected_bonds[0])\n", "twist" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# III. Rigid rotation scan\n", + "\n", + "First, we'll perform a simple energy scan, simply by rotating around the bond and calculating the energy at each point.\n", + "\n", + "This gives us only an _upper bound_ on the enthalpic rotation barrier. This is because we keep the molecule rigid, except for the single rotating bond." + ] + }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, + "outputs": [], + "source": [ + "angles = np.arange(-150, 210, 5) * u.degree" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, "outputs": [], "source": [ "rigid = mdt.Trajectory(mol)\n", - "for angle in np.arange(0.0, 360, 5) * u.degree:\n", + "for angle in angles:\n", " twist.value = angle\n", " mol.calculate()\n", - " rigid.new_frame(annotation='angle: %s' % twist.value.to(u.degrees))" + " rigid.new_frame(annotation='angle: %s, energy: %s' % (twist.value.to(u.degrees), mol.potential_energy))" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "rigid.draw()" @@ -140,39 +167,45 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "figure()\n", - "plot(twist(rigid).to(u.degrees), rigid.potential_energy)\n", - "xlabel(u'dihedral / º'); ylabel('energy / eV')" + "plot(angles, rigid.potential_energy)\n", + "xlabel(u'dihedral / º'); ylabel('energy / kcal/mol')\n", + "xticks(np.arange(-120,211,30))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# IV. Relaxed rotation scan\n", + "\n", + "Next, we'll get the *right* barrier (up to the accuracy of the energy model).\n", + "\n", + "Here, we'll rotate around the bond, but then perform a _constrained minimization_ at each rotation point. This will allow all other degrees of freedom to relax, thus finding lower energies at each point along the path. \n", + "\n", + "_Note_: In order to break any spurious symmetries, this loop also adds a little bit of random noise to each structure before performing the minimization." ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ - "mol.clear_constraints()\n", - "mol.positions = rigid.positions[0]" + "constraint = twist.constrain()" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ - "constraint = twist.constrain()\n", "relaxed = mdt.Trajectory(mol)\n", - "for angle in np.arange(0, 360, 5) * u.degree:\n", + "for angle in angles:\n", " print angle,':',\n", " \n", " #add random noise to break symmetry\n", @@ -183,42 +216,56 @@ " constraint.value = angle\n", " \n", " t = mol.minimize(nsteps=100)\n", - " relaxed.new_frame(annotation='angle: %s' % twist.value.to(u.degrees))" + " relaxed.new_frame(annotation='angle: %s, energy: %s' % (twist.value.to(u.degrees), mol.potential_energy))" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "relaxed.draw()" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# V. Plot the potential energy surfaces\n", + "\n", + "If you plotted butane's rotation around its central bond, you'll see [three stable points](https://en.wikipedia.org/wiki/Alkane_stereochemistry#Conformation): two at about ±60º (the _gauche_ conformations), and one at 180º (the _anti_ conformation).\n", + "\n", + "You will likely see a large differences in the energetics of the relaxed and rigid scans; depending on the exact starting conformation, the rigid scan can overestimate the rotation barrier by as much as 5 kcal/mol!" + ] + }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "figure()\n", - "x_axis = twist(rigid).to(u.degrees) \n", - "plot(x_axis, rigid.potential_energy, label='rigid')\n", - "plot(x_axis, relaxed.potential_energy, label='relaxed')\n", - "plot(x_axis, rigid.potential_energy - relaxed.potential_energy, label='rigid - relaxed')\n", - "xlabel(u'dihedral / º'); ylabel('energy / eV'); legend()" + "plot(angles, rigid.potential_energy, label='rigid')\n", + "plot(angles, relaxed.potential_energy, label='relaxed')\n", + "plot(angles, abs(rigid.potential_energy - relaxed.potential_energy), label='error')\n", + "xlabel(u'dihedral / º'); ylabel('energy / kcal/mol'); legend()\n", + "xticks(np.arange(-120,211,30))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# VI. Investigate conformational changes\n", + "\n", + "This cell illustrates a simple interactive \"app\" - select the bonds you're interested in, then click the \"show_dihedral\" button to show their relaxed angles as a function of the central twist during the `relaxed` scan." ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "from ipywidgets import interact_manual\n", @@ -228,7 +275,7 @@ " figure()\n", " for bond in bs.selected_bonds:\n", " dihemon = mdt.DihedralMonitor(bond)\n", - " plot(twist(relaxed).to(u.degrees), dihemon(relaxed).to(u.degrees), label=str(bond))\n", + " plot(angles, dihemon(relaxed).to(u.degrees), label=str(bond))\n", " legend(); xlabel(u'central twist / º'); ylabel(u'bond twist / º')\n", "interact_manual(show_dihedral)\n", "bs" @@ -237,9 +284,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [] } diff --git a/moldesign/_notebooks/Getting Started.ipynb b/moldesign/_notebooks/Getting Started.ipynb index 52f333a..dfa0be7 100644 --- a/moldesign/_notebooks/Getting Started.ipynb +++ b/moldesign/_notebooks/Getting Started.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "markdown", - "metadata": { - "collapsed": true - }, + "metadata": {}, "source": [ "![Molecular Design Toolkit](img/Header.png)\n", "\n", @@ -14,15 +12,18 @@ "\n", "Get started with these step-by-step demonstration notebooks. Check out the accompanying [video tutorials](https://www.youtube.com/channel/UCRmzThLOYJ3Tx1e81fXRfOA).\n", "\n", - "* [Tutorial 1: Making a molecule.ipynb](Tutorial 1. Making a molecule.ipynb)\n", - "* [Tutorial 2: Biochemical basics](Tutorial 2. Biochemical basics.ipynb)\n", + "* [Tutorial 1. Making a molecule](Tutorial 1. Making a molecule.ipynb)\n", + "* [Tutorial 2. Biochemical basics](Tutorial 2. Biochemical basics.ipynb)\n", + "* [Tutorial 3. Quantum Chemistry](Tutorial 3. Quantum Chemistry.ipynb)\n", "\n", "\n", "# Keep going\n", "\n", - "* [Example 1. Build and simulate DNA.ipynb](Example 1. Build and simulate DNA.ipynb)\n", - "* [Example 2. Running Quantum Chemistry.ipynb](Example 2. Running Quantum Chemistry.ipynb)\n", - "* [Example 3. Simulating a crystal structure.ipynb](Example 3. Simulating a crystal structure.ipynb)\n", + "* [Example 1. Build and simulate DNA](Example 1. Build and simulate DNA.ipynb)\n", + "* [Example 2. UV-vis absorption spectra](Example 2. UV-vis absorption spectra.ipynb)\n", + "* [Example 3. Simulating a crystal structure](Example 3. Simulating a crystal structure.ipynb)\n", + "* [Example 4. HIV Protease bound to an inhibitor](Example 4. HIV Protease bound to an inhibitor.ipynb)\n", + "* [Example 5. Enthalpic barriers](Example 5. Enthalpic barriers.ipynb)\n", "\n", "\n", "# Read the docs\n", @@ -51,9 +52,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [] } @@ -67,7 +66,7 @@ "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2.0 + "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", diff --git a/moldesign/_notebooks/Tutorial 1. Making a molecule.ipynb b/moldesign/_notebooks/Tutorial 1. Making a molecule.ipynb index 95d7fd6..24fa80b 100644 --- a/moldesign/_notebooks/Tutorial 1. Making a molecule.ipynb +++ b/moldesign/_notebooks/Tutorial 1. Making a molecule.ipynb @@ -42,9 +42,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "import moldesign as mdt\n", @@ -63,9 +61,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "mdt.configure()" @@ -85,9 +81,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "molecule = mdt.read('data/butane.xyz')" @@ -103,9 +97,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "molecule" @@ -122,9 +114,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "molecule.draw()" @@ -151,9 +141,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "molecule.set_energy_model(mdt.models.RHF, basis='sto-3g')\n", @@ -163,9 +151,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "print properties.keys()\n", @@ -183,9 +169,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "mintraj = molecule.minimize()" @@ -194,9 +178,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "mintraj.draw_orbitals()" @@ -212,9 +194,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "molecule.write('my_first_molecule.xyz')" @@ -223,9 +203,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "mintraj.write('my_first_minimization.P.gz')" @@ -233,9 +211,7 @@ }, { "cell_type": "markdown", - "metadata": { - "collapsed": false - }, + "metadata": {}, "source": [ "## 7. Examine it\n", "There are any number of directions to go from here. For this tutorial, try click on some bonds to check the molecule's geometry." @@ -244,9 +220,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "mdt.widgets.GeometryBuilder(molecule)" @@ -262,9 +236,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "mdt.dihedral(*molecule.atoms[:4]).to(u.degrees)" diff --git a/moldesign/_notebooks/Tutorial 2. Biochemical basics.ipynb b/moldesign/_notebooks/Tutorial 2. Biochemical basics.ipynb index ad8d731..e2c1f15 100644 --- a/moldesign/_notebooks/Tutorial 2. Biochemical basics.ipynb +++ b/moldesign/_notebooks/Tutorial 2. Biochemical basics.ipynb @@ -19,13 +19,17 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "import moldesign as mdt\n", - "from moldesign import units as u" + "from moldesign import units as u\n", + "\n", + "%matplotlib inline\n", + "import numpy as np\n", + "from matplotlib.pylab import *\n", + "try: import seaborn\n", + "except ImportError: pass" ] }, { @@ -44,9 +48,7 @@ }, { "cell_type": "markdown", - "metadata": { - "collapsed": true - }, + "metadata": {}, "source": [ "# 1. Download from PDB\n", "In this example, we'll download `1YU8`, a structure of the Villin Headpiece." @@ -55,9 +57,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "one_yu8 = mdt.from_pdb('1YU8')\n", @@ -67,9 +67,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "one_yu8" @@ -85,9 +83,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "headpiece = mdt.Molecule([res for res in one_yu8.residues if res.type == 'protein'])" @@ -96,9 +92,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "protein = mdt.assign_forcefield(headpiece)" @@ -114,9 +108,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "protein.set_energy_model(mdt.models.OpenMMPotential, implicit_solvent='obc')" @@ -125,9 +117,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "mintraj = protein.minimize()" @@ -136,9 +126,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "mintraj.draw(display=False)" @@ -154,9 +142,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "protein.set_integrator(mdt.integrators.OpenMMLangevin,\n", @@ -168,9 +154,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "traj = protein.run(50*u.ps)" @@ -179,9 +163,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "traj.draw()" @@ -198,48 +180,35 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ - "%matplotlib inline\n", - "from matplotlib import pyplot as plt" + "plot(traj.time, traj.kinetic_energy)\n", + "xlabel('time / %s' % u.default.time); ylabel('energy / %s' % u.default.energy)" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ - "plt.plot(traj.time, traj.kinetic_energy)" + "myres = protein.chains['1'].residues['PHE45']\n", + "plot(traj.time, traj.dihedral(myres['CG'], myres['CB']).to(u.degrees))\n", + "title('dihedral angle vs time')\n", + "xlabel('time / %s' % u.default.time); ylabel('angle / degrees')" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ - "myres = protein.chains['1'].residues['PHE45']\n", - "plt.plot(traj.time, traj.dihedral(myres['CG'], myres['CB']).to(u.degrees)); plt.title('dihedral angle vs time')\n", - "plt.figure()\n", - "plt.plot(traj.time, traj.distance(myres['CG'], myres['CB'])); plt.title('bond length vs time')" + "plot(traj.time, traj.distance(myres['CG'], myres['CB']))\n", + "plt.title('bond length vs time')\n", + "xlabel('time / %s' % u.default.time); ylabel('distance / %s' % u.default.length)" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] } ], "metadata": { diff --git a/moldesign/_notebooks/Tutorial 3. Quantum Chemistry.ipynb b/moldesign/_notebooks/Tutorial 3. Quantum Chemistry.ipynb new file mode 100644 index 0000000..4893528 --- /dev/null +++ b/moldesign/_notebooks/Tutorial 3. Quantum Chemistry.ipynb @@ -0,0 +1,378 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "About      Forum      Issues      Tutorials      Documentation\n", + "\n", + "![Molecular Design Toolkit](img/Top.png)\n", + "\n", + "\n", + "

    Tutorial 3: Intro to Quantum Chemistry

    \n", + "---\n", + "\n", + "This tutorial shows how to select a quantum chemistry method, visualize orbitals, and analyze the electronic wavefunction." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "import numpy as np\n", + "from matplotlib.pylab import *\n", + "try: import seaborn #optional, makes plots look nicer\n", + "except ImportError: pass\n", + "\n", + "import moldesign as mdt\n", + "from moldesign import units as u" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## I. Build and minimize minimal basis set hydrogen\n", + "\n", + "### A. Build the molecule\n", + "This cell builds H2 by creating the two atoms, and explicitly setting their positions.\n", + "\n", + "**Try editing this cell to**:\n", + " * Create HeH+\n", + " * Create H3+\n", + " * Change the atoms' initial positions" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "atom1 = mdt.Atom('H')\n", + "atom2 = mdt.Atom('H')\n", + "atom1.bond_to(atom2,1)\n", + "atom2.x = 2.0 * u.angstrom\n", + "\n", + "h2 = mdt.Molecule([atom1,atom2], name='H2', charge=0)\n", + "h2.draw(height=300)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### B. Run a hartree-fock calculation\n", + "The next cell adds the RHF energy model to our molecule, then triggers a calculation.\n", + "\n", + "**Try editing this cell to**:\n", + " * Change the atomic basis\n", + " * Get a list of other available energy models (type `mdt.models.` and then hit the `[tab]` key)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "h2.set_energy_model(mdt.models.RHF, basis='3-21g')\n", + "h2.calculate()\n", + "\n", + "print 'Calculated properties:', h2.properties.keys()\n", + "print 'Potential energy:', h2.potential_energy" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### C. Visualize the orbitals\n", + "After running the calculation, we have enough information to visualize the molecular orbitals." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "h2.draw_orbitals()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### D. Minimize the energy\n", + "Here, we'll run a quick energy minimization then visualize how the hydrogen nuclei AND the atomic wavefunctions changed." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "minimization = h2.minimize(frame_interval=1, nsteps=10)\n", + "minimization.draw_orbitals()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# II. Analyzing the wavefunction\n", + "\n", + "The wavefunction created during QM calculations will be stored as an easy-to-analyze python object:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "wfn = h2.wfn\n", + "wfn" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## A. The atomic basis set\n", + "First, let's examine the atomic orbitals. The overlaps, fock matrix, coefficents, and density matrix are all available as 2D numpy arrays (with units where applicable):" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Overlap matrix\n", + "wfn.aobasis.overlaps" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Fock matrix\n", + "matshow(wfn.aobasis.fock.value_in(u.eV))\n", + "colorbar(label='fock element / eV')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# The AO orbital coefficients (in the AO basis, this is the identity)\n", + "wfn.aobasis.coeffs" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "wfn.aobasis.density_matrix" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The 1- and 2-electron parts of the hamiltonian are also available:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "matshow(wfn.aobasis.h1e.value_in(u.eV))\n", + "colorbar(label='1-electron hamiltonian term / eV')\n", + "\n", + "matshow(wfn.aobasis.h2e.value_in(u.eV))\n", + "colorbar(label='2-electron hamiltonian term / eV')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## B. The canonical molecular orbitals\n", + "\n", + "These are the orbitals that result from Hartree-Fock calculations - they diagonalize the fock matrix. All quantities that we looked at for the atomic orbitals are also available for the canonical orbitals." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "mos = wfn.orbitals.canonical\n", + "mos" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "MOs are, of course, a linear combination of AOs:\n", + "\n", + "\\begin{equation} \\left| \\text{MO}_i \\right \\rangle = \\sum_j c_{ij} \\left| \\text{AO}_j \\right\\rangle \\end{equation}\n", + "\n", + "The coefficient $c_{ij}$ is stored at `mos.coeffs[i,j]`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "mos.coeffs" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Most MO sets are orthogonal; their overlaps will often be the identity matrix (plus some small numerical noise)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "mos.overlaps" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "By definition, the fock matrix should be orthogonal as well; the orbital energies are on its diagonal." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "matshow(mos.fock.value_in(u.eV))\n", + "colorbar(label='fock element/eV')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `MolecularOrbitals` class also offers several methods to transform operators into different bases. For instance, the `overlap` method creates an overlap matrix between the AOs and MOs, where olap[i,j] is the overlap between MO _i_ and AO _j_:\n", + "\\begin{equation}\n", + "\\text{olap[i,j]} = \\left\\langle MO_i \\middle| AO_j \\right \\rangle\n", + "\\end{equation}\n", + "\n", + "Note: this matrix is NOT the same as the MO coefficient matrix, because AOs are not orthogonal." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "olap = mos.overlap(wfn.aobasis)\n", + "olap" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## C. Individual orbitals\n", + "\n", + "You can work with inidividual orbitals as well. For instance, to get a list (in order) of the four AOs:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "wfn.aobasis.orbitals" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ao0 = wfn.aobasis.orbitals[0]\n", + "ao1 = wfn.aobasis.orbitals[1]\n", + "\n", + "print ao0\n", + "print ao1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Many matrix elements can also be accessed directly from these orbitals." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print 'overlap (from orbitals)',ao0.overlap(ao1)\n", + "print 'overlap (from overlap matrix)', wfn.aobasis.overlaps[0,1]\n", + "print\n", + "print 'fock element (from orbitals)', ao0.fock_element(ao1)\n", + "print 'fock element (from fock matrix)', wfn.aobasis.fock[0,1]" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.12" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} \ No newline at end of file diff --git a/moldesign/_notebooks/nbscripts/gen_example_md.py b/moldesign/_notebooks/nbscripts/gen_example_md.py new file mode 100755 index 0000000..9687b81 --- /dev/null +++ b/moldesign/_notebooks/nbscripts/gen_example_md.py @@ -0,0 +1,11 @@ +#!/usr/bin/env python +import glob + +for f in glob.glob('Example*.ipynb'): + print '* [%s](%s)' % (f[:-6], f) + +print + +for f in glob.glob('Tutorial*.ipynb'): + print '* [%s](%s)' % (f[:-6], f) + diff --git a/moldesign/_notebooks/nbscripts/strip_nb_output.py b/moldesign/_notebooks/nbscripts/strip_nb_output.py index 92d4857..8356ce0 100755 --- a/moldesign/_notebooks/nbscripts/strip_nb_output.py +++ b/moldesign/_notebooks/nbscripts/strip_nb_output.py @@ -25,6 +25,8 @@ def strip_output(nb): cell['outputs'] = [] if 'execution_count' in cell: cell['execution_count'] = None + if 'metadata' in cell: + cell['metadata'] = {} return nb if __name__ == '__main__': From 6eb60600d9fbe18d4da2082d8028066f6e58fc86 Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Tue, 27 Sep 2016 17:03:52 -0700 Subject: [PATCH 60/64] Update changelog and docs --- docs/index.rst | 2 ++ docs/install.rst | 33 +++++++++++++++++++++++++++++++++ moldesign/HISTORY.rst | 21 +++++++++++++++++---- 3 files changed, 52 insertions(+), 4 deletions(-) diff --git a/docs/index.rst b/docs/index.rst index d425c1f..be94c8f 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -16,6 +16,8 @@ Get the latest stable version: $ pip install moldesign +**Note:** some users may need to run the installation as root, i.e. ``sudo pip install moldesign`` + Or get the source code on github: .. code-block:: bash diff --git a/docs/install.rst b/docs/install.rst index da3a6dd..dbd3f69 100644 --- a/docs/install.rst +++ b/docs/install.rst @@ -27,6 +27,39 @@ At this point, you should have everything you need to install MDT. pip install moldesign +**Note:** Depending on their specific python installation, some users may need to run the installation as root, i.e. ``sudo pip install moldesign`` + + + +Updating +^^^^^^^^ + +To update to the most recent version of the toolkit, type + +.. code-block:: bash + + pip install -U moldesign + +However, note that this will update ``moldesign`` and *all of its dependencies* (including `numpy`, `jupyter`, `setuptools`, etc.) to their latest versions, which you may or may not want. To update only the ``moldesign`` suite, please run + +.. code-block:: bash + + pip install --no-deps -U moldesign pyccc nbmolviz + + +Common problems +^^^^^^^^^^^^^^^ + +**Permissions** +Depending on how python is installed on your system, you may need to run this installation as root, e.g. ``sudo pip install moldesign``. + +**MacOS default Python** +We've encountered issues trying to install Jupyter with MacOS's built-in python distribution. We highly recommend using `Homebrew ` to install a friendlier version of Python that doesn't require root permissions; see http://docs.python-guide.org/en/latest/starting/install/osx/ for instructions. + +**Python version** +The toolkit is not yet compatible with Python 3. For now, make sure you're using Python 2 to install and run everything. + + Notebook extensions ^^^^^^^^^^^^^^^^^^^ MDT will automatically install and enable the ``nbmolviz`` and ``widgetsnbextensions`` for Jupyter if they're not already enabled (these extensions provide the interactive molecular visualization framework). You can list the installed extensions by running diff --git a/moldesign/HISTORY.rst b/moldesign/HISTORY.rst index 527c193..cfff535 100644 --- a/moldesign/HISTORY.rst +++ b/moldesign/HISTORY.rst @@ -1,24 +1,37 @@ 0.7.3 (WIP) =========== NEW MODELING FEATURES - - #33 - Add DFT and MP2 for PySCF model + - #33 - Add DFT w/ gradients; MP2, CASSCF, CASCI w/out gradients + - Constrained minimizations w/ SHAKE and scipy's SLQSP + - Rename `build_bdna` to `build_dna_helix` and give access to all NAB helix types - GAFF parameterizer for small molecules -- ``params = mdt.parameterize(mol)`` - AM1-BCC and Gasteiger partial charge calculators: ``mdt.calc_am1_bcc_charges`` and ``mdt.calc_gasteiger_charges`` - Add PDB database and biomolecular assembly support for mmCIF files - #72 - Add ``moldesign.guess_formal_charges`` and ``moldesign.add_missing_data`` + - Excited and multi-state property calculations -CHANGES +OTHER ENHANCEMENTS - #78 - ``moldesign`` now imports much more quickly - - Add Example 4 on MD with a small molecule ligand - - Create changelog and version check to the ``mdt.about()`` (aka ``mdt.configure``) widget + - Add ``GAFF`` energy model automates small molecule parameterization + - Change Example 2 to show an absorption spectrum calculation + - Add Example 4 on protein MD with a small ligand + - Add Example 5: on constrained minimization and enthalpic barriers + - Add Tutorial 3: QM data analysis + - Show changelog and version check in the ``mdt.about()`` (aka ``mdt.configure``) widget - Change moldesign.tools and moldesign.helpers modules into more rationally organized subpackages - ``mdt.set_dihedral`` can be called with two atoms in the same way as ``mdt.dihedral`` + - Explicit parameter created to store wavefunction guesses + - Better access to density matrix in wavefunction objects + - Improved parsing support for PDB and mmCIF files BUGFIXES - #61 - fixed a KeyError when parsing PDBs with metal centers or ions - #74 - Add function to create PDB files with correct TER records (used for TLeap input) - Better handling of chains with non-standard residues + - ``mdt.add_hydrogens`` no longer creates structures with separated residues + - Fix sign of dihedral gradient + - Charge quantities now mostly have the correct units 0.7.2 - July 26, 2016 From e6243e5d6aa84cbc3a28a836fcde73a0e7d0f05c Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Tue, 27 Sep 2016 19:21:20 -0700 Subject: [PATCH 61/64] Bug fixes for protein prep --- moldesign/integrators/openmm.py | 2 ++ moldesign/interfaces/openbabel.py | 10 ++++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/moldesign/integrators/openmm.py b/moldesign/integrators/openmm.py index 1f406e4..0a07318 100644 --- a/moldesign/integrators/openmm.py +++ b/moldesign/integrators/openmm.py @@ -39,6 +39,8 @@ def prep(self): self._prepped = True def run(self, run_for, wait=False): + self.prep() + if not self.model._constraints_ok: raise NotImplementedError('OpenMM only supports position and bond constraints') diff --git a/moldesign/interfaces/openbabel.py b/moldesign/interfaces/openbabel.py index 73f10c3..e4e3be8 100644 --- a/moldesign/interfaces/openbabel.py +++ b/moldesign/interfaces/openbabel.py @@ -155,18 +155,20 @@ def guess_bond_orders(mol): @runsremotely(enable=force_remote) -def add_hydrogen(mol): - """Add hydrogens to saturate atomic valences. (Does not assign formal charges or correct - for pH). +def add_hydrogen(mol, ph=None): + """Add hydrogens to saturate atomic valences. Args: mol (moldesign.Molecule): Molecule to saturate + ph (float): Assign formal charges and protonation using pH model; if None (the default), + neutral protonation will be assigned where possible. Returns: moldesign.Molecule: New molecule with all valences saturated """ pbmol = mol_to_pybel(mol) - pbmol.addh() + pbmol.OBMol.AddHydrogens(False, + ph is not None,) newmol = pybel_to_mol(pbmol, reorder_atoms_by_residue=True) mdt.helpers.assign_unique_hydrogen_names(newmol) return newmol From 6de809b5798e0f88936bfe2dc51257a02880cbe2 Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Tue, 27 Sep 2016 19:23:19 -0700 Subject: [PATCH 62/64] Add missing file changes --- docs/features.rst | 155 +++++++++++++++++++ moldesign/_static_data/pint_atomic_units.txt | 1 + 2 files changed, 156 insertions(+) create mode 100644 docs/features.rst diff --git a/docs/features.rst b/docs/features.rst new file mode 100644 index 0000000..eae1880 --- /dev/null +++ b/docs/features.rst @@ -0,0 +1,155 @@ +Molecular Design Toolkit Features +================================= + +.. contents:: + :depth: 5 + + + +Simulation methods +------------------ + +Energy models +^^^^^^^^^^^^^ + +**Methods** + + - :meth:`Molecule.calculate` Calculate molecular properties using the assigned energy model + + - :meth:`Molecule.minimize` Perform an energy minimization using the assigned energy model + +**Classical** + + - :class:`models.Forcefield` Generic Forcefield energy model (automatically chosen implementation) + + - :class:`models.OpenMMEnergyModel` OpenMM energy kernel for Amber/CHARMM-like forcefields + + - :class:`models.SanderEnergyModel` Sander energy kernel (from AmberTools) for Amber/CHARMM-like forcefields + + - :class:`models.Spring` A single harmonic bond 2 atoms (for testing and toy models) + + - :class:`models.HarmonicOscillator` A 1-D Harmonic oscillator centered at x=0 (for testing and toy models) + +**Quantum** + + - :class:`models.RHF` Generic restricted Hartree-Fock (automatically chosen implementation) + + - :class:`models.DFT` Generic density functional theories (automatically chosen implementation) + + - :class:`models.Semiempirical` Generic semiempirical theories (automatically chosen implementation) + + - :class:`models.PySCF` PySCF *ab initio* QM energy kernel, includes implementations for a large number of quantum energy models, including RHF, DFT, CASCI, CASSCF, MP2, and coupled cluster + + - :class:`models.SQM` SQM semi-empirical energy kernel (from AmberTools), includes implementations for a large number of semiempirical models, including MNDO, AM1, PM3, PM6, DFTB + + +Integrators +^^^^^^^^^^^ + + - :class:`integrators.VelocityVerlet` Generic Velocity Verlet dynamics (automatically chosen implementation) + + - :class:`integrators.Langevin` Generic Langevin type (automatically chosen implementation) + + - :class:`integrators.OpenMMVerlet` Velocity Verlet dynamics for use with OpenMM energy models + + - :class:`integrators.OpenMMLangevin` Velocity Langevin dynamics for use with OpenMM energy models + + - :class:`integrators.SurfaceHopping` Multi-state surface hopping dynamics using fewest switched. Implementation: internal. + + +Interactive Widgets +------------------- + + - :class:`viewer.Configurator` Automatically generates user interfaces for configuring simulations + + - :class:`viewer.GeometryViewer` 3D molecular viewer + + - :class:`viewer.ChemicalGraphViewer` 2D molecular viewer + + - :class:`widgets.OrbitalViewer` 3D molecular orbital viewer + + - :class:`widgets.BondSelector` widget for building lists of atoms and/or bonds + + - :class:`widgets.ResidueSelector` widget for building lists of atoms and/or residues + + - :class:`widgets.GeometryBuilder` widget for manipulating internal coordinates + + - :class:`widgets.Symmetrizer` widget for displaying and manipulating molecular symmetry groups + + - :class:`widgets.ParameterizationDisplay` 3D display of issues when assigning forcefield parameters + + +Data analysis +------------- + +Simulation results are stored in numpy arrays with an explicit unit system based on ``pint`` for easy analysis and comparison. A few are shown here as examples: + +**Static properties** + + - :meth:`Molecule.potential_energy`, :meth:`Molecule.forces`, :meth:`Molecule.dipole_moment`, :meth:`Molecule.wfn` Molecular properties calcualted by energy models: the potential energy, force array, dipole moment vector, and electronic wavefunction, respectively. + + - :class:`orbitals.ElectronWfn` A data structure storic electronic wavefunction information, as calculated by a quantum energy model. + + - :meth:`ElectronWfn.aobasis.fock` :meth:`ElectronWfn.aobasis.overlaps` The Fock and overlap matrices in the AO basis + + - :meth:`ElectronWfn.canonical.fock` :meth:`ElectronWfn.canonical.overlaps` The Fock and overlap matrices in the canonical orbital basis + + - :meth:`ElectronWfn.canonical.coeffs` The canonical orbital coefficients in the AO basis + +**Trajectory properties** + + - :class:`Trajectory` A data structure storing a series of molecular structures with associated properties + + - :meth:`Trajectory.rmsd` Calculate a timeseries of RMSD values over the course of a trajectory + + - :meth:`Trajectory.distance`, :meth:`Trajectory.angle`, :meth:`Trajectory.dihedral` Return a timeseries of distances, angles, or dihedral angles over the course of a trajectory + + - :meth:`Trajectory.time` :meth:`Trajectory.potential_energy` :meth:`Trajectory.kinetic_temperature` ``...`` - Return timeseries of times, energies, temperatures, etc. over the course of a trajectory + + +Conversions +----------- + +**Files and databases** + + - :meth:`read`, :meth:`write` read/write molecular file formats. Supports PDB, mmCIF, SDF, XYZ, MOL2, and pickled objects. Implementations: OpenBabel, BioPython, or internal. + + - :meth:`from_smiles` Convert a SMILES string into an MDT molecule with a 3D structure. Implementation: OpenBabel. + + - :meth:`from_name` Convert an IUPAC chemical name into an MDT molecule with a 3D structure. Implementation: Opsin. + + - :meth:`from_pdb` Download and create a molecule object from a PDB code. Implementation: BioPython. + + +**Python objects** + +MDT molecules can also be converted into objects for a variety of other Python chemistry libraries: + + - :meth:`interfaces.mol_to_pybel`, :meth:`interfaces.pybel_to_mol` Convert an MDT molecule to/from a `pybel` (i.e. OpenBabel) molecule object. + + - :meth:`interfaces.mol_to_pyscf`, :meth:`interfaces.pyscf_to_mol` Convert an MDT molecule to/from a PySCF molecule object. + + - :meth:`interfaces.topology_to_mol`, :meth:`interfaces.mol_to_topology` Convert an OpenMM topology object to/from an MDT molecule + + +Tools +----- + +**Topology manipulation** + + - :meth:`add_hydrogen` Saturate a molecule's valence with hydrogens. Implementation: OpenBabel. + + - :meth:`guess_bond_orders` Assign bond orders based on geometry and/or topology. Implementation: OpenBabel. + + - :meth:`mutate_residues` Mutate DNA bases and amino acid residues. Implementation: PDBFixer. + + - :meth:`add_water_box` Add water box with optional ions. Implementation: PDBFixer. + + +**Forcefields** + + - :meth:`assign_forcefield` Returns a new molecule with forcefield assignments and any missing atoms. Implementation: AmberTools/tLeap. + + - :meth:`parameterize` Assign forcefield parameters to a molecule. Implementation: Ambertools/antechamber. + + - :meth:`calc_am1_bcc_charges` :meth:`calc_gasteiger_charges` :meth:`calc_esp_charges` Calculate partial charges for use with a forcefield. Implementation: Ambertools/antechamber and Ambertools/SQM diff --git a/moldesign/_static_data/pint_atomic_units.txt b/moldesign/_static_data/pint_atomic_units.txt index c180588..1b7de80 100644 --- a/moldesign/_static_data/pint_atomic_units.txt +++ b/moldesign/_static_data/pint_atomic_units.txt @@ -8,3 +8,4 @@ ps = picosecond = 1.0 * piscosecond amu = 1.0 * atomic_mass_units ang = 1.0 * angstrom eV = electron_volt +debye = 0.393430307 * elementary_charge * bohr From 4fef9e1900c76c5bed17ebd71b27978aa0c4378c Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Wed, 28 Sep 2016 14:44:25 -0700 Subject: [PATCH 63/64] Reorganize docs --- RELEASE.md | 68 +++++++++-- docs/api/atoms.rst | 6 + docs/biomolecule.rst | 55 +++++++++ docs/conf.py | 8 +- docs/contents.rst | 13 -- docs/creating_and_converting.rst | 73 ++++++++++- docs/dynamics.rst | 17 +++ docs/features.rst | 39 +++--- docs/geometry.rst | 41 +++++++ docs/howdoi.rst | 203 ------------------------------- docs/index.rst | 75 +++++------- docs/install.rst | 57 ++++++--- docs/properties.rst | 29 +++++ docs/quickstart.rst | 57 +++++++++ docs/structure.rst | 29 +---- docs/visualization.rst | 87 +++++++++++++ 16 files changed, 514 insertions(+), 343 deletions(-) create mode 100644 docs/api/atoms.rst create mode 100644 docs/biomolecule.rst delete mode 100644 docs/contents.rst create mode 100644 docs/dynamics.rst create mode 100644 docs/geometry.rst delete mode 100644 docs/howdoi.rst create mode 100644 docs/properties.rst create mode 100644 docs/quickstart.rst create mode 100644 docs/visualization.rst diff --git a/RELEASE.md b/RELEASE.md index deda84d..f9cd093 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -1,18 +1,62 @@ -# Creating new MDT project releases +# Whenever commiting changes anywhere + +Make SURE that you've run `set_filters.sh` at the project base. This will make sure that you don't accidentally commit any `ipynb` output fields into the repository. You can check to make sure the filters are working by running `git diff` on any notebook file that has output in it: all `output` and `metadata` fields should remain blank. + +# Creating a Pull Request These instructions generally apply to [Autodesk/molecular-design-toolkit](https://github.com/Autodesk/molecular-design-toolkit), [Autodesk/py-cloud-compute-cannon](https://github.com/Autodesk/py-cloud-compute-cannon), and [Autodesk/notebook-molecular-visualization](https://github.com/Autodesk/notebook-molecular-visualization). -This is only for project maintainers - everyone else should use PRs. +1. Group all changes in a single branch. +1. Run tests in `moldesign/_tests` with `py.test -n NCORES` where `NCORES` is the number of jobs to run simultanously. +2. Create a pull-request for the appropriate branch in Autodesk/molecular-design-toolkit + + +# Maintainers: Accepting a PR + +Work can be merged into `master` or a feature branch, as appropriate. Don't merge broken code +into master, but it doesn't need to be totally production-ready either: only releases (below) +are considered "stable". + +1. Review the code. +1. Make sure that there's appropriate functional tests. +1. Run all tests. They don't all *necessarily* need to pass, but you need to undertand why what's passing and what's not. +1. Run any example notebooks that might be affected by the PR. + + +# Maintainers: Creating a new release + +Decide on the new version number (using [semantic versioning](http://semver.org/)). + +Everything here is HIGHLY PRELIMINARY!!! This will be a lot easier once Travis/Jenkins is up. + +1. Make sure all changes have been PR'd into master +1. Check out a clean copy of master +1. Run `check-manifest` at project root to make sure the distribution will include the necessary files. +1. Increment the `default_version_tag` field in `moldesign.compute.config`, and commit the change +1. Tag your local branch with the release number: `git tag [version]` (note: delete this tag with `git tag rm [version]` if you need to abort the release) +4. Build new docker images: `cd docker_images; ./dockermake.py --all --repo docker.io/Autodesk/moldesign: --tag [version]` +1. Confirm that all tests are passing *with and without* locally installed dependencies (pyscf, openbabel, etc) +1. Confirm that all tutorial and example notebooks run without errors. + +If this is all succesfull - you're ready to make it public. + +1. Push docker images to cloud: `cd docker_images; ./dockermake.py --all --push --repo docker.io/Autodesk/moldesign: --tag [version]` +4. `python setup.py register -r pypi` +5. `python setup.py sdist upload -r pypi` +1. `git push origin master --tags` + +The final step is the point of no return - you'll need to prep a new release if you discover a problem. Before that, you can undo +what you've done by deleting your release off of PyPI and DockerHub. + + + +# Maintainers: updating docs -Everything here is HIGHLY PRELIMINARY!!! This will change dramatically once Jenkins or Travis is up. +Documentation is NOT coupled to the package releases; docs tend to get updated continuously. -1. Push changes or merge PR into dev branch and check out a clean copy. -1. Test it. -1. Run `check-manifest` at project root. (Repeat steps 1-3 until this checks out OK) -1. [MDT only] - update/push dockerfiles and image URLs in `moldesign.compute.configuration` -2. Pull-request into master -3. Tag master branch with new release number -4. In repo root. `python setup.py register -r pypi` -5. In repo root, `python setup.py sdist upload -r pypi` -6. [MDT only] Run `cd docs; make html` and push contents of `_build/html` to the gh-pages branch. \ No newline at end of file +1. In the `master` branch, update the version numbers in `docs/conf.py` +1. Run `cd docs; make clean; make html`. +1. In a separate directory, check out a fresh copy of the repo and run `git checkout gh-pages` +1. Copy the contents of `[master branch]/docs/_build/html` into the root of the `gh-pages` branch. +1. Commit your changes to the `gh-pages` branch and push them back to GitHub. diff --git a/docs/api/atoms.rst b/docs/api/atoms.rst new file mode 100644 index 0000000..ae69e59 --- /dev/null +++ b/docs/api/atoms.rst @@ -0,0 +1,6 @@ +============ +Atom objects +============ + +.. autoclass:: moldesign.Atom + :members: diff --git a/docs/biomolecule.rst b/docs/biomolecule.rst new file mode 100644 index 0000000..270f833 --- /dev/null +++ b/docs/biomolecule.rst @@ -0,0 +1,55 @@ +Biomolecular structure +====================== + + + +Primary structure +----------------- +**Class documentation:** :class:`moldesign.Chain`, :class:`moldesign.Residue` + +Biomolecules also contain primary structure information such as :class:`Chains ` +and :class:`Residues `. Chains can be accessed by name OR by index: + + >>> chain1 = molecule.chains['A'] + >>> chain2 = molecule.chains[0] + >>> chain1 is chain2 + True + +Each chain contains :class:`residues `. In a chain, residues can similarly be +accessed through a flat list or by name: + + >>> res0 = molecule.residues[0] + >>> resA = molecule.chains['A'].residues['PRO1'] + >>> res0 is resA + True + +A flat list of all residues in a molecule is also available at `molecule.residues`. + + + +Biomolecular assemblies +----------------------- +Many biomolecules in the PDB only contain a subset of the total biomolecular structure - the +remaining parts of the structure can be generated via `symmetry transformations `_. + +When you read in such a structure, MDT will issue a warning. + + >>> mol = mdt.from_pdb('3FPP') + WARNING: This PDB file contains the following biomolecular assemblies: + WARNING: Assembly "1": 3 copies of chains A, B + WARNING: Use ``mdt.build_assembly([molecule],[assembly_name])`` to build one of the above assemblies + +To create the full assembly, run + >>> assembly = mdt.build_assembly(mol,"1") + >>> assembly.draw() + + .. image:: img/howdoi_pdb_assm.png + +Note: + Only PDB-formatted files are currently supported for biomolecular assemblies - MMCif support + is in progress. + + + + + diff --git a/docs/conf.py b/docs/conf.py index b37dc36..1d99014 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -69,12 +69,12 @@ #source_encoding = 'utf-8-sig' # The master toctree document. -master_doc = 'contents' +master_doc = 'index' # General information about the project. project = u'Molecular Design Toolkit' copyright = u'2016 Autodesk Research' -author = u'Aaron Virshup, Dion Amago, Malte Tinnus (Bio/Nano Research Group, Autodesk)' +author = u'Aaron Virshup, Dion Amago, Justin McCandless, Malte Tinnus (Bio/Nano Research Group, Autodesk)' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the @@ -83,9 +83,9 @@ import moldesign # The short X.Y version. -version = moldesign.__version__ +version = '0.7' # The full version, including alpha/beta/rc tags. -release = moldesign.__version__ +release = '0.7.3' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/docs/contents.rst b/docs/contents.rst deleted file mode 100644 index e2ebbbf..0000000 --- a/docs/contents.rst +++ /dev/null @@ -1,13 +0,0 @@ -.. toctree:: - :maxdepth: 3 - :caption: Contents - :name: mastertoc - - Introduction - Installation - How do I ...? - Atoms, molecules, and biomolecules - Complete API reference <_moldesign_api/moldesign> - -* :ref:`Alphabetical index ` -* :ref:`Search ` diff --git a/docs/creating_and_converting.rst b/docs/creating_and_converting.rst index 263354a..7378f37 100644 --- a/docs/creating_and_converting.rst +++ b/docs/creating_and_converting.rst @@ -1,9 +1,64 @@ -Creating and converting molecules ---------------------------------- +Creating molecules +================== -From other objects -================== +From names and ids +------------------ +You can use an IUPAC name: + + >>> import moldesign as mdt + >>> benzene = mdt.from_name('benzene') + >>> caffeine = mdt.from_name('1,3,7-Trimethylpurine-2,6-dione') + +or a `SMILES string `_ + + >>> benzene = mdt.from_smiles('c1ccccc1') + >>> caffeine = mdt.from_smiles('CN1C=NC2=C1C(=O)N(C(=O)N2C)C') + + +To download a biomolecular structure from the `Protein DataBank `_, you can use + + >>> hiv_protease = mdt.from_pdb('3AID') + +DNA helices can be generated from a genetic sequence: + + >>> bdna = mdt.build_dna_helix('ACTG') + + +From files +---------- +MDT supports most common molecular formats via ``moldesign.read``. In most cases, the format can be inferred from the filename. Files compressed with `gz` or `bz2` can be read as well. + + >>> benzene = mdt.read('benzene.sdf') + >>> caffeine = mdt.read('caffeine.xyz') + >>> lsd = mdt.read('lsd.mol2.gz') + >>> hiv_protease = mdt.read('3aid.pdb.bz2') + >>> zika_capsid = mdt.read('5ire.cif') + +In addition, any pickled python object can be read in with this function - files with ``pickle``, ``pkl``, and ``P`` are recognized as pickle files: + >>> saved_mol = mdt.read('molecule_1.pickle') + >>> saved_atom = mdt.read('atom_2.pkl.gz') + >>> saved_trajectory = mdt.read('traj.P.bz2') + + +From strings +------------ +File content in strings or file-like objects can be read as well, but the format needs to be explicitly specified. + + >>> water_str = """ 3 + >>> water xyz file + >>> O 0.98285 0.07497 0.04837 + >>> H 0.70400 0.94631 0.36769 + >>> H 1.95074 0.11856 0.06434 """ + >>> water = mdt.read(water_str, format='xyz') + >>> + >>> import StringIO + >>> water_filelike = StringIO.StringIO(water_str) + >>> molecule = mdt.read(water_filelike, format='xyz') + + +From other molecules +-------------------- You can create a new molecule from any collection of atoms. For instance, a list of atoms: @@ -18,3 +73,13 @@ Or even a list of molecules, atoms, and residues: >>> dmso = mdt.from_name('dmso') >>> cobalt_atom = mdt.Atom(symbol='Co') >>> complex = mdt.Molecule([protein, dmso, cobalt_atom]) + + +From other python packages +-------------------------- +MDT's interfaces allow it to import objects from a variety of other molecular modeling packages, including; + +- `OpenBabel `_ / `Pybel `_ : ``mdt.interfaces.pybel_to_mdt(pybel_molecule)`` +- `OpenMM `_: ``mdt.interfaces.openmm_topology_to_mdt(openmm_topology)`` +- `BioPython `_: ``mdt.interfaces.biopython_to_mdt(biopython_pdb_structure)`` +- `PdbFixer `_: ``mdt.interfaces.pdbfixer_to_mdt(pdbfixer_object)`` \ No newline at end of file diff --git a/docs/dynamics.rst b/docs/dynamics.rst new file mode 100644 index 0000000..ecd1cf8 --- /dev/null +++ b/docs/dynamics.rst @@ -0,0 +1,17 @@ +Molecular dynamics +================== + +Protein MD +---------- + +WIP + +Small molecule MD +----------------- + +WIP + +Quantum chemical potentials +--------------------------- + +WIP \ No newline at end of file diff --git a/docs/features.rst b/docs/features.rst index eae1880..27d5dfd 100644 --- a/docs/features.rst +++ b/docs/features.rst @@ -6,22 +6,13 @@ Molecular Design Toolkit Features -Simulation methods ------------------- - -Energy models -^^^^^^^^^^^^^ - -**Methods** - - - :meth:`Molecule.calculate` Calculate molecular properties using the assigned energy model - - - :meth:`Molecule.minimize` Perform an energy minimization using the assigned energy model - -**Classical** +Molecular Mechanics +------------------- - :class:`models.Forcefield` Generic Forcefield energy model (automatically chosen implementation) + - :class:`models.GAFF` Amber force field for small organic molecules + - :class:`models.OpenMMEnergyModel` OpenMM energy kernel for Amber/CHARMM-like forcefields - :class:`models.SanderEnergyModel` Sander energy kernel (from AmberTools) for Amber/CHARMM-like forcefields @@ -30,11 +21,15 @@ Energy models - :class:`models.HarmonicOscillator` A 1-D Harmonic oscillator centered at x=0 (for testing and toy models) -**Quantum** - - :class:`models.RHF` Generic restricted Hartree-Fock (automatically chosen implementation) +Quantum Chemistry +----------------- + + - :class:`models.RHF` Restricted Hartree-Fock (automatically chosen implementation) - - :class:`models.DFT` Generic density functional theories (automatically chosen implementation) + - :class:`models.DFT` Density functional theories (automatically chosen implementation) + + - :class:`models.CASSCF` Complete-active space MCSCF (automatically chosen implementation) - :class:`models.Semiempirical` Generic semiempirical theories (automatically chosen implementation) @@ -43,8 +38,8 @@ Energy models - :class:`models.SQM` SQM semi-empirical energy kernel (from AmberTools), includes implementations for a large number of semiempirical models, including MNDO, AM1, PM3, PM6, DFTB -Integrators -^^^^^^^^^^^ +Molecular Dynamics +^^^^^^^^^^^^^^^^^^ - :class:`integrators.VelocityVerlet` Generic Velocity Verlet dynamics (automatically chosen implementation) @@ -57,8 +52,8 @@ Integrators - :class:`integrators.SurfaceHopping` Multi-state surface hopping dynamics using fewest switched. Implementation: internal. -Interactive Widgets -------------------- +Interactive visualization +------------------------- - :class:`viewer.Configurator` Automatically generates user interfaces for configuring simulations @@ -107,8 +102,8 @@ Simulation results are stored in numpy arrays with an explicit unit system based - :meth:`Trajectory.time` :meth:`Trajectory.potential_energy` :meth:`Trajectory.kinetic_temperature` ``...`` - Return timeseries of times, energies, temperatures, etc. over the course of a trajectory -Conversions ------------ +Interfaces +---------- **Files and databases** diff --git a/docs/geometry.rst b/docs/geometry.rst new file mode 100644 index 0000000..3acae61 --- /dev/null +++ b/docs/geometry.rst @@ -0,0 +1,41 @@ +Geometry tools +============== + + +Measure geometry +---------------- + +The :mod:`moldesign.geom` module contains a variety of methods for measuring (and +manipulate geometry). + +You can get the distance between any two atoms with the +:meth:`atom.distance ` method. + + >>> atom1.distance(atom2) + [...] angstrom + +Bond angles and dihedral (twist) angles can be measured using the :meth:`moldesign.geom.angle` +and :meth:`moldesign.geom.dihedral` methods: + + >>> moldesign.geom.angle(atom1, atom2, atom3) + [...] radians + >>> moldesign.geom.dihedral(atom1, atom2, atom3, atom4) + [...] radians + + +Manipulate geometry +------------------- + +WIP + + +Analyze dynamics +---------------- + +WIP + + +Constrain geometry +------------------ + +WIP \ No newline at end of file diff --git a/docs/howdoi.rst b/docs/howdoi.rst deleted file mode 100644 index 85716e3..0000000 --- a/docs/howdoi.rst +++ /dev/null @@ -1,203 +0,0 @@ -============= -How do I ...? -============= - -.. contents:: Quick guides to common tasks - :depth: 2 - - -How do I create a small molecule? ---------------------------------- -You can use an IUPAC name: - - >>> import moldesign as mdt - >>> benzene = mdt.from_name('benzene') - >>> caffeine = mdt.from_name('1,3,7-Trimethylpurine-2,6-dione') - -or a `SMILES string `_ - - >>> benzene = mdt.from_smiles('c1ccccc1') - >>> caffeine = mdt.from_smiles('CN1C=NC2=C1C(=O)N(C(=O)N2C)C') - -or read it from a number of file formats: - - >>> benzene = mdt.read('/home/myuser/benzene.sdf') - >>> caffeine = mdt.read('/home/myuser/caffeine.xyz') - - - -How do I import a biomolecule? ------------------------------- - -Basic PDB structures -^^^^^^^^^^^^^^^^^^^^ -If you're looking for a specific biomolecule, you'll find its structure on -`the RCSB Protein Databank (PDB) `_ (if a structure exists). Structures in PDB are -indexed with 4-character codes (such as `1MBN `_, `3AID `_, `3FPP `_, ...). - -To download a structure with -a specific PDB code, you can use - - >>> mol = mdt.from_pdb('3AID') - >>> mol.draw() - - .. image:: img/howdoi_pdb1.png - -You can, of course, also read in files from a variety of formats: - - >>> mol = mdt.read('/path/to/3AID.pdb') - -Biomolecular assemblies -^^^^^^^^^^^^^^^^^^^^^^^ -Many biomolecules in the PDB only contain a subset of the total biomolecular structure - the -remaining parts of the structure can be generated via `symmetry transformations `_. - -When you read in such a structure, MDT will issue a warning. - - >>> mol = mdt.from_pdb('3FPP') - WARNING: This PDB file contains the following biomolecular assemblies: - WARNING: Assembly "1": 3 copies of chains A, B - WARNING: Use ``mdt.build_assembly([molecule],[assembly_name])`` to build one of the above assemblies - -To create the full assembly, run - >>> assembly = mdt.build_assembly(mol,"1") - >>> assembly.draw() - - .. image:: img/howdoi_pdb_assm.png - -Note: - Only PDB-formatted files are currently supported for biomolecular assemblies - MMCif support - is in progress. - - -How do I measure bonds? ------------------------ - -The :mod:`moldesign.geom` module contains a variety of methods for measuring (and -manipulate geometry). - -You can get the distance between any two atoms with the -:meth:`atom.distance ` method. - - >>> atom1.distance(atom2) - [...] angstrom - -Bond angles and dihedral (twist) angles can be measured using the :meth:`moldesign.geom.angle` -and :meth:`moldesign.geom.dihedral` methods: - - >>> moldesign.geom.angle(atom1, atom2, atom3) - [...] radians - >>> moldesign.geom.dihedral(atom1, atom2, atom3, atom4) - [...] radians - - - -How do I visualize molecular orbitals? --------------------------------------- -First, you'll need to calculate the molecule's electronic structure using a quantum chemistry -model. Quantum chemistry models are a type of -:class:`Energy Model ` in MDT. - -You can use iPython's autocomplete to get a list of the available methods by typing -``mdt.models.`` and then hitting the ``Tab`` key: - -.. image:: img/howdoi_method_autocomplete.png - -In this example, let's set up a small molecule with a simple quantum chemistry model - -`restricted Hartree-Fock. `_ - - >>> mol = mdt.from_name('benzene') - >>> mol.set_energy_model(mdt.models.RHF(basis='6-31g')) - - -Next, we'll run a calculation with this model - this will calculate several relevant properties for -the molecule. - - >>> mol.calculate() - >>> mol.potential_energy - -6275.56597497 eV - >>> mol.wfn - - -These properties are stored in a :class:`dict` at ``mol.properties``: - - >>> mol.properties.keys() - ['wfn', 'positions', 'mulliken', 'potential_energy'] - -Most relevant for our purposes, we've calculated the electronic state of the molecule and are -ready to visualize it. - - >>> mol.draw_orbitals() - - .. image:: img/howdoi_orbs.png - -In an actual notebook, you can use the controls on the right to control the visualization. - - - - -How do I perform an energy minimization? ----------------------------------------- -First, you'll need to create an :class:`EnergyModel ` for your molecule. Energy models can include quantum chemical, molecular mechanics, or wide assortment of other methods. - -We'll follow the same setup as the previous step: - - >>> mol = mdt.from_name('benzene') - >>> mol.set_energy_model(mdt.models.RHF(basis='sto-3g')) - -Now that our molecule has an :class:`EnergyModel `, we can calculate energies and forces: - - >>> mol.calculate_forces() # returns vector of forces - >>> mol.calculate_potential_energy() # returns the molecule's energy - -You're now ready to use the molecule's :meth:`minimize ` method: - - >>> trajectory = mol.minimize(nsteps=10, frame_interval=1) - -And you can visualize the minimization process using the trajectory object: - - >>> trajectory.draw_orbitals() - -.. image:: img/benz_min_traj.png - - -How do I customize a 3D view? ------------------------------ -First, create a viewer. It will be rendered in your notebook when it's the last object evaluated in a code cell. - - >>> import moldesign as mdt - >>> from moldesign import units as u - >>> mol = mdt.from_pdb('3AID') - >>> viewer = mol.draw3d() - >>> viewer - -.. image:: img/howdoi_view1.png - -At this point, the viewer will be drawn into your notebook. You can continue to manipulate it after it's been drawn. - -For starters, let's turn all the waters purple. - - >>> wateratoms = [atom for atom in mol.atoms if atom.residue.type == 'water'] - >>> viewer.vdw(atoms=wateratoms, color='purple') - -.. image:: img/howdoi_purplewater.png - -Next, let's make that drug molecule really stand out with with a transparent sphere, an arrow, -and a label: - - >>> drug = mol.chains['A'].residues['ARQ401'] - >>> r = drug.center_of_mass - >>> sphere = viewer.draw_sphere(position=r, radius=6*u.angstrom, opacity=0.5, color='green') - >>> arrow = viewer.draw_arrow(start=r+[0,0,26]*u.angstrom, end=r+[0,0,6]*u.angstrom, radius=3) - >>> label = viewer.draw_label(text="Here's the drug", position=r) - -.. image:: img/howdoi_annotated.png - -Maybe that's too much - let's remove the label and the sphere. - - >>> viewer.remove(label) - >>> viewer.remove(sphere) - -.. image:: img/howdoi_subtle.png - - diff --git a/docs/index.rst b/docs/index.rst index be94c8f..26dc7b9 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -1,56 +1,47 @@ -=========================================== -Molecular Design Toolkit: API documentation -=========================================== +Molecular Design Toolkit |version| +################################## -These pages provide reference API documentation for the Molecular Design Toolkit. +Molecular science is hard - the software shouldn't make it harder. The `Molecular Design Toolkit `_ offers access to a large and still-growing set of computational modeling methods from a science-focused, Python API. When you +call MDT functions from a Jupyter notebook, you'll also be get inline 2D and 3D visualization, +plotting support, and interactivity. -Just getting started? We recommend trying out `the tutorials and -walkthroughs `_ before diving into the API. +`Try a live demo now. `_ +MDT is free, open source, and is built for scientific collaboration. -Quick install -------------- -Get the latest stable version: -.. code-block:: bash - $ pip install moldesign +.. toctree:: + :maxdepth: 2 + :numbered: + :caption: Getting started -**Note:** some users may need to run the installation as root, i.e. ``sudo pip install moldesign`` + quickstart + features + install -Or get the source code on github: -.. code-block:: bash +.. toctree:: + :maxdepth: 2 + :numbered: + :caption: Recipes - $ git clone github.com/autodesk/molecular-design-toolkit + creating_and_converting + structure + biomolecule + geometry + properties + dynamics + visualization -Get started ------------ -At the command line, run +.. toctree:: + :maxdepth: 2 + :numbered: + :caption: API Reference -.. code-block:: bash + api/general + api/atoms - $ python -m moldesign intro - - -Explore the API ---------------- -The Jupyter online documentation system is a powerful tool for discovering functionality. - -To get a list of all members of a module or class, type ``modulename.``, then hit `tab`. - -.. image:: img/tab_autocomplete.png - -To get online documentation about a function or method, type the method's name, then hit `shift+tab` - -.. image:: img/shifttab_online.png - -To get the complete docstring for any object, type its name then a question mark. - -.. image:: img/questiondoc.png - - -Get help --------- -Click a link in the navigation menu (to your left) for in-depth documentation. +* :ref:`Alphabetical index ` +* :ref:`Search ` \ No newline at end of file diff --git a/docs/install.rst b/docs/install.rst index dbd3f69..6e4de94 100644 --- a/docs/install.rst +++ b/docs/install.rst @@ -107,7 +107,8 @@ If you run into problems, see the `documentation `_ and Changing where your jobs run ============================ -The toolkit is built to run jobs using the `Docker containerization technology `_ (which *has nothing to do with molecular docking*). Docker eliminates the need to configure or compile +The toolkit is built to run jobs using the `Docker containerization technology `_ +(which *has nothing to do with molecular docking*). Docker eliminates the need to configure or compile software on different computers. By default, MDT is configured to use a free cloud-based docker cluster provided by Autodesk @@ -115,30 +116,52 @@ Research. If you'd like to run jobs on your local machine, you'll need to instal things. -Running jobs locally --------------------- -Using a docker-machine -^^^^^^^^^^^^^^^^^^^^^^ -A recent version of Docker (>1.11) is required. +Running locally with Docker +^^^^^^^^^^^^^^^^^^^^^^^^^^^ +First, create or edit a file at ``$HOME/.moldesign/moldesign.yml`` with the line -*Mac or Windows*: Download and install the `Docker Toolbox `_. +.. code-block:: yaml -*Linux*: `Follow the instructions for your distribution `_. + engine_type: docker -Next, create a docker-machine (ideally, it should have at least 4 GB of RAM and 40 GB of disk -space): +Next, install Docker if necessary (version 1.11 or higher is required): + +- *Mac*: Download and install `Docker for Mac `_. +- *Windows*: Download and install `Docker for Windows `_. +- *Linux*: `Follow the instructions for your distribution `_. + +Once Docker is up and running, make sure to allocate enough RAM - 4 GB will work well for the +included example jobs. + +Running locally with CloudComputeCannon +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Our group has also developed +`CloudComputeCannon `_, a lightweight, +Docker-based job scheduling system which is more suitable for production than a bare Docker engine. + +You'll need Docker installed locally (see steps above). To install CCC: + +1. `Install the Node.js `_ javascript interpreter if necessary. +2. Update NPM if necessary: ``npm install npm -g`` +3. Do a global install of cloud compute cannon: ``npm install -g cloud-compute-cannon`` + +To run it: + +- To **start** the CCC scheduler, make sure Docker is running locally, then run ``ccc server-install`` +- To **stop** the CCC scheduler, run ``ccc server-stop`` + +Finally, update your MDT configuration to point to the CCC server by default by putting these lines in +``$HOME/.moldesign/moldesign.yml``: + +.. code-block:: yaml + + engine_type: cloudcomputecannon + default_ccc_server: localhost:9000 -.. code-block:: bash - $ docker-machine create --driver virtualbox --virtualbox-memory "4096" --virtualbox-disk-size "40000" -Running jobs on AWS --------------------- -coming soon System-specific installation ============================ diff --git a/docs/properties.rst b/docs/properties.rst new file mode 100644 index 0000000..ea10d92 --- /dev/null +++ b/docs/properties.rst @@ -0,0 +1,29 @@ +Property calculations +===================== + + +Optimize a geometry +------------------- +First, you'll need to create an :class:`EnergyModel ` for your molecule. Energy models can include quantum chemical, molecular mechanics, or wide assortment of other methods. + +We'll follow the same setup as the previous step: + + >>> mol = mdt.from_name('benzene') + >>> mol.set_energy_model(mdt.models.RHF(basis='sto-3g')) + +Now that our molecule has an :class:`EnergyModel `, we can calculate energies and forces: + + >>> mol.calculate_forces() # returns vector of forces + >>> mol.calculate_potential_energy() # returns the molecule's energy + +You're now ready to use the molecule's :meth:`minimize ` method: + + >>> trajectory = mol.minimize(nsteps=10, frame_interval=1) + +And you can visualize the minimization process using the trajectory object: + + >>> trajectory.draw_orbitals() + +.. image:: img/benz_min_traj.png + + diff --git a/docs/quickstart.rst b/docs/quickstart.rst new file mode 100644 index 0000000..85653d7 --- /dev/null +++ b/docs/quickstart.rst @@ -0,0 +1,57 @@ +========== +Quickstart +========== + +These pages provide reference API documentation for the Molecular Design Toolkit. + +Just getting started? We recommend trying out `the tutorials and +walkthroughs `_ before diving into the API. + + +Install with pip +---------------- +Get the latest stable version: + +.. code-block:: bash + + $ pip install moldesign + +**Note:** some users may need to run the installation as root, i.e. ``sudo pip install moldesign``, +see `Installing MDT`_ for details. + +Or get the source code on github: + +.. code-block:: bash + + $ git clone github.com/autodesk/molecular-design-toolkit + + +Get started +----------- +At the command line, run + +.. code-block:: bash + + $ python -m moldesign intro + + +Explore the API +--------------- +The Jupyter online documentation system is a powerful tool for discovering functionality. + +To get a list of all members of a module or class, type ``modulename.``, then hit `tab`. + +.. image:: img/tab_autocomplete.png + +To get online documentation about a function or method, type the method's name, then hit `shift+tab` + +.. image:: img/shifttab_online.png + +To get the complete docstring for any object, type its name then a question mark. + +.. image:: img/questiondoc.png + + +Get help +-------- +Click a link in the navigation menu (to your left) for in-depth documentation. diff --git a/docs/structure.rst b/docs/structure.rst index aa13bed..cd16e01 100644 --- a/docs/structure.rst +++ b/docs/structure.rst @@ -1,6 +1,6 @@ -Atoms, molecules, and biomolecules ----------------------------------- -The Molecular design toolkit is built around familiar physical objects. Below is a quick rundown of +Molecular structure +------------------- +MDT is built around familiar physical objects. Below is a quick rundown of those objects and how they relate to one another. For most of the examples here, we'll look at a benzene molecule, which you can create as follows: @@ -167,29 +167,6 @@ Note: NotCalculatedError: The 'potential_energy' property hasn't been calculated yet. ... -Primary structure -""""""""""""""""" -**Class documentation:** :class:`moldesign.Chain`, :class:`moldesign.Residue` - -Biomolecules also contain primary structure information such as :class:`Chains ` -and :class:`Residues `. Chains can be accessed by name OR by index: - - >>> chain1 = molecule.chains['A'] - >>> chain2 = molecule.chains[0] - >>> chain1 is chain2 - True - -Each chain contains :class:`residues `. In a chain, residues can similarly be -accessed through a flat list or by name: - - >>> res0 = molecule.residues[0] - >>> resA = molecule.chains['A'].residues['PRO1'] - >>> res0 is resA - True - -A flat list of all residues in a molecule is also available at `molecule.residues`. - - Electronic structure """""""""""""""""""" **Class documentation:** :class:`moldesign.orbitals.wfn.ElectronicWfn` diff --git a/docs/visualization.rst b/docs/visualization.rst new file mode 100644 index 0000000..2a39330 --- /dev/null +++ b/docs/visualization.rst @@ -0,0 +1,87 @@ +Visualization +============= + + + +Visualize molecular orbitals +---------------------------- +First, you'll need to calculate the molecule's electronic structure using a quantum chemistry +model. Quantum chemistry models are a type of +:class:`Energy Model ` in MDT. + +You can use iPython's autocomplete to get a list of the available methods by typing +``mdt.models.`` and then hitting the ``Tab`` key: + +.. image:: img/howdoi_method_autocomplete.png + +In this example, let's set up a small molecule with a simple quantum chemistry model - +`restricted Hartree-Fock. `_ + + >>> mol = mdt.from_name('benzene') + >>> mol.set_energy_model(mdt.models.RHF(basis='6-31g')) + + +Next, we'll run a calculation with this model - this will calculate several relevant properties for +the molecule. + + >>> mol.calculate() + >>> mol.potential_energy + -6275.56597497 eV + >>> mol.wfn + + +These properties are stored in a :class:`dict` at ``mol.properties``: + + >>> mol.properties.keys() + ['wfn', 'positions', 'mulliken', 'potential_energy'] + +Most relevant for our purposes, we've calculated the electronic state of the molecule and are +ready to visualize it. + + >>> mol.draw_orbitals() + + .. image:: img/howdoi_orbs.png + +In an actual notebook, you can use the controls on the right to control the visualization. + + + +Maniuplate a 3D visualization +----------------------------- +First, create a viewer. It will be rendered in your notebook when it's the last object evaluated in a code cell. + + >>> import moldesign as mdt + >>> from moldesign import units as u + >>> mol = mdt.from_pdb('3AID') + >>> viewer = mol.draw3d() + >>> viewer + +.. image:: img/howdoi_view1.png + +At this point, the viewer will be drawn into your notebook. You can continue to manipulate it after it's been drawn. + +For starters, let's turn all the waters purple. + + >>> wateratoms = [atom for atom in mol.atoms if atom.residue.type == 'water'] + >>> viewer.vdw(atoms=wateratoms, color='purple') + +.. image:: img/howdoi_purplewater.png + +Next, let's make that drug molecule really stand out with with a transparent sphere, an arrow, +and a label: + + >>> drug = mol.chains['A'].residues['ARQ401'] + >>> r = drug.center_of_mass + >>> sphere = viewer.draw_sphere(position=r, radius=6*u.angstrom, opacity=0.5, color='green') + >>> arrow = viewer.draw_arrow(start=r+[0,0,26]*u.angstrom, end=r+[0,0,6]*u.angstrom, radius=3) + >>> label = viewer.draw_label(text="Here's the drug", position=r) + +.. image:: img/howdoi_annotated.png + +Maybe that's too much - let's remove the label and the sphere. + + >>> viewer.remove(label) + >>> viewer.remove(sphere) + +.. image:: img/howdoi_subtle.png + From 6f2ef23b4c4d749909582cd8f6c2ac8574964a22 Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Wed, 28 Sep 2016 14:46:00 -0700 Subject: [PATCH 64/64] Increment dockerfile version pointer, fix minor test failures --- moldesign/_tests/helpers.py | 2 +- moldesign/compute/configuration.py | 2 +- moldesign/molecules/bonds.py | 3 ++- moldesign/units/quantity.py | 5 ++++- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/moldesign/_tests/helpers.py b/moldesign/_tests/helpers.py index 269244f..b210754 100644 --- a/moldesign/_tests/helpers.py +++ b/moldesign/_tests/helpers.py @@ -32,7 +32,7 @@ def _make_mol_with_n_hydrogens(n): return mdt.Molecule([mdt.Atom('H') for i in xrange(n)]) -class ZeroEnergy(mdt.models.EnergyModelBase): +class ZeroEnergy(mdt.models.base.EnergyModelBase): """ All 0, all the time """ def prep(self): diff --git a/moldesign/compute/configuration.py b/moldesign/compute/configuration.py index dec22ab..e77a7db 100644 --- a/moldesign/compute/configuration.py +++ b/moldesign/compute/configuration.py @@ -92,7 +92,7 @@ default_python_image=None, default_docker_host='unix://var/run/docker.sock', default_docker_machine='default', - default_version_tag='0.7.2') + default_version_tag='0.7.3') DEF_CONFIG = CONFIG_DEFAULTS.copy() """ dict: default configuration to be written to moldesign.yml if it doesn't exist diff --git a/moldesign/molecules/bonds.py b/moldesign/molecules/bonds.py index 01ee940..c0460b9 100644 --- a/moldesign/molecules/bonds.py +++ b/moldesign/molecules/bonds.py @@ -27,7 +27,8 @@ class Bond(object): Notes: Comparisons and hashes involving bonds will return True if the atoms involved in the bonds - are the same. Bond orders are not compared. + are the same. Bond orders are not compared. + These objects are used to represent and pass bond data only - they are not used for storage. Attributes: diff --git a/moldesign/units/quantity.py b/moldesign/units/quantity.py index 643ff05..431b1ad 100644 --- a/moldesign/units/quantity.py +++ b/moldesign/units/quantity.py @@ -17,6 +17,7 @@ import operator import copy from os.path import join, abspath, dirname +import numbers import numpy as np from pint import UnitRegistry, set_application_registry, DimensionalityError @@ -95,7 +96,9 @@ def __setitem__(self, key, value): if not hasattr(value, 'value_in'): # deal with missing `value_in` method if self.dimensionless: # case 1: this is OK if self is dimensionless self.magnitude[key] = value - else: # case 2: User tried to pass a number without units + elif not isinstance(value, numbers.Number): # case 2: this is not a number + raise TypeError('"%s" is not a valid numeric value' % value) + else: # case 3: wrong units raise DimensionalityError(self.units, ureg.dimensionless) else: # case 3: attribute error is unrelated to this raise

?lJbr%yod7NaM-Q{-(T8lN{k~z? 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