ó
­™xTc           @   s�   d  d l  m Z d  d l m Z d  d l m Z d  d l m Z d  d l Z	 d  d l
 Z e j j d ƒ Z d e f d „  ƒ  YZ d	 „  Z d S(
   iÿÿÿÿ(   t   division(   t   flex(   t   geometry_restraints(   t   shared_dihedral_proxyNt   mmtbx_reference_coordinate_extt   managerc           B   s¡   e  Z d  „  Z d d d e d „ Z d d d e e d „ Z d d d e d „ Z d d d e e d „ Z d	 „  Z	 d d
 „ Z
 d „  Z d d „ Z d d „ Z RS(   c         C   s   d  |  _ d  |  _ d  S(   N(   t   Nonet   reference_coordinate_proxiest   reference_torsion_proxies(   t   self(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry_restraints/reference.pyt   __init__   s    	g      à?g      ð?c         C   s,   |  j  d | d | d | d | d | ƒ d  S(   Nt
   sites_cartt	   selectiont   sigmat   limitt   top_out_potential(   t    add_reference_coordinate_proxies(   R	   R   R   R   R   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry_restraints/reference.pyt   add_coordinate_restraints   s    	g      @g      .@c         C   s8   |  j  d | d | d | d | d | d | d | ƒ d  S(   Nt   pdb_hierarchyR   R   R   R   t   chi_angles_onlyR   (   t   add_reference_torsion_proxies(   R	   R   R   R   R   R   R   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry_restraints/reference.pyt   add_torsion_restraints   s    		c         C   s?  d d  l  } | j j d ƒ |  _ |  j d  k rE |  j j ƒ  |  _ n  | d  k	 ru t | t j	 ƒ ru | j
 ƒ  } qu n  | d  k r¢ t j	 t | ƒ t ƒ j
 ƒ  } n  t | ƒ t | ƒ k sÀ t ‚ d | d } xj t | ƒ D]\ \ } }	 |	 g }
 | | } |  j j d |
 d | d | d | d	 | ƒ } |  j j | ƒ qÛ Wd  S(
   NiÿÿÿÿR   g      ð?i   t   i_seqst	   ref_sitest   weightR   t   top_out(   t   boost.pythont   pythont
   import_extt   extR   R   t!   shared_reference_coordinate_proxyt
   isinstanceR   t   boolt
   iselectiont   lent   Truet   AssertionErrort	   enumeratet   reference_coordinate_proxyt   append(   R	   R   R   R   R   R   t   boostR   t   kt   i_seqR   R   t   proxy(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry_restraints/reference.pyR   /   s.    		
	c         C   s¦   g  | j  ƒ  D] } | j ^ q j d ƒ d k s7 t ‚ d d l m }	 |	 d | d | d | d | d	 | d
 | d | ƒ }
 |  j d  k r• |
 |  _ n |  j |
 ƒ d  S(   Ni    i   iÿÿÿÿ(   t   build_torsion_proxiesR   R   R   R   R   R   R   (	   t   atomsR*   t   countR$   t(   mmtbx.torsion_restraints.reference_modelR,   R   R   t&   add_existing_reference_torsion_proxies(   R	   R   R   R   R   R   R   R   t   atomR,   t   local_reference_torsion_proxies(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry_restraints/reference.pyR   O   s    	7	c         C   sR   |  j  d  k r t ƒ  |  _  n  | d  k	 rN x! | D] } |  j  j | ƒ q1 Wn  d  S(   N(   R   R   R   R'   (   R	   t   proxiest   dp(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry_restraints/reference.pyR0   h   s
    c         C   s4   | d  k	 r' |  j j d | ƒ |  _ n	 d  |  _ d  S(   NR   (   R   R   t   proxy_remove(   R	   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry_restraints/reference.pyt   remove_coordinate_restraintso   s    c         C   s   |  j  j d | ƒ |  _  d  S(   NR   (   R   R5   (   R	   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry_restraints/reference.pyt   remove_torsion_restraintsv   s    c         C   sŽ   |  j  d  k	 rŠ t | j ƒ  ƒ } t j ƒ  } x0 |  j  D]% } t | | ƒ s7 | j | ƒ q7 q7 Wt | ƒ d k r~ | |  _  qŠ d  |  _  n  d  S(   Ni    (	   R   R   t   tuplet   atoms_with_labelsR   R   t   torsion_is_chi_angleR'   R"   (   R	   R   R   t   awlt   updated_torsion_restraintsR4   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry_restraints/reference.pyt   remove_chi_angle_restraintsz   s    c      
   C   s©   d } |  j  d  k	 r4 | t j | |  j  | ƒ 7} n  |  j d  k	 r¥ | d  k rw | t j d | d |  j d | ƒ 7} q¥ | t j d | d | d |  j d | ƒ 7} n  | S(   Ng        R   R3   t   gradient_arrayt	   unit_cell(   R   R   R   t!   reference_coordinate_residual_sumR   R   t   dihedral_residual_sum(   R	   R   R>   R?   t   target(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry_restraints/reference.pyt   target_and_gradients‰   s$    			N(   t   __name__t
   __module__R
   R   t   FalseR   R   R   R   R0   R6   R7   R=   RC   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry_restraints/reference.pyR   
   s0   			c         C   sÌ   t  j j } d  } g  } xU |  j D]J } | d  k rD | | j } n | | | j k r[ t S| j | | ƒ q" W| | ƒ d k r† t Sd  } x9 | D]1 } | d  k r± | j } q“ | | j k r“ t Sq“ Wt	 S(   Nt   common_amino_acid(
   t   iotbxt   pdbt   common_residue_names_get_classR   R   t   resnameRF   R'   t   resseqR#   (   R4   R9   t	   get_classRK   R-   R*   RL   R1   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry_restraints/reference.pyR:   ¡   s$    (   t
   __future__R    t   cctbx.array_familyR   t   cctbxR   t   cctbx.geometry_restraintsR   t	   iotbx.pdbRH   R   R(   R   R   R   t   objectR   R:   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry_restraints/reference.pyt   <module>   s   —