ó
š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	 d e
 f d „  ƒ  YZ d „  Z d	 „  Z e j d  d
 d
 d
 d
 d  d
 d
 d
 d
 d  d
 d
 d
 d
 d g ƒ Z d „  Z d „  Z d „  Z d „  Z d d d „ Z d „  Z d „  Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d  „  ƒ  YZ d! e f d" „  ƒ  YZ d# e f d$ „  ƒ  YZ d S(%   iÿÿÿÿ(   t   division(   t   flex(   t   matrix(   t   eigensystemNt   NoConvergenceExceptionc           B   s   e  Z RS(    (   t   __name__t
   __module__(    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyR      s   c         C   sð   |  \ } } } } t  j | | | | | | | | d | | | | d | | | | d | | | | | | | | | | | | d | | | | d | | | | d | | | | | | | | | | | | g	 ƒ S(   Ng       @(   R   t   sqr(   t   qt   lt   mt   nt   s(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyt   quaternion_to_rotmat   s     c         C   sX   |  j  \ } } } } t j | | | | | | | | | | | | | | | | g ƒ S(   N(   t   elemsR   R   (   R   R	   R
   R   R   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyt   quaternion_to_quatmat!   s    i    i   c      	   C   s"   t  d t d |  d | d | ƒ ƒ S(   Nt   pt   a_sitest   b_sitest   weights(   t   top_quaterniont   p_matrix_from(   t   movingt	   referenceR   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyt   best_rotation3   s    c         C   s&   t  j |  j ƒ  ƒ } | j ƒ  d d !S(   Ni    i   (   R   t   real_symmetrict   as_flex_double_matrixt   vectors(   R   t   eigen(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyR   :   s    c         C   sú  t  |  ƒ t  | ƒ k r0 t  |  ƒ t  | ƒ k s6 t ‚ t |  ƒ \ } } } t | ƒ \ } } } t j t j | | | ƒ t j | | | ƒ t j | | | ƒ t j | | | ƒ t j | | | ƒ t j | | | ƒ t j | | | ƒ t j | | | ƒ t j | | | ƒ g	 ƒ }	 |	 |	 j ƒ  d t j d ƒ |	 j	 ƒ  }
 |	 d |	 d |	 d |	 d |	 d |	 d f } t j |
 d |
 d |
 d | d |
 d |
 d |
 d | d |
 d |
 d |
 d	 | d | d | d | d d g ƒ S(
   Ni   i   i   i   i   i   i    i   i   (
   t   lent   AssertionErrort   component_arraysR   R   R   t   sumt	   transposet   identityt   trace(   R   R   R   t   xat   yat   zat   xbt   ybt   zbR
   R   t   v(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyR   @   s(    6+3c         C   s=   t  |  Œ  \ } } } t j | ƒ t j | ƒ t j | ƒ f S(   N(   t   zipR   t   double(   t
   vec3_arrayt   xt   yt   z(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyR   g   s    g:Œ0âŽyE>id   c         C   s×   d | k  s t  ‚ |  j ƒ  } d } | |  j |  j 9} x’ t rÌ |  j ƒ  |  j ƒ  } | | } | | k  r‚ t d | | f ‚ n  t | ƒ | k  r˜ Pn  | } | d 7} | | k  r; t d | | f ‚ q; q; W| | f S(   Ni    s   Divergence in refinementi   s   Iteration limit exceeded(   R   t   residualt	   set_countt
   site_countt   Truet   full_iterationR   t   abs(   t   superpositiont   convergencet	   tolerancet
   iterationsR1   t   countt   new_residualt   diff(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyt   iteraten   s&    	


c         C   s#   |  | } t  j | j | ƒ | ƒ S(   N(   R   t   mean_weightedt   dot(   t   leftt   rightR   t   differences(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyt   weighted_error_between�   s    
c         C   s   | j  |  | S(   N(   R   (   t   sitest   rotationt   translation(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyt   transform_sites”   s    t   Matrixc           B   s;   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s   
    A matrix
    c         C   s?   | |  _  | |  _ g  t | ƒ D] } d  g | ^ q |  _ d  S(   N(   R   R
   t   ranget   Nonet   store(   t   selfR   R
   t   i(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyt   __init__ž   s    		c         C   s9   | |  j  k  r | |  j k  s$ t ‚ | |  j | | <d  S(   N(   R   R
   R   RL   (   RM   RA   RB   t   value(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyt   set¥   s    $c         C   s3   | |  j  k  r | |  j k  s$ t ‚ |  j | | S(   N(   R   R
   R   RL   (   RM   RA   RB   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyt   get«   s    $c         C   s   |  j  S(   N(   RL   (   RM   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyt   rows±   s    c         c   s<   x5 t  |  j ƒ  ƒ D]! \ } } | |  | | d Vq Wd  S(   Ni   (   t	   enumerateRS   (   RM   t   indext   row(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyt   off_diagonal_elements_in_rows¶   s    (   R   R   t   __doc__RO   RQ   RR   RS   RW   (    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyRI   ™   s   				t   SymmetricMatrixc           B   s;   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   sP   
    A matrix that is symmetric and only half has to be calculated / stored
    c         C   sA   d | k s t  ‚ | |  _ d  g |  j d |  j d |  _ d  S(   Ni    i   i   (   R   t   dRK   RL   (   RM   t	   dimension(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyRO   Á   s    	c         C   s#   | |  j  |  j d | d | ƒ <d  S(   NRA   RB   (   RL   t	   transform(   RM   RA   RB   RP   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyRQ   È   s    c         C   s   |  j  |  j d | d | ƒ S(   NRA   RB   (   RL   R\   (   RM   RA   RB   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyRR   Í   s    c         C   sm   |  j  d | d d ƒ } |  j | | | d !} g  t | d |  j ƒ D] } |  j | | ƒ ^ qG } | | S(   NRA   RB   i    i   (   R\   RL   RJ   RZ   RR   (   RM   RU   t   start1t   slice1RN   t   slice2(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyt   columnÒ   s    5c         C   s0   | | k  r | | } } n  | d | d | S(   Ni   i   (    (   RM   RA   RB   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyR\   Ú   s    (   R   R   RX   RO   RQ   RR   R`   R\   (    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyRY   ¼   s   				t   ErrorOnRotationc           B   sA   e  Z d  Z d „  Z d „  Z d „  Z d „  Z e d „  ƒ Z RS(   s.   
    Superposition of two coordinate sets
    c         C   s   | |  _  | |  _ d  S(   N(   t   eR   (   RM   Rb   R   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyRO   ç   s    	c         C   s9   t  d | ƒ } |  j d |  j d | |  j | j ƒ  ƒ S(   NR   Rb   R   (   R   t	   __class__Rb   R   R!   (   RM   R   t   rho(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyt   with_rotated_referenceí   s    c         C   sR   |  j  d | j ƒ  |  j | d } | d k  r> d | GHn  d | k rN | Sd S(   Ni   i    s   Negative square: %s(   Rb   R!   R   (   RM   R   t   square(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyt   for_quaternionó   s    &c         C   s   t  j t d |  j ƒ ƒ S(   NR   (   R   t   colR   R   (   RM   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyR   ý   s    c         C   sˆ   t  | ƒ t  | ƒ k o) t  | ƒ k n s4 t ‚ | | } t j | j | ƒ | ƒ } t d | d | d | ƒ } |  d | d | ƒ S(   NR   R   R   Rb   R   (   R   R   R   R    R@   R   (   t   clsRA   RB   R   t   diffsRb   R   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyt
   from_sites  s
    4
(	   R   R   RX   RO   Re   Rg   R   t   classmethodRk   (    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyRa   â   s   			
	t   MultipleSuperpositionc           B   s;   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s0   
    Base class for multiple superpositions
    c            sj   t  | ƒ ˆ  _ d ˆ  j k s$ t ‚ t  | d ƒ ˆ  _ t ‡  f d †  | d Dƒ ƒ s] t ‚ | ˆ  _ d  S(   Ni   i    c         3   s$   |  ] } t  | ƒ ˆ  j k Vq d  S(   N(   R   R3   (   t   .0R   (   RM   (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pys	   <genexpr>  s    i   (   R   R2   R   R3   t   allt	   site_sets(   RM   Rp   (    (   RM   sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyRO     s
    &c         C   s)   g  |  j  D] } t j t | ƒ ƒ ^ q
 S(   N(   t   qsR   R   R   (   RM   R   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyt	   rotations  s    c         C   sI   |  j  ƒ  } | g  t | |  j ƒ D]  \ } } | t j | ƒ ^ q" f S(   N(   Rr   R+   t	   centroidsR   Rh   (   RM   Rr   t   rt   t(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyt   transformations!  s    c      	   C   sV   |  j  ƒ  \ } } g  t |  j | | ƒ D]* \ } } } t d | d | d | ƒ ^ q( S(   NRE   RF   RG   (   Rv   R+   Rp   RH   (   RM   Rr   t   translationsRE   t   rott   tra(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyt   transformed_sites*  s    c         C   sf   |  j  ƒ  } d |  j d } g  | D]> } | t g  | D]! } t d | d | d | ƒ ^ q7 ƒ ^ q$ S(   Ng      ð?i   RA   RB   R   (   Rz   R2   R    t   weighted_rmsd_between(   RM   R   t   transformedt   normR	   Rt   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyt   rmsds4  s    (   R   R   RX   RO   Rr   Rv   Rz   R~   (    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyRm     s   						
t   DiamondAlgorithmc           B   s•   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s:   
    Multiple superposition using Diamond's algorithm
    c         C   s¼   t  t |  ƒ j d | ƒ |  j d | ƒ |  j ƒ  g  |  j j ƒ  D] } | d ^ qC } t j d d d d g ƒ g g  | d D] } | j	 ƒ  ^ q |  _
 d  g |  j |  _ |  j ƒ  d  S(   NRp   R   i    i   (   t   superR   RO   t   prepare_new_weightst   calculate_pairwise_error_matrixt	   pw_matrixRS   R   Rh   R   Rq   RK   R2   t   totalst   calculate_total_error_vector(   RM   Rp   R   Rt   R`   t   eor(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyRO   G  s    
&'c         C   s   |  j  ƒ  |  j ƒ  d  S(   N(   R‚   R…   (   RM   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyt   set_new_weightsV  s    
c         C   sI   t  | ƒ |  j k s t ‚ t j | ƒ d k r< t d ‚ n  | |  _ d  S(   Ni    s   Zero weights(   R   R3   R   R   R    t   RuntimeErrort   new_weight_data(   RM   R   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyR�   \  s    c         C   sB   g  |  j  D]! } t j t d | j ƒ ƒ ^ q
 |  _ |  j ƒ  d  S(   NR   (   R„   R   Rh   R   R   Rq   R…   (   RM   Ru   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyR5   f  s    4c         C   s}   | | k r d S|  j  j d | d | ƒ j d |  j | ƒ } | j d |  j | ƒ |  j } t j d | k rv | n d ƒ S(   Ng        RA   RB   R   i    (   Rƒ   RR   Re   Rq   Rg   R}   t   matht   sqrt(   RM   RA   RB   R†   Rf   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyt   rmsd_betweenm  s     c         C   sB   d |  j  d } g  |  j ƒ  D]  } t j | |  j | ƒ ^ q S(   Ng      ð?i   (   R2   t	   residualsRŠ   R‹   R}   (   RM   R}   Rt   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyt   weighted_rmsdsy  s    c         C   sˆ   |  j  ƒ  } t j d g |  j ƒ } d |  j d } g  | D]G } t j | t g  | D]! } t d | d | d | ƒ ^ qV ƒ ƒ ^ q= S(   Ni   g      ð?RA   RB   R   (	   Rz   R   R,   R3   R2   RŠ   R‹   R    RD   (   RM   R|   R   R}   R	   Rt   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyt   unweighted_rmsds  s
    c         C   s,   t  j |  j ƒ  |  j |  j d |  j ƒ S(   Ni   (   RŠ   R‹   R1   R2   R}   (   RM   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyt   rmsd�  s    c         C   s   t  |  j ƒ  ƒ S(   N(   R    R�   (   RM   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyR1   —  s    c         C   s8   g  t  |  j |  j ƒ D] \ } } | j d | ƒ ^ q S(   NR   (   R+   Rq   R„   Rg   (   RM   R   Ru   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyR�   œ  s    c         C   s   |  j  d |  j ƒ  ƒ S(   Nt   transformeds(   t(   average_structure_from_transformed_sitesRz   (   RM   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyt   average_structure£  s    	c         C   s|   |  j  ƒ  } |  j d |  j  ƒ  ƒ } g  | D] } | | ^ q+ } d |  j d t t j g  | D] } | j | ƒ ^ q_ ƒ S(   NR‘   g      ð?i   (   Rz   R’   R2   t   reducet   operatort   addR@   (   RM   R|   t   averageRu   RC   R=   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyt'   distance_squares_from_average_structureª  s    	c         C   s   d |  j  t t j | ƒ S(   Ng      ð?(   R2   R”   R•   R–   (   RM   R‘   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyR’   ¸  s    c         C   sq  t  j |  j ƒ |  _ d |  j k  s* t ‚ t  j g  |  j D] } | j |  j ƒ ^ q: ƒ |  _ g  t	 |  j |  j ƒ D] \ } } | | ^ qt } t
 d |  j d |  j ƒ |  _ x¼ t |  j ƒ D]« } x¢ t | d |  j ƒ D]Š } t j d | | d | | d |  j ƒ } |  j j d | d | d | ƒ |  j j d | d | d t d	 | j d
 t | j t ƒ ƒ qÛ Wq¾ Wd  S(   Ni    R   R
   i   RA   RB   R   RP   Rb   R   (   R   R    R‰   R}   R   t   vec3_doubleRp   R?   Rs   R+   RI   R2   Rƒ   RJ   Ra   Rk   RQ   Rb   t   i_barR   (   RM   R   t   ct   ot   origin_setsRN   t   jt   pw(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyR‚   ½  s"    .2	

c   	      C   sß   xØ t  |  j j ƒ  ƒ D]Á \ } } g  t  t | |  j ƒ ƒ D]0 \ } \ } } | | k r; | j d | ƒ ^ q; } t g  | D] } | j ^ q{ ƒ } t t	 j
 g  | D] } | j ^ q£ ƒ } t d | d | ƒ |  j | <q Wd  S(   NR   Rb   R   (   RT   Rƒ   RS   R+   Rq   Re   R    Rb   R”   R•   R–   R   Ra   R„   (	   RM   RU   RV   RN   R†   R   t   transformed_off_diagonalt   sum_et   sum_p(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyR…   Ü  s    "($"(   R   R   RX   RO   R‡   R�   R5   RŒ   RŽ   R�   R�   R1   R�   R“   R˜   R’   R‚   R…   (    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyR   B  s    			
											t   WangSnoeyinkAlgorithmc           B   s•   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s]   
    Multiple structure alignment with gaps using the algorithm from
    Wang & Snoeyink
    c            s  t  t ˆ  ƒ j d | ƒ t | ƒ ˆ  j k s4 t ‚ t ‡  f d †  | Dƒ ƒ sV t ‚ | ˆ  _ t t	 j
 g  ˆ  j D] } | j ƒ  ^ qr ƒ ˆ  _ t d „  ˆ  j Dƒ ƒ sµ t d ‚ n  t j d d d d g ƒ g ˆ  j ˆ  _ d g ˆ  j ˆ  _ ˆ  j d | ƒ ˆ  j ƒ  d  S(	   NRp   c         3   s$   |  ] } t  | ƒ ˆ  j k Vq d  S(   N(   R   R3   (   Rn   R   (   RM   (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pys	   <genexpr>÷  s    c         s   s   |  ] } d  | k Vq d S(   i   N(    (   Rn   R*   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pys	   <genexpr>ÿ  s    s&   Single positions in supplied site setsi    i   R   (   i    i    i    (   R€   R£   RO   R   R2   R   Ro   t
   selectionsR”   R•   R–   t	   as_doublet   normsRˆ   R   Rh   Rq   t   originsR�   R‡   (   RM   Rp   R¤   R   R   (    (   RM   sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyRO   ò  s    "	((c         C   si   |  j  \ } } | |  _ | |  _ g  t |  j |  j ƒ D] \ } } | j | ƒ ^ q7 |  _ |  j ƒ  d  S(   N(   t   next_weight_dataR   t   sumsR+   Rp   R?   Rs   t   calculate_superposition_errors(   RM   t   atomic_weightsR©   R   t   w(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyR‡     s
    		:c         C   s¡   t  | ƒ |  j k s t ‚ g  |  j D] } | j ƒ  j | d ƒ ^ q% } g  | D] } t j | ƒ ^ qQ } t d „  | Dƒ ƒ sŽ t	 d ‚ n  | | f |  _
 d  S(   Ni    c         s   s   |  ] } d  | k  Vq d S(   i    N(    (   Rn   R   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pys	   <genexpr>  s    s   Zero weights(   R   R3   R   R¤   t	   deep_copyt   set_selectedR   R    Ro   Rˆ   R¨   (   RM   R   R   R«   R¬   R©   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyR�     s    /"c      	   C   s›   |  j  ƒ  } g  |  j D] } | j | ƒ ^ q |  _ g  t |  j |  j |  j |  j ƒ D]8 \ } } } } t j d | | d | | d | ƒ ^ qV |  _	 d  S(   NRA   RB   R   (
   R“   R   R?   R§   R+   Rp   Rs   Ra   Rk   t   errors(   RM   R—   R¬   RE   t   centroidt   originR   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyRª   "  s    (c         C   s3   g  |  j  D] } | j ƒ  ^ q
 |  _ |  j ƒ  d  S(   N(   R¯   R   Rq   Rª   (   RM   R†   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyR5   5  s    %c      
   C   sš   |  j  ƒ  \ } } t d |  j | d | | d | | ƒ } t d |  j | d | | d | | ƒ } t j t d | d | d |  j | |  j | ƒ ƒ S(   NRE   RF   RG   RA   RB   R   (   Rv   RH   Rp   RŠ   R‹   RD   R   (   RM   RA   RB   Rr   Rw   t   lsitest   rsites(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyRŒ   ;  s    

c         C   s   |  j  d |  j ƒ S(   NR   (   R~   R   (   RM   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyRŽ   S  s    c         C   s,   |  j  d g  |  j D] } | j ƒ  ^ q ƒ S(   NR   (   R~   R¤   R¥   (   RM   R   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyR�   X  s    c         C   s"   t  j d |  j d |  j ƒ  ƒ S(   Ng       @i   (   RŠ   R‹   R2   R1   (   RM   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyR�   ]  s    c         C   sK   t  g  t |  j |  j |  j ƒ D]% \ } } } | j d | ƒ | ^ q ƒ S(   NR   (   R    R+   Rq   R¯   R©   Rg   (   RM   R   R†   R   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyR1   b  s    c         C   sW   t  t |  ƒ j ƒ  \ } } | g  t | |  j ƒ D] \ } } | t j | ƒ ^ q1 f S(   N(   R€   R£   Rv   R+   R§   R   Rh   (   RM   Rr   Rw   Ru   Rœ   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyRv   h  s    c         C   s   |  j  d |  j ƒ  ƒ S(   NR‘   (   R’   Rz   (   RM   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyR“   s  s    	c         C   sŽ   |  j  ƒ  } |  j d | ƒ } g  | D] } | | ^ q% } t t j g  t | |  j ƒ D]% \ } } | j ƒ  | j | ƒ ^ qW ƒ |  j	 d S(   NR‘   g      ð?(
   Rz   R’   R”   R•   R–   R+   R¤   R¥   R@   R¦   (   RM   R‘   R—   R   RC   RZ   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyR˜   z  s    		>c         C   s‘   |  j  ƒ  } d |  j d } g  t | | ƒ D]` \ } } t j | t g  t | | ƒ D]+ \ } } t d | d | d | | ƒ ^ qU ƒ ƒ ^ q- S(   Ng      ð?i   RA   RB   R   (   Rz   R2   R+   RŠ   R‹   R    RD   (   RM   R   R|   R}   R	   t   wlRt   t   wr(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyR~   ‹  s    c      	   C   sI   t  t j g  t | |  j ƒ D] \ } } | j | d ƒ ^ q ƒ |  j S(   Ni    (   i    i    i    (   R”   R•   R–   R+   R¤   R®   R¦   (   RM   R‘   R   t   sel(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyR’   œ  s
    5(   R   R   RX   RO   R‡   R�   Rª   R5   RŒ   RŽ   R�   R�   R1   Rv   R“   R˜   R~   R’   (    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyR£   ì  s    														t   UnitWeightSchemec           B   s    e  Z d  Z d „  Z d „  Z RS(   s   
    Unit weights
    c         C   s   t  j d g t | ƒ ƒ S(   Ng      ð?(   R   R,   R   (   RM   t   squares(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyt   for_difference_squares­  s    c         C   s   d S(   Ns   Unit weighting scheme(    (   RM   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyt   __str__²  s    (   R   R   RX   R¹   Rº   (    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyR·   ¨  s   	t   RobustResistantWeightSchemec           B   s)   e  Z d  Z d „  Z d „  Z d „  Z RS(   s"   
    Robust-resistant weights
    c         C   s   t  | ƒ |  _ d  S(   N(   t   floatt   critical_value_square(   RM   R½   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyRO   ¼  s    c         C   s/   d | |  j  } | j | d k  d ƒ | | S(   Ng      ð?g        (   R½   R®   (   RM   R¸   t   sqr_w(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyR¹   Á  s    c         C   s   d |  j  S(   Ns6   Robust-resistant weighting scheme (critical value: %s)(   R½   (   RM   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyRº   È  s    (   R   R   RX   RO   R¹   Rº   (    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyR»   ·  s   		(    t
   __future__R    t   scitbx.array_familyR   t   scitbxR   t   scitbx.linalgR   R•   RŠ   Rˆ   R   R   R   R   Rš   R   R   R   R   R>   RD   RH   t   objectRI   RY   Ra   Rm   R   R£   R·   R»   (    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/multiple_superposition.pyt   <module>   s2   		9			'			#&*6ª¼