ó
ÍxTc           @   sÖ   d  d l  m Z d  d l Z 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 Z d  d l Z e j d  e j d  d	   Z d
   Z e d k rŇ e   n  d S(   i˙˙˙˙(   t   divisionN(   t   random_structure(   t   debug_utils(   t   xray(   t   flex(   t   approx_equali    c            sĺ  d } t  j d | d d d d d g d d	 g d
 d d  } | j   j   s` d& d' g } n d( d) g } g  | D]< \ } } t j d t j   d | d | d d d g  ^ qs } xl t | j	    D]X \ } }	 |	 j
 d k rú | d j j |  n  |	 j
 d	 k rČ | d j j |  qČ qČ Wx$ | D] }
 |
 j d | j	    q+W|  j rg| j   j   n  t | j d d d t  j    } |  j rĄ| j   n  x6 | D]. }
 d |
 _ d |
 _ |
 j d | j	    q¨Wt j j j   } d | _ t j j d | d | d | j   d | d d  } d g     f d    } t j j  j! d! | d" | d# | d$ d  }   d g k st"  x_ t# | |  D]N \ }
 \ } } t$ |
 j | d% d sżt"  t$ |
 j | d% d st"  qWd  S(*   Ng       @t   space_group_infot   elementst   Nt   Ct   Ot   Si   t   Fei   t   volume_per_atomid   i˙˙˙˙iţ˙˙˙i   i    t
   iselectiont   f_primet   f_double_primet   refinei   t
   scattererst   d_mint   anomalous_flagt   directt   xray_structuret   f_obst   r_free_flagst   sf_and_grads_accuracy_paramst   target_namet   lsc            s     d c d 7<t  S(   Ni    i   (   t   True(   t	   minimizer(   t   n_cycles(    s]   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/tst_anomalous_scatterer_groups.pyt	   call_back<   s    t   fmodelt   groupst   call_back_after_minimizer_cyclet!   number_of_finite_difference_testst   eps(   i˙˙˙˙i   (   iţ˙˙˙i   (   i˙˙˙˙i    (   iţ˙˙˙i    (%   R   R   t   groupt
   is_centricR   t   anomalous_scatterer_groupR   t   size_tt	   enumerateR   t   scattering_typeR   t   appendt   copy_to_scatterers_in_placet   Verboset   show_summaryt   show_scattererst   abst   structure_factorsR   t   f_calct   show_comprehensive_summaryR   R   t   mmtbxt   f_modelt#   sf_and_grads_accuracy_master_paramst   extractt	   algorithmt   managert   generate_r_free_flagst
   refinementt   anomalous_scatterer_groupsR   t   AssertionErrort   zipR   (   t   flagsR   R   t	   structuret   fp_fdp_targetst   fpt   fdpR<   t   i_seqt	   scattererR%   R   t
   sfg_paramsR    R   t	   minimized(    (   R   s]   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/tst_anomalous_scatterer_groups.pyt   run_call_back   s\    	!	F								"c           C   s   t  j t j d t  d  S(   Ni   (   R   t   parse_options_loop_space_groupst   syst   argvRH   (    (    (    s]   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/tst_anomalous_scatterer_groups.pyt   exerciseM   s    t   __main__(   t
   __future__R    t+   mmtbx.refinement.anomalous_scatterer_groupsR4   t   mmtbx.f_modelt   cctbx.developmentR   R   t   cctbxR   t   cctbx.array_familyR   t   libtbx.test_utilsR   t   randomRJ   t   seedt   set_random_seedRH   RL   t   __name__(    (    (    s]   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/tst_anomalous_scatterer_groups.pyt   <module>   s   	=	