ó
šxTc           @   sä   d  d l  m Z d  d l  m Z d  d l  m Z d  d l  m Z d  d l m 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 S(   iÿÿÿÿ(   t   stage(   t   calculation(   t   expert(   t	   mr_object(   t   outputNt   Planc           B   s5   e  Z d  Z e d d d d „ Z d „  Z d „  Z RS(   s9   
    A plan on the search - two level implementation
    g      è?g      à?c	   	      C   sL   | |  _  | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ d  S(   N(   t   level1t   level2t   postprocessorst	   criteriont   b_factor_refinementt   threshold_refinementt   threshold_postrefinementt   threshold_space_group(	   t   selfR   R   R   R	   R
   R   R   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyt   __init__   s    							c         C   sX   t  d | d | d | d |  j d |  j d |  j d |  j d |  j d	 |  j d
 |  j ƒ 
S(   Nt   caset   initialst   contextR   R   R   R	   R   R   R
   (   t   LocationProgressR   R   R   R	   R   R   R
   (   R   R   t   initialR   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyt   progress&   s    						c         C   s]   d j  d g g  |  j |  j D] } d | ^ q d d g g  |  j D] } d | ^ qE ƒ S(   Ns   
s)   Solvers to use before finding a solution:s     %st    s(   Solvers to use after finding a solution:(   t   joinR   R   (   R   t   s(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyt   __str__6   s    (   t   __name__t
   __module__t   __doc__t   TrueR   R   R   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyR      s   	t   QueueInterfacec           B   sD   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   sO   
    Interface to a global queue that only shows jobs submitted through it
    c         C   s   | |  _  t ƒ  |  _ d  S(   N(   t   queuet   sett   complete(   R   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyR   E   s    	c         C   s)   |  j  j d |  | f d | d | ƒ d  S(   Nt   ownerR   t   extra(   R   t   submit(   R   R"   R   R#   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyR$   K   s    c         C   sh   xa |  j  j ƒ  D]P } | j \ } } | |  k r7 q n  |  j  j | ƒ | | _ |  j j | ƒ q Wd  S(   N(   R   t	   completedR"   t   removeR!   t   add(   R   t   jobt
   qinterfaceR"   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyt   pollT   s    	c         C   s   t  |  j ƒ S(   N(   t   listR!   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyR%   b   s    c         C   s   |  j  j | ƒ d  S(   N(   R!   R&   (   R   R(   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyR&   g   s    c         C   s   |  j  j ƒ  S(   N(   R   t   full(   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyR,   l   s    (	   R   R   R   R   R$   R*   R%   R&   R,   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyR   @   s   						R   c           B   s  e  Z d  Z d „  Z d „  Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z d „  Z	 d „  Z
 d „  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 d „  Z RS(   s3   
    Progress of a molecular replacement round
    c      
   C   sm  | |  _  | |  _ | |  _ | |  _ | |  _ | |  _ |  g |  j |  j |  _ |  j |  _ t	 j
 ƒ  |  _ xj t | d d ƒD]V \ } } t j d |  j  d | d |  j  j | j ƒ  d | ƒ } |  j j d | ƒ q~ Wt g  |  j D] } | j ƒ  ^ qå ƒ |  _ t j d |  d	 t j d
 d  ƒ |  _ | |  _ |	 |  _ |
 |  _ t d | j ƒ |  _ g  |  _ g  |  _  d  S(   Nt   starti   R   t   partialt   missingt   indext   objR   t   typet   countR   (!   R   R   R	   R   R   R   t   activet   switch_to_level_2_kst   switch_strategyR   t
   Blackboardt   boardt	   enumerateR    t   Initialt   compositiont   writet   minR   t   scoret   lowest_initialR   t   SelectRanget   Packt   Nonet   inspectR   R   R
   R   R   t   refinedst	   solutions(   R   R   R   R   R   R   R   R	   R   R   R
   R0   t	   structuret   bbobjR   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyR   v   s0    									+$				c         C   s   d |  j  j ƒ  S(   Ns   Space group: %s(   R   t   space_group_symbol(   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyt
   identifier§   s    c         C   s
   |  j  j S(   N(   R   t   identity_to_rms(   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyRJ   ¬   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/phaser_ai.pyR   ²   s    c         C   s
   |  j  j S(   N(   R   t   superposition(   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyRK   ¸   s    c   
      C   s­  | j  j d t  j d d ƒ ƒ | j  j d d d d ƒ | j  j d d | j ƒ  ƒ | j  j d t  j ƒ  ƒ g  } xô t | d d	 ƒD]à \ } } |  j d
 | j ƒ  ƒ r´ t	 } n t
 } | j | ƒ | j  j d | rß d n d ƒ | j  j ƒ  | j  j d | ƒ | j  j ƒ  | j  j d t  j ƒ  ƒ | j j |  ƒ t j d | d | ƒ }	 |  j j d |	 ƒ q‡ Wt | ƒ rŠ|  j d | ƒ n  | j  j d t  j d d ƒ ƒ d  S(   Nt   msgt   texts   Solution identificationt   messaget   statust   datas   Space group %sR-   i   t   peaks   Peak: %st   SIGNIFICANTs   NOT significantt   packt   significantR1   R   s    Solution identification finisheds   Peak: SIGNIFICANT(   R   t   verboset   subtitlet   notifyRH   t   blankR9   R	   t   tf_peakR   t   Falset   appendt   indentt   dedentt   processed_byR'   R    t   ScoredR8   R<   t   anyR6   t   section_close(
   R   t	   candidateR8   R   R   t
   judgementsR0   t   cRT   t   st(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyt
   manipulate¾   s4    	c         C   sH  | j  j d d ƒ | j  j d t  j ƒ  ƒ | j  j d d ƒ | j  j ƒ  x@ t |  j d d ƒD]) \ } } | j  j d d | | f ƒ qb W|  g |  j |  _ |  j |  _ | j  j	 ƒ  | j  j d t  j ƒ  ƒ | j  j d d ƒ | j  j ƒ  x@ t |  j d d ƒD]) \ } } | j  j d d | | f ƒ q
W| j  j	 ƒ  d  S(   NRL   s   Switching solution strategy:s   Current:R-   i   s   %d: %ss   Next:(
   R   RU   RX   R\   R9   R4   R   t   already_switchedR6   R]   (   R   R   t   it   ks(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyR5   æ   s    "!"!c         C   s   d  S(   N(    (   R   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyRg   þ   s    c         C   sÅ  |  j  j d t  j d d ƒ ƒ |  j  j d t  j d d ƒ ƒ |  j  j ƒ  |  j  j d d ƒ |  j  j d d ƒ |  j  j ƒ  |  j  j d d ƒ |  j  j ƒ  |  j  j d d ƒ |  j  j ƒ  |  j  j d d	 ƒ |  j  j d d
 ƒ |  j  j d d ƒ |  j  j d d ƒ |  j  j ƒ  |  j  j ƒ  |  j  j d d ƒ t |  j d d „  ƒt |  j d d „  ƒt |  j	 j
 d t j ƒ d d „  d t ƒt |  j	 j
 d t j ƒ d d „  ƒt |  j	 j
 d t j ƒ d d „  ƒt |  j	 j
 d t j ƒ d d „  ƒt |  j d d „  ƒ|  j	 j
 d t j ƒ |  j	 j
 d t j ƒ t |  j	 j
 d t j ƒ d d „  d t ƒ|  j f
 } t ƒ  } x/ | D]' } x | D] } | j d | ƒ qŠWq}W|  j  j d | j ƒ  ƒ d  S(   NRL   RM   s   Summary of searchess   Abbreviations:s   n/a: search not performeds	   RF-score:s   LPR - located in previous rounds   Z-score:s   * - significants   S - superposeds   A - amalgamateds2   R - completed according to known regular structureR   t   keyc         S   s   |  j  S(   N(   R0   (   Rh   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyt   <lambda>  s    c         S   s   |  j  S(   N(   R0   (   t   e(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyRk     s    R2   c         S   s
   |  j  ƒ  S(   N(   R>   (   t   t(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyRk     s    t   reversec         S   s   |  j  S(   N(   R0   (   Rl   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyRk     s    c         S   s   |  j  S(   N(   R0   (   Rl   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyRk     s    c         S   s   |  j  S(   N(   R0   (   t   r(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyRk     s    c         S   s   |  j  S(   N(   R0   (   Rm   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyRk     s    c         S   s
   |  j  ƒ  S(   N(   R>   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyRk     s    t   child(   R   t   infoRV   t
   underlinedR\   R]   t   sortedR   t	   ensemblesR8   t   readR    t	   TemplatedR   t   Filledt   PreviouslyEstablishedRotationt   NormalRotationt   translationst   Packedt   ClashR_   RD   t   StageTreeTableR'   t   format(   R   RP   t   treet   levelRp   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyt   show_search_tree  s@    *$$$+*	c         C   s±  |  j  j d t  j d |  j ƒ  ƒ ƒ |  j  j d t  j d d ƒ ƒ |  j j ƒ  xÃ |  j j ƒ  D]² } |  j j | ƒ |  j  j d t  j	 d d | ƒ ƒ |  j  j d d | j
 ƒ | j
 j d | j d | j d | j d	 |  j d
 |  j d |  ƒ |  j  j d t  j d d ƒ ƒ qa W|  j  j d t  j d d ƒ ƒ |  j j ƒ  rIt St } |  j  j d t  j d d ƒ ƒ |  j  j d d ƒ x |  j D]Ö } |  j  j d t  j	 d d ƒ ƒ |  j  j d d | ƒ | j d	 |  j d
 |  j d |  ƒ } | rB|  j  j d t  j d d ƒ ƒ | j d | d	 |  j d
 |  j d |  ƒ t } Pn  |  j  j d t  j d d ƒ ƒ q‹W|  j  j d t  j d d ƒ ƒ |  j  j d t  j d d |  j ƒ  ƒ ƒ | S(   NRL   RM   s   Job pollings   Job %s: finisheds   Started by: %sR   t   resultR#   R8   R   R   s   Job processing finisheds   Job polling completeds   Board evaluations+   Available cpus - querying knowledge sourcest
   Evaluations   Knowledge source: %ss   Selected for actionRb   s   No action possibles   No knowledge sources can acts   %s finished(   R   t   debugRV   RI   Rr   R   R*   R%   R&   t   headingR"   t   processR   R‚   R#   R8   R   Ra   R,   RZ   R4   RC   Rf   R   (   R   R(   t   actionRi   Rb   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyt   iterate,  sb    %												c         C   s   |  j  j d t j ƒ S(   NR2   (   R8   Ru   R    R:   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyR   x  s    c         C   s   |  j  j d t j ƒ S(   NR2   (   R8   Ru   R    t   Ensemble(   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyRt   ~  s    c         C   s   |  j  j d t j ƒ S(   NR2   (   R8   Ru   R    t   Rotation(   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyt	   rotations„  s    c         C   s   |  j  j d t j ƒ S(   NR2   (   R8   Ru   R    t   Translation(   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyRz   Š  s    c         C   s   |  j  j d t j ƒ S(   NR2   (   R8   Ru   R    RA   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyt   packings�  s    c         C   s   |  j  j d t j ƒ S(   NR2   (   R8   Ru   R    R|   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyt	   clashings—  s    c         C   s   |  j  j d t j ƒ S(   NR2   (   R8   Ru   R    t	   Evaluated(   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyt
   evaluateds�  s    c         C   s¢  |  j  j d t  j d |  j ƒ  ƒ ƒ |  j ƒ  g  |  _ g  |  _ |  j rK|  j  j d t  j d d ƒ ƒ |  j j	 d d „  d t
 ƒ |  j d j ƒ  } |  j  j d d | ƒ t | |  j ƒ } |  j  j d d	 | ƒ | d
 |  j | } |  j  j d d | ƒ g  |  j D] } | | j ƒ  k r| ^ q} |  j  j d d t | ƒ ƒ |  j  j d t  j ƒ  ƒ xT | D]L } |  j  j d d ƒ |  j  j ƒ  |  j  j d t | ƒ ƒ |  j  j ƒ  qpW|  j  j d t  j ƒ  ƒ g  |  j D]$ } | j j rã| | k rã| ^ qã} |  j  j d t  j d d t | ƒ ƒ ƒ xT | D]L } |  j  j d d ƒ |  j  j ƒ  |  j  j d t | ƒ ƒ |  j  j ƒ  q=W|  j  j d t  j ƒ  ƒ |  j  j d t  j d d ƒ ƒ |  j  j d d ƒ |  j  j d t  j d d ƒ ƒ |  j d | d |  j ƒ |  j  j d t  j d d ƒ ƒ |  j d | d |  j ƒ n  |  j  j d t  j d d ƒ ƒ x9 |  j j j d t j ƒ D] } |  j j j d | ƒ q†Wg  } xß |  j D]Ô }	 |  j  j  d d |	 ƒ |	 d |  j! d |  j d |  d |  j d |  j ƒ }
 | j" g  |
 D] } t# | t j$ ƒ r| ^ qƒ g  |
 D] } t# | t j$ ƒ s?| ^ q?} x$ | D] } |  j j j% d | ƒ qjWq¶W|  j  j d t  j d d ƒ ƒ t j& d t j' d |  j ƒ ƒ } t j& d t j( d |  j ƒ ƒ } x= | D]5 } | j) ƒ  r| j* d  | ƒ qö| j* d  | ƒ qöW|  j  j d d! ƒ |  j+ d | ƒ |  j  j d d" ƒ |  j+ d | ƒ |  j  j d t  j, d d# |  j ƒ  ƒ ƒ d  S($   NRL   RM   s   Post-refinement selectionRj   c         S   s
   |  j  ƒ  S(   N(   R>   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyRk   ®  s    Rn   i    s   Best refined score: %.3fs   Max score improvement: %.3fg      ð?s   Acceptance threshold: %.3fs   Accepted: %ds   Peak annotation:s)   Further considered for postprocessing: %ds   Find duplicatess"   Identify symmetry equivalent peakst   Selectedt   stagest	   containers   Postprocessing onlys   Prepare for next extensionR2   R1   s   Next: %sR8   R   R   RE   t   postprocessingss   Consolidating filled peakst   relationt   values%   Processing peaks with defined origin:s'   Processing peaks with undefined origin:s   %s finished(-   R   Rq   t   secondary_titleRI   R�   RE   R”   RD   RV   t   sortR   R>   t   absR?   R   t   lenRX   R\   t   strR]   RF   RT   Rr   t   search_for_uniquenessRU   R   RP   Ru   R   t   PostProcessingDatat   deleteR   R„   R8   t   extendt
   isinstancet   PotentialPeakR<   t   EquivalenceRelationt#   PotentialPeakFixedOriginEquivalencet&   PotentialPeakVariableOriginEquivalencet   is_defined_originR'   t*   write_best_peaks_from_equivalence_clustersRa   (   R   t   bestt   improvementt	   thresholdRe   t	   acceptedsR”   t   ppdt   peakst   ppt   resultsR1   t   npst   npt   defined_origin_peaks_relationt   undefined_origin_peaks_relationt   p(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyt   finalize£  s¤    %
			.$		
	"			,+				c         C   s{   xt t  | j ƒ  d d ƒD]Z \ } } |  j j d d | t | ƒ f ƒ t | d d „  ƒ} |  j j j d | ƒ q Wd  S(   NR-   i   RL   s   Cluster %s: %s elementsRj   c         S   s   t  |  j ƒ  ƒ S(   N(   Rš   t   associations(   t   v(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyRk   +  s    R1   (	   R9   t   classesR   RU   Rš   t   maxR   RP   R<   (   R   R•   R0   t   clusterR§   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyR¦   %  s
    %c      	      s&  t  g  |  j j D]- } t |  j j d | d t ƒ ƒ | f ^ q ƒ ‰ d d l m ‰  x°| D]¨} |  j j	 d d | j
 ƒ  | j j r� d n d f ƒ |  j j ƒ  |  j j	 d t | j ƒ ƒ |  j j ƒ  |  j j d | j d t d	 |  j j ƒ ‰ ‡  ‡ ‡ f d
 †  ˆ j ƒ  Dƒ } yl | j ƒ  } |  j j	 d d ƒ |  j j ƒ  |  j j	 d | ƒ |  j j	 d t j ƒ  ƒ |  j j ƒ  w] Wq] t k
 r|  j j d ƒ |  j j	 d t j ƒ  ƒ |  j j d | j d | j
 ƒ  ƒ | j ˆ t ˆ ƒ <| j | ƒ q] Xq] W|  j j	 d t j ƒ  ƒ d  S(   NRF   t   cachediÿÿÿÿ(   t   matchingRL   s   Peak: score %.3f%ss    (significant)R   t   template_equivalencec         3   s1   |  ]' } ˆ  j  d  ˆ d | ƒ r ˆ | Vq d S(   t   leftt   rightN(   t   phaser_style_equivalence_match(   t   .0t   o(   R»   t   stmt   structure_for(    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pys	   <genexpr>T  s    s   Equivalent:t   UNIQUER>   (   t   dictR   t   partialst   tuplet'   create_matching_origin_search_structureRZ   t   phaserR»   R   Rq   R>   RF   RT   R\   R›   R]   R   R   R¼   t   keyst   nextRX   t   StopIterationR„   t   insertR[   (   R   R’   R“   R   Re   t   equivgent   equiv(    (   R»   RÂ   RÃ   sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyRœ   /  s@    	@		""c         C   s™  |  j  } g  |  _ |  j  s d  S|  j j d t j d d |  j j ƒ  ƒ ƒ | j d d „  d t ƒ | d j	 ƒ  } t
 | |  j ƒ } | d |  j | } |  j j d d	 | ƒ |  j j d d
 ƒ g  | D]* } | j ƒ  sñ | | j	 ƒ  k rÍ | ^ qÍ } |  j j d d t | ƒ ƒ |  j j d d
 ƒ g  } x@| D]8} |  j j d d ƒ |  j j ƒ  |  j j d t | ƒ ƒ |  j j ƒ  | j ƒ  r›d } nD | | j	 ƒ  k r¶d } n) |  j j d d ƒ |  j j d d
 ƒ q:|  j j d d | ƒ | j ƒ  j rÊ| j ƒ  rÊ|  j j d d ƒ |  j j d d ƒ | j ƒ  }	 |  j j t j d | d t j d |	 j ƒ  g d | j ƒ  d | j ƒ  d |	 j d | j ƒ  ƒ d | j ƒ ƒ |  j j d d
 ƒ q:n  |  j j d d ƒ t j  d |  j j! ƒ  d | j ƒ  d | j" ƒ  d | j ƒ  d | j ƒ  d | j ƒ  j d |  j# ƒ }
 |  j$ j% d |  d  |
 d! | ƒ |  j j d d
 ƒ q:W|  j j d t j& d d" ƒ ƒ d  S(#   NRL   RM   s   Space group: %sRj   c         S   s
   |  j  ƒ  S(   N(   R>   (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyRk   v  s    Rn   i    g      ð?s   Selection threshold: %.3fR   s   Available candidates: %ds   Peak annotation:RT   s   above thresholds   REJECTED: below thresholds   ACCEPTED: %ss.   There is only one peak and it has been refineds   Skipping refinementt	   evaluatedRF   R¬   t   rfzt   tfzt   predecessort   llgs   Refinement job submittedRP   R.   RQ   R
   R"   R   R#   s   Refinement jobs started('   R�   RD   R   Rq   RV   R   RH   R˜   R   R>   R™   R?   R   RT   Rš   R\   R›   R]   R.   R¬   t
   is_refinedRY   R[   R    t   RefinedR   t	   Structuret   as_peakRÑ   RÒ   RÔ   R   t
   Refinementt   calculation_dataRQ   R
   R   R$   Ra   (   R   R�   R§   R¨   R©   Re   t	   selectedsR®   t   reasonRY   t   calc(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyt   threshold_and_start_refinementsk  st    			 7							c      	   C   s�   |  j  j ƒ  x| |  j  j ƒ  D]k } |  j  j d | ƒ | j j d | j ƒ } | j \ } } |  j j	 t
 j d | j d | d | ƒ ƒ q Wd  S(   NR(   R®   RÐ   RF   RÔ   (   R   R*   R%   R&   R   R†   R‚   RP   RD   R[   R    RÖ   R#   (   R   R(   Ro   RÔ   RF   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyt   evaluate_refinements½  s    			c         C   s   d S(   Nt   ExtensionProgress(    (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyR   Î  s    (   R   R   R   R   RI   t   propertyRJ   R   RK   Rf   R5   Rg   R�   Rˆ   R   Rt   R‹   Rz   R�   RŽ   R�   R´   R¦   Rœ   RÞ   Rß   R   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyR   q   s0   	1		(			)	L	‚	
	<	R	t   SolutionProgressc           B   s_   e  Z d  Z d „  Z d „  Z d „  Z d „  Z e d „  ƒ Z e d „  ƒ Z	 e d „  ƒ Z
 RS(   s)   
    Data about the solution process
    c         C   sj   t  | ƒ t  | ƒ k s t ‚ | |  _ | |  _ g  |  _ | |  _ | |  _ | |  _ | |  _ | |  _	 d  S(   N(
   Rš   t   AssertionErrort   casesR   t   historyR   R   RK   R¼   RJ   (   R   Rä   R   R   R   RK   R¼   RJ   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyR   Ø  s    							c         C   sP   |  j  r |  j  d n |  j } t | ƒ t |  j ƒ k s@ t ‚ t |  j | ƒ S(   Niÿÿÿÿ(   Rå   R   Rš   Rä   Rã   t   zip(   R   t   array(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyR®   î  s    !c      	   C   së  |  j  j d t  j d d ƒ ƒ |  j  j d d d d ƒ |  j  j d | ƒ x™t ræg  t |  j |  j ƒ D]$ \ } } | d  k	 rj | | f ^ qj } | sž Pn  |  j	 j
 |  j ƒ t d „  | Dƒ ƒ sÎ t ‚ |  j  j d t  j d d	 ƒ ƒ |  j  j d d d d
 ƒ g  } x-t | d d ƒD]\ } \ } } |  j  j d t  j d d | j ƒ  ƒ ƒ |  j  j d d ƒ |  j  j d t  j ƒ  ƒ xŠ t | d d ƒD]v \ } } |  j  j d | | j | f ƒ |  j  j ƒ  |  j  j t | ƒ ƒ |  j  j ƒ  |  j  j d t  j ƒ  ƒ q™W| j
 | j d | d | d |  ƒ ƒ qW|  j  j d t  j d d ƒ ƒ |  j  j d d d d ƒ x‹ t rg  | D] } | j ƒ  ^ q„}	 t |	 ƒ sñ|  j j ƒ  rÎ|  j  j d d ƒ Pqñ|  j  j d d ƒ |  j j ƒ  n  |  j j ƒ  qwW|  j  j d t  j d d ƒ ƒ |  j  j d d d d ƒ x | D] } | j ƒ  qAW|  j j ƒ  |  j  j d t  j d d ƒ ƒ |  j  j d d d d ƒ x" | D] } | j ƒ  | j  ƒ  q¡W|  j  j d t  j d d ƒ ƒ |  j  j d d d d ƒ g  }
 g  } x| D]} |  j  j d t  j d | j! ƒ  ƒ ƒ | j sDt ‚ | j" ss|  j  j d d ƒ |
 j
 | ƒ q
