ó
	šxTc           @   s  d  d l  m Z d  d l 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  d l m Z e d d	 ƒ Z e d d
 ƒ Z e d d ƒ Z e d d ƒ Z e d d ƒ Z e d d ƒ Z e d d ƒ Z e d d ƒ Z d e	 f d „  ƒ  YZ d S(   iÿÿÿÿ(   t   divisionN(   t   miller(   t   flext   data_adaptorc           B   sM   e  Z e e d  „ Z d „  Z d d „ Z d d d d d d „ Z d „  Z	 RS(   c   
      C   s>  | |  _  | j ƒ  s t ‚ | rÒ | j ƒ  s3 t ‚ | j ƒ  j ƒ  j | j ƒ  ƒ sZ t ‚ | j ƒ  j ƒ  j	 t
 ƒ d k s� t ‚ | j ƒ  j d ƒ sœ t ‚ | j ƒ  s® t ‚ | j ƒ  j | j ƒ  ƒ sÒ t ‚ n  t j | j ƒ  j ƒ  | j ƒ  ƒ } | j d ƒ |  _ | j d ƒ |  _ | j d ƒ |  _ | j d ƒ |  _ | r¥| j ƒ  j |  j ƒ | j ƒ  j |  j ƒ k j	 t
 ƒ } | d k r¥t d t | ƒ ƒ ‚ q¥n  t j ƒ  |  _ |  j j |  j j ƒ  |  j j ƒ  |  j j ƒ  ƒ |  j j | j ƒ  j |  j ƒ ƒ |  j j | j ƒ  j |  j ƒ ƒ |  j j | j ƒ  j |  j ƒ ƒ |  j d | j ƒ  ƒ \ |  _  |  _! | j" ƒ  d  k rÄt j$ |  j  j ƒ  d ƒ t j$ |  j! j ƒ  d ƒ |  _% |  _& n$ |  j d | j" ƒ  ƒ \ |  _% |  _& |  j d | j ƒ  ƒ \ |  _' |  _( |  j' |  j( B|  _) |  j j ƒ  } |  j j ƒ  } | |  j j ƒ  }	 t j* ƒ  |  _+ |  j+ j | ƒ |  j+ j, |	 t
 ƒ |  j+ j, | t- ƒ t j* ƒ  |  _. |  j. j | ƒ |  j. j, | t
 ƒ |  j. j, |	 t- ƒ |  j. j, | t
 ƒ | j ƒ  j | j ƒ  ƒ |  _/ | j ƒ  j | j ƒ  ƒ |  _0 t1 j2 ƒ  |  _3 d  S(   Ni    t   +t   -s/   Conflicting R-free flags for %d Bijvoet pair%s.t   datai   (4   t   verboset   anomalous_flagt   AssertionErrort   is_real_arrayt
   map_to_asut   indicest   all_eqt   sys_absent_flagsR   t   countt   Truet   all_gtt   is_bool_arrayR   t   match_bijvoet_matest   space_group_infot   typet   pairs_hemisphere_selectiont   sel_ppt   sel_pmt   singlest   sel_spt   sel_smt   selectt   RuntimeErrort   plural_sR   t   miller_indext   reservet   sizet   extendt   split_plus_minust   f_obs_pt   f_obs_mt   sigmast   Nonet   doublet   sigmas_pt   sigmas_mt   r_free_flags_pt   r_free_flags_mt   r_free_flags_pmt   boolt	   present_pt   resizet   Falset	   present_mt   miller_indices_workt   miller_indices_testt   phasert   Outputt   output(
   t   selft   f_obst   r_free_flagsR   t   safety_checkst   matchest   n_conflictingt	   n_indicest   n_pairst   i_singles_plus_minus_boundary(    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/sad_target.pyt   __init__
   sh    	''$$	*""#$(		c         C   s†   | j  |  j ƒ } | j  |  j ƒ } | j | j  |  j ƒ ƒ | j | j ƒ  ƒ | j | j  |  j ƒ ƒ | j | j ƒ  ƒ | | f S(   N(   R   R   R   R"   R   R0   R!   R   (   R8   R   t   pt   m(    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/sad_target.pyR#   B   s    c         C   s€   | j  ƒ  | j ƒ  |  j |  j |  j |  j |  j |  j |  j |  j	 |  j
 g } | d  k	 rv | j | j d | ƒ ƒ n  t | ƒ S(   Nt   crystal_symmetry(   t   space_groupt	   unit_cellR   R-   R$   R%   R)   R*   R/   R2   R7   R'   t   appendt   as_pdb_stringt   tuple(   R8   t   xray_structuret   pdb_hierarchyt   inputs(    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/sad_target.pyt   refine_sad_input_tupleL   s    		c         C   s1   t  d |  d | d | d | d | d | d | ƒ S(   NR   RJ   RK   t   previous_overall_scaleKt   previous_overall_scaleUt   previous_variancest   out(   t   target(   R8   RJ   RN   RO   RP   RK   t   log(    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/sad_target.pyRR   ^   s    c      	   C   sp  t  j ƒ  } | j t | j ƒ  ƒ ƒ | j | j ƒ  j ƒ  ƒ | j |  j	 ƒ | j
 d d |  j |  j |  j |  j |  j |  j ƒ | j | ƒ | j d ƒ | j d ƒ d } } xx | j ƒ  d j ƒ  D]` } | j ƒ  d } | j ƒ  r| t | j ƒ  ƒ 7} qÊ | j ƒ  rÊ | t | j ƒ  ƒ 7} qÊ qÊ W| d k rM| j | d ƒ n  | d k rl| j | d ƒ n  | S(   s   
    t   ept   sadt   IDg      ð?i    i   (   R5   t   InputEP_AUTOt   setSPAC_NAMEt   strR   t   setCELL6RF   t
   parameterst   setCRYS_MILLERR   t   addCRYS_ANOM_DATAR$   R)   R/   R%   R*   R2   t   setPART_IOTBXt   setPART_VARIt   setPART_DEVIt   modelst   chainst
   conformerst
   is_proteint   lent   residuest   is_nat   addCOMP_PROT_NRES_NUMt   addCOMP_NUCL_NRES_NUM(   R8   RJ   RK   t   inputt   n_rest   n_basest   chaint	   main_conf(    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/sad_target.pyt   set_ep_auto_dataq   s6    	

N(
   t   __name__t
   __module__R1   R   RA   R#   R'   RM   RR   Ro   (    (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/sad_target.pyR      s   8	
(   t   time_logt   labelt   ml_sad_initt   ml_sad_set_f_calct   ml_sad_refine_variance_termst   ml_sad_functionalt   ml_sad_gradients_raws   ml_sad_gradients (raw excl.)t   ml_sad_curvatures_raws   ml_sad_curvatures (raw excl.)RR   c           B   sq   e  Z d
 d
 d
 d
 d
 d  „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d	 „  Z RS(   c         C   sê   | d  k r t j } n  | |  _ t j ƒ  | |  _ t j | j	 d | d | ƒ Œ  |  _
 | d  k	 rƒ | d k rƒ |  j
 j | ƒ n  | d  k	 r¢ |  j
 j | ƒ n  | d  k rº t |  _ n |  j
 j | ƒ t |  _ |  j t j ƒ  IJd  S(   NRJ   RK   i    (   R'   t   syst   stdoutRQ   t
   timer_initt   startR   R5   t	   RefineSADRM   t   refine_sad_instancet
   set_scaleKt
   set_scaleUR1   t   have_variancest   set_variance_arrayR   RS   (   R8   R   RJ   RK   RN   RO   RP   RQ   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/sad_target.pyRA   £   s"    	
		c         C   s   |  j  j ƒ  |  j  j ƒ  d  S(   N(   R   t   calcIntegrationPointst   calcOutliers(   R8   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/sad_target.pyt   reject_outliers¾   s    c         C   s�   t  j ƒ  | |  _ |  j j | j ƒ  ƒ \ } } |  j j | t j	 | ƒ ƒ |  j
 sy |  j j ƒ  |  j ƒ  t |  _
 n  |  j t  j ƒ  IJd  S(   N(   t   timer_set_f_calcR}   t   f_calcR   R#   R   R   t   setFCR   t   conjR‚   t   initVariancesFromFCt   refine_variance_termsR   RQ   RS   (   R8   Rˆ   RB   RC   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/sad_target.pyt
   set_f_calcÂ   s    
		
c         C   sN  t  j ƒ  |  j d  k	 s t ‚ t j ƒ  } t j ƒ  } | j d t	 d t	 d t	 d t
 d t
 d t
 d t
 d t
 ƒ |  j j ƒ  | j |  j | |  j j ƒ | j d t	 d t	 d t
 d t
 d t
 d t
 d t
 d t
 ƒ |  j j ƒ  | j |  j | |  j j ƒ |  j j ƒ  } |  j d	 I|  j j ƒ  I|  j j ƒ  IJ|  j t  j ƒ  IJd  S(
   Nt   fix_sat   fix_sbt   fix_spt   fix_sdt   fix_kt   fix_bt   fix_pkt   fix_pbs   LOOK: phaser ScaleK, ScaleU:(   t   timer_refine_variance_termsR}   Rˆ   R'   R	   R5   t   ProtocolSADt	   Minimizert   setRefineSigmaAR   R1   R   t
   useTestSett   runR   R7   t   useWorkingSett   get_variance_arrayRQ   t   get_refined_scaleKt   get_refined_scaleURS   (   R8   t   protocolt	   minimizert   va(    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/sad_target.pyRŒ   Í   s2    
		c         C   sw   t  j ƒ  |  j d  k	 s t ‚ | r5 |  j j ƒ  n |  j j ƒ  | |  _ |  j j	 ƒ  } |  j
 t  j ƒ  I| IJ| S(   N(   t   timer_functionalR}   Rˆ   R'   R	   R   Rœ   Rš   t   use_working_sett   targetFnRQ   RS   (   R8   R¤   t   result(    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/sad_target.pyt
   functionalì   s    
	c         C   sE   t  j ƒ  |  j d  k	 s t ‚ |  j j ƒ  } |  j t  j ƒ  IJ| S(   N(	   t   timer_gradients_rawR}   Rˆ   R'   R	   R   t	   dL_by_dFCRQ   RS   (   R8   R¦   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/sad_target.pyt   gradients_rawø   s
    
c         C   sE   t  j ƒ  |  j d  k	 s t ‚ |  j j ƒ  } |  j t  j ƒ  IJ| S(   N(	   t   timer_curvatures_rawR}   Rˆ   R'   R	   R   t   d2L_by_dFC2RQ   RS   (   R8   R¦   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/sad_target.pyt   curvatures_rawÿ   s
    
c         C   s˜   t  j ƒ  } t  j ƒ  } |  j ƒ  |  j j d t | | ƒ } |  j j } | j ƒ  | j ƒ  k sg t ‚ t j	 d |  j
 d | d t ƒ j d | ƒ } | S(   Nt   AXRD   R   R   R   (   R   R(   RŒ   R   t   calcGradCoefsR1   R   R!   R	   t   setRˆ   t   array(   R8   t   fllgt   phllgt
   llg_coeffsR   t   llg_coeffs_array(    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/sad_target.pyt   llg_map_coeffs  s    
			c            s8  ˆ j  ƒ  } t j ƒ  ˆ j r. ˆ j j ‰ n ˆ j j ‰ t j ˆ | j ƒ ‰  ˆ  j	 d ƒ ˆ _
 ˆ  j	 d ƒ j ƒ  d k s‚ t ‚ ‡  ‡ ‡ f d †  } | d | j d t j ƒ } ˆ j t j ƒ  IJ| sÏ | Sˆ j ƒ  } t j ƒ  | j j | j ƒ s t ‚ | d | j d t j ƒ } ˆ j t j ƒ  IJ| | f S(   Ni    i   c            sb   | ˆ j  ƒ  ƒ } | j ˆ  j ƒ  j d ƒ |  j ˆ  j ƒ  j d ƒ ƒ ƒ ˆ j j d ˆ d | ƒ S(   Ni    i   R   R   (   R!   t   set_selectedt   pairst   columnR   Rˆ   t   customized_copy(   t   raw_datat	   data_typet   result_data(   R<   t   result_indicesR8   (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/sad_target.pyt   raw_as_miller  s    R»   R¼   (   Rª   t   timer_gradientsR}   R¤   R   R3   R4   R   t   match_indicesR   t   number_of_outliersR!   R	   R©   R   t   complex_doubleRQ   RS   R­   t   timer_curvaturesR   R¬   t   vec3_double(   R8   t   curvst	   grads_rawR¿   t   da_dbt	   curvs_rawt   daa_dbb_dab(    (   R<   R¾   R8   sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/sad_target.pyt   derivatives  s*    
	! 
c         C   s   |  j  d t ƒ S(   NRÆ   (   RË   R1   (   R8   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/sad_target.pyt	   gradients2  s    N(   Rp   Rq   R'   RA   R†   R�   RŒ   R§   Rª   R­   R¶   RË   RÌ   (    (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/sad_target.pyRR   ¡   s   								(   t
   __future__R    R5   t   cctbxR   t   cctbx.array_familyR   t   osRz   t   objectR   t   libtbx.utilsRr   R|   R‡   R–   R£   R¨   RÀ   R«   RÄ   RR   (    (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_adaptors/sad_target.pyt   <module>   s    