ó
Í™xTc           @   sf   d  d l  m Z d  d l m Z d  d l Z d  d l m Z d  d l m Z d e	 f d „  ƒ  YZ
 d S(   iÿÿÿÿ(   t   division(   t   flexN(   t   adopt_init_args(   t   Sorryt   managerc           B   s  e  Z e e e e e e e e d d d d d d d d d d  „ Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d „  Z d	 „  Z d d
 „ Z d „  Z d „  Z d d d d d d d d d d d d „ Z d d „ Z d „  Z e e e e e e e e e d „	 Z RS(   c         C   sÛ   t  |  t ƒ  ƒ |  j |  j ƒ |  _ |  j |  j ƒ |  _ |  j |  j ƒ |  _ |  j |  j ƒ |  _ |  j |  j ƒ |  _ |  j |  j ƒ |  _ |  j |  j	 ƒ |  _	 |  j |  j
 ƒ |  _
 |  j |  j ƒ |  _ |  j ƒ  d  S(   N(   R   t   localst
   _deep_copyt   sites_individualt   sites_torsion_anglest   sites_rigid_bodyt   adp_individual_isot   adp_individual_anisot	   adp_groupt   group_ht   adp_tlst   s_occupanciest	   check_all(   t   selft   individual_sitest   torsion_anglest
   rigid_bodyt   individual_adpt	   group_adpt   tlst   occupanciest   group_anomalousR   R   R	   R
   R   R   R   R   R   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/refinement_flags.pyt   __init__   s    c         C   sK  g  } | d  k r | } n,|  j | ƒ s9 |  j | ƒ rH | j ƒ  } nÿ t | ƒ d k rc | } nä |  j | d ƒ r» xÎ | D]7 } |  j | ƒ r¨ | j | j ƒ  ƒ q} t d ƒ ‚ q} WnŒ |  j | d d ƒ r;xr | D][ } g  } x? | D]7 } |  j | ƒ r| j | j ƒ  ƒ qì t d ƒ ‚ qì W| j | ƒ qÙ Wn t d ƒ ‚ | S(   Ni    s   Bad selection array type.(   t   Nonet   is_boolt	   is_size_tt	   deep_copyt   lent   appendt   RuntimeError(   R   t   xt   resultt   itemt   item1t   tmpt   item2(    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/refinement_flags.pyR   &   s,     	 	c      $   C   sñ   t  d |  j d |  j d |  j d |  j d |  j d |  j d |  j d |  j d	 |  j	 |  j
 ƒ d
 |  j	 |  j ƒ d |  j	 |  j ƒ d |  j	 |  j ƒ d |  j	 |  j ƒ d |  j	 |  j ƒ d |  j	 |  j ƒ d |  j	 |  j ƒ d |  j	 |  j ƒ ƒ S(   NR   R   R   R   R   R   R   R   R   R   R	   R
   R   R   R   R   R   (   R   R   R   R   R   R   R   R   R   R   R   R   R	   R
   R   R   R   R   R   (   R   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/refinement_flags.pyR   <   s$    								c         C   s   d | j  j d ƒ d k S(   Ns   %ss   array_family_flex_ext.size_ti    (   t	   __class__t   count(   R   R"   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/refinement_flags.pyR   Q   s    c         C   s   d | j  j d ƒ d k S(   Ns   %ss   array_family_flex_ext.booli    (   R(   R)   (   R   R"   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/refinement_flags.pyR   T   s    c   	      C   s  | d  k	 s t ‚ |  j | ƒ } t } y t | ƒ } Wn t k
 rV | j ƒ  } n X| d k rg | S|  j | ƒ r— | j t ƒ d k rt	 } qn||  j
 | ƒ rÄ | j ƒ  d k rt	 } qnO|  j
 | d ƒ sê |  j | d ƒ r”g  } xe | D]] } |  j
 | ƒ r"| j t | ƒ ƒ q÷ |  j | ƒ rM| j t | j ƒ  ƒ ƒ q÷ t	 } Pq÷ Wt | ƒ d k sˆt | ƒ t t | ƒ ƒ k rt	 } qn g  } x= | D]5 } x, | D]$ } x | D] } | j | ƒ q»Wq®Wq¡Wt | ƒ d k s
