ó
	šxTc           @   sz  d  d l  Z  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	 m
 Z
 d  d l	 m Z d  d	 l m Z d  d
 l m Z d  d l Z d  d l Z d e f d „  ƒ  YZ d „  Z d e f d „  ƒ  YZ d „  Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d S(   iÿÿÿÿN(   t   structure_from_clusters(   t   miller(   t   xray(   t   flex(   t   maptbx(   t   fftpack(   t   matrix(   t   cluster(   t   Sorryt   sad_data_adaptorc           B   sD   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s5   
    Convert cctbx.miller_array to phaser format
    c         C   s·  | j  ƒ  } | j ƒ  s t ‚ | j ƒ  j  ƒ  j | ƒ s? t ‚ | j ƒ  d  k	 sW t ‚ t j | j	 ƒ  j
 ƒ  | j  ƒ  ƒ } | j d ƒ } | j d ƒ } | j d ƒ } | j d ƒ } t j ƒ  |  _ |  j j | j ƒ  | j ƒ  | j ƒ  ƒ |  j j | j | ƒ ƒ |  j j | j | ƒ ƒ |  j j | j | ƒ ƒ |  j d | j ƒ  d | d | d | d | ƒ \ |  _ |  _ |  j d | j ƒ  d | d | d | d | ƒ \ |  _ |  _ |  j j ƒ  } | j ƒ  }	 |	 | j ƒ  }
 t j ƒ  |  _ |  j j | ƒ |  j j |
 t ƒ |  j j | t ƒ |  j d |  j d	 |  j ƒ t j ƒ  |  _ |  j j | ƒ |  j j |	 t ƒ |  j j |
 t ƒ |  j j | t ƒ |  j d |  j d	 |  j ƒ |  j  ƒ  } t! | ƒ | k sØt ‚ | j" t ƒ | k  rƒ|  j j | ƒ |  _ |  j j | ƒ |  _ |  j j | ƒ |  _ |  j j | ƒ |  _ |  j j | ƒ |  _ |  j j | ƒ |  _ |  j j | ƒ |  _ n  | j# ƒ  j$ ƒ  |  _# | j	 ƒ  j
 ƒ  j% ƒ  |  _& d  S(
   Nt   +t   -t   datat   sel_ppt   sel_pmt   sel_spt   sel_smt
   amplitudest   flags('   t   indicest   anomalous_flagt   AssertionErrort
   map_to_asut   all_eqt   sigmast   NoneR   t   match_bijvoet_matest   space_group_infot   typet   pairs_hemisphere_selectiont   singlesR   t   miller_indext   reservet   sizet   extendt   selectt   split_plus_minusR   t   fplust   fminust   sigfplust	   sigfminust   boolt   pplust   resizet   Truet   Falset   unflag_non_positive_amplitudest   pminust*   find_not_double_missing_reflection_indicest   lent   countt	   unit_cellt
   parameterst   hall_symbolt   space_group_hall(   t   selft   miller_arrayR   t   matchesR   R   R   R   t	   n_indicest   n_pairst   i_singles_plus_minus_boundaryt   present(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyt   __init__   st    !*				
		
c         C   sz   | j  | ƒ } | j  | ƒ } | j | j  | ƒ ƒ | j | j ƒ  ƒ | j | j  | ƒ ƒ | j | j ƒ  ƒ | | f S(   N(   R#   R"   R+   R!   (   R7   R   R   R   R   R   t   pt   m(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyR$   `   s    c         C   sX   t  | ƒ t  | ƒ k s t ‚ x3 t | ƒ D]% \ } } | d k r+ t | | <q+ q+ Wd  S(   Ni    (   R1   R   t	   enumerateR-   (   R7   R   R   t   indext   f(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyR.   k   s    c         C   s_   t  |  j ƒ t  |  j ƒ k s$ t ‚ t j g  t |  j |  j ƒ D] \ } } | pU | ^ q@ ƒ S(   N(   R1   R*   R/   R   R   R)   t   zip(   R7   R*   R/   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyR0   t   s    $c         C   s1   t  |  j |  j |  j |  j |  j |  j |  j ƒ S(   N(   RD   R   R%   R&   R'   R(   R*   R/   (   R7   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyR   |   s    c         C   s@   d g } | j  g  |  j ƒ  D] } d | ^ q ƒ d j | ƒ S(   Ns2   Index Fplus Fminus SIGFplus SIGFminus Pplus Pminuss(   %12s %10.2f %10.2f %10.2f %10.2f %4s %4ss   
(   R"   R   t   join(   R7   t   linest   t(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyt   __str__‰   s    	$(	   t   __name__t
   __module__t   __doc__R>   R$   R.   R0   R   RH   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyR	      s   	J					c         C   s   d  S(   N(    (   t   input(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyt   default_setter’   s    t   value_setterc           B   s   e  Z d  „  Z d „  Z RS(   c         C   s   | |  _  | |  _ d  S(   N(   t   settert   setting(   R7   RO   RP   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyR>   ™   s    	c         C   s   |  j  | |  j ƒ d  S(   N(   RO   RP   (   R7   RL   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyt   __call__Ÿ   s    (   RI   RJ   R>   RQ   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyRN   —   s   	c         C   s3   | d  k r t St d t t j |  ƒ d | ƒ Sd  S(   NRO   RP   (   R   RM   RN   t   getattrt   phasert   InputEP_SAD(   t   methodt   value(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyt   phaser_setter¤   s
    t    phaser_llg_and_correlation_scorec           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(   sG   
    A score that contains the LLG and the correlation coefficient
    c         C   s   | |  _  | |  _ d  S(   N(   t   _cct   _llg(   R7   t   cct   llg(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyR>   µ   s    	c         C   s   |  j  S(   N(   RY   (   R7   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyt   correlation»   s    c         C   s   |  j  S(   N(   RZ   (   R7   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyR\   À   s    c         C   s
   |  j  ƒ  S(   N(   R\   (   R7   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyt   scoreÅ   s    c         C   s&   |  j  d |  j ƒ  | d |  j ƒ  ƒ S(   NR\   R[   (   t	   __class__R\   R]   (   R7   t   other(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyt   __mul__Ê   s    c         C   s   |  j  d | ƒ S(   NR`   (   Ra   (   R7   R`   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyt   __rmul__Ï   s    c         C   s&   |  j  d |  j ƒ  | d |  j ƒ  ƒ S(   NR\   R[   (   R_   R\   R]   (   R7   R`   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyt   __div__Ô   s    c         C   s&   |  j  d |  j ƒ  | d |  j ƒ  ƒ S(   NR\   R[   (   R_   R\   R]   (   R7   R`   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyt   __truediv__Ù   s    c         C   s6   |  j  d |  j ƒ  | j ƒ  d |  j ƒ  | j ƒ  ƒ S(   NR\   R[   (   R_   R\   R]   (   R7   R`   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyt   __add__Þ   s    	c         C   s6   |  j  d |  j ƒ  | j ƒ  d |  j ƒ  | j ƒ  ƒ S(   NR\   R[   (   R_   R\   R]   (   R7   R`   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyt   __sub__æ   s    	c         C   s   t  |  j ƒ  | j ƒ  ƒ S(   N(   t   cmpR^   (   R7   R`   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyt   __cmp__î   s    c         C   s   d |  j  ƒ  |  j ƒ  f S(   Ns   ( %.3f (llg) %.3f (cc) )(   R\   R]   (   R7   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyRH   ó   s    (   RI   RJ   RK   R>   R]   R\   R^   Ra   Rb   Rc   Rd   Re   Rf   Rh   RH   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyRX   °   s   											t   phaser_llg_scorec           B   s;   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s'   
    A score that contains the LLG
    c         C   s   | |  _  d  S(   N(   RZ   (   R7   R\   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyR>   ý   s    c         C   s   |  j  S(   N(   RZ   (   R7   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyR\     s    c         C   s
   |  j  ƒ  S(   N(   R\   (   R7   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyR^     s    c         C   s   t  |  j ƒ  | j ƒ  ƒ S(   N(   Rg   R^   (   R7   R`   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyRh     s    c         C   s   d |  j  ƒ  S(   Ns
   %.3f (llg)(   R\   (   R7   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyRH     s    (   RI   RJ   RK   R>   R\   R^   Rh   RH   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyRi   ø   s   				t   phaser_hyss_componentc           B   s�   e  Z d  Z e j j e j j f Z e j j f Z	 e e	 Z
 e j d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(	   s7   
    Common functionality for phaser-based objects
    c         C   s|   | j  s& t | j  j ƒ  |  j ƒ r2 t d ‚ n  | j sG t d ‚ n  | j s\ t d ‚ n  | |  _ | |  _ |  j	 ƒ  d  S(   Ns$   Missing data: F+ and F- observationss   Missing data: scattering types   Missing data: wavelength(
   t
   f_originalt
   isinstancet   observation_typet   TYPESt
   ValueErrort   scattering_typet
   wavelengtht   _hyss_searcht   outt   preprocess_and_store_data(   R7   t   hyss_searchRs   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyR>   $  s    
				c         C   s   d S(   Nt   PHASER_DATA(    (   R7   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyt   phaser_data_key6  s    c         C   s   d S(   Nt
   BASE_SCORE(    (   R7   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyt   base_score_key;  s    c         C   sC  |  j  j } |  j ƒ  | k rì |  j d IJ|  j  j s= t ‚ |  j  j j ƒ  sU t ‚ t |  j  j j ƒ  |  j	 ƒ rˆ |  j  j j
 ƒ  } n |  j  j } t | j ƒ  |  j ƒ s² t ‚ | j ƒ  j |  j  j ƒ j ƒ  } t | ƒ | |  j ƒ  <n  |  j ƒ  | k r?|  j d IJ|  j ƒ  | |  j ƒ  <|  j d | |  j ƒ  IJn  d  S(   Ns0   Phaser scoring: Converting data to phaser formats:   Phaser scoring: Calculating base score for LLG calculations"   Phaser scoring: Base score is %.0f(   Rr   t   extraRw   Rs   Rk   R   R   Rl   Rm   t   INTENSITY_TYPESt	   f_sq_as_ft   AMPLITUDE_TYPESt   unique_under_symmetryt   change_basist   cb_op_niggliR   R	   Ry   t   calculate_base_score(   R7   R   R   t   niggli(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyRt   @  s     c      !   C   s%  |  j  ƒ  } | j d |  j j t d d t d t t j d d d d d d g d d g ƒ t t t t d ƒ | j t ƒ | j	 t ƒ | j
 d ƒ | j d ƒ | j d	 t d
 t d t d t d t d t d t d t d t d t d t d t d t d d d d d d ƒ |  j d | ƒ } | j ƒ  S(   Nt   xtali    i   i   i   t   S1t   DEFAULTt   CUSTOMt   ref_kt   ref_bt	   ref_sigmat   ref_xyzt   ref_occt   ref_bfact   ref_fdpt   ref_sat   ref_sbt   ref_spt   ref_sdt   ref_pkt   ref_pbt   ncyci2   t   targett   NOT_ANOM_ONLYt	   minimizert   BFGSRL   (   i    i    i    (   t   get_phaser_base_inputt   addATOM_FULLRr   Rp   R,   R-   R   t   rect   setOUTL_REJEt   setLLGC_COMPt   setMACA_PROTt   setMACS_PROTt   addMACSt
   run_phasert   getLogLikelihood(   R7   t   inpt   result(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyR�   ]  sN    	'	c         C   s>   t  j | ƒ } | j ƒ  r: |  j | j ƒ  IJt d ‚ n  | S(   Ns+   Calculation failed, see error message above(   RS   t	   runEP_SADt   FailedRs   t   logfileR   (   R7   RL   R¤   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyR¡   Œ  s
    c      	   C   s&  |  j  ƒ  |  j j k s t ‚ |  j j |  j  ƒ  } t j ƒ  } | j | j ƒ | j | j	 ƒ | j
 | j ƒ | j d d | j | j | j | j | j | j ƒ | j ƒ  | j |  j j ƒ | j t ƒ | j t ƒ | j t ƒ | j t ƒ | j d ƒ | j |  j j ƒ | j d ƒ | S(   NRƒ   t   wavet   OFF(    Rw   Rr   Rz   R   RS   RT   t   setCELL6R3   t   setSPAC_HALLR6   t   setCRYS_MILLERR   t   addCRYS_ANOM_DATAR%   R'   R*   R&   R(   R/   t   setCOMP_AVERt   setWAVERq   t   setATOM_CHAN_BFAC_WILSR,   t   setHKLOR-   t   setXYZOt   setMUTEt   setHANDt   addLLGC_SCATRp   Rž   (   R7   R   RL   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyR™   —  s2    

c         C   s2   |  j  ƒ  |  j j k s t ‚ |  j j |  j  ƒ  S(   N(   Ry   Rr   Rz   R   (   R7   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyt   get_phaser_base_llg¹  s    (   RI   RJ   RK   R   t   observation_typest	   amplitudet   reconstructed_amplitudeR}   t	   intensityR{   Rn   t   syst   stdoutR>   Rw   Ry   Rt   R�   R¡   R™   R¶   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyRj     s   	
				/		"t   phaser_composite_rescoringc           B   sS   e  Z d  Z d	 d d e j d „ Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z RS(
   s@   
    Phaser adaptor for use in solution rescoring with Hyss
    i   g      @c         C   sŠ   t  t |  ƒ j d | d | ƒ |  j j |  _ |  j j |  _ t d d d | ƒ t d d d | ƒ g |  _	 | |  _
 | |  _ |  j ƒ  d  S(   NRu   Rs   RU   R�   RV   t   setLLGC_SIGM(   t   superR½   R>   Rr   t   search_paramst   _spt$   max_relative_spread_top_correlationst   _max_spreadRW   t   _extra_paramst   _min_clustering_countt   _stddev_multiplierRt   (   R7   Ru   t   completet
   llgc_sigmat   min_clustering_countt   stddev_multiplierRs   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyR>   Ä  s    			c         C   s  | d j  ƒ  } t |  j j t | d d „  ƒj  ƒ  ƒ } |  j j | k sb |  j j | | k rs |  j d IJt St	 | ƒ |  j
 k  rŒ t S|  j d | ƒ \ } } t j t j g  | D] } | j ƒ  ^ q· ƒ ƒ } t j t j g  | D] } | j ƒ  ^ qè ƒ ƒ }	 | j ƒ  }
 |	 j ƒ  } t	 | ƒ } t	 | ƒ } | d k rcd | k  sTt ‚ |	 j ƒ  } nn | d k r�d | k  s�t ‚ | j ƒ  } nA | d | j ƒ  | d |	 j ƒ  } t j | | | d ƒ } |  j | | |
 k  rù|  j d IJt St Sd  S(	   Niÿÿÿÿt   keyc         S   s
   |  j  ƒ  S(   N(   R^   (   t   s(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyt   <lambda>å  s    sA   Phaser scoring: identified solutions from correlation coefficientt   scoresi   i   sB   Phaser scoring: identified solutions from bimodal LLG distribution(   R]   t   maxRÁ   t   min_low_correlationt   mint$   compare_sites_if_correlation_is_overt   high_low_correlation_factorRs   R,   R1   RÅ   R-   t   llg_cluster_analysisR   t   mean_and_variancet   doubleR\   t   meanR   t$   unweighted_sample_standard_deviationt   unweighted_sample_variancet   matht   sqrtRÆ   (   R7   t
   top_scorest   valid_scorest   min_topt	   min_validt   lowert   uppert   et   lstatst   ustatst
   lower_meant
   upper_meant   lower_countt   upper_countt   pooledt   nom(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyt	   terminateà  s<    	11c   
      C   sì   t  j g  | D] } | f ^ q d d „  ƒ} | j d ƒ \ } } g  | D] } | d ^ qJ } g  | D] } | d ^ qg } d „  }	 t | d |	 ƒt | d |	 ƒk r´ | | f St | d |	 ƒt | d |	 ƒk sÞ t ‚ | | f Sd  S(   Nt   distancec         S   s"   t  |  d j ƒ  | d j ƒ  ƒ S(   Ni    (   t   absR\   (   t   xt   y(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyRÍ     s    i   i    c         S   s
   |  j  ƒ  S(   N(   R\   (   RÌ   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyRÍ     s    RË   (   R   t   KMeansClusteringt   getclustersRÏ   RÑ   R   (
   R7   RÎ   RÌ   t   kclt   cl_lowert   cl_upperRâ   Rà   Rá   RË   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyRÔ     s    	$
*c         C   s  |  j  ƒ  } |  j j } xE | j ƒ  D]7 } | j \ } } } | j d | | | | | j ƒ q% W|  j d | ƒ } | j ƒ  |  j j	 j }	 | j
 t j	 g  | j ƒ  D] }
 |
 j d |	 ƒ ^ q¤ ƒ ƒ |  j j d |  j j j d | ƒ } t d | j ƒ  |  j ƒ  d | ƒ S(   NRƒ   RL   Rp   t   f_obst	   structureR\   R[   (   t   get_phaser_inputRr   Rp   t
   scattererst   sitet   addATOMt	   occupancyR¡   t   erase_scattererst   xray_scatterert   add_scatterersR   t   getAtomst   customized_copyt   correlation_calculationt   structure_factorst   q_allRX   R¢   R¶   (   R7   Rö   R£   t   real_scat_typeRÌ   Rî   Rï   t   zR¤   t   hyss_scat_typet   scatR]   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyt   minimize$  s$    #
,	c         C   s  | s t  ‚ g  | D] } | j ƒ  ^ q } t | ƒ } | t |  j | ƒ } |  j t | ƒ k rû t j t j	 | ƒ ƒ } | j
 ƒ  } t j d | d d „  ƒ } | j d | ƒ }	 d t |	 ƒ k  rû t | t g  |	 D] }
 t |
 ƒ ^ q× ƒ ƒ } qû n  t d | d d ƒ S(	   NR   t   distance_functionc         S   s   t  t |  | ƒ ƒ S(   N(   t   floatRí   (   Rî   Rï   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyRÍ   N  s    g       @i   R\   R[   i    (   R   R\   RÏ   Rí   RÃ   RÅ   R1   R   RÕ   RÖ   RØ   R   t   HierarchicalClusteringt   getlevelRÑ   RX   (   R7   RÎ   RÌ   t   llgst   bestt	   thresholdt   statst   stddevt   hclt   clustt   c(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyt   top_group_thresholdB  s    	4c         C   s1   |  j  ƒ  } x |  j D] } | d | ƒ q W| S(   NRL   (   R™   RÄ   (   R7   RL   t   param(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyR÷   X  s    N(   RI   RJ   RK   R   R»   R¼   R>   Rë   RÔ   R  R  R÷   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyR½   ¿  s   	0			t   phaser_extrapolationc           B   s    e  Z d  Z d „  Z d „  Z RS(   s/   
    Extrapolation using phaser completion
    c         C   sõ   |  j  ƒ  } |  j j } xE | j ƒ  D]7 } | j \ } } } | j d | | | | | j ƒ q% W|  j d | ƒ }	 |  j j j }
 t	 j
 d t j g  |	 j ƒ  |  D] } | j d |
 ƒ ^ q¡ ƒ d |  j j ƒ } | t d |	 j ƒ  |  j ƒ  ƒ f S(   NRƒ   RL   Rø   Rp   t   crystal_symmetryR\   (   R÷   Rr   Rp   Rø   Rù   Rú   Rû   R¡   Rý   R   Rö   R   Rÿ   R   t   f_obs_niggliRi   R¢   R¶   (   R7   t   fragmentt   n_sitesR£   R  RÌ   Rî   Rï   R  R¤   R  R  t   extrapolation_scan_structure(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyt%   get_extrapolation_structure_and_scoreg  s    #	/c         C   s7   |  j  ƒ  } | j t ƒ | j d ƒ | j d ƒ | S(   Ni   g      @(   R™   R�   R,   t   setLLGC_NCYCR¾   (   R7   RL   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyR÷   ‚  s
    (   RI   RJ   RK   R  R÷   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyR  b  s   	t   phaser_map_based_extrapolationc           B   s    e  Z d  Z d „  Z d „  Z RS(   s/   
    Extrapolation using phaser completion
    c      
   C   s�  |  j  ƒ  } |  j j } xE | j ƒ  D]7 } | j \ } } } | j d | | | | | j ƒ q% W|  j d | ƒ }	 |  j j j	 d |	 j
 ƒ  d t d t j |	 j | j ƒ  ƒ |	 j | j ƒ  ƒ t ƒ ƒ }
 |
 j d t j ƒ } | j d |  j j ƒ } | j ƒ  } | d  k rd } n  x- | j ƒ  D] } | j d	 | j d
 | ƒ q$Wt j d | d |  j j d | ƒ } | t d |	 j ƒ  |  j ƒ  ƒ f S(   NRƒ   RL   R   R   R   t   symmetry_flagsR4   i   Rù   t   heightt   cluster_analysisRý   R  R\   (    R÷   Rr   Rp   Rø   Rù   Rú   Rû   R¡   R  R   t	   getMillerR-   R   t   polart   getLLG_FRá   t
   getLLG_PHIR,   t   fft_mapR   t   use_space_group_symmetryt   peak_searcht   peak_search_parameterst   max_grid_heightR   t   append_fixed_siteR    t   buildRý   Ri   R¢   R¶   (   R7   R  R  R£   R  RÌ   Rî   Rï   R  R¤   R8   R'  R"  R!  t	   scattererR  (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyR  �  s>    #							c         C   s*   |  j  ƒ  } | j t ƒ | j t ƒ | S(   N(   R™   R�   R-   t   setLLGMR,   (   R7   RL   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyR÷   È  s    (   RI   RJ   RK   R  R÷   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyR  ‹  s   	8(   RS   t   phenix.substructure.hyssR    t   cctbxR   R   t   cctbx.array_familyR   R   t   scitbxR   R   t   libtbxR   t   libtbx.utilsR   RÚ   R»   t   objectR	   RM   RN   RW   RX   Ri   Rj   R½   R  R  (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/hyss_scoring.pyt   <module>   s*   �		H©£)