ó
ò™xTc           @   sO  d  d l  m Z d  d l Z d  d l Z d  d l m Z d  d l m Z 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 m Z d  d l m Z d  d l m Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d „  Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ  d S(   iÿÿÿÿ(   t   divisionN(   t   flex(   t   sgtbxt   xray(   t   adopt_init_args(   t   xfrange(   t&   format_float_with_standard_uncertainty(   t   Sorry(   t   distributions(   t   normal_eqns_solving(   t   constraints(   t   least_squares(   t   observationst   hooft_analysisc           B   s;   e  Z d  Z d Z d d d d „ Z d „  Z d d „ Z RS(   s¶  
  Determination of absolute structure using Bayesian statistics
  on Bijvoet differences.

  See:
    Hooft, R.W.W., Straver, L.H., Spek, A.L. (2008). J. Appl. Cryst., 41, 96-103.

    Hooft, R.W.W., Straver, L.H., Spek, A.L. (2009). Acta Crystallogr. A65, 319-321.

    Hooft, R.W.W., Straver, L.H., Spek, A.L. (2010). J. Appl. Cryst., 43, 665-668.

  and for more information:
    http://www.absolutestructure.com/bibliography.html

  t   Gaussianc   "      C   só  | |  _  | j ƒ  s t ‚ | j ƒ  s- t ‚ | j ƒ  j ƒ  sF t ‚ | d  k rd | j | ƒ } n  | j ƒ  } | j	 ƒ  |  _
 | j	 ƒ  |  _ |  j j ƒ  |  _ | d  k	 rt j |  j j ƒ  ƒ | | t j t j |  j
 j ƒ  ƒ ƒ k } |  j j | ƒ |  _ |  j
 j | ƒ |  _
 n  |  j
 j d |  j
 j ƒ  | ƒ |  _
 |  j j ƒ  s_t d ƒ ‚ n  d } d }	 d }
 x· t r*|	 | } | d k  r”Pn  | |	 d } | | d } | | d } |  j | ƒ } |  j | ƒ } | | k rñ| }	 n! | | k r| } | }	 n | } t |
 | | g ƒ }
 qtWxK t rx| | d } | d	 k sg|  j | ƒ |
 d k  rkPn  | d 9} q.W|	 | } xK t rÐ| | d }	 | d	 k s¿|  j |	 ƒ |
 d k  rÃPn  | d 9} q†Wd
 } |	 | | } t j ƒ  } x0 t | |	 | ƒ D] } | j |  j | ƒ ƒ qWt j | ƒ }
 d } d } t j ƒ  } x¤ t t | |	 | ƒ ƒ D]Š \ } } t j | | |
 ƒ } | j | ƒ | d k r¦qdn  | d | | | | d | | d 7} | d | d | d | 7} qdW| | |  _ d } d  } xu t t | |	 | ƒ ƒ D][ \ } } | } t j | |  j d ƒ | | | } | d k rmq$n  | d | | 7} q$Wd |  j d |  _ t j  | | ƒ |  _! |  j! d |  _" |  j d ƒ } |  j d ƒ } |  j d ƒ } t | | | g ƒ }
 | |
 8} | |
 8} | |
 8} t j | ƒ t j | ƒ }  t j | ƒ t j | ƒ t j | ƒ }! |  d k r�d  |  _# |  _$ n, t j | ƒ |  |  _# t j | ƒ |  |  _$ t j | ƒ |! |  _% t j | ƒ |! |  _& t j | ƒ |! |  _' d  S(   Nt   datas*   Absolute structure could not be determinediöÿÿÿi
   g}Ã”%­I²Ôg-Cëâ6?i   i   id   iô  i    g      à?iþÿÿÿiÿÿÿÿi   ((   t   probability_plot_slopet   is_xray_intensity_arrayt   AssertionErrort   is_complex_arrayt   space_groupt
   is_centrict   Nonet   scale_factort   as_intensity_arrayt   anomalous_differencest	   delta_fc2t	   delta_fo2t   sizet   n_bijvoet_pairsR   t   absR   t   maxt   selectt   customized_copyR   t   Truet   log_p_obs_given_gammat   doubleR   t   appendt	   enumeratet   matht   expt   Gt   powt   hooft_yt   sqrtt   sigma_Gt   sigma_yt   p2_truet   p2_falset   p3_truet   p3_falset   p3_racemic_twin("   t   selft   fo2t   fcR   t   outlier_cutoff_factorR   t   fc2t
   cutoff_selt	   min_gammat	   max_gammat   max_log_p_obst   widtht   middlet   at   bt   value_at   value_bt   n_stepst   d_gammat   log_p_obs_given_gammast   gammat   G_numeratort   G_denominatort
   p_u_gammast   it	   p_u_gammat   sigma_squared_G_numeratort   nextt   previoust    log_p_obs_given_gamma_is_minus_1t   log_p_obs_given_gamma_is_0t   log_p_obs_given_gamma_is_1t   p2_denominatort   p3_denominator(    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/smtbx/absolute_structure/__init__.pyt   __init__+   sÈ    		
			
	% 
 "%% 


) c         C   s]   | |  j  j ƒ  |  j j ƒ  |  j j ƒ  } |  j d  k	 rL | |  j } n  d t j | ƒ S(   Ng      à¿(   R   R   R   t   sigmasR   R   R   t   sum_sq(   R4   RF   t   x_gamma(    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/smtbx/absolute_structure/__init__.pyR#   §   s
    c         C   s;  d „  } | d  k r! t j } n  | d |  j IJ| d |  j IJ| d |  j j ƒ  IJ| d |  j |  j j d t ƒ j	 ƒ  j ƒ  IJ| d t
 |  j |  j ƒ IJ| d | |  j ƒ IJ| d	 | |  j ƒ IJ| d
 | |  j ƒ IJ| d | |  j ƒ IJ| d | |  j ƒ IJ| d t
 |  j |  j ƒ IJd  S(   Nc         S   s0   |  d  k r d S|  d k r$ d |  Sd |  Sd  S(   Ns   n/ag{®Gáz„?s   %.3fs   %.3e(   R   (   t   p_value(    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/smtbx/absolute_structure/__init__.pyt   format_p°   s
      s+   Bijvoet pair analysis using %s distributions   Bijvoet pairs (all): %is   Bijvoet pairs (used): %is   Bijvoet pairs coverage: %.2ft   anomalous_flags   G: %ss   P2(true): %ss   P2(false): %ss   P3(true): %ss   P3(false): %ss   P3(racemic twin): %ss   Hooft y: %s(   R   t   syst   stdoutt   distributionR   R   R   R!   R"   t   complete_sett   format_float_with_suR)   R-   R/   R0   R1   R2   R3   R+   R.   (   R4   t   outRY   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/smtbx/absolute_structure/__init__.pyt   show®   s"    	 
N(   t   __name__t
   __module__t   __doc__R]   R   RT   R#   Ra   (    (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/smtbx/absolute_structure/__init__.pyR      s   y	t$   bijvoet_differences_probability_plotc           B   s,   e  Z d  Z e d d d „ Z d d „ Z RS(   sT   
  Hooft, R.W.W., Straver, L.H., Spek, A.L. (2010). J. Appl. Cryst., 43, 665-668.
  c   	      C   s#  | j  j ƒ  j ƒ  \ |  _  } | j j ƒ  j ƒ  \ |  _ } |  j  j ƒ  j | j ƒ  ƒ |  j  j ƒ  j | j ƒ  d ƒ |  j  j ƒ  j | j ƒ  ƒ |  j j ƒ  j | j ƒ  ƒ |  j j ƒ  j | j ƒ  d ƒ |  j  j ƒ  |  _ | j |  j j ƒ  |  j  j ƒ  |  j  j ƒ  } | d  k	 r+| | } n  t
 j | ƒ } | j | ƒ } | r…| d  k rpt | d d ƒ } n  t j | ƒ |  _ n t j ƒ  |  _ |  j j | j ƒ  ƒ |  _ | |  _ t
 j |  j d d !|  j d d !ƒ |  _ t
 j |  j d d !|  j d d !ƒ |  _ |  j j ƒ  st ‚ d  S(   Niÿÿÿÿi   iÈ   i   iûÿÿÿ(   R   t   generate_bijvoet_matest   hemispheres_acentricsR   t   indicest   extendR   RU   R)   R   R   t   sort_permutationR    t+   maximise_students_t_correlation_coefficientR   t   students_t_distributionR]   t   normal_distributiont	   quantilesR   t   xt   yt   linear_regressiont   fitt   linear_correlationt   correlationt   is_well_definedR   (	   R4   R   t   use_students_t_distributiont   students_t_nuR   t	   minus_fo2t	   minus_fc2t   observed_deviationst	   selection(    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/smtbx/absolute_structure/__init__.pyRT   Ë   s2      	))c         C   sa   | d  k r t j } n  | d |  j j ƒ  IJ| d |  j j ƒ  IJ| d |  j j ƒ  IJd  S(   Ns   y_intercept: %.3fs   slope: %.3fs   correlation coefficient: %.4f(   R   R[   R\   Rr   t   y_interceptt   slopeRt   t   coefficient(   R4   R`   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/smtbx/absolute_structure/__init__.pyRa   ï   s
     N(   Rb   Rc   Rd   t   FalseR   RT   Ra   (    (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/smtbx/absolute_structure/__init__.pyRe   Æ   s
    c   
         sâ   ‡  f d †  } | | k s! t  ‚ | d k s3 t  ‚ x¨ t rÝ | | } | d k  rV Pn  | | d } | | d } | | d } | | ƒ j ƒ  } | | ƒ j ƒ  }	 | |	 k r¹ | } q6 | |	 k rÔ | } | } q6 | } q6 W| S(   Nc            sB   t  j |  ƒ } | j ˆ  j ƒ  ƒ } t j ˆ  d d !| d d !ƒ S(   Ni   iûÿÿÿ(   R   Rl   Rn   R   R   Rs   (   RJ   R]   t   expected_deviations(   Rz   (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/smtbx/absolute_structure/__init__.pyt   compute_corr_coeffø   s    i    g{®Gáz„?i   i   (   R   R"   R~   (
   Rz   t   min_nut   max_nuR�   R=   R>   R?   R@   RA   RB   (    (   Rz   sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/smtbx/absolute_structure/__init__.pyRk   ö   s&    	
 		
t   students_t_hooft_analysisc           B   s/   e  Z d  Z d Z d d d d „ Z d „  Z RS(   sT   
  Hooft, R.W.W., Straver, L.H., Spek, A.L. (2010). J. Appl. Cryst., 43, 665-668.
  s   Student's tc      
   C   s2   | |  _  t j |  | | d | d | d | ƒd  S(   NR   R7   R   (   t   degrees_of_freedomR   RT   (   R4   R5   R6   R…   R   R7   R   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/smtbx/absolute_structure/__init__.pyRT     s
    	c         C   s…   |  j  } | |  j j ƒ  |  j j ƒ  |  j j ƒ  } |  j d  k	 rU | |  j } n  d | d t j t j	 t j
 | ƒ | ƒ ƒ S(   Ni   i   (   R…   R   R   R   RU   R   R   R   t   sumt   logt   pow2(   R4   RF   t   dofRW   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/smtbx/absolute_structure/__init__.pyR#   "  s    	N(   Rb   Rc   Rd   R]   R   RT   R#   (    (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/smtbx/absolute_structure/__init__.pyR„     s   t   flack_analysisc           B   s#   e  Z d d d  „ Z d d „ Z RS(   c         C   s   | d  k r t j ƒ  } n  t |  t ƒ  ƒ | j j ƒ  s@ t ‚ | j ƒ  } | j	 ƒ  } xb | j
 ƒ  D]T } t j	 ƒ  } | j | j j ƒ  ƒ | j | j j ƒ  ƒ | j t ƒ | | _ qe W| j } | j }	 x | D] }
 t |
 _ qÖ Wx |	 D] } t | _ qð Wt j t j d ƒ d t ƒ } |	 | f 7}	 t j | | |	 ƒ } | |	 7} | d  k rnt j j | ƒ } n  t j | g  | d | d | ƒ} t  j! | | ƒ } t" j# | d d d d	 d
 d ƒ} | j$ |  _% t& j' | j( d | j) | j* ƒ ƒ d ƒ |  _+ d  S(   Niÿÿÿÿi    gš™™™™™É?t   twin_fractionst
   extinctiont   n_max_iterationsi
   t   gradient_thresholdgH¯¼šò×z>t   step_thresholdg-Cëâ6?t   jacobian_transpose(	   iÿÿÿÿi    i    i    iÿÿÿÿi    i    i    iÿÿÿÿ(,   R   R   t   dummy_extinction_correctionR   t   localst   fo_sqRZ   R   t   deep_copy_scattererst   scatterer_flagst
   scattererst   set_use_u_anisot   flagst   use_u_anisot   set_use_u_isot	   use_u_isot   set_use_fp_fdpR"   R‹   t   merohedral_componentsR   t   gradt   twin_componentR   t   rot_mxR   R!   t   smtbxt   utilst   connectivity_tableR
   t   reparametrisationR   t   crystallographic_lsR	   t   naive_iterationst   valuet   flack_xR'   R,   t   covariance_matrixt   jacobian_transpose_matchingt&   mapping_to_grad_fc_independent_scalarst   sigma_x(   R4   t   xray_structuret   obs_t   extiR£   R˜   t   sct   fR‹   t   twin_componentst   twt   tct   itt   obsR¤   t   normal_eqnst   cycles(    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/smtbx/absolute_structure/__init__.pyRT   ,  sL    		  
				c         C   s9   | d  k r t j } n  | d t |  j |  j ƒ IJd  S(   Ns   Flack x: %s(   R   R[   R\   R_   R¨   R¬   (   R4   R`   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/smtbx/absolute_structure/__init__.pyRa   W  s     N(   Rb   Rc   R   RT   Ra   (    (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/smtbx/absolute_structure/__init__.pyRŠ   *  s   +(!   t
   __future__R    R'   R[   t   cctbx.array_familyR   t   cctbxR   R   t   libtbxR   t   libtbx.utilsR   R   R_   R   t   scitbx.mathR   t   scitbx.lstbxR	   t   smtbx.utilsR¡   t   smtbx.refinementR
   R   t
   cctbx.xrayR   t   objectR   Re   Rk   R„   RŠ   (    (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/smtbx/absolute_structure/__init__.pyt   <module>   s&   ®0	