t | ƒ t t | ƒ ƒ k rt	 } n  | S(   Ni    (   R   t   AssertionErrorR   t   TrueR   t	   Exceptiont   sizeR   R)   t   FalseR   t   extendt   listt
   iselectiont   setR    (	   R   t
   selectionsR#   t   lxt   as_1dt   selt   it   jt   k(    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/refinement_flags.pyt   _count_selectedW   sD         &00	c         C   s<  d } |  j  r7 |  j |  j ƒ s7 t | d ƒ ‚ q7 n  |  j rh |  j |  j ƒ sh t | d ƒ ‚ qh n  |  j r™ |  j |  j ƒ s™ t | d ƒ ‚ q™ n  |  j rŠ|  j	 rø |  j
 |  j g j d  ƒ d k rø |  j |  j
 @j t ƒ s‡t d ƒ ‚ q‡qŠ|  j
 d  k	 rD|  j |  j
 ƒ s‡|  j |  j ƒ sAt | d ƒ ‚ qAq‡qŠ|  j d  k	 r{|  j |  j ƒ s‡t | d ƒ ‚ q‡qŠt d	 ƒ ‚ n  |  j r»|  j |  j ƒ s»t | d
 ƒ ‚ q»n  |  j	 rì|  j |  j ƒ sìt | d ƒ ‚ qìn  |  j r,|  j d  k	 r,|  j |  j ƒ s,t | d ƒ ‚ q,n  |  j r8n  d  S(   Ns%   
Bad (empty or mixed) selection in %ss   sites_individual.s   sites_torsion_angles.s   sites_rigid_body.i    s5   Same atoms selected for iso and aniso ADP refinement.s   adp_individual_iso.s   adp_individual_aniso.s    No selection for individual_adp.s
   adp_group.s   adp_tls.s   occupancies.(   R   R:   R   R   R   R   R   R	   R   R   R
   R   R)   R   t   all_eqR.   R   R   R   R   R   R   (   R   t   prefix(    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/refinement_flags.pyR   x   sF    							c         C   s*   | d  k	 r t t | ƒ ƒ St d ƒ Sd  S(   Ni    (   R   t   strR   (   R   R"   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/refinement_flags.pyt   szs�   s     c         C   sË   | d  k r t d ƒ S|  j | ƒ r8 t | j t ƒ ƒ S|  j | ƒ rW t | j ƒ  ƒ St | ƒ d k rs t d ƒ S|  j | d ƒ r» t t j	 t j
 g  | D] } | j ƒ  ^ qœ ƒ ƒ ƒ St d ƒ ‚ d  S(   Ni    s   Bad selection array type.(   R   R=   R   R)   R+   R   R-   R   R   t   sumt   size_tR!   (   R   R"   R7   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/refinement_flags.pyt   ca¡   s     
   
5c         C   sk   t  j ƒ  } | d  k	 r[ x@ | D]5 } x, | D]$ } x | D] } | j | ƒ q9 Wq, Wq Wn  t | j ƒ  ƒ S(   N(   R   R@   R   R    R=   R-   (   R   R"   R#   R7   R8   R9   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/refinement_flags.pyt   count_occupanciesª   s    c         C   s¢  | d  k r t j } n  | d IJ| d t |  j ƒ |  j |  j ƒ f IJ| d t |  j ƒ |  j |  j ƒ f IJ| d t |  j	 ƒ |  j |  j
 ƒ |  j |  j
 ƒ f IJ| d t |  j ƒ |  j |  j ƒ |  j |  j ƒ f IJ| d t |  j ƒ |  j |  j ƒ |  j |  j ƒ f IJ| d t |  j ƒ |  j |  j ƒ |  j |  j ƒ f IJ|  j |  j ƒ } | d t |  j ƒ | f IJ| d	 |  j IJ| j ƒ  d  S(
   Ns&   Refinement flags and selection counts:s)     individual_sites       = %5s (%s atoms)s)     torsion_angles         = %5s (%s atoms)s6     rigid_body             = %5s (%s atoms in %s groups)s4     individual_adp         = %5s (iso = %s aniso = %s)s6     group_adp              = %5s (%s atoms in %s groups)s6     tls                    = %5s (%s atoms in %s groups)s)     occupancies            = %5s (%s atoms)s     group_anomalous        = %5s(   R   t   syst   stdoutR=   R   RA   R   R   R   R   R	   R>   R   R
   R   R   R   R   R   RB   R   R   R   t   flush(   R   t   logt   co_res(    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/refinement_flags.pyt   show³   s,     
""11c         C   sÐ  y t  | ƒ } Wn t k
 r/ | j ƒ  } n X| d k r@ | S|  j | ƒ ra | j | ƒ } nk|  j | d ƒ ré g  } xc t | ƒ D]U \ } } t j | j ƒ  | ƒ j | ƒ j	 ƒ  } | j ƒ  d k r‡ | j
 | ƒ q‡ q‡ W| } nã |  j | d d ƒ rÀg  } x® | D]¦ } g  }	 xu | D]m }
 |  j |
 ƒ r�t j | j ƒ  |
 ƒ j | ƒ j	 ƒ  } | j ƒ  d k r�|	 j
 | ƒ q�q t d ƒ ‚ q Wt  |	 ƒ d k r| j
 |	 ƒ qqW| } n t d ƒ ‚ | S(   Ni    s   Bad selection array type.(   R   R,   R-   R   t   selectR   t	   enumerateR   t   boolR1   R    R!   (   R   R"   t	   selectionR4   t   x_newt   i_seqR$   t   valR%   R&   R'   t   v(    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/refinement_flags.pyt   _selectÊ   s<       ' 	'  	c         C   s“  |  j  | ƒ s t ‚ |  j d  k	 r? |  j |  j | ƒ |  _ n  |  j d  k	 ri |  j |  j | ƒ |  _ n  |  j d  k	 r“ |  j |  j | ƒ |  _ n  |  j d  k	 r½ |  j |  j | ƒ |  _ n  |  j d  k	 rç |  j |  j | ƒ |  _ n  |  j	 d  k	 r|  j |  j	 | ƒ |  _	 n  |  j
 d  k	 r;|  j |  j
 | ƒ |  _
 n  |  j d  k	 re|  j |  j | ƒ |  _ n  |  j d  k	 r�|  j |  j | ƒ |  _ n  |  S(   N(   R   R*   R   R   RQ   R   R
   R   R	   R   R   R   R   (   R   RL   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/refinement_flags.pyRI   ä   s,    c         C   s  | d  k	 rC |  j d  k	 rC |  j | ƒ s0 t ‚ |  j j | ƒ n  | d  k	 r† |  j d  k	 r† |  j | ƒ ss t ‚ |  j j | ƒ n  | d  k	 r:|  j | ƒ s§ t ‚ |  j d  k rà | d  k	 sÈ t ‚ t j | t	 ƒ |  _ nG |  j j
 ƒ  | k  r'| |  j j
 ƒ  } |  j j t j | t	 ƒ ƒ n  |  j j | ƒ n  | d  k	 rî|  j | ƒ s[t ‚ |  j d  k r”| d  k	 s|t ‚ t j | t	 ƒ |  _ nG |  j j
 ƒ  | k  rÛ| |  j j
 ƒ  } |  j j t j | t	 ƒ ƒ n  |  j j | ƒ n  | d  k	 r"t | d ƒ st ‚ |  j j | ƒ n  | d  k	 rVt | d ƒ sCt ‚ |  j j | ƒ n  | d  k	 rŠt | d ƒ swt ‚ |  j j | ƒ n  | d  k	 r¾t | d ƒ s«t ‚ |  j j | ƒ n  |	 d  k	 rt |	 d ƒ sßt ‚ |  j d  k	 r|  j j |	 ƒ qn  |  j ƒ  |  S(   NR)   (   R   R   R   R*   R/   R   R
   R   RK   R.   R-   R   t   hasattrR	   R   R   R   R   R   (   R   R   R   R	   R
   R   R   R   R   R   t   occupancies_groupt   size_allt   n_new(    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/refinement_flags.pyt   inflateü   sV    
i   c   	      C   s:  g  } d  } d } xñ | D]é } | | k  r; | j | ƒ q | | k rñ | j | ƒ | r| d k rÃ | j ƒ  d k r’ | j | d ƒ d } që | j ƒ  d k rº | d g } d } që t ‚ qî | d k rå | d g } d } qî t ‚ qq | j | d ƒ q W| d  k	 r$t j | ƒ } n  t j | ƒ | | f S(   Ni    i   i   (   R   R    R-   R!   R   R@   (	   R   R"   t   next_to_i_seqt
   squeeze_int   modet   tmp_xt   new_independent_elementt   addedR6   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/refinement_flags.pyt   _add_to_single_size_t6  s2    				c         C   s,  | d  k r | S|  j | ƒ rÿ g  } |  j | j ƒ  | | ƒ } | d d  k rg | j | d g ƒ n | j | d | d g ƒ | d d k r» | r» | j t j | d g ƒ g ƒ n  t j ƒ  } x | D] } | j | ƒ qÎ Wt j | j ƒ  d | ƒ St	 | ƒ d k rt
 ‚ n|  j | d ƒ règ  } d } xs | D]k }	 |  j |	 | | ƒ } | | d 7} | d d  k r�| j | d g ƒ q@| j | d | d g ƒ q@W| d k rä| rä| j t j | d g ƒ g ƒ n  | S|  j | d d ƒ rg  }
 d } d  } xÏ | D]Ç } g  } x– | D]Ž }	 |  j |	 | | d ƒ } | | d 7} | d d  k r~| j | d g ƒ n | j | d g ƒ | d d  k	 r+|
 j | d g ƒ q+q+Wt	 | ƒ d k r|
 j | ƒ qqW| d k r| r|
 j t j | d g ƒ g ƒ n  |
 St
 d ƒ ‚ d  S(   Ni   i    i   s   Bad selection array type.(   R   R   R]   R1   R/   R   R@   RK   R-   R   R!   R   R    (   R   R"   RW   RX   RM   R#   t	   x_new_newt   i_x_newR\   t   x_t   xx_newt   result_1t   xx(    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/refinement_flags.pyt   _addR  sb      #  	 # #c         C   s.  t  j | ƒ } t  j | d t ƒ} | j | ƒ } xô| D]ì} |  j d  k	 rv |  j d |  j d | d | ƒ |  _ n  |  j d  k	 r¬ |  j d |  j d | d | ƒ |  _ n  |  j	 d  k	 râ |  j d |  j	 d | d | ƒ |  _	 n  |  j
 d  k	 r|  j d |  j
 d | d | ƒ |  _
 n  |  j d  k	 rN|  j d |  j d | d | ƒ |  _ n  |  j d  k	 r„|  j d |  j d | d | ƒ |  _ n  |  j d  k	 rº|  j d |  j d | d | ƒ |  _ n  |  j d  k	 rð|  j d |  j d | d |	 ƒ |  _ n  |  j d  k	 r: |  j d |  j d | d |
 ƒ |  _ q: q: W|  S(   Nt   reverseR"   RW   RX   (   R   R@   t   sort_permutationR+   RI   R   R   Rd   R   R	   R
   R   R   R   R   R   (   R   t   next_to_i_seqsR   R   R	   R
   R   R   R   R   R   t   permRW   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/refinement_flags.pyt   add‚  sd    																		N(   t   __name__t
   __module__R.   R   R   R   R   R   R   R:   R   R>   RA   RB   RH   RQ   RI   RV   R]   Rd   Ri   (    (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/refinement_flags.pyR      sf   					!	%							0	1(   t
   __future__R    t   cctbx.array_familyR   RC   t   libtbxR   t   libtbx.utilsR   t   objectR   (    (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/refinement_flags.pyt   <module>   s
   