ó
®™xTc           @   sd   d  d l  m Z d  d l Z d  d l m Z d  d l m Z d d d „ Z	 d d „ Z
 d „  Z d S(	   iÿÿÿÿ(   t   divisionN(   t   flex(   t#   three_letter_l_given_three_letter_dg      @c         C   sé  | d  k	 r0 t | t j ƒ r0 | j ƒ  } q0 n  | d  k rc t j t |  j ƒ  ƒ t ƒ j ƒ  } n  t j	 j
 ƒ  } xp|  j ƒ  D]b} xY| j ƒ  D]K} xB| j ƒ  D]4} x+| j ƒ  D]} | j ƒ  r¸ x| j ƒ  D]÷} | j t k rò q× n  d  }	 d  }
 d  } d  } xŒ | j ƒ  D]~ } | j j ƒ  d k r;| }	 q| j j ƒ  d k rY| }
 q| j j ƒ  d k rw| } q| j j ƒ  d k r| } qqW|	 d  k	 r× |
 d  k	 r× | d  k	 r× | d  k	 r× |	 j | k s× |
 j | k s× | j | k s× | j | k rq× n  t d | j ƒ \ } } |	 j | j |
 j | j g } t j	 j d | d | d d	 | d
 ƒ } | j | ƒ | j |	 j |
 j | j g } t j	 j d | d | d d	 | d
 ƒ } | j | ƒ q× q× Wq¸ q¸ Wq¥ Wq’ Wq W| S(   Nt   Nt   CAt   Ct   CBt   resnamet   i_seqst   angle_idealt   weighti   i   (   t   Nonet
   isinstanceR   t   boolt
   iselectiont   lent   atomst   Truet   cctbxt   geometry_restraintst   shared_dihedral_proxyt   modelst   chainst   residue_groupst
   conformerst
   is_proteint   residuesR   R   t   namet   stript   i_seqt   get_cb_target_angle_pairt   dihedral_proxyt   append(   t   pdb_hierarchyt	   selectiont   sigmat   c_beta_dihedral_proxiest   modelt   chaint   rgt	   conformert   residuet   N_atomt   CA_atomt   C_atomt   CB_atomt   atomt   dihedralNCABt   dihedralCNABR   t   dp_add(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry_restraints/c_beta.pyt   get_c_beta_torsion_proxies   sv    			'c      
   C   si   d } | d  k r: | t j j d |  d | d | ƒ 7} n+ | t j j d | d |  d | d | ƒ 7} | S(   Ng        t
   sites_cartt   proxiest   gradient_arrayt	   unit_cell(   R   R   R   t   dihedral_residual_sum(   R3   R$   R5   R6   t   target(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry_restraints/c_beta.pyt   target_and_gradientsH   s    
c         C   sš   |  d k r d } d } nu |  d k r6 d } d } nZ |  d k sZ |  d k sZ |  d	 k ri d
 } d } n' |  d k r„ d } d } n d } d } | | f S(   Nt   ALAgš™™™™¹^@gfffff¦^Àt   PROgfffffÆ\@gÍÌÌÌÌ,^Àt   VALt   THRt   ILEgš™™™™Ù^@g     €^Àt   GLYgffffff^@gffffff^Àg33333³^@(    (   R   R/   R0   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry_restraints/c_beta.pyR   [   s"    				(   t
   __future__R    t   cctbx.geometry_restraintsR   t   cctbx.array_familyR   t   iotbx.pdb.amino_acid_codesR   R   R2   R9   R   (    (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry_restraints/c_beta.pyt   <module>   s   D