ó
J™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	 m
 Z
 m Z d  d l m Z d  d l m Z d  d	 l Z d  d	 l Z d
 d d d „ Z d „  Z d „  Z d „  Z d „  Z e d k rê e ƒ  n  d	 S(   iÿÿÿÿ(   t   division(   t   miller(   t   random_structure(   t   debug_utils(   t   flex(   t   approx_equalt   Exception_expected(   t   Sorry(   t   StringIONi   i   i    c      	   C   s
  t  j |  d d g | ƒ} | j d | d | ƒ j ƒ  } t | ƒ } t j d | d | j ƒ  d t j	 | j ƒ  ƒ ƒ } | j
 ƒ  s‹ t ‚ xÚ | | f D]Ì }	 xÃ d d	 g D]µ }
 |	 j d
 |
 ƒ } | j d t ƒ  ƒ | j ƒ  j |	 ƒ } t j | j ƒ  |	 j ƒ  ƒ j ƒ  d k st ‚ |	 j ƒ  d  k	 r« t j | j ƒ  |	 j ƒ  ƒ j ƒ  d k s`t ‚ q« q« Wq˜ Wt j ƒ  } x: t | j ƒ  j ƒ  ƒ D]  } | j t j d ƒ d ƒ q�W|  j ƒ  } t j ƒ  } t j ƒ  } t j ƒ  } x­ t | ƒ D]Ÿ \ } } | j ƒ  | } t j | | ƒ j ƒ  } xh t | ƒ D]Z } | j | t j t  | ƒ ƒ j! ƒ  ƒ | j | j ƒ  | ƒ | j | j ƒ  | ƒ q/WqîWt j d t j" d | d | d | j# ƒ  ƒ d | d | ƒ } | j
 ƒ  sàt ‚ t j$ d | j ƒ  j ƒ  ƒ } | j% d | ƒ } xÙ d d	 g D]Ë }
 | j d
 |
 ƒ } | j d t ƒ  ƒ | j ƒ  j | ƒ } | j
 ƒ  sot ‚ t j | j ƒ  | j ƒ  ƒ j ƒ  d k sŸt ‚ | j ƒ  t j	 | j& ƒ  ƒ } t j | j ƒ  | ƒ j ƒ  d k st ‚ qW| r�| j' ƒ  } | j( ƒ  j) | ƒ } | j ƒ  j* | j ƒ  ƒ s4t ‚ xY t j+ t j, g D]B } t j | | j ƒ  ƒ | | j ƒ  ƒ ƒ j ƒ  d k sGt ‚ qGWn  | j d
 d d t- ƒ } | j ƒ  j | ƒ } | j ƒ  t j	 | j& ƒ  ƒ } t j | j ƒ  | ƒ j ƒ  d k st ‚ d  S(   Nt   elementst   constt   d_mint   anomalous_flagt
   miller_sett   datat   sigmast   gaussiant   shelxt	   algorithmt   outi   g�íµ ÷Æ°>i   t   crystal_symmetryt   indicest   sizet   by_valuet   use_internal_variancegé!çýÿï?gé!çýÿï?gé!çýÿï?gé!çýÿï?gé!çýÿï?gé!çýÿï?(.   R   t   xray_structuret   structure_factorst   f_calct   absR   t   arrayR   R   t   sqrtt   is_unique_set_under_symmetryt   AssertionErrort   merge_equivalentst   show_summaryR   t	   adopt_sett   linear_correlationt   coefficientR   t   Nonet   size_tt   xrangeR   R   t   appendt   randomt	   randranget   groupt   miller_indext   doublet	   enumeratet   sym_equiv_indicest   lent   ht   setR   t   random_doublet   sortt	   as_doublet   average_bijvoet_matest   as_non_anomalous_arrayt
   common_sett   all_eqt   realt   imagt   False(   t   space_group_infoR   t   n_scatterersR   t   verboset	   structureR   t   ft   fst   aR   t   mt   jt   redundanciest   it   space_groupt	   r_indicest   r_datat   r_sigmast   nR2   t   h_eqt   rt   noiset   fssrt
   f_calc_avet
   f_calc_comt   part(    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_miller_merge_equivalents.pyt   exercise   s~    	3*5&			*.!.c    	   	   C   s7  t  j d d d d d d f ƒ }  t  j d ƒ } d d l m } | j d d d
 d ƒ } t j | |  ƒ } t j | d | ƒ} y | j	 ƒ  Wn+ t
 k
 rº } d t | ƒ k sÁ t ‚ n Xt ‚ | j	 d d ƒ } | j ƒ  } t | j ƒ  d ƒ sú t ‚ | j	 d d ƒ } | j ƒ  } t | j ƒ  d ƒ s3t ‚ d  S(   Ni   i   i   i    iÿÿÿÿ(   t   crystalt	   unit_celli
   iZ   t   space_group_symbolt   P1R   s+   merge_equivalents_exact: incompatible flagst   incompatible_flags_replacement(   i   i   i   (   i   i   i   (   i   i    i   (   i   i    i   (   i   i    i   (   i   i   i   (   i   i   i    i   i    i   (   i
   i
   i
   iZ   iZ   iZ   (   i   i   i    (   i   i   i   (   R   R-   t   intt   cctbxRV   t   symmetryR   R3   R   R!   R   t   strR    R   R   R   (	   RH   t   dRV   t   cst   mst   mat   et   mergingt   me(    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_miller_merge_equivalents.pyt'   exercise_incompatible_flags_replacementP   s"    !  c       
   C   s  d d l  m }  t j d |  j d d d d ƒ d	 d
 d t ƒ } | j ƒ  } t | ƒ d k sd t ‚ t	 j
 ƒ  } t	 j ƒ  } t	 j ƒ  } t	 j ƒ  } x· t | ƒ D]© \ } } t d d | d ƒ }	 | j |	 ƒ d | d  }
 xh t |	 ƒ D]Z } | j | ƒ |
 d d d | d } t d | d ƒ } | j | ƒ | j | ƒ qì Wq¡ W| j ƒ  d k sft ‚ t j d | d | d t ƒ j d | d | ƒ } t j d | d | d | ƒ } | j j ƒ  | j j ƒ  k oÝd k n sèt ‚ t j | ƒ } t | d d d ƒst ‚ d  S(!   Niÿÿÿÿ(   RV   R   RW   i
   iZ   RX   RY   R   gš™™™™™ù?R   iþ  i   i   i   i   i   i   g      à?i=  R   R   R   t   unmerged_indicest   unmerged_datat   unmerged_sigmasiÓ  gZd;ßO�ë?t   epsgü©ñÒMbP?(   i
   i
   i
   iZ   iZ   iZ   i   (   R\   RV   R   t	   build_setR]   R=   R   R1   R    R   R-   R.   R'   R/   t   minR)   t   ranget   maxR   R3   R   t   split_unmergedt   data_1t   data_2t   compute_cc_one_halfR   (   RV   t   base_setR   t   unmerged_hklRh   Ri   RG   RH   t   hklt   n_obst   intensity_mergedRF   t	   intensityt   sigmat   unmerged_arrayt   splitt   cc(    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_miller_merge_equivalents.pyt   exercise_split_unmergeda   sD    						4c         C   s(   x! t  t f D] } t | | ƒ q Wd  S(   N(   R=   t   TrueRU   (   t   flagsR>   R   (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_miller_merge_equivalents.pyt   run_call_back‡   s    c           C   s.   t  ƒ  t ƒ  t j t j d t ƒ d GHd  S(   Ni   t   OK(   Rf   R}   R   t   parse_options_loop_space_groupst   syst   argvR€   (    (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_miller_merge_equivalents.pyt   run‹   s    t   __main__(   t
   __future__R    R\   R   t   cctbx.developmentR   R   t   cctbx.array_familyR   t   libtbx.test_utilsR   R   t   libtbx.utilsR   t	   cStringIOR   R*   Rƒ   RU   Rf   R}   R€   R…   t   __name__(    (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_miller_merge_equivalents.pyt   <module>   s    C		&		