ó
šxTc           @   sÌ  d  d l  m Z d  d l  m Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z	 d  d l
 Z
 d  d l 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 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$ 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" d0 e" f d1 „  ƒ  YZ# d2 e# f d3 „  ƒ  YZ$ d4 e# f d5 „  ƒ  YZ% d6 e f d7 „  ƒ  YZ& d8 e f d9 „  ƒ  YZ' d: e" f d; „  ƒ  YZ( d< e( f d= „  ƒ  YZ) d> e( f d? „  ƒ  YZ* d@ e f dA „  ƒ  YZ+ dB e f dC „  ƒ  YZ, dD e f dE „  ƒ  YZ- dF e f dG „  ƒ  YZ. dH e f dI „  ƒ  YZ/ dJ e f dK „  ƒ  YZ0 dL e f dM „  ƒ  YZ1 dN e f dO „  ƒ  YZ2 dP e f dQ „  ƒ  YZ3 dR e3 f dS „  ƒ  YZ4 dT e f dU „  ƒ  YZ5 dV e f dW „  ƒ  YZ6 dX e f dY „  ƒ  YZ7 dZ e f d[ „  ƒ  YZ8 d\ e f d] „  ƒ  YZ9 d^ e f d_ „  ƒ  YZ: d` e f da „  ƒ  YZ; db e f dc „  ƒ  YZ< dd e f de „  ƒ  YZ= df e f dg „  ƒ  YZ> dh e f di „  ƒ  YZ? dj e f dk „  ƒ  YZ@ dl e f dm „  ƒ  YZA dn e f do „  ƒ  YZB dp e f dq „  ƒ  YZC dr e f ds „  ƒ  YZD dt e f du „  ƒ  YZE dv e f dw „  ƒ  YZF dx e f dy „  ƒ  YZG dz e f d{ „  ƒ  YZH d| e f d} „  ƒ  YZI d~ e f d „  ƒ  YZJ d S(€   iÿÿÿÿ(   t   division(   t   with_statementNt
   Blackboardc           B   s;   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s%   
    Blackboard for storing data
    c         C   s   t  ƒ  |  _ d  S(   N(   t   sett   data(   t   self(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   __init__   s    c         C   s   |  j  j | ƒ d  S(   N(   R   t   add(   R   t   obj(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   write   s    c         C   s)   g  |  j  D] } t | | ƒ r
 | ^ q
 S(   N(   R   t
   isinstance(   R   t   typeR   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   read   s    c            s   ‡  f d †  |  j  Dƒ S(   Nc         3   s$   |  ] } t  | ˆ  ƒ r | Vq d  S(   N(   R
   (   t   .0R   (   R   (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pys	   <genexpr>#   s    (   R   (   R   R   (    (   R   sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   readiter!   s    c         C   s   |  j  j | ƒ d  S(   N(   R   t   remove(   R   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   delete&   s    (   t   __name__t
   __module__t   __doc__R   R	   R   R   R   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR      s   				t   Rotationc           B   sG   e  Z d  Z d „  Z d „  Z d „  Z e d „  ƒ Z e d „  ƒ Z RS(   s"   
    Rotation in Euler angles
    c         C   s   | |  _  d  S(   N(   t   setting(   R   t   elements(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   1   s    c         C   s   t  j j |  j ƒ S(   N(   t   scitbxt   matht   euler_angles_zyz_anglesR   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   euler6   s    c         C   s   |  j  S(   N(   R   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   matrix;   s    c         C   s   |  d t  j j | Œ  ƒ S(   NR   (   R   R   t   euler_angles_zyz_matrix(   t   clst   angles(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   Euler@   s    c         C   s   |  d | ƒ S(   NR   (    (   R   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   MatrixF   s    (	   R   R   R   R   R   R   t   classmethodR   R    (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   ,   s   			t	   Componentc           B   sM   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 RS(   s   
    A component
    c         C   s   | |  _  d  S(   N(   t   mw(   R   R#   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   Q   s    c         C   s   | j  |  j d ƒ d  S(   Ni   (   t   addCOMP_PROT_MW_NUMR#   (   R   t   input(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   applyV   s    c         C   s   t  S(   N(   t   True(   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   superposable[   s    c         C   s   |  j  d k S(   Ni    (   R#   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   empty`   s    c         C   s
   |  | k S(   N(    (   R   t   other(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   subtractablee   s    c         C   s+   |  j  d | ƒ s t d ‚ n  t d d ƒ S(   NR*   s   Incompatible componentsR#   i    (   R+   t   RuntimeErrorR"   (   R   R*   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   __sub__j   s    c         C   s   d |  j  S(   Ns   Component(mw = %.1f)(   R#   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   __str__r   s    (
   R   R   R   R   R&   R(   R)   R+   R-   R.   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR"   L   s   						t   SequenceDatac           B   sG   e  Z d  Z d d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s   
    A sequence
    gš™™™™™¹?c         C   s2   | |  _  t t | t |  j  ƒ ƒ d ƒ |  _ d  S(   Ni   (   t   sequencet   maxt   intt   lent   negligible_count(   R   R0   t   negligible_fraction(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   |   s    	c         C   sB   d d l  m } d d l m } | d |  j d | ƒ d | j ƒ S(   Niÿÿÿÿ(   t   sequence_weight(   t   mmtR0   t	   selectionR7   (   t   phaser.rsamR6   t   phaserR7   t   residue_sequencet   PROTEIN(   R   R8   R6   R7   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR#   …   s
    c         C   s5   g  t  |  j j | j ƒ D] \ } } | r | ^ q S(   N(   t   zipR0   R8   (   R   R8   t   cht   is_selected(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR;   �   s    "c         C   s   |  j  t | ƒ k  S(   N(   R4   R3   (   R   R8   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR(   ™   s    c         C   s   t  | ƒ |  j k S(   N(   R3   R4   (   R   R8   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   is_negligiblež   s    c         C   s   t  |  j ƒ S(   N(   R3   R0   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   __len__£   s    (	   R   R   R   R   R#   R;   R(   R@   RA   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR/   w   s   						t   SequenceComponentc           B   sV   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 RS(	   s/   
    A component specified by the sequence
    c         C   s1   | |  _  | |  _ |  j  j d |  j ƒ |  _ d  S(   NR8   (   R0   R8   R#   (   R   R0   R8   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   ­   s    		c         C   s   | j  |  j d ƒ d  S(   Ni   (   R$   R#   (   R   R%   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR&   ³   s    c         C   s   |  j  j d |  j ƒ S(   NR8   (   R0   R(   R8   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR(   ¸   s    c         C   s   |  j  j d |  j ƒ S(   NR8   (   R0   R@   R8   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR)   ½   s    c         C   s…   t  | |  j ƒ s% |  j | j k r) t S|  j j d | j ƒ } |  j j d | ƒ rZ t S| j j d |  j ƒ } |  j j d | ƒ S(   NR*   R8   (   R
   t	   __class__R0   t   FalseR8   t   overlap_withR@   t   difference_from(   R   R*   t   overlapt   diff(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR+   Â   s    %c         C   s   |  j  j d |  j ƒ S(   NR8   (   R0   R;   R8   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR;   Ð   s    c         C   sI   |  j  d | ƒ s t d ‚ n  |  j d |  j d |  j j d | j ƒ ƒ S(   NR*   s   Incompatible componentsR0   R8   (   R+   R,   RC   R0   R8   RF   (   R   R*   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR-   Õ   s
    		c         C   s   d |  j  S(   Ns   SequenceComponent(mw = %.1f)(   R#   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR.   à   s    (   R   R   R   R   R&   R(   R)   R+   R;   R-   R.   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRB   ¨   s   							t   Compositionc           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 RS(   s   
    Composition
    c         C   s   t  | d d „  ƒ|  _ d  S(   Nt   keyc         S   s   |  j  S(   N(   R#   (   t   s(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   <lambda>ì   s    (   t   sortedt
   components(   R   RN   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   ê   s    c         C   s#   t  g  |  j D] } | j ^ q ƒ S(   N(   t   sumRN   R#   (   R   t   c(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   weightï   s    c         C   s(   x! |  j  D] } | j d | ƒ q
 Wd  S(   NR%   (   RN   R&   (   R   R%   RP   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR&   ô   s    c         C   s   t  d „  |  j Dƒ ƒ S(   Nc         s   s   |  ] } | j  ƒ  Vq d  S(   N(   R)   (   R   RP   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pys	   <genexpr>ü   s    (   t   allRN   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR)   ú   s    c         C   s'   y |  | } Wn t  k
 r" t SXt S(   N(   R,   RD   R'   (   R   R*   t   res(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   containsÿ   s
    c         C   s   t  d „  |  j Dƒ ƒ S(   Nc         s   s   |  ] } | j  ƒ  Vq d  S(   N(   R(   (   R   RP   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pys	   <genexpr>  s    (   t   anyRN   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR(   
  s    c         C   s•   g  } |  j  d |  j ƒ } xg t | j d d „  d t ƒD]G } y | |  j  d | g ƒ 8} Wn t k
 rs q: n X| j | ƒ q: W|  j  d | ƒ S(   NRN   RJ   c         S   s   |  j  S(   N(   R#   (   RK   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRL     s    t   reverse(   RC   RN   RM   R'   R,   t   append(   R   R*   t   commont   copyRP   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRG     s    %c         C   s`   xY t  |  j ƒ D]? \ } } y | | } Wn t k
 r@ q n X| |  j | <Pq Wt d ‚ d  S(   Ns   Component not in composition(   t	   enumerateRN   R,   (   R   t	   componentt   indext   compRH   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   subtract_component   s    c         C   s   |  j  d |  j ƒ S(   NRN   (   RC   RN   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRY   0  s    c         C   s-   y |  | } Wn t  k
 r" t SX| j ƒ  S(   N(   R,   RD   R)   (   R   R*   RH   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   __eq__5  s
    c         C   s   |  | k S(   N(    (   R   R*   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   __ne__@  s    c         C   s   |  j  d |  j | j ƒ S(   NRN   (   RC   RN   (   R   R*   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   __add__E  s    c         C   sI   |  j  ƒ  } x6 t | j d d „  d t ƒD] } | j d | ƒ q+ W| S(   NRJ   c         S   s   |  j  S(   N(   R#   (   RK   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRL   N  s    RV   R[   (   RY   RM   RN   R'   R^   (   R   R*   t	   remainderRP   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR-   J  s    %c         C   s   |  j  d |  j | ƒ S(   NRN   (   RC   RN   (   R   t   count(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   __mul__T  s    (   R   R   R   R   RQ   R&   R)   RT   R(   RG   R^   RY   R_   R`   Ra   R-   Rd   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRI   å   s   													
t
   ChainModelc           B   s)   e  Z d  Z d „  Z d „  Z d „  Z RS(   s    
    Universal model format
    c         C   s   | |  _  | |  _ d  S(   N(   t   modelt   rmsd(   R   Rf   Rg   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   ^  s    	c         C   s0   |  j  j ƒ  } | j ƒ  } | j | | ƒ d  S(   N(   Rf   t   atomst   extract_xyzt   set_xyz(   R   t   rtRh   t   coords(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt	   transformd  s    c         C   s"   |  j  d |  j j ƒ  d |  j ƒ S(   NRf   Rg   (   RC   Rf   t   detached_copyRg   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRY   k  s    	(   R   R   R   R   Rm   RY   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRe   Y  s   		t   ChainModelGroupc           B   s)   e  Z d  Z d „  Z d „  Z d „  Z RS(   s,   
    Composition and set of ChainModels
    c         C   s   | |  _  | |  _ d  S(   N(   t   modelst   composition(   R   Rp   Rq   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   x  s    	c         C   s(   x! |  j  D] } | j d | ƒ q
 Wd  S(   NRk   (   Rp   Rm   (   R   Rk   t   cm(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRm   ~  s    c         C   s5   |  j  d g  |  j D] } | j ƒ  ^ q d |  j ƒ S(   NRp   Rq   (   RC   Rp   RY   Rq   (   R   Rr   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRY   „  s    	"(   R   R   R   R   Rm   RY   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRo   s  s   		t   Ensemblec           B   sD   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s   
    Ensemble prototype
    c         C   s   d  |  _ d  S(   N(   t   Nonet   _matching_ensemble_info(   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   ‘  s    c         C   sG   |  j  d  k r@ d d l m } | j j d |  j ƒ  ƒ |  _  n  |  j  S(   Niÿÿÿÿ(   t   matchingt   root(   Ru   Rt   R:   Rv   t   EnsembleInfot   from_hierarchyRw   (   R   Rv   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   matching_ensemble_info–  s
    c         C   s   |  S(   N(    (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   superpose_template¡  s    c         C   s
   |  j  ƒ  S(   N(   Rz   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt!   template_equivalent_ensemble_info¦  s    c         C   s>   |  j  j d | j  ƒ s t S|  j  j d | j  ƒ } | j ƒ  S(   NR*   (   Rq   RT   RD   RG   R(   (   R   R*   RG   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   substituteable_with«  s    c         C   s   d t  |  ƒ S(   Ns
   ensemble%s(   t   id(   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt
   identifierµ  s    (	   R   R   R   R   Rz   R{   R|   R}   R   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRs   Œ  s   					
t   MultifileEnsemblec           B   sz   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 RS(   s2   
    Ensemble defined with multiple PDB files
    c         C   sx   | s t  ‚ t | ƒ t | ƒ k s* t  ‚ t d „  | Dƒ ƒ sF t  ‚ | |  _ | |  _ | |  _ t t |  ƒ j ƒ  d  S(   Nc         s   s!   |  ] } t  j j | ƒ Vq d  S(   N(   t   ost   patht   isfile(   R   t   p(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pys	   <genexpr>Ã  s    (	   t   AssertionErrorR3   RR   t   pdbst   rmsdsRq   t   superR€   R   (   R   R†   R‡   Rq   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   ¿  s    			c         C   sv   |  j  ƒ  } xc t |  j |  j ƒ D]L \ } } t | ƒ j ƒ  } | j d | d | d | d | d t j ƒ  ƒ q" Wd  S(   Nt   modlidt   contentt   namet   rmst   ptgrp_tolerances(	   R   R=   R†   R‡   t   openR   t   addENSE_STR_RMSR:   t
   data_ptgrp(   R   R%   R‹   R„   RŒ   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   apply_ensemble_definitionÊ  s    "	c         C   s   |  j  ƒ  S(   N(   RŒ   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   scoreÙ  s    c         C   s)   d d  l  } | j j |  j d ƒ j ƒ  S(   Niÿÿÿÿi    (   t	   iotbx.pdbt   pdbR%   R†   t   construct_hierarchy(   R   t   iotbx(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRw   Þ  s    c         c   s;   d d  l  } x( |  j D] } | j j | ƒ j ƒ  Vq Wd  S(   Niÿÿÿÿ(   R“   R†   R”   R%   R•   (   R   R–   R”   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   rootsä  s    c         c   s­   d d  l  } g  } x} t |  j |  j ƒ D]f \ } } xW | j j | ƒ j ƒ  j ƒ  D]7 } | j ƒ  } d | _	 | j
 t d | d | ƒ ƒ qS Wq( Wt d | d |  j ƒ Vd  S(   Niÿÿÿÿt    Rf   Rg   Rp   Rq   (   R“   R=   R†   R‡   R”   R%   R•   Rp   Rn   R~   RW   Re   Ro   Rq   (   R   R–   Rp   R”   Rg   t   mRY   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   chain_model_groupsì  s    "%	$c         C   s)   |  j  s t ‚ t |  j  ƒ t |  j  ƒ S(   N(   R‡   R…   RO   R3   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRŒ   ú  s    c         C   s   d j  d „  |  j Dƒ ƒ S(   Nt   _c         s   s!   |  ] } t  j j | ƒ Vq d  S(   N(   R�   R‚   t   basename(   R   t   f(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pys	   <genexpr>  s    (   t   joinR†   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   suffix   s    c         C   s'   t  j j t  j j |  j d ƒ ƒ d S(   Ni    (   R�   R‚   t   splitextRœ   R†   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   root_suffix  s    c         C   s   |  t  j j d d f ƒ f g S(   Ni   i    (	   i   i    i    i    i   i    i    i    i   (   i    i    i    (   R   R   Rk   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   assembly_instructions
  s    c         C   s6   d |  j  ƒ  d j d „  t |  j |  j ƒ Dƒ ƒ f S(   Ns   ENSEMBLE %s %st    c         s   s%   |  ] \ } } d  | | f Vq d S(   s   PDB %s RMS %.3fN(    (   R   R”   RŒ   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pys	   <genexpr>  s   (   R   Rž   R=   R†   R‡   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   phaser_keyword_format  s    	c         C   sz   |  j  ƒ  } t |  j ƒ d k r% | St |  j ƒ d k r[ d | t j j |  j d ƒ f Sd | t |  j ƒ d f Sd  S(   Ni   i   s   %s + %ss   %s + %d models(   R¡   R3   R†   R�   R‚   Rœ   (   R   t   representative(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR.     s    !(   R   R   R   R   R‘   R’   Rw   R—   Rš   RŒ   RŸ   R¡   R¢   R¤   R.   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR€   º  s   												t   MultimodelEnsemblec           B   sz   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 RS(   sI   
    Ensemble defined with multiple iotbx.pdb.hierarchy.root-objects
    c         C   s\   | s t  ‚ t | ƒ t | ƒ k s* t  ‚ | |  _ | |  _ | |  _ t t |  ƒ j ƒ  d  S(   N(   R…   R3   t   _rootsR‡   Rq   Rˆ   R¦   R   (   R   R—   R‡   Rq   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   -  s    			c         C   sj   |  j  ƒ  } xW t |  j |  j ƒ D]@ \ } } | j d | d | j ƒ  d | d | d t j ƒ  ƒ q" Wd  S(   NR‰   RŠ   R‹   RŒ   R�   (   R   R=   R§   R‡   R�   t   as_pdb_stringR:   R�   (   R   R%   R‹   t   rRŒ   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR‘   7  s    "	c         C   s   |  j  ƒ  S(   N(   RŒ   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR’   E  s    c         C   s   |  j  d S(   Ni    (   R§   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRw   J  s    c         C   s   t  |  j ƒ S(   N(   t   iterR§   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR—   O  s    c         c   s�   g  } xk t  |  j |  j ƒ D]T \ } } xE | j ƒ  D]7 } | j ƒ  } d | _ | j t d | d | ƒ ƒ q5 Wq Wt d | d |  j	 ƒ Vd  S(   NR˜   Rf   Rg   Rp   Rq   (
   R=   R§   R‡   Rp   Rn   R~   RW   Re   Ro   Rq   (   R   Rp   Rw   Rg   R™   RY   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRš   T  s    "	$c         C   s)   |  j  s t ‚ t |  j  ƒ t |  j  ƒ S(   N(   R‡   R…   RO   R3   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRŒ   a  s    c         C   s   d j  d „  |  j Dƒ ƒ S(   NR›   c         s   s   |  ] } d  t  | ƒ Vq d S(   s   root%sN(   R~   (   R   R©   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pys	   <genexpr>i  s    (   Rž   R§   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRŸ   g  s    c         C   s   d t  |  j d ƒ S(   Ns   root%si    (   R~   R§   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR¡   l  s    c         C   s   |  t  j j d d f ƒ f g S(   Ni   i    (	   i   i    i    i    i   i    i    i    i   (   i    i    i    (   R   R   Rk   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR¢   q  s    c         C   s6   d |  j  ƒ  d j d „  t |  j |  j ƒ Dƒ ƒ f S(   Ns   ENSEMBLE %s %sR£   c         s   s+   |  ]! \ } } d  t  | ƒ | f Vq d S(   s   MEMADDR %s RMS %.3fN(   R~   (   R   Rw   RŒ   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pys	   <genexpr>|  s   (   R   Rž   R=   R§   R‡   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR¤   x  s    	c         C   sx   |  j  ƒ  } t |  j ƒ d k r% | St |  j ƒ d k rY d | d t |  j d ƒ f Sd | t |  j ƒ d f Sd  S(   Ni   i   s   %s + %ss   root%ss   %s + %d models(   R¡   R3   R§   R~   (   R   R¥   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR.   �  s    (   R   R   R   R   R‘   R’   Rw   R—   Rš   RŒ   RŸ   R¡   R¢   R¤   R.   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR¦   (  s   	
											t   SculptorEnsemblec           B   s)   e  Z d  Z d „  Z d „  Z d „  Z RS(   s1   
    A MultifileEnsemble created by sculptor
    c         C   s2   | |  _  t t |  ƒ j d | d | d | ƒ d  S(   NR†   R‡   Rq   (   t   templateRˆ   R«   R   (   R   R†   R‡   Rq   R¬   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   ”  s
    	c         C   s   |  j  S(   N(   R¬   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR{   ž  s    c         C   s   |  j  j d j ƒ  S(   Ni    (   R¬   t	   ensemblesRz   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR|   £  s    (   R   R   R   R   R{   R|   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR«   �  s   	
	t   AssemblyEnsemblec           B   sz   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 RS(   s+   
    Ensemble defined with an assembly
    c         C   s,   | |  _  | j |  _ t t |  ƒ j ƒ  d  S(   N(   t   assemblyRq   Rˆ   R®   R   (   R   R¯   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   ­  s    	c         C   sP   | j  d |  j ƒ  d |  j ƒ  j ƒ  d |  j ƒ  d |  j ƒ  d t j ƒ  ƒ d  S(   NR‰   RŠ   R‹   RŒ   R�   (   R�   R   Rw   R¨   R¡   RŒ   R:   R�   (   R   R%   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR‘   ´  s    	c         C   s   |  j  ƒ  S(   N(   RŒ   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR’   ¿  s    c         C   s   |  j  j ƒ  S(   N(   R¯   Rw   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRw   Ä  s    c         c   s   |  j  ƒ  Vd  S(   N(   Rw   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR—   É  s    c         C   s   |  j  j ƒ  S(   N(   R¯   t   chain_models(   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRš   Î  s    c         C   s
   |  j  j S(   N(   R¯   RŒ   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRŒ   Ó  s    c         C   s
   |  j  ƒ  S(   N(   R¡   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRŸ   Ø  s    c         C   s   d t  |  ƒ S(   Ns
   multimer%s(   R~   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR¡   Ý  s    c         C   s
   |  j  j S(   N(   R¯   t   description(   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR¢   â  s    c         C   s(   d |  j  ƒ  d |  j d |  j ƒ  f S(   Ns   ENSEMBLE %s %s %ss   ASSEMBLY %ss   RMS %.3f(   R   R¯   RŒ   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR¤   ç  s    	
c         C   s   d |  j  j ƒ  S(   Ns   Complex: %s(   R¯   t   info(   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR.   ð  s    (   R   R   R   R   R‘   R’   Rw   R—   Rš   RŒ   RŸ   R¡   R¢   R¤   R.   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR®   ¨  s   												t   RotationPeakc           B   s2   e  Z d  Z d „  Z d „  Z d „  Z d „  Z RS(   s   
    A rotation peak
    c         C   s(   | |  _  | |  _ | |  _ | |  _ d  S(   N(   t   ensemblet   rotationt   rft   rfz(   R   R´   Rµ   R¶   R·   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   ú  s    			c         C   s.   t  j |  j j ƒ  |  j j ƒ  |  j |  j ƒ S(   N(   R:   t   mr_rlistR´   R   Rµ   R   R¶   R·   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR¸     s
    c         C   s   |  j  S(   N(   R¶   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR’     s    c         C   sD   d |  j  f |  j j ƒ  |  j |  j d  k	 r; d |  j n d f S(   Ns/   ENSE %s EULER (%.3f, %.3f, %.3f) RF=%.3f RFZ=%ss   %.2fs   0.0(   R´   Rµ   R   R¶   R·   Rt   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR.     s    (   R   R   R   R   R¸   R’   R.   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR³   õ  s
   		
	t   TranslationPeakc           B   sV   e  Z d  Z d „  Z e e e d „ Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 RS(   s   
    A translation peak 
    c         C   s:   | |  _  | |  _ | |  _ | |  _ | |  _ | |  _ d  S(   N(   R´   Rµ   t   translationt   tft   tfzt   bfactor(   R   R´   Rµ   Rº   R»   R¼   R½   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR     s    					c         C   sX   t  j d |  j j ƒ  d |  j j ƒ  d t d t d |  j d |  j d | d | d	 | ƒ 	S(
   Nt   MODLID_t   R_t   FRAC_t   inFRAC_t   TRA_t   BFAC_t   FIXR_t   FIXT_t   FIXB_(	   R:   t   mr_ndimR´   R   Rµ   R   R'   Rº   R½   (   R   t   fixrt   fixtt   fixb(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRÇ   (  s    			c         C   s   |  j  S(   N(   R»   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR’   7  s    c         C   s+   t  j j |  j j ƒ  | j |  j ƒ f ƒ S(   N(   R   R   Rk   Rµ   t   orthogonalizeRº   (   R   t   cell(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   as_scitbx_rt_operator<  s    	c         C   s§   g  } |  j  d | ƒ } xˆ |  j j ƒ  D]w \ } } | | } | j |  j d | d t j d | j j ƒ d | j	 | j
 j ƒ d |  j d |  j d |  j ƒ ƒ q( W| S(	   NRÌ   R´   Rµ   R   Rº   R»   R¼   R½   (   RÍ   R´   R¢   RW   RC   R   R    R©   t   elemst   fractionalizet   tR»   R¼   R½   (   R   RÌ   t   independentt	   operationt   enset   transft   final(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   independent_component_listC  s    
			c      	   C   s+   t  d |  j d |  j d |  j d |  j ƒ S(   NR´   Rµ   Rº   R½   (   t   PeakR´   Rµ   Rº   R½   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   as_peakX  s
    			c         C   s2   d |  j  f |  j j ƒ  |  j |  j |  j f S(   NsI   ENSE %s EULER (%.3f, %.3f, %.3f) FRAC (%.3f, %.3f, %.3f) TF=%.3f TFZ=%.2f(   R´   Rµ   R   Rº   R»   R¼   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR.   b  s    (   R   R   R   R   RD   RÇ   R’   RÍ   RÖ   RØ   R.   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR¹     s   	
				
R×   c           B   sŒ   e  Z d  Z d „  Z e e e d „ Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d	 „  Z d
 „  Z e d e d „ Z d „  Z RS(   s2   
    A peak with a rotation and a translation
    c         C   s(   | |  _  | |  _ | |  _ | |  _ d  S(   N(   R´   Rµ   Rº   R½   (   R   R´   Rµ   Rº   R½   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   n  s    			c         C   sX   t  j d |  j j ƒ  d |  j j ƒ  d t d t d |  j d |  j d | d | d	 | ƒ 	S(
   NR¾   R¿   RÀ   RÁ   RÂ   RÃ   RÄ   RÅ   RÆ   (	   R:   RÇ   R´   R   Rµ   R   R'   Rº   R½   (   R   RÈ   RÉ   RÊ   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRÇ   v  s    			c         C   sN   |  j  j ƒ  j ƒ  } | j ƒ  } | j ƒ  } | j |  j d | ƒ | ƒ | S(   NRÌ   (   R´   Rw   t	   deep_copyRh   Ri   Rj   RÍ   (   R   RÌ   Rw   Rh   Rl   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRw   …  s
    c         c   sd   x] |  j  j ƒ  D]L } | j ƒ  } | j ƒ  } | j ƒ  } | j |  j d | ƒ | ƒ | Vq Wd  S(   NRÌ   (   R´   R—   RÙ   Rh   Ri   Rj   RÍ   (   R   RÌ   R©   Rw   Rh   Rl   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR—   Ž  s    c         c   sE   |  j  d | ƒ } x, |  j j ƒ  D] } | j d | ƒ | Vq" Wd  S(   NRÌ   Rk   (   RÍ   R´   Rš   Rm   (   R   RÌ   Rk   t   cmgroup(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRš   ˜  s    c         C   s;   d d l  m } | j d |  j j ƒ  d | j |  j ƒ ƒ S(   Niÿÿÿÿ(   t   ncsRµ   Rº   (   R:   RÛ   t   OperatorRµ   R   RË   Rº   (   R   RÌ   RÛ   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   as_ncs_operator¡  s    	c         C   s+   t  j j |  j j ƒ  | j |  j ƒ f ƒ S(   N(   R   R   Rk   Rµ   RË   Rº   (   R   RÌ   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRÍ   «  s    	c      	   C   s\   | |  j  d | ƒ } |  j d |  j d t j d | j j ƒ d | j | j ƒ d |  j	 ƒ S(   NRÌ   R´   Rµ   R   Rº   R½   (
   RÍ   RC   R´   R   R    R©   RÎ   RÏ   RÐ   R½   (   R   RÒ   RÌ   RÕ   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   transformed²  s    		c         C   s•   g  } |  j  d | ƒ } xv |  j j ƒ  D]e \ } } | | } | j |  j d | d t j d | j j ƒ d | j	 | j
 j ƒ d |  j ƒ ƒ q( W| S(   NRÌ   R´   Rµ   R   Rº   R½   (   RÍ   R´   R¢   RW   RC   R   R    R©   RÎ   RÏ   RÐ   R½   (   R   RÌ   RÑ   RÒ   RÓ   RÔ   RÕ   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRÖ   ½  s    
	c         C   s#   t  g  |  j D] } | j ^ q ƒ S(   N(   RM   t   peaksR´   (   R   R„   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   ensembles_sorted_orderÐ  s    i   c   
      C   s­   d d l  m } | r+ | j } | j } n | j } | j } | rU |  j j ƒ  }	 n |  j j ƒ  }	 | j	 j
 d |  j j ƒ  d |  j d | d |	 d | d | d	 | d
 | ƒ S(   Niÿÿÿÿ(   Rv   Rµ   Rº   t   crystalR´   t   dmint
   multipliert   detail_positiont   detail_orientation(   R:   Rv   t   cached_rotation_differencest   cached_position_differencest   simple_rotation_differencest   simple_position_differencesR´   R|   Rz   t   Labelledt   phaser_mr_solutionRµ   R   Rº   (
   R   Rá   Râ   t   cachedRã   t   template_equivalenceRv   Rå   Rä   R´   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   matching_mrpeakÕ  s$    					c         C   sE   d |  j  f |  j j ƒ  |  j |  j d  k	 r< d |  j n d f S(   Ns@   ENSE %s EULER (%.3f, %.3f, %.3f) FRAC (%.5f, %.5f, %.5f) BFAC %ss   %.3fRt   (   R´   Rµ   R   Rº   R½   Rt   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR.   ú  s    (   R   R   R   R   RD   RÇ   Rw   R—   Rš   RÝ   RÍ   RÞ   RÖ   Rà   Rî   R.   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR×   i  s   				
			
					t	   Structurec           B   sª   e  Z d  Z e d d d d d d „ Z d „  Z d „  Z g  g  e e e f e e e f d „ Z d „  Z	 d „  Z
 d „  Z d	 „  Z d
 e e d „ Z d „  Z d „  Z RS(   s   
    A collection of peaks
    g        c         C   sC   | |  _  | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ d  S(   N(   Rß   t   predecessort   significantR·   R¼   t   tfzet   probability(   R   Rß   Rñ   R·   R¼   Rò   Rð   Ró   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR     s    						c         C   s   g  |  j  D] } | j ^ q
 S(   N(   Rß   R´   (   R   R„   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR­     s    c         C   s8   t  t j g  |  j ƒ  D] } | j ^ q t d g  ƒ ƒ S(   NRN   (   t   reducet   operatorR   R­   Rq   RI   (   R   t   e(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRq      s    c   
      C   sÖ   | g t  |  j ƒ | g t  | ƒ } t j |  j ƒ  g  t |  j | | ƒ D]3 \ } \ } } }	 | j d | d | d |	 ƒ ^ qM g  | D] } | j ƒ  ^ qŠ d d d d d d d d d d g  t j ƒ  t j	 ƒ  ƒ S(   NRÈ   RÉ   RÊ   i    (
   R3   Rß   R:   t   mr_setR   R=   RÇ   R¸   t   MapCoefst   map_str_float1D(
   R   t	   rotationst   translationst   sflagst   oflagst   flagsR„   R©   RÐ   t   b(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR÷   )  s&    '	J	c         C   s   d t  |  ƒ S(   Ns   structure%s(   R~   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   H  s    c   
      C   sØ   d d  l  } | j j j ƒ  } t d ƒ } xˆ |  j D]} } | j d | ƒ } | j ƒ  s^ t ‚ xP | j ƒ  d j	 ƒ  D]8 } | j
 ƒ  } t | ƒ | _ | d 7} | j | ƒ qu Wq4 W| j j j ƒ  }	 |	 j | ƒ |	 S(   Niÿÿÿÿt   ARÌ   i    i   (   R“   R”   t	   hierarchyRf   t   ordRß   Rw   Rp   R…   t   chainsRn   t   chrR~   t   append_chaint   append_model(
   R   RÌ   R–   Rf   t   chain_idR„   R©   RP   RY   Rw   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   old_rootM  s    
c         c   s:   x3 |  j  D]( } x | j d | ƒ D] } | Vq# Wq
 Wd  S(   NRÌ   (   Rß   Rš   (   R   RÌ   t   peakt   cmg(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRš   d  s    c         c   s:   x3 |  j  D]( } x | j d | ƒ D] } | Vq# Wq
 Wd  S(   NRÌ   (   Rß   RÖ   (   R   RÌ   R	  t   const(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   atomic_constituentsk  s    i   c         C   s>   g  |  j  D]0 } | j d | d | d | d | d | ƒ ^ q
 S(   NRá   Râ   Rì   Rã   Rí   (   Rß   Rî   (   R   Rá   Râ   Rã   Rì   Rí   R„   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   matching_mr_solutionr  s    
c         C   s.   |  j  d  k r |  g S|  g |  j  j ƒ  Sd  S(   N(   Rð   Rt   t   history(   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR  ‡  s    c         C   s2   |  j  r( d j d „  |  j  Dƒ ƒ } n d } | S(   Ns   
c         s   s   |  ] } t  | ƒ Vq d  S(   N(   t   str(   R   R„   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pys	   <genexpr>”  s    s   <EMPTY>(   Rß   Rž   (   R   t   centre(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR.   ‘  s    	N(   R   R   R   RD   Rt   R   R­   Rq   R÷   R   R  Rš   R  R  R  R.   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRï     s,   							
t   XrayDatac           B   s    e  Z d  Z d „  Z d „  Z RS(   s   
    X-ray data
    c         C   s1   | |  _  | |  _ | |  _ | |  _ | |  _ d  S(   N(   t   millert   fpt   sigfpRÌ   t
   resolution(   R   R  R  R  RÌ   R  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   ¡  s
    				c         C   s   t  j |  j |  j |  j ƒ S(   N(   R:   t	   data_reflR  R  R  (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR  ª  s    (   R   R   R   R   R  (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR  œ  s   		t
   PhaserDatac           B   sD   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   sH   
    Maximal collection of data items that may be needed by Phaser 
    c         C   sC   | |  _  | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ d  S(   N(   R  R  R  Rq   RÌ   t   hallR  (   R   R  R  R  Rq   RÌ   R  R  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   ´  s    						c         C   s`   | j  |  j |  j |  j ƒ | j t ƒ | j |  j ƒ |  j j	 d | ƒ |  j
 d | ƒ d  S(   NR%   (   t   setREFLR  R  R  t   setTNCS_USERD   t   setRESO_HIGHR  Rq   R&   t   apply_symmetry(   R   R%   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR&   ¿  s
    c         C   s$   | j  |  j ƒ | j |  j ƒ d  S(   N(   t   setCELL6RÌ   t   setSPAC_HALLR  (   R   R%   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR  È  s    c         C   s#   d d l  m } | j d |  j ƒ S(   Niÿÿÿÿ(   t   uctbxt
   parameters(   t   cctbxR  t	   unit_cellRÌ   (   R   R  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   uctbx_unit_cellÎ  s    c         C   s    d d l  m } | j |  j ƒ S(   Niÿÿÿÿ(   t   sgtbx(   R!  R$  t   space_groupR  (   R   R$  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   sgtbx_space_groupÔ  s    c         C   s2   d d l  m } | j d |  j ƒ  d |  j ƒ  ƒ S(   Niÿÿÿÿ(   Rá   R"  R%  (   R!  Rá   t   symmetryR#  R&  (   R   Rá   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   crystal_symmetryÚ  s    	(	   R   R   R   R   R&   R  R#  R&  R(  (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR  ¯  s   						t   Problemc           B   sD   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s#   
    Represents the mr problem
    c         C   sj   d  |  _ d  |  _ | |  _ | |  _ | |  _ | |  _ | |  _ t d g  ƒ |  _	 t
 ƒ  |  _ d  |  _ d  S(   NRß   (   Rt   t	   xray_datat   space_group_hallt   hklint   labinR(  R  t   no_tncsRï   Rw   R   R   t   pickled(   R   R,  R-  R(  R  R.  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   è  s    							c         C   s¹   |  j  d  k	 rQ d d  l } d d  l } | j | j |  j  ƒ ƒ \ |  _ |  _ nd d d l m	 } | j
 d |  j d |  j d |  j d |  j d t |  d t ƒ d | ƒ \ |  _ |  _ d  S(	   Niÿÿÿÿ(   t   brunettR,  R-  R(  R  R.  t   logger(   R/  Rt   t   picklet   gzipt   loadRŽ   R*  R+  t   phaser.pipelineR0  t   read_any_format_dataR,  R-  R(  R  t   getattrRD   (   R   R1  R2  R3  R0  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR4  ö  s    $					c         C   sc   d d  l  } d d  l } | j d | d ƒ �/ } | j |  j |  j f | ƒ | j |  _ Wd  QXd  S(   Niÿÿÿÿs   %s_data.pkl.gzt   wb(   R2  R3  RŽ   t   dumpR*  R+  R‹   R/  (   R   Rw   R2  R3  t   fout(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   enpickle  s
    c         C   sz   d d l  m } m } m } |  j s1 t d ‚ n  |  j d  k	 sF t ‚ | j	 d | j
 d |  j j ƒ d | j |  j ƒ ƒ S(   Niÿÿÿÿ(   Rá   R  R$  s   Dataset not loadedR"  R   R%  (   R!  Rá   R  R$  R*  R,   R+  Rt   R…   R'  R"  RÌ   R%  (   R   Rá   R  R$  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRá     s    		c         C   s'   |  j  j ƒ  } d  | d <d  | d <| S(   NR*  R+  (   t   __dict__RY   Rt   (   R   t   result(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   __getstate__$  s    

c         C   s   | |  _  d  S(   N(   R<  (   R   t   dict(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   __setstate__,  s    (	   R   R   R   R   R4  R;  Rá   R>  R@  (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR)  ã  s   			
		t   Casec           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 e e d „ Z d e e d „ Z d e e d „ Z d e e d „ Z RS(   sO   
    Holds all MRSets for a particular problem (data+symmetry combination)
    c         C   sb   | |  _  | |  _ | |  _ t |  j j g ƒ |  _ i d |  j j 6|  _ t ƒ  |  _ d  |  _
 d  S(   Ni    (   Rq   t   _space_group_hallt   problemR   Rw   t   partialst	   score_forR   R   Rt   t   _matching_crystal_info(   R   Rq   R+  RC  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   6  s    			c         C   sg   t  d |  j j j d |  j j j d |  j j j d |  j d |  j j j d |  j ƒ  d |  j j j	 ƒ S(   NR  R  R  Rq   RÌ   R  R  (
   R  RC  R*  R  R  R  Rq   RÌ   R+  R  (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   calculation_dataA  s    	c         C   s!   |  j  j | ƒ | |  j | <d  S(   N(   RD  R   RE  (   R   t	   structureR’   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   insertN  s    c         C   s)   d d l  m } | j d |  j j j ƒ S(   Niÿÿÿÿ(   R  R   (   R!  R  R"  RC  R*  RÌ   (   R   R  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR#  T  s    c         C   s#   d d l  m } | j |  j ƒ  ƒ S(   Niÿÿÿÿ(   R$  (   R!  R$  R%  R+  (   R   R$  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR%  Z  s    c         C   s   |  j  ƒ  j ƒ  S(   N(   R%  R   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   space_group_type`  s    c         C   s   |  j  ƒ  j ƒ  S(   N(   R%  R²   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   space_group_infoe  s    c         C   s   |  j  S(   N(   RB  (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR+  j  s    c         C   s   |  j  ƒ  j ƒ  S(   N(   RJ  t   number(   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   space_group_numbero  s    c         C   s   |  j  ƒ  j ƒ  S(   N(   RJ  t    universal_hermann_mauguin_symbol(   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   space_group_symbolt  s    c         C   s8   d j  g  |  j ƒ  j ƒ  D] } | j ƒ  s | ^ q ƒ S(   NR˜   (   Rž   RJ  t   lookup_symbolt   isspace(   R   RP   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   space_group_suffix_symboly  s    c         C   sJ   |  j  sC d d l m } | j d |  j ƒ  d |  j ƒ  ƒ |  _  n  |  j  S(   Niÿÿÿÿ(   Rv   R%  RÌ   (   RF  R:   Rv   t   CrystalInfoR%  R#  (   R   Rv   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   matching_crystal_info€  s    		g      ð?c         C   sO   |  j  j d  k	 s t ‚ | j d |  j ƒ  d |  j  j j d | d | d | ƒ S(   NRá   Râ   Rì   Rã   Rí   (   RC  R*  Rt   R…   Rî   RT  R  (   R   R	  Rã   Rì   Rí   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   create_matching_mr_peakŒ  s    	c         C   s>   d d l  m } | j d |  j d | d | d | d | ƒ ƒ S(   Niÿÿÿÿ(   Rv   t   entityR	  Rã   Rì   Rí   (   R:   Rv   t   OriginSearchEntityRU  (   R   R	  Rã   Rì   Rí   Rv   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt%   create_matching_origin_search_mr_peakž  s    		c         C   s8   g  | j  D]* } |  j d | d | d | d | ƒ ^ q
 S(   NR	  Rã   Rì   Rí   (   Rß   RU  (   R   RH  Rã   Rì   Rí   R„   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   create_matching_mr_structure±  s    	c         C   s8   g  | j  D]* } |  j d | d | d | d | ƒ ^ q
 S(   NR	  Rã   Rì   Rí   (   Rß   RX  (   R   RH  Rã   Rì   Rí   R„   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt'   create_matching_origin_search_structureÄ  s    	(   R   R   R   R   RG  RI  R#  R%  RJ  RK  R+  RM  RO  RR  RT  RD   RU  RX  RY  RZ  (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRA  1  s2   												t   PostProcessingDatac           B   s   e  Z d  Z RS(   s>   
    A marker class so that these could easily be deleted
    (   R   R   R   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR[  ×  s   t   HistoricRotationc           B   s   e  Z d  Z d „  Z RS(   sK   
    A rotation that has been found in a previous round but not tested
    c         C   s   | |  _  | |  _ d  S(   N(   RH  R	  (   R   RH  R	  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   â  s    	(   R   R   R   R   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR\  Ý  s   t   GenuineRotationc           B   s   e  Z d  Z RS(   s3   
    A rotation found by the rotation function
    (   R   R   R   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR]  è  s   t   ExtractedRotationc           B   s   e  Z d  Z RS(   sO   
    A rotation extracted from a related peak (because of origin problems)
    (   R   R   R   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR^  î  s   t#   PotentialPeakFixedOriginEquivalencec           B   s    e  Z d  Z d „  Z d „  Z RS(   sD   
    Equivalence relation for potential peaks with fixed origin
    c         C   s   | |  _  d  S(   N(   t   case(   R   R`  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   ù  s    c   	      C   s–   x� | j  ƒ  D]� \ } } |  j j d | ƒ } x] | j  ƒ  D]O \ } } | | k rY q; n  |  j j d | ƒ } t | j d | ƒ ƒ r; t Sq; Wq Wt S(   NR	  R*   (   t   associationsR`  RU  RU   t   operations_betweenR'   RD   (	   R   t   leftt   rightt   lstrt   lpeakt   ltmft   rstrt   rpeakt   rtmf(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   __call__þ  s    (   R   R   R   R   Rk  (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR_  ô  s   	t&   PotentialPeakVariableOriginEquivalencec           B   s    e  Z d  Z d „  Z d „  Z RS(   sG   
    Equivalence relation for potential peaks with variable origin
    c         C   s   | |  _  d  S(   N(   R`  (   R   R`  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR     s    c   	      C   s–   x� | j  ƒ  D]� \ } } |  j j d | ƒ } x] | j  ƒ  D]O \ } } | | k rY q; n  |  j j d | ƒ } t | j d | ƒ ƒ r; t Sq; Wq Wt S(   NR	  R*   (   Ra  R`  RX  RU   t   potential_origins_betweenR'   RD   (	   R   Rc  Rd  Re  Rf  Rg  Rh  Ri  Rj  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRk    s    (   R   R   R   R   Rk  (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRl    s   	t   PotentialPeakc           B   s   e  Z d  Z RS(   s2   
    A peak that is implicated without search
    (   R   R   R   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRn  *  s   t   Amalgamationc           B   sw   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 RS(   s;   
    A different solution from the same starting point
    R   c         C   s:   t  | ƒ d k s t ‚ | |  _ | s- t ‚ | |  _ d  S(   Ni   (   R3   R…   t
   structurest   origins(   R   Rp  Rq  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   7  s    	c         C   s/   | |  j  k o. |  j d | ƒ j d j | k S(   Nt   currentiÿÿÿÿ(   Rp  R*   Rß   R´   (   R   t   partialR´   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt
   is_related?  s    c         C   s3   g  |  j  D]% } | |  j d | ƒ j d f ^ q
 S(   NRr  iÿÿÿÿ(   Rp  R*   Rß   (   R   RK   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRa  G  s    c         C   s   t  |  j ƒ d k S(   Ni   (   R3   Rq  (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   is_defined_originN  s    c         C   sc   | |  j  k r( t d | |  j  f ‚ n  |  j  j | g ƒ } t | ƒ d k sU t ‚ t | ƒ d S(   Ns   %s is not member of %si   i    (   Rp  t
   ValueErrort
   differenceR3   R…   t   list(   R   Rr  t	   remaining(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR*   S  s
    c      	   C   s2   t  d | d |  j d | ƒ j d d | d |  ƒ S(   NRH  R	  Rr  iÿÿÿÿR\   t   provider(   t   FillHandlerR*   Rß   (   R   Rs  R\   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   get_handler_for]  s
    c      	   C   s5   d d l  m } | j d | d | d | d |  j ƒ S(   Niÿÿÿÿ(   t   calculationR   Rs  R	  Rq  (   R5  R}  t   MultiOriginEvaluationRq  (   R   R   Rs  R	  t   contextR}  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR}  g  s    	c         C   sG   | \ } } | r( d | j  | j f n d } t d | d | d | ƒ S(   Ns   tf = %.3f, tfz = %.2fR˜   t   is_pakR	  t
   statistics(   R»   R¼   t
   FillResult(   R   R=  R€  R	  t   stats(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   processr  s    "c         C   s   d t  |  j ƒ S(   Ns   Amalgamation peak (%d origins):(   R3   Rq  (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   captiony  s    c         C   s&   d j  d „  t |  j d d ƒDƒ ƒ S(   Ns   

c         s   s%   |  ] \ } } d  | | f Vq d S(   s   Structure %s:
%sN(    (   R   t   iRK   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pys	   <genexpr>�  s    t   starti   (   Rž   RZ   Rp  (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   involved~  s    c         C   s   d |  j  ƒ  |  j ƒ  f S(   Ns   %s

%s(   R…  Rˆ  (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR.   †  s    (   R   R   R   t
   entry_codeR   Rt  Ra  Ru  R*   R|  R}  R„  R…  Rˆ  R.   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRo  0  s   					
	
				t   ObjectCompletionc           B   se   e  Z d  Z d Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z d
 „  Z RS(   sk   
    A solution that would add a molecule according to some assembly description
    identified before
    t   Rc         C   s   | |  _  | |  _ | |  _ d  S(   N(   RH  R	  t   strategy(   R   RH  R	  RŒ  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   “  s    		c         C   s   | |  j  k o | |  j j k S(   N(   RH  R	  R´   (   R   Rs  R´   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRt  š  s    c         C   s   |  j  |  j f g S(   N(   RH  R	  (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRa  Ÿ  s    c         C   s   t  S(   N(   R'   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRu  ¤  s    c      	   C   s7   | |  j  k s t ‚ t d | d |  j d | d |  ƒ S(   NRH  R	  R\   Rz  (   RH  R…   R{  R	  (   R   Rs  R\   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR|  ©  s    	c      	   C   s%   |  j  j d | d | d | d | ƒ S(   NR   Rs  R	  R  (   RŒ  R}  (   R   R   Rs  R	  R  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR}  ´  s
    c         C   s   |  j  j d | ƒ S(   NR=  (   RŒ  R„  (   R   R=  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR„  ¾  s    c         C   s   d S(   Ns   Assembly completion peak:(    (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR…  Ã  s    c         C   s   d |  j  ƒ  |  j |  j f S(   Ns   %s

Structure:
%s
Peak:%s(   R…  RH  R	  (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR.   È  s    (   R   R   R   R‰  R   Rt  Ra  Ru  R|  R}  R„  R…  R.   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRŠ  ‹  s   						
		R{  c           B   s;   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s>   
    A unified interface for the different PotentialPeaks
    c         C   s(   | |  _  | |  _ | |  _ | |  _ d  S(   N(   RH  R	  R\   Rz  (   R   RH  R	  R\   Rz  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   Ò  s    			c      	   C   s+   |  j  j d | d |  j d |  j d | ƒ S(   NR   Rs  R	  R  (   Rz  R}  RH  R	  (   R   R   R  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR}  Ú  s
    		c         C   s   |  j  j d | j ƒ S(   NR=  (   Rz  R„  R   (   R   R=  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR„  ã  s    c      	   C   s>   d d l  m } | j d | d | j d |  j d |  j j ƒ S(   Niÿÿÿÿ(   t   stageR´   R	  R\   R‰  (   R5  R�  t   FilledR	  R\   Rz  R‰  (   R   t   parentR=  R�  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR�  è  s    			c         C   s   |  j  j ƒ  S(   N(   Rz  R…  (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR.   ó  s    (   R   R   R   R   R}  R„  R�  R.   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR{  Í  s   					R‚  c           B   s   e  Z d  Z d „  Z RS(   sQ   
    A unified interface for results obtained from PotentialPeak evaluations
    c         C   s   | |  _  | |  _ | |  _ d  S(   N(   R€  R	  R�  (   R   R€  R	  R�  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   ý  s    		(   R   R   R   R   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR‚  ø  s   t   FillFailureRecordc           B   s   e  Z d  Z d „  Z RS(   s{   
    A generated solution that results in a crash. This is recorded so that it
    does not get regenerated every time
    c         C   s   | |  _  | |  _ d  S(   N(   RH  R	  (   R   RH  R	  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   
  s    	(   R   R   R   R   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR�    s   t   ModelCollectionc           B   sG   e  Z d  Z e j ƒ  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 RS(   sQ   
    A collection of models that need to be superposed before it can be used
    c         C   s�   | s t  ‚ t | ƒ t | ƒ k s* t  ‚ t d „  | Dƒ ƒ sF t  ‚ | |  _ | |  _ | |  _ | |  _ |  j j ƒ  d |  _	 d  |  _ d  S(   Nc         s   s!   |  ] } t  j j | ƒ Vq d  S(   N(   R�   R‚   Rƒ   (   R   R„   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pys	   <genexpr>  s    i   (   R…   R3   RR   R†   R‡   t   trimRq   t   COUNTt   nextR\   Rt   R´   (   R   R†   R‡   R’  Rq   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR     s    				c         C   s   |  j  ƒ  S(   N(   RŒ   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR’   $  s    c         C   s,   d d l  m } | j d |  j d | j ƒ S(   Niÿÿÿÿ(   t	   tbx_utilst
   file_namest   object_type(   R:   R•  t   read_in_filesR†   t	   PDBObject(   R   R•  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   pdb_objects)  s    		c         C   s   t  |  j ƒ S(   N(   t   minR‡   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRŒ   2  s    c         C   s   d t  |  j ƒ |  j f S(   Ns   %d superposable PDBs (#%d)(   R3   R†   R\   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR.   7  s    (   R   R   R   t	   itertoolsRc   R“  R   R’   Rš  RŒ   R.   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR‘    s   					t   Templatec           B   sM   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 RS(   sH   
    Structural template for a certain component, with an alignment
    c         C   s@   t  j j | ƒ s t ‚ | |  _ | |  _ | |  _ d  |  _ d  S(   N(	   R�   R‚   Rƒ   R…   t   pdb_filet	   alignmentRq   Rt   R­   (   R   Rž  RŸ  Rq   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   A  s
    			c         C   s%   d d  l  } | j j |  j ƒ j ƒ  S(   Niÿÿÿÿ(   R“   R”   R%   Rž  R•   (   R   R–   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRw   J  s    c         C   s&   d d l  m } | j j d |  j ƒ S(   Niÿÿÿÿ(   R•  t	   file_name(   R:   R•  R™  t	   from_fileRž  (   R   R•  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt
   pdb_objectP  s    c         C   sg   t  j j |  j ƒ \ } } t  j j |  j j ƒ \ } } d t  j j | ƒ d t  j j | ƒ d f S(   Ns   %s_%si    (   R�   R‚   t   splitRž  RŸ  R‹   R    (   R   t   headt   tailt   ali_headt   ali_tail(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRŸ   V  s
    c         C   s
   |  j  ƒ  S(   N(   t   identity(   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR’   `  s    c         C   s   |  j  j j ƒ  S(   N(   RŸ  t   objectt   identity_fraction(   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR¨  e  s    c         C   s   t  j j |  j ƒ S(   N(   R�   R‚   Rœ   Rž  (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR.   j  s    (
   R   R   R   R   Rw   R¢  RŸ   R’   R¨  R.   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR�  <  s   					
		t   BadHomologySearchEntryc           B   s   e  Z d  Z d „  Z RS(   s3   
    A homology search hit that cannot be used
    c         C   s   | |  _  | |  _ d  S(   N(   t   hsst   reason(   R   R¬  R­  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   t  s    	(   R   R   R   R   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR«  o  s   t   HomologySearchHitc           B   s2   e  Z d  Z d „  Z d „  Z d „  Z d „  Z RS(   s   
    Homology search hit
    c         C   s1   | |  _  | |  _ | |  _ | |  _ d  |  _ d  S(   N(   R\   t   searcht   hitRq   Rt   t   fetched(   R   R\   R¯  R°  Rq   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR     s
    				c         C   s   |  j  S(   N(   R\   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR’   ˆ  s    c         C   sd   d d l  m } t j j |  j ƒ \ } } | j d |  j j d d t j j	 | ƒ d |  j
 f ƒ S(   Niÿÿÿÿ(   R•  RŸ  R‹   s   %s_hit%d.alni    (   R:   R•  R�   R‚   R£  R¯  t   AlignmentObjectR°  RŸ  R    R\   (   R   R•  R¤  R¥  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   alignment_object�  s
    	c         C   s   d |  j  |  j f S(   Ns
   %s, hit %d(   R¯  R\   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR.   —  s    (   R   R   R   R   R’   R³  R.   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR®  z  s
   				
t	   Generatorc           B   s  e  Z d  Z d e j Z d „  Z e d „  ƒ Z e d „  ƒ Z	 e d „  ƒ Z
 e d „  ƒ Z d „  Z d „  Z d	 „  Z d
 „  Z d „  Z d „  Z e d „  ƒ Z e d d „ ƒ Z e d d d d „ ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z RS(   s>   
    A rotation operator stored as ( fold, axis, centre )
    g       @c         C   s1   d | k  s t  ‚ | |  _ | |  _ | |  _ d  S(   Ni   (   R…   t   foldt   axisR  (   R   Rµ  R¶  R  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   £  s    		c         C   s   |  j  d d d |  j ƒ S(   Nt   poweri   Rµ  (   t   rotation_angle_forRµ  (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   rotation_angle«  s    c         C   s   |  j  d |  j d |  j ƒ S(   NR¶  t   angle(   t   rotation_matrix_forR¶  R¹  (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR©   ±  s    c         C   s   |  j  |  j |  j S(   N(   R©   R  (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   displacement·  s    c         C   s   t  j j |  j |  j f ƒ S(   N(   R   R   Rk   R©   R¼  (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRk   ½  s    c         C   s&   |  j  d |  j d |  j d |  j ƒ S(   NRµ  R¶  R  (   RC   Rµ  R¶  R  (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   inverted_axis_settingÃ  s    		
c         C   sW   t  j j | j |  j ƒ } t  j j | |  j ƒ } |  j j d |  j d | d | ƒ S(   NRµ  R¶  R  (	   R   R   t   colR©   R¶  R  RC   t   newRµ  (   R   RÒ   R¶  R  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRÞ   Ì  s    c         C   sC   t  |  j j | j ƒ ƒ d | k  r) t S|  j | j j ƒ  | k S(   Ng      ð?(   t   absR¶  t   dotRD   R  t   length(   R   R*   t   max_misalignmentt   max_spatial_error(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   approx_equal_spatiallyÔ  s    %c         C   s   |  j  d |  j d | j ƒ S(   NRc  Rd  (   t   lcmRµ  (   R   R*   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   common_rotation_foldÜ  s    c         C   sH   |  j  } | g } x/ t d |  j ƒ D] } | j | d | ƒ q% W| S(   Ni   iÿÿÿÿ(   Rk   t   rangeRµ  RW   (   R   Rk   t   seriesR\   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   nontrivial_seriesá  s
    		c         C   s(   d |  j  d |  j j d |  j j f S(   Ns    rotation: %d, axis %s, around %ss   (%.3f, %.3f, %.3f)(   Rµ  R¶  RÎ   R  (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR.   ì  s    c      	   C   s*   |  d | d | d | | j  | ƒ | ƒ S(   NRµ  R¶  R  (   RÁ  (   R   Rµ  R¶  R  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR¿  õ  s    gš™™™™™¹?c   
   	   C   s½   d | k s t  ‚ d | k  s$ t  ‚ | j | ƒ } | t | ƒ k  rQ t d ‚ n  | | | } |  j d | d |  j d | d | ƒ ƒ } |  j d | d	 | ƒ }	 |  j d | d | d
 |	 ƒ S(   Ni   i    s   Screw component above toleranceR¶  Rº  R·  Rµ  R©   t   perpR  (   R…   RÁ  RÀ  Rv  R»  R¸  t   rotation_axis_row_echelonR¿  (
   R   R·  Rµ  R¶  Rº   t   spatialt   parallelRË  R©   R  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   from_rotation_translationÿ  s    	id   g{®Gázt?c         C   s3  d | k  s t  ‚ t j j | j ƒ } t | j ƒ  ƒ | k  rK t d ‚ n  | j ƒ  |  j } d | k ry | |  j k  s t  ‚ xw t	 d | d ƒ D]Y } | | } | |  j }	 |	 | k sÏ |  j |	 | k r“ t
 t | |  j ƒ ƒ }
 Pq“ q“ Wt d ‚ |  j d |
 d | d t j j | j ƒ d | j d	 | ƒ S(
   Ni    s   Quasi-identity rotationi   s   Foldedness outside limitsR·  Rµ  R¶  Rº   RÍ  (   R…   R   R   t&   r3_rotation_axis_and_angle_from_matrixR©   RÀ  Rº  Rv  t   TWOPIRÈ  R2   t   roundRÏ  R   R¾  R¶  RÐ   (   R   t   opt   max_foldt   angularRÍ  t   aafRº  Rµ  Rµ   Rb   R·  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   from_scitbx_rt_operator  s&    !
			c         C   s   t  j j t  j j |  | ƒ ƒ S(   N(   R   R   t   sqrR   t$   r3_rotation_axis_and_angle_as_matrix(   R¶  Rº  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR»  4  s    	c         C   s   t  j |  | S(   N(   R´  RÑ  (   R·  Rµ  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR¸  <  s    c         C   s‡   t  j j d ƒ |  j ƒ  } t  j j d | d | j ƒ  j ƒ  d d ƒ } d d l m } t  j j	 | j
 d | j | j ƒ d	 d ƒ ƒ S(
   Ni   t   a_workt   b_workt   min_abs_pivotgê-�™—q=iÿÿÿÿ(   t   flext   free_valuest   epsilon(   R   R   R¨  t   as_flex_double_matrixR   t   row_echelon_full_pivotingt   as_1dt   scitbx.array_familyRÝ  R¾  t   back_substitutiont   doublet   nullity(   R©   RË  t   aRö   RÝ  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRÌ  B  s    			c         C   s*   d d  l  } | j |  | ƒ } |  | | S(   Niÿÿÿÿ(   t	   fractionst   gcd(   Rc  Rd  Rè  Ré  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRÆ  T  s    (   R   R   R   R   t   piRÑ  R   t   propertyR¹  R©   R¼  Rk   R½  RÞ   RÅ  RÇ  RÊ  R.   R!   R¿  RÏ  R×  t   staticmethodR»  R¸  RÌ  RÆ  (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR´  œ  s,   									
t
   PointGroupc           B   s­   e  Z d  Z e j j e j j d ƒ e j j d ƒ f ƒ Z d „  Z	 d „  Z
 d „  Z d „  Z d „  Z d „  Z d	 „  Z d
 „  Z e d „  ƒ Z d „  Z e d „  ƒ Z RS(   sP   
    Base class for identification
    
    Also stands in for no symmetry 
    i   i    c         C   s   g  S(   N(    (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRÊ  g  s    c         C   s   |  j  g |  j ƒ  S(   N(   t   IDENTITYRÊ  (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRÉ  l  s    c         C   s   |  S(   N(    (   R   RÒ   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRÞ   q  s    c         C   s   g  S(   N(    (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   generator_classesv  s    c         C   s   g  S(   N(    (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt
   generators{  s    c         C   sS   | j  ƒ  } x@ |  j ƒ  D]2 } | | } |  j d | d | d | ƒ r t Sq Wt S(   NRÒ   t   min_cos_anglet   max_spatial_disp(   t   inverseRÊ  t   approx_identity_operationR'   RD   (   R   RÒ   Rñ  Rò  Ró  RÓ  t   trial(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   approx_has_operation€  s    
		c            s&   t  ‡  ‡ ‡ f d †  | j ƒ  Dƒ ƒ S(   Nc         3   s-   |  ]# } ˆ j  d  | d ˆ d ˆ  ƒ Vq d S(   RÒ   Rñ  Rò  N(   Rö  (   R   RÓ  (   Rò  Rñ  R   (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pys	   <genexpr>”  s   (   RR   RÊ  (   R   R*   Rñ  Rò  (    (   Rò  Rñ  R   sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   approx_contains‘  s    c         C   s@   t  | j ƒ  ƒ t  |  j ƒ  ƒ k o? |  j d | d | d | ƒ S(   NR*   Rñ  Rò  (   R3   RÉ  R÷  (   R   R*   Rñ  Rò  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   approx_equals�  s
    $	c         C   s.   | t  j j |  j ƒ k o- |  j j ƒ  | k S(   N(   R   R   t*   r3_rotation_cos_rotation_angle_from_matrixR©   RÐ   RÂ  (   RÒ   Rñ  Rò  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRô  ©  s    c         C   s   d S(   Nt   1(    (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR.   ²  s    c         C   s%   t  | ƒ d k r t d ‚ n  |  ƒ  S(   Ni    s6   This point group type requires exactly zero generators(   R3   Rv  (   R   Rð  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   from_generators·  s    (   i    i    i    (   R   R   R   R   R   Rk   R¨  R¾  Rî  RÊ  RÉ  RÞ   Rï  Rð  Rö  R÷  Rø  Rì  Rô  R.   R!   Rû  (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRí  \  s   	'										t   RotationAxisc           B   sS   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z e	 d „  ƒ Z
 RS(   sa   
    Point group symmetry, generated by rotation axes
    Currently limited to one axis only
    c         C   s   | |  _  d  S(   N(   R¶  (   R   R¶  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   Æ  s    c         C   s   |  j  j ƒ  S(   N(   R¶  RÊ  (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRÊ  Ë  s    c         C   s   |  j  d |  j j d | ƒ ƒ S(   NR¶  RÒ   (   RC   R¶  RÞ   (   R   RÒ   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRÞ   Ð  s    	c         C   s+   t  d |  j d |  j g d |  j g ƒ g S(   Nt   standardRð  t
   operations(   t   GeneratorClassR¶  Rî  (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRï  ×  s    	c         C   s
   |  j  g S(   N(   R¶  (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRð  â  s    c         C   s   t  |  j j ƒ S(   N(   R  R¶  Rµ  (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR.   ç  s    c         C   s/   t  | ƒ d k r t d ‚ n  |  d | d ƒ S(   Ni   s4   This point group type requires exactly one generatorR¶  i    (   R3   Rv  (   R   Rð  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRû  ì  s    (   R   R   R   R   RÊ  RÞ   Rï  Rð  R.   R!   Rû  (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRü  À  s   						t   EquivalenceRelationc           B   sJ   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z e d „  ƒ Z	 RS(   sO   
    Partition members based on an equivalence relation into disjunct sets
    c         C   s"   | |  _  g  |  _ t ƒ  |  _ d  S(   N(   t   relationt   valuesR   t   equivalences(   R   R  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   ú  s    		c         C   sY   xB |  j  D]7 } |  j | | ƒ r
 |  j j t | | f ƒ ƒ q
 q
 W|  j  j | ƒ d  S(   N(   R  R  R  R   t	   frozensetRW   (   R   t   valuet   v(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   	  s    #c         C   s8   g  |  j  D]* } | | k r
 |  j d | d | ƒ ^ q
 S(   Nt
   collectiont   member(   R  t
   firstother(   R   R  R  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   equivalents_of
	  s    c         C   s‘   t  | g ƒ } | g } xr | rŒ g  } xY | D]Q } |  j d | ƒ } | j g  | D] } | | k rS | ^ qS ƒ | j | ƒ q. W| } q W| S(   NR  (   R   R
  t   extendt   update(   R   R  t   groupt   leadst   next_round_leadst   lt   equivsRö   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   equivalence_group_of	  s    		,
c         C   s^   t  |  j ƒ } g  } xB | rY | j ƒ  } |  j d | ƒ } | j | ƒ | j | ƒ q W| S(   NR  (   R   R  t   popR  RW   t   difference_update(   R   Ry  t   groupst   firstR  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   classes"	  s    	c         C   s4   d t  |  ƒ k s t ‚ t |  j | g ƒ ƒ j ƒ  S(   Ni   (   R3   R…   Rª   Rw  R”  (   R  R  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR	  0	  s    (
   R   R   R   R   R   R
  R  R  Rì  R	  (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   õ  s   						t   EquivalenceRelationChainc           B   s    e  Z d  Z d „  Z d „  Z RS(   s<   
    Create equivalence classes from pairwise relations
    c         C   s   t  ƒ  |  _ d  S(   N(   R   R  (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   <	  s    c         C   s”   g  |  j  D] } | j | ƒ r
 | ^ q
 } x | D] } |  j  j | ƒ q2 W|  j  j t t t j g  | D] } t | ƒ ^ qh t | ƒ ƒ ƒ ƒ d  S(   N(	   R  t   intersectionR   R   R  Rô   Rõ   t   or_R   (   R   R  RP   t   overlappingt   cl(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   A	  s    +	(   R   R   R   R   R   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR  7	  s   	t   Anchorc           B   s    e  Z d  Z d „  Z d „  Z RS(   s   
    An anchor peak
    c         C   s   | |  _  | |  _ d  S(   N(   R´   Rß   (   R   R´   Rß   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   X	  s    	c         C   s   d |  j  t |  j ƒ f S(   Ns   Anchor: %s, %d peak(   R´   R3   Rß   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR.   ^	  s    (   R   R   R   R   R.   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR  S	  s   	t   RefineStrategyc           B   s)   e  Z d  Z d „  Z d „  Z d „  Z RS(   s*   
    Refine around expected component
    c      	   C   s5   d d l  m } | j d | d | d | d | j ƒ S(   Niÿÿÿÿ(   R}  R   Rs  R	  t   protocol(   R5  R}  t   RefinedEvaluationt   b_factor_refinement(   R   R   Rs  R	  R  R}  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR}  h	  s    	c         C   sP   | \ } } } | r. d | j  | j | f n d f } t d | d | d | ƒ S(   Ns!   tf = %.3f, tfz = %.2f, llg = %.2fR˜   R€  R	  R�  (   R»   R¼   R‚  (   R   R=  R€  R	  t   llgRƒ  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR„  s	  s    (c         C   s   d S(   Ni    (    (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   coveragez	  s    (   R   R   R   R}  R„  R#  (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR  c	  s   		t   SearchStrategyc           B   s2   e  Z d  Z d „  Z d „  Z d „  Z d „  Z RS(   s5   
    Restricted search around expected positions
    c         C   s   | |  _  | |  _ d  S(   N(   t   sweept   extent(   R   R%  R&  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   „	  s    	c         C   s>   d d l  m } | j d | d | d | d |  j d |  j ƒ S(   Niÿÿÿÿ(   R}  R   Rs  R	  R%  R&  (   R5  R}  t   RestrictedSearchEvaluationR%  R&  (   R   R   Rs  R	  R  R}  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR}  Š	  s    		c         C   sJ   | \ } } | r( d | j  | j f n d f } t d | d | d | ƒ S(   Ns   tf = %.3f, tfz = %.2fR˜   R€  R	  R�  (   R»   R¼   R‚  (   R   R=  R€  R	  Rƒ  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR„  –	  s    %c         C   s   d S(   Ni   (    (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR#  �	  s    (   R   R   R   R   R}  R„  R#  (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR$  	  s
   			t   Assemblyc           B   s¼   e  Z d  Z d „  Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z	 e d „  ƒ Z
 e d „  ƒ Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z e d „  ƒ Z RS(   s‰   
    Any assembly, including additional symmetry
    
    The symmetry is stored so that any update will update the assembly as well
    c         C   s1   | s t  d ƒ ‚ | |  _ | |  _ | |  _ d  S(   Ns   Empty assembly(   R…   t   definitionsR'  RŒ  (   R   R)  R'  RŒ  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   ©	  s    		c         C   s   |  j  S(   N(   R)  (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   members±	  s    c         C   s   g  |  j  D] } | d ^ q
 S(   Ni    (   R)  (   R   t   d(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR­   ·	  s    c         C   s<   t  t j g  |  j D] } | j ^ q ƒ t |  j j ƒ  ƒ S(   N(   Rô   Rõ   R   R­   Rq   R3   R'  RÉ  (   R   Rö   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRq   ½	  s    c         C   s   g  |  j  D] } | d ^ q
 S(   Ni   (   R)  (   R   R+  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRþ  Ã	  s    c         C   s   |  j  |  j ƒ  S(   N(   R)  t   symmetry_generated_part(   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR±   É	  s    c   	   
   c   sŽ   |  j  } x~ t |  j ƒ D]m \ } \ } } | j ƒ  } t d | d g  t | ƒ D]. \ } \ } } | | k rP | | | f ^ qP ƒ Vq Wd  S(   NR´   Rß   (   R±   RZ   R)  Ró  R  (	   R   t   completeR\   RÓ   RÔ   Ró  R†  Rö   RÓ  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   anchorsÏ	  s    	"c         C   sŠ   g  |  j  D] } | j j ƒ  ^ q
 } t | ƒ } d | k  sI t d ƒ ‚ d | t g  t | |  j  ƒ D] \ } } | | j ƒ  ^ qf ƒ S(   Ni    s   Zero weight for assemblyg      ð?(   R­   Rq   RQ   RO   R…   R=   RŒ   (   R   Rö   t   weightst   totalt   w(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRŒ   Þ	  s
    %
c      	   C   sU   t  t j g  |  j j ƒ  D]2 } g  |  j D] \ } } | | | f ^ q) ^ q g  ƒ S(   N(   Rô   Rõ   R   R'  RÊ  R)  (   R   t   symopRö   RÓ  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR,  é	  s
    Bc         C   s%  d d  l  } d d l m } | j j j ƒ  } | j ƒ  } xÅ |  j D]º \ } } | j ƒ  } | j	 ƒ  sn t
 ‚ x� |  j j ƒ  D]| } xs | j	 ƒ  d j ƒ  D][ }	 |	 j ƒ  }
 | j ƒ  |
 _ |
 j ƒ  } | j ƒ  } | j | | | ƒ | j |
 ƒ q› Wq~ WqD W| j j j ƒ  } | j | ƒ | S(   Niÿÿÿÿ(   t   chiseli    (   R“   R:   R3  R”   R  Rf   t	   chain_idsR)  Rw   Rp   R…   R'  RÉ  R  Rn   R”  R~   Rh   Ri   Rj   R  R  (   R   R–   R3  t	   new_modelR4  R´   RÒ   Rw   RÓ  RP   RY   Rh   Rl   t   new_root(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRw   ó	  s$    c         c   sp   xi |  j  D]^ \ } } xO | j ƒ  D]A } x8 |  j j ƒ  D]' } | j ƒ  } | j d | ƒ | Vq9 Wq# Wq
 Wd  S(   NRk   (   R)  Rš   R'  RÉ  RY   Rm   (   R   R´   RÒ   R
  RÓ  RY   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRš   
  s    c         C   s   d t  |  j ƒ |  j f S(   Ns   %d components, symmetry: %s(   R3   R)  R'  (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR²   
  s    c         C   s   d |  j  ƒ  S(   Ns   Assembly: %s(   R²   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR.   
  s    c         C   s%   |  d | t  j f g d | d | ƒ S(   NR)  R'  RŒ  (   Rí  Rî  (   R   R´   R'  RŒ  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   Simple$
  s    (   R   R   R   R   Rë  R*  R­   Rq   Rþ  R±   R.  RŒ   R,  Rw   Rš   R²   R.   R!   R7  (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR(  ¢	  s   		
		
		t   GeneratorSettingc           B   s    e  Z d  Z d „  Z d „  Z RS(   s(   
    A generator with a basis model
    c         C   s   | |  _  | |  _ d  S(   N(   R´   t	   generator(   R   R´   R9  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   3
  s    	c         C   s   d |  j  |  j f S(   Ns   ensemble: %s, operator: %s(   R´   R9  (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR.   9
  s    (   R   R   R   R   R.   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR8  .
  s   	t   ModelRelationc           B   s   e  Z d  Z d „  Z RS(   sE   
    Stores information about geometric relations between models
    c         C   s   | |  _  | |  _ d  S(   N(   R   t   relating(   R   R   R;  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   C
  s    	(   R   R   R   R   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR:  >
  s   t   StructureRelationsc           B   s   e  Z d  Z d „  Z RS(   s;   
    Geometric relations for models within a structure
    c         C   s   | |  _  | |  _ d  S(   N(   RH  t	   relations(   R   RH  R=  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   N
  s    	(   R   R   R   R   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR<  I
  s   t   GeneratorClusterc           B   s    e  Z d  Z d „  Z d „  Z RS(   s   
    Generator cluster
    c         C   s   | |  _  i  |  _ d  S(   N(   t   averaget   relations_from(   R   R?  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   Y
  s    	c         C   s    |  j  j | g  ƒ j | ƒ d  S(   N(   R@  t
   setdefaultRW   (   R   RH  R  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   _
  s    (   R   R   R   R   R   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR>  T
  s   	Rÿ  c           B   s   e  Z d  Z d „  Z RS(   s<   
    Class of equivalent generators in a given symmetry
    c         C   s=   t  | ƒ t  | ƒ k s t ‚ | |  _ | |  _ | |  _ d  S(   N(   R3   R…   Rý  Rð  Rþ  (   R   Rý  Rð  Rþ  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   i
  s    		(   R   R   R   R   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRÿ  d
  s   t   SymmetryAnalysisc           B   s)   e  Z d  Z d „  Z d „  Z d „  Z RS(   sI   
    A combination of generators that give some point group symmetry
    c         C   s%   | |  _  | |  _ t | ƒ |  _ d  S(   N(   R   R@  R   t	   formed_by(   R   R   R@  RC  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   v
  s    		c         C   s   |  j  j | j  ƒ S(   N(   RC  t
   issuperset(   R   R*   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRT   }
  s    c         C   s   t  |  j ƒ S(   N(   R  R   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR.   ‚
  s    (   R   R   R   R   RT   R.   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRB  q
  s   		t   SymmetrySettingc           B   s    e  Z d  Z d „  Z d „  Z RS(   sK   
    A symmetry object associated with an ensemble to define the basis
    c         C   s   | |  _  | |  _ d  S(   N(   R´   t   point_group(   R   R´   RF  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   Œ
  s    	c         C   s   t  |  j ƒ S(   N(   R  RF  (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR.   ’
  s    (   R   R   R   R   R.   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRE  ‡
  s   	t   SymmetrySetRelationAnalysisc           B   s    e  Z d  Z d „  Z d „  Z RS(   s>   
    Analysis of containment relations based on operators
    c         C   s   | |  _  | |  _ | |  _ d  S(   N(   t   analysist   contained_byRT   (   R   RH  RI  RT   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   œ
  s    		c         C   s   t  |  j ƒ S(   N(   R  RH  (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR.   £
  s    (   R   R   R   R   R.   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRG  —
  s   	t   NewSymmetryc           B   s/   e  Z d  Z d „  Z e d „  ƒ Z d „  Z RS(   sX   
    Marker that a new symmetry has been created from a SymmetrySetRelationAnalysis
    c         C   s   | |  _  | |  _ d  S(   N(   RH  t   assemblies_in(   R   RH  RK  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   ­
  s    	c         C   s   |  j  j  j S(   N(   RH  R   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   ³
  s    c         C   s   t  |  j ƒ S(   N(   R  RH  (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR.   ¹
  s    (   R   R   R   R   Rë  R   R.   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRJ  ¨
  s   	t   ObsoletedBySuperSymmetryc           B   s   e  Z d  Z d „  Z RS(   s8   
    Marker that a SymmetrySetting has been removed
    c         C   s   | |  _  | |  _ d  S(   N(   R   t   supersymmetry(   R   R   RM  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   Ã
  s    	(   R   R   R   R   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRL  ¾
  s   t   SymmetryDowngradec           B   s   e  Z d  Z d „  Z RS(   s8   
    Marker that a SymmetrySetting has been removed
    c         C   s   | |  _  | |  _ d  S(   N(   R   t   highest(   R   R   RO  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   Î
  s    	(   R   R   R   R   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRN  É
  s   t   UnsupportedSymmetryc           B   s   e  Z d  Z d „  Z RS(   s8   
    Marker that a SymmetrySetting has been removed
    c         C   s   | |  _  d  S(   N(   R   (   R   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   Ù
  s    (   R   R   R   R   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRP  Ô
  s   t   SymmetryUpdateRecordc           B   s   e  Z d  Z d „  Z RS(   sJ   
    Marker that a SymmetrySetting has been updated to something else
    c         C   s   | |  _  | |  _ | |  _ d  S(   N(   R   t   previousRK  (   R   R   RR  RK  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   ã
  s    		(   R   R   R   R   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRQ  Þ
  s   t   NewAssemblyRecordc           B   s   e  Z d  Z d „  Z RS(   s5   
    Marker that a new Assembly has been created
    c         C   s   | |  _  d  S(   N(   R¯   (   R   R¯   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   ï
  s    (   R   R   R   R   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRS  ê
  s   t   AssemblyRemovalRecordc           B   s   e  Z d  Z d „  Z RS(   s2   
    Marker that an Assembly has been removed
    c         C   s   | |  _  d  S(   N(   R¯   (   R   R¯   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR   ù
  s    (   R   R   R   R   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRT  ô
  s   t   ForSymmetryAnalysisc           B   s   e  Z d  Z d „  Z RS(   sI   
    Marks that symmetry analysis should be performed on a structure
    c         C   s   | |  _  | |  _ d  S(   N(   RH  R\   (   R   RH  R\   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyR     s    	(   R   R   R   R   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyRU  þ
  s   (K   t
   __future__R    R   t   scitbx.mathR   t   scitbx.matrixR:   Rõ   t   os.pathR�   Rœ  R   R©  R   R   R"   R/   RB   RI   Re   Ro   Rs   R€   R¦   R«   R®   R³   R¹   R×   Rï   R  R  R)  RA  R[  R\  R]  R^  R_  Rl  Rn  Ro  RŠ  R{  R‚  R�  R‘  R�  R«  R®  R´  Rí  Rü  R   R  R  R  R$  R(  R8  R:  R<  R>  Rÿ  RB  RE  RG  RJ  RL  RN  RP  RQ  RS  RT  RU  (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/mr_object.pyt   <module>   sŒ    +1=t.ngM$P™š4N¦[B+,3"Àd5B#Œ


