ó
Ú™xTc           @   sœ   d  d l  m Z d  d l m Z m Z d  d l Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d	 „  ƒ  YZ d
 e j	 d „ Z
 d
 e j	 d „ Z d S(   iÿÿÿÿ(   t   division(   t   slots_getstate_setstatet+   slots_getstate_setstate_default_initializerNt	   conformerc           B   s)   e  Z d  d d g Z d „  Z d „  Z RS(   t   atom_groupst   labelt	   selectionc         C   sP   d d l  m } | j d k s% t ‚ | g |  _ | j ƒ  |  _ | j |  _ d  S(   Niÿÿÿÿ(   t   flext    (   t   scitbx.array_familyR   t   altloct   AssertionErrorR   t   size_tR   R   (   t   selft
   atom_groupR   (    (    sd   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/building/alternate_conformations/altloc_labeling.pyt   __init__	   s
    c         C   sH   | j  |  j k s t ‚ |  j j | ƒ |  j j | j ƒ  j ƒ  ƒ d  S(   N(	   R
   t   lablR   R   t   appendR   t   extendt   atomst   extract_i_seq(   R   R   (    (    sd   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/building/alternate_conformations/altloc_labeling.pyt   append_atom_group   s    (   t   __name__t
   __module__t	   __slots__R   R   (    (    (    sd   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/building/alternate_conformations/altloc_labeling.pyR      s   	t   conformer_groupc           B   s   e  Z d  g Z d „  Z RS(   t   residue_groupsc         C   s•   | |  _  g  |  _ x| t | ƒ D]n \ } } x_ t | j ƒ  ƒ D]K \ } } | d k ru t | ƒ } |  j j | ƒ q> |  j | j | ƒ q> Wq Wd  S(   Ni    (   R   t
   conformerst	   enumerateR   R   R   R   (   R   R   t   i_rest   residue_groupt   i_groupR   t   conf(    (    sd   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/building/alternate_conformations/altloc_labeling.pyR      s    		(   R   R   R   R   (    (    (    sd   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/building/alternate_conformations/altloc_labeling.pyR      s   	t   nb_clashc           B   s/   e  Z d  d d d d g Z e j d d „ Z RS(   t   i_seqt   j_seqt   id_str_it   id_str_jt   overlapR   c         C   s(   | | d |  j  |  j |  j f IJd  S(   Ns   %s  %s  : %.3f(   R$   R%   R&   (   R   t   outt   prefix(    (    sd   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/building/alternate_conformations/altloc_labeling.pyt   show%   s    (   R   R   R   t   syst   stdoutR)   (    (    (    sd   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/building/alternate_conformations/altloc_labeling.pyR!   "   s   gš™™™™™É?c         C   s  | j  ƒ  } | j ƒ  j ƒ  } | j d | d | ƒ } | j j }	 | j j d | ƒ }
 g  } x£ t |	 |
 ƒ D]’ \ } } | | j sm | | j	 r› qm n  | j
 | } | | k rm t d | j d | j	 d | | j d | | j	 d | ƒ } | j | ƒ qm qm W| j d „  ƒ | S(	   Nt
   sites_cartt   site_labelsR"   R#   R$   R%   R&   c         S   s   t  | j |  j ƒ S(   N(   t   cmpR&   (   t   at   b(    (    sd   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/building/alternate_conformations/altloc_labeling.pyt   <lambda>E   s    (   R,   t
   scattererst   extract_labelst   pair_proxiest   nonbonded_proxiest   asut   deltast   zipR"   R#   t   vdw_distanceR!   R   t   sort(   t	   pdb_atomst   xray_structureR   t   geometry_restraints_managert	   clash_minR'   R,   R-   R4   t   asu_proxiesR7   t   clashest   proxyt   deltaR&   t   clash(    (    sd   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/building/alternate_conformations/altloc_labeling.pyt   get_sorted_clashes)   s,    					c   	      C   s˜   |  j  ƒ  } | j d ƒ } t d |  j ƒ  d | d | d | d | d | ƒ } t | ƒ d k r” | d	 IJx' | D] } | j d | d
 d ƒ qq Wn  | S(   Ns   not altloc ' 'R;   R<   R   R=   R>   R'   i    s*   Clashing atoms in alternate conformations:R(   s     (   t   atom_selection_cacheR   RD   R   t   lenR)   (	   t   pdb_hierarchyR<   R=   R>   R'   t	   sel_cachet   alt_conf_selR@   RC   (    (    sd   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/building/alternate_conformations/altloc_labeling.pyt   show_altloc_clashesH   s    	
(   t
   __future__R    t   libtbxR   R   R*   R   R   R!   R+   RD   RJ   (    (    (    sd   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/building/alternate_conformations/altloc_labeling.pyt   <module>   s   