ó
¬™xTc           @   s¸   d  Z  d d l m Z d d l Td d l m Z d d l m Z d d l m	 Z	 d d l
 Z d d l j Z d d l Z d „  Z d	 „  Z d
 „  Z e d k r´ e ƒ  e ƒ  d GHn  d S(   s-   
Regression tests for mmtbx.scaling.absences
iÿÿÿÿ(   t   division(   t   *(   t   random_structure(   t   sgtbx(   t   flexNc          C   s  t  ƒ  }  |  j d d t ƒ t t f k s0 t ‚ |  j d d t ƒ t t f k sW t ‚ |  j d d t ƒ t t f k s~ t ‚ |  j d d t ƒ t t f k s¥ t ‚ t d t d	 d  d
 t j d ƒ j	 ƒ  j
 t ƒ ƒ }  g  } g  } xl |  j ƒ  D]^ } | j t | ƒ ƒ t | ƒ d k rñ x0 | j	 ƒ  D] } | j t | ƒ j ƒ  ƒ q)Wqñ qñ Wd | k set ‚ d | k swt ‚ d | k s‰t ‚ d | k s›t ‚ d | k s­t ‚ d | k s¿t ‚ d | k sÑt ‚ d | k sãt ‚ d | k sõt ‚ d | k st ‚ d | k st ‚ d  S(   Ns   2_1 (c)i    i   i   s   4_1 (a)s   3_1 (c)i   t   chiralt   crystal_systemt   intensity_symmetryt   P222s
   P 21 21 21s   2_1 (a)s   2_1 (b)s   P 2 2 2s   P 21 2 2s   P 2 21 2s   P 2 2 21s	   P 21 21 2s	   P 21 2 21s	   P 2 21 21(   i    i    i   (   i    i    i   (   i   i    i    (   i    i    i   (   t   absencest   checkt   Truet   Falset   AssertionErrort   sgi_iteratort   NoneR   t   space_group_infot   groupt(   build_derived_reflection_intensity_groupt   listt   appendt   strt   conditions_for_operatort   absence_type(   t   tmpt   sg_listt   abs_listt   sgt   s(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/tst_absences.pyt   exercise_abs_list   s6    	''''$c       M   C   sî  d d d d d d d d d	 d
 d d d d d d d d d d d d d d d d d d d d d d d  d! d" d# d$ d% d& d' d( d) d* d+ d, d- d d. d/ d0 d1 d2 d d3 d4 d5 d6 d7 d8 d9 d: d; d< d= d> d? d@ dA dB dC dD dE dF dG dH dI dJ gM }  t  j dK ƒ t j dK ƒ xàdE g D]Õ} t j dL | dM dN g dO dP dO ƒ } t | j dQ dR ƒ j ƒ  ƒ } | j	 ƒ  | j
 ƒ  } | j ƒ  j ƒ  } | j ƒ  j ƒ  j t ƒ } | dS k s¯t ‚ | j ƒ  j t ƒ } | j ƒ  } | j | ƒ }	 |	 j ƒ  dS k s÷t ‚ | j ƒ  j dT t j | j ƒ  dU ƒ ƒ }
 | j ƒ  j dV | j ƒ  ƒ } | j dW | ƒ } | j ƒ  } | j | ƒ }	 t j |	 j ƒ  dU ƒ } |	 j dX | ƒ } | j | ƒ } t j | j ƒ  dU ƒ } | j dT | ƒ } | j ƒ  } t dY | dZ |
 ƒ } | j  ƒ  } t! g  | D] } | d[ ^ qƒ } dJ d6 dE g } xµ | D]­ } | dS } | d[ } t" | d\ ƒ } t" | d] ƒ } | t# | ƒ k r5| dS k s™t | ƒ ‚ | dS k r»| G| GH| j$ ƒ  n  | | k sât# | ƒ | k sât ‚ q5q5WqWd^ S(_   s  
  Looping over common space groups in macromolecular structures, generate
  synthetic data converted to the derived intensity group with absent
  reflections present (I=0), and run the analysis to check that the actual
  space group is the best-scoring.
  s   C 2 2 21s   P 31 1 2s   P 62 2 2s   P 2 3s   P 3s   P 1s   P 63s   C 1 2 1s   F 2 2 2s   A 1 2 1s   B 1 1 2s   P 61s   P 61 2 2s   P 6 2 2s	   P 2 21 21s
   P 21 21 21s   R 3 2 :Rs   P 4 3 2s   P 1 21 1s   P 32 2 1s   P 42 2 2s	   P 43 21 2s	   P 21 2 21s   I 2 3s   P 43 3 2s   I 41 3 2s   P 3 1 2s   P 2 2 2s   R 3 :Hs	   P 21 21 2s   P 65 2 2s   F 2 3s   I 41 2 2s   P 65s   P 1 1 21s   P 2 2 21s   P 4 2 2s   I 2 2 2s   I 4 3 2s   R 3 :Rs   P 4s   P 42s   P 64 2 2s   I 1 2 1s   P 64s   I 41s   P 63 2 2s   P 3 2 1s   P 41 2 2s   P 62s   P 32 1 2s   F 4 3 2s   P 31 2 1s   I 4 2 2s   P 21 3s   P 43 2 2s   C 2 2 2s   P 4 21 2s   B 2 21 2s	   P 41 21 2s   P 31s   P 41s   P 41 3 2s   P 32s   P 6s   P 1 2 1s   I 21 3s   F 41 3 2s   P 42 3 2s	   P 42 21 2s   P 43s
   I 21 21 21s   R 3 2 :Hs   I 4i±hÞ:t   space_group_symbolt   elementst   OiÈ   t   n_scattererst   d_ming      ø?i    t   sigmasg{®Gáz„?R   t   crystal_symmetryt   datat   miller_arrayt   original_dataiÿÿÿÿi   i   N(%   t   randomt   seedR   t   set_random_seedR   t   xray_structuret   abst   structure_factorst   f_calct#   set_observation_type_xray_amplitudet	   f_as_f_sqR$   R   t   sys_absent_flagsR%   t   countR   R   R   R   R   t   complete_sett   lone_sett   sizet	   deep_copyt   customized_copyt   doublet   infot   arrayt   concatenatet#   set_observation_type_xray_intensityt   protein_space_group_choicest   suggest_likely_candidatest   mint   intR   t   show(   t   symbolst   symbolt   xrst   fct   i_calcR   t   n_absentt   igR3   t   missing_sett   i_calc_origt   symmR%   t   sys_absR#   t   psgct   tablet   rowt	   min_scoret   expected_failuresR   t   scoret
   n_abs_violt   n_pres_viol(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/tst_absences.pyt   exercise_analyze_absences.   sx    			
		#

	c          C   s"   t  j j d d d t j ƒ }  d  S(   Nt   relative_paths/   phenix_regression/pdb/x_001_HD_ricardo_leal.pdbt   test(   t   libtbxt   envt   find_in_repositoriest   opt   isfile(   t   pdb_file(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/tst_absences.pyt
   exercise_2   s    t   __main__t   OK(   t   __doc__t
   __future__R    t   mmtbx.scaling.absencest   cctbx.developmentR   t   cctbxR   t   scitbx.array_familyR   t   libtbx.load_envRX   t   os.patht   pathR[   R(   R   RU   R^   t   __name__(    (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/tst_absences.pyt   <module>   s   
		Q	