n  | j# s¢|  j  j d d ƒ |
 j
 | ƒ q
n  | j$ s±t ‚ | j% sÀt ‚ | j& sï|  j  j d d ƒ |
 j
 | ƒ q
n  |  j  j d d  ƒ | j
 | ƒ q
Wd t' | ƒ k  rÌ| rÌ|  j  j d t  j d d! ƒ ƒ |  j  j d d d d! ƒ g  | D]5 } t( g  | j& D] } | j) j | j* ^ q}ƒ ^ qj} t( | ƒ } |  j  j d d" | ƒ | d# | j+ t, | ƒ } |  j  j d d$ | ƒ g  } xÏ t | | ƒ D]µ \ } } t d% „  | j& Dƒ ƒ rb| j
 | ƒ |  j  j d d& | j! ƒ  ƒ q| | k r›| j
 | ƒ |  j  j d d' | j! ƒ  ƒ q|  j  j d d( | j! ƒ  ƒ |
 j
 | ƒ qWn | } x[ | D]S } | j) |  j k s÷t ‚ g  | j& D] } | j* ^ q|  j |  j j- | j) ƒ <qÙW|
 rN |  j  j d t  j d d) ƒ ƒ |  j  j d d* ƒ |  j  j ƒ  x[ |
 D]S } |  j  j d | j! ƒ  ƒ | j) |  j k s³t ‚ d  |  j |  j j- | j) ƒ <q|W|  j  j ƒ  qN qN Wd  S(+   NRL   RM   s   Solution processRN   RO   RP   s   Start solution processc         s   s'   |  ] \ } } d  t  | ƒ k  Vq d S(   i    N(   Rš   (   RÀ   R   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pys	   <genexpr>  s    s   Search coverages%   Determine search space group coverageR-   i   s   Space group: %ss   Partial structures:s   %d: score %.2fR   R   R   s   Extension stages   Find possible solutionss   Process finisheds   Waiting for jobs to finishs   Refinement stageRÙ   s   Round evaluation stages   Result evaluations    Search progress evaluation stages   Search progress evaluations>   No structures can be completed any further with current modelss   All peaks clashs   No novel peaks availables   Progress to next extensions   Space group comparisons   Best solution score: %.3fg      ð?s&   Space group acceptance threshold: %.3fc         s   s   |  ] } | j  j Vq d  S(   N(   RF   RT   (   RÀ   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pys	   <genexpr>Ž  s    s*   %s: ACCEPTED (significant solutions found)s,   %s: ACCEPTED (best solution above threshold)s   %s: REJECTEDs   Space group explorations   Search finished this round in:(.   R   Rq   t   titleRW   R   Ræ   Rä   R   RB   Rå   R[   t   allRã   R9   RV   RH   RX   t	   score_forR\   R›   R]   R   Rˆ   R`   R   t   emptyR„   t   waitR*   RÞ   R   Rß   R´   RI   Rt   R�   R�   RD   RE   Rš   R¸   R   RF   R   R™   R0   (   R   t   planR   R   t   activest
   extensionsR0   RF   t   extt   actedt	   exploredst   unexploredsR   t
   max_scoresR§   R©   Rª   R>   Ro   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyt   solveõ  sø    	=%		#	
%			?9 c         C   s   d S(   Ns   Solution progress(    (   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyR   ¶  s    c   	      C   sa   t  j d | d | j d | ƒ } |  d | g d | j j g g d | d | d | d	 | d
 | ƒ S(   NR;   t   space_group_hallt   problemRä   R   R   R   RK   R¼   RJ   (   R   t   CaseRö   R÷   t   root(	   t   clsR;   R÷   R   R   RK   R¼   RJ   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyt   Dataset»  s    				c         C   sÏ   t  j d | d | j d | ƒ } | g }	 | j ƒ  j ƒ  r‚ | j ƒ  j ƒ  }
 |	 j t  j d | d |
 j ƒ  j	 ƒ  d | ƒ ƒ n  |  d |	 d g  |	 D] } | j
 j g ^ q• d | d | d | d	 | d
 | ƒ S(   NR;   Rö   R÷   Rä   R   R   R   RK   R¼   RJ   (   R   Rø   Rö   t   space_group_typet   is_enantiomorphict   space_group_infot   change_handR[   R2   t   hall_symbolR÷   Rù   (   Rú   R;   R÷   R   R   RK   R¼   RJ   R   Rä   t   enantiomorphRd   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyt   Enantiomorph×  s(    					"c         C   sÃ   d d l  m } | j | j ƒ j ƒ  }	 g  }
 xE |	 j ƒ  D]7 } |
 j t j d | d | j	 ƒ  j
 ƒ  d | ƒ ƒ q; W|  d |
 d g  |
 D] } | j j g ^ q‰ d | d	 | d
 | d | d | ƒ S(   Niÿÿÿÿ(   t   sgtbxR;   Rö   R÷   Rä   R   R   R   RK   R¼   RJ   (   t   cctbxR  t   space_groupRö   Rq   t&   reflection_intensity_equivalent_groupsR[   R   Rø   R2   R   R÷   Rù   (   Rú   R;   R÷   R   R   RK   R¼   RJ   R  t   sgiRä   t   grRd   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyt
   Pointgroup   s"    	"(   R   R   R   R   R®   Rõ   R   t   classmethodRû   R  R	  (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyRâ   Ó  s   			Á	)t   SolutionSelectionc           B   s   e  Z d  Z d „  Z RS(   s'   
    Final selection for solutions
    c            s¿  ˆ  |  _  t g  ˆ  j j ƒ  D]$ \ } } | ˆ  j j k r | ^ q ƒ |  _ |  j d | t |  j ƒ |  _ g  ˆ  j	 D]4 } | ˆ  j j k rw |  j ˆ  j | k rw | ^ qw |  _
 |  j
 j d ‡  f d †  d t ƒ g  |  _ g  } d d l m ‰ xÃ |  j
 D]¸ } ˆ  j d | d t d	 | ƒ ‰ x‘ | D]l }	 t |	 ƒ t ˆ ƒ k rNq*n  ‡ f d
 †  ˆ j d ˆ d |	 ƒ Dƒ }
 t ‡ f d †  |
 Dƒ ƒ r*Pq*q*W|  j j | ƒ | j ˆ ƒ qÿ Wd  S(   Ng      ð?Rj   c            s   ˆ  j  |  S(   N(   Rê   (   R   (   R   (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyRk   :  s    Rn   iÿÿÿÿ(   R»   RF   Rº   R¼   c         3   s-   |  ]# } ˆ  j  d  ˆ  j d | ƒ ƒ Vq d S(   t   overlapst   originN(   t   pairst   origin_shifted_overlap(   RÀ   RÁ   (   R»   (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pys	   <genexpr>N  s   R½   R¾   c         3   s-   |  ]# } t  t | ƒ ƒ t  ˆ  ƒ k Vq d  S(   N(   Rš   R+   (   RÀ   R³   (   t   trial(    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pys	   <genexpr>T  s    (   R   R¸   Rê   t   itemsR÷   Rù   t
   best_scoreR™   t   threshold_scoreRÆ   t   thresholdedsR˜   R   RE   RÉ   R»   RÈ   Rš   t   origin_shifts_betweenR`   R[   (   R   R   R©   R¼   Re   t   scR³   RE   RF   t   foundR  (    (   R   R»   R  sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyR   )  s8    	$!%			(   R   R   R   R   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyR  $  s   R}   c           B   sJ   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z e d „  ƒ Z	 RS(   s1   
    A table to represent the tree of stages
    c         C   s   i g  d  6|  _ d  S(   N(   RB   t   children_for(   R   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyR   a  s    c         C   s}   | j  ƒ  } | |  j k sC t d t | ƒ t | ƒ |  j f ƒ ‚ | |  j k sX t ‚ |  j | j | ƒ g  |  j | <d  S(   Ns   parent %s of %s not in %s(   t   parentR  Rã   t   reprR[   (   R   Rp   R  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyR'   f  s
    7c   
      C   s×   i  } |  j  d d  d d d | ƒ } t g  | D] } | d ^ q. ƒ d } g  t | ƒ D] } d  g | ^ qX } x_ | j ƒ  D]Q \ \ } } }	 y |	 | | | <Wq~ t k
 rÎ t d | | | | f ‚ q~ Xq~ W| S(   NRù   R0   i    t   cellsi   s-   Out-of-bounds: ( %d, %d ), limits: ( %d, %d )(   t   insert_subtreeRB   R¸   t   rangeR  t
   IndexErrort   RuntimeError(
   R   R  t	   row_countt   kt   column_countt   rct   tableRo   Rd   Rl   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyt   as_tableo  s    '&c         C   s–  g  |  j  D] } t | t j ƒ r
 | ^ q
 } | rt t g  | D] } t t | j ƒ ƒ ^ q> ƒ } d j | ƒ } n d } d | d d d d d g } g  | D] } t | ƒ ^ qœ } g  }	 x  |  j	 ƒ  D]’ }
 |  j
 d |
 ƒ } t | ƒ t | ƒ } d	 | k st ‚ |	 j g  t | | ƒ D]* \ } } | rA| j d
 | ƒ n d ^ qd g | ƒ qÇ Wd d l m } | j d | d d g t | ƒ d |	 ƒ S(   NR‰   t   Partials   RF-scores   TF-scoreRA   s
      Z-scores	   Final LLGt   iterablei    t   widthR   s   n/aiÿÿÿÿ(   t	   tbx_utilst   captionst   formatss   %st   lines(   R  R    R    R‰   R¸   Rš   R›   t   ensemblet   rjustR%  t   restrictRã   R[   Ræ   t   entryRÉ   R)  t   format_table(   R   R   t   estagest   est   max_char_countR-  R*  Rd   t   widthsR,  t   lt
   restrictedt   fillt   wR)  (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyR~   ƒ  s,    .+=	c         C   sy   | d  k	 r% | | | | j ƒ  f <n  |  j | rk x@ |  j | D]$ } |  j d | d | d | ƒ } q@ Wn
 | d 7} | S(   NRù   R0   R  i   (   RB   t   depthR  R  (   R   Rù   R0   R  Rd   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyR  ¦  s    %
c         C   sG   x@ t  t |  ƒ d d d ƒ D]" } |  | d  k	 r |  | d  Sq Wg  S(   Ni   iÿÿÿÿ(   R  Rš   RB   (   R'  R¶   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyR/  µ  s    #(
   R   R   R   R   R'   R%  R~   R  t   staticmethodR/  (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyR}   \  s   					#	(   t   phaser.pipelineR    R   R   R   RÉ   R   t   operatort   objectR   R   R   Râ   R  R}   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/pipeline/phaser_ai.pyt   <module>   s   51ÿ ÿ dÿ R8