ó
:™xTc           @   sp  d  Z  d d l m Z d d l Z d d l Z d d l m Z d d l Z	 d d l	 m
 Z
 d d l m Z m Z d d l m Z d d l Z d d l Z d d l Z dP dQ d „ Z d d d d d g Z e j dR dS dT dU dV g ƒ Z e j dW dX dY dZ d[ g ƒ Z e j d\ d] d^ d_ d` g ƒ Z e j da db dc dd de g ƒ Z dM „  Z e dN k rle dO e j d
 ƒ n  d S(f   s²   
Simple experiment: using only bond and angle restraints of
RNA sugar ring, performing geometry minimization starting with
random coordinates, how many configurations are found?
iÿÿÿÿ(   t   divisionN(   t   flex(   t   matrix(   t   approx_equalt   is_below_limit(   t   null_outi    g      ø?i   c         C   s§   t  j d g ƒ } t j |  ƒ }  t j d ƒ } t j | ƒ } xQ t d ƒ D]C } | j d d | d t ƒ } | | |  } | j | ƒ | } qL W| | j ƒ  8} | S(   Ni    i   t   angleiH   t   deg(   i    i    i    (   i    i    i    (	   R   t   vec3_doubleR   t   colt   xranget$   axis_and_angle_as_r3_rotation_matrixt   Truet   appendt   mean(   t   start_vectort   normalt   resultt
   prev_pointt   axist   it   rt   point(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/random_puckers.pyt   pentagon_sites_cart   s    
s   C1*s   C2*s   C3*s   C4*s   O4*gÁÊ¡E¶3!@gw¾Ÿ/Ý@gL7‰A`å ?g/Ý$Á"@g/Ý$�@g)\�Âõ(Ì?gmçû©ñ’$@g^ºI«@gçû©ñÒMö?g–C‹lç;%@g¼t“Ö@gìQ¸…ëñ?gu“VÎ"@g'1¬Z@gsh‘í|?á?gÓMbXy!@g×£p=
×@g�•C‹lçÛ?gÏ÷Sã¥#@gã¥›Ä °@g°rh‘í|ë?g33333ó%@gÛù~j¼t@gq=
×£pé?gú~j¼t“%@g^ºI«@g      ô?g˜nƒÀÊ"@gD‹lçû©@g�•C‹lï?gSCŸw’ Ù¿g–ü�aó¿gI@–›f�È¿g]¦F’ÃÙ?gp:7Ž(æ¿g–“¾Ÿ²Zö¿gÏj‹«rþç?gö~µøæ?gúlM5ùí¿g ³Dbvß¿gøŠKt`ò?gÓ~K·èÏÄ¿gwÅÕ’ëó¿g÷ŸV†ÍY¹¿gïvÕ]’¿g28 u�5Þ?gÇˆYfá$ï¿gû[ca4EÕ?g­ÖI6r‘ê?gàZÑç¿gœdG°‚.ò¿gb"”íøìà¿gœ¸ž$º¹×¿g%	„€íˆû¿gÀ$—$
{ò¿g’ž°;wåÛ?g´Ð©µõ	ã¿g%S^šÒ¿gk¾%Ê?gðœ 2á?c   '         s»  |  g  d g g k s t  ‚ t |  ƒ d k r9 t j } n	 t ƒ  } d= d> d? d@ dA g } dC dE dG dI dK g } dM dO dQ dS g } t j j j d t	 d | d g  ƒ \ } ‰  x� | D]y \ } } g  | D] } t
 j | ƒ ^ qÂ \ }	 }
 ˆ  j |	 |
 } t | j | d d ƒst  ‚ | | _ d dT | _ q¯ Wˆ  j d  k sAt  ‚ t j j ƒ  ˆ  _ xe | D]] \ } } g  | D] } t
 j | ƒ ^ qm} ˆ  j j t j j d | d | d d dU ƒ ƒ qZWˆ  j d t
 d | d | ƒ ‡  f d  †  } | d t	 ƒ | d t ƒ d g d } | j ƒ  } t j d! d ƒ } x^t d" ƒ D]P} xz t rºx* t | j ƒ  ƒ D] }	 | j ƒ  | |	 <qZWy | d | ƒ Wn. t k
 rµ} t | ƒ j  d# ƒ s·‚  q·qAXPqAWt j! ƒ  } xZ t	 t t" t# g D]F } t$ j% j& j' d$ | d% | ƒ } | j( | j) ƒ  ƒ } | j | ƒ qÚWd& j* g  | D] } d' | ^ q1ƒ } | | IJt+ t, | ƒ d( ƒ sot  ‚ | t j- | ƒ c d 7<q8Wd) G| GHt. j/ j0 d* ƒ r²d+ d  l1 } | j2 j3 j4 ƒ  } | j2 j3 j5 d, d- ƒ } | j2 j3 j6 d, d. ƒ } | j7 | ƒ | j8 | ƒ t9 ƒ  } xIt: t	 t t" t# g ƒ D]/\ } } | j2 j3 j; d/ d0 d1 d- ƒ } t$ j% j& j' d$ | d% | ƒ } | j) ƒ  }  x˜ t< t
 |  ƒ D]‡ \ }! }" | j2 j3 j= ƒ  }# d2 |! |# _> t? j@ |" ƒ t? j@ d d | d3 f ƒ |# _A d |# _B d" |# _C d& |! d |# _D | jE |# ƒ q•W| j2 j3 jF d4 d5 | d d6 d& ƒ }$ |$ jG | ƒ | jH |$ ƒ q1W| jI ƒ  jJ ƒ  | jK d7 t ƒ }% d8 }& d9 G|& GHtL |& d: ƒ jM d; |% ƒ n  d< GHd  S(V   Ns	   --verbosei    i   i   i   i   s   C1*s   C2*gX9´Èvø?s   O4*gd;ßO�—ö?s   C3*gÑ"Ûù~jø?s   C4*gR¸…ëQø?gÉv¾Ÿ/÷?g33333SY@g33333“Y@gÍÌÌÌÌZ@g     €[@t
   sites_cartt   edge_list_bondst   edge_list_anglest   epsg{®Gáz„?g{®Gáz”?t   i_seqst   angle_idealt   weightt   site_labelst   fc            sW   xP t  d ƒ D]B } t j j j d |  d ˆ  ƒ } t d | j d d ƒ s t ‚ q W| S(   Ni   R   t   geometry_restraints_managert   valuet   limitg»½×Ùß|Û=(   R
   t   cctbxt   geometry_restraintst   lbfgsR   t   final_target_valuet   AssertionError(   R   t   i_lbfgs_restartt	   minimized(   t   geo_manager(    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/random_puckers.pyR&   a   s    	"t   seedi   s.   Bond distance > max_reasonable_bond_distance: t   reference_sitest   other_sitest    s   %.3fgü©ñÒMbP?s   conformer_counts:t   iotbxiÿÿÿÿt   idt    t   At   resnames     Ut   altlocs    %-3sg      ø?t   resseqs   %4dt   icodet
   append_ends   puckers.pdbs   Writing file:t   wsO   REMARK random_puckers.py
REMARK 1 = 3'
REMARK 2 = 2'
REMARK 3 = A
REMARK 4 = B
t   OK(   i    i   (   i    i   (   i   i   (   i   i   (   i   i   (   s   C1*s   C2*(   (   s   C1*s   C2*gX9´Èvø?(   s   C1*s   O4*(   (   s   C1*s   O4*gd;ßO�—ö?(   s   C2*s   C3*(   (   s   C2*s   C3*gÑ"Ûù~jø?(   s   C3*s   C4*(   (   s   C3*s   C4*gR¸…ëQø?(   s   C4*s   O4*(   (   s   C4*s   O4*gÉv¾Ÿ/÷?(   s   C1*s   C2*s   C3*(   (   s   C1*s   C2*s   C3*g33333SY@(   s   C2*s   C3*s   C4*(   (   s   C2*s   C3*s   C4*g33333“Y@(   s   C3*s   C4*s   O4*(   (   s   C3*s   C4*s   O4*gÍÌÌÌÌZ@(   s   C4*s   O4*s   C1*(   (   s   C4*s   O4*s   C1*g     €[@g-Cëâ6:?i	   (N   R(   t   lent   syst   stdoutR   R$   R%   t   managert:   construct_non_crystallographic_conserving_bonds_and_anglest   sites_cart_3pt
   atom_namest   indext   bond_params_tableR   t   distance_idealR   t   angle_proxiest   Nonet   shared_angle_proxyR   t   angle_proxyt   show_sortedt   sites_cart_2pt	   deep_copyR   t   mersenne_twisterR
   R   t   sizet   random_double_point_on_spheret   RuntimeErrort   strt
   startswitht   doublet   sites_cart_at   sites_cart_bt   scitbxt   matht	   superposet   least_squares_fitt   rms_differencet   other_sites_best_fitt   joinR   t   mint	   min_indext   libtbxt   envt
   has_modulet   iotbx.pdb.hierarchyt   pdbt	   hierarchyt   roott   modelt   chaint   append_chaint   append_modelR   t	   enumeratet
   atom_groupt   zipt   atomt   nameR   R	   t   xyzt   occt   bt   elementt   append_atomt   residue_groupt   append_atom_groupt   append_residue_groupt   atomst   reset_serialt   as_pdb_stringt   opent   write('   t   argst   coutR   t	   bond_listt
   angle_listR   t   bond_atom_namesRD   t	   atom_nameR   t   jt   bond_paramst   angle_atom_namesR   R   R&   t   conformer_countst   mtt   i_trialt   et	   rmsd_listR-   t   supt   rmsdt   olineR0   Rc   Re   Rf   t   sites_cart_pentagont   i_stackRj   t   sites_cart_outt
   site_labelt	   site_cartRl   Rs   t   pdb_strt	   file_name(    (   R+   sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/random_puckers.pyt   run:   sÐ    			(	"			
	&
			,			t   __main__R{   (   i    g      ø?i    (   i    i    i   (   gÁÊ¡E¶3!@gw¾Ÿ/Ý@gL7‰A`å ?(   g/Ý$Á"@g/Ý$�@g)\�Âõ(Ì?(   gmçû©ñ’$@g^ºI«@gçû©ñÒMö?(   g–C‹lç;%@g¼t“Ö@gìQ¸…ëñ?(   gu“VÎ"@g'1¬Z@gsh‘í|?á?(   gÓMbXy!@g×£p=
×@g�•C‹lçÛ?(   gÏ÷Sã¥#@gã¥›Ä °@g°rh‘í|ë?(   g33333ó%@gÛù~j¼t@gq=
×£pé?(   gú~j¼t“%@g^ºI«@g      ô?(   g˜nƒÀÊ"@gD‹lçû©@g�•C‹lï?(   gSCŸw’ Ù¿g–ü�aó¿gI@–›f�È¿(   g]¦F’ÃÙ?gp:7Ž(æ¿g–“¾Ÿ²Zö¿(   gÏj‹«rþç?gö~µøæ?gúlM5ùí¿(   g ³Dbvß¿gøŠKt`ò?gÓ~K·èÏÄ¿(   gwÅÕ’ëó¿g÷ŸV†ÍY¹¿gïvÕ]’¿(   g28 u�5Þ?gÇˆYfá$ï¿gû[ca4EÕ?(   g­ÖI6r‘ê?gàZÑç¿gœdG°‚.ò¿(   gb"”íøìà¿gœ¸ž$º¹×¿g%	„€íˆû¿(   gÀ$—$
{ò¿g’ž°;wåÛ?g´Ð©µõ	ã¿(   g%S^šÒ¿gk¾%Ê?gðœ 2á?(   t   __doc__t
   __future__R    t!   cctbx.geometry_restraints.managerR$   t   cctbx.geometry_restraints.lbfgst   cctbx.array_familyR   t   scitbx.math.superposeRU   R   t   libtbx.test_utilsR   R   t   libtbx.utilsR   t   libtbx.load_envR^   RV   R<   R   RA   R   R@   RJ   RS   RT   R“   t   __name__t   argv(    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/random_puckers.pyt   <module>   sP   	}