ó
D™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	 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 m Z 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  d l Z d  d l Z d  d l Z e j d ƒ e j  d ƒ d6 d7 f d „ Z! d e j" f d „  ƒ  YZ# d e$ f d „  ƒ  YZ% d e$ f d „  ƒ  YZ& d d „ Z' d e$ f d „  ƒ  YZ( d d „ Z) d  e$ f d! „  ƒ  YZ* d d" „ Z+ d# e$ f d$ „  ƒ  YZ, d d% „ Z- d& e$ f d' „  ƒ  YZ. d d( „ Z/ d) e$ f d* „  ƒ  YZ0 d d+ „ Z1 d, „  Z2 d d- „ Z3 d d. „ Z4 d/ d0 d1 d d d2 „ Z5 d3 „  Z6 d4 „  Z7 e8 d5 k rÌe7 ƒ  n  d S(8   iÿÿÿÿ(   t   division(   t   flex(   t   random_structure(   t   debug_utils(   t   xrayN(   t   maptbx(   t   miller(   t   crystal(   t   adptbx(   t   linear_regression_test(   t   assign_custom_gaussians(   t   fftpack(   t   matrix(   t   adopt_init_args(   t   approx_equali    i   g      @i   c         C   s  t  j  ƒ  } | | d k r4 t j j d t ƒ }  nÜ | | d k r|  j ƒ  }  t  j  ƒ  d k rn t |  _ n  t  j  ƒ  d k rŒ t |  _ n  t  j  ƒ  d k rª t |  _ n  t  j  ƒ  d k rÈ t |  _	 n  t  j  ƒ  d k ræ t |  _
 n  | rt  j  ƒ  d k rt |  _ qqn  |  S(   Ni    t   defaulti   g      à?(   t   randomR   t   structure_factorst   gradient_flagst   Truet   copyt   sitet   u_isot   u_anisot	   occupancyt   fpt   fdp(   R   t   anomalous_flagt
   thresholdst   r(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyt   randomize_gradient_flags   s&          t
   resamplingc           B   sÈ   e  Z d d d d e j d d d d d d d d „ Z d „  Z d „  Z d	 „  Z d
 „  Z	 d „  Z
 d „  Z d „  Z d „  Z e d „ Z e d „ Z d „  Z d „  Z d „  Z d „  Z d d „ Z RS(   i   g      @i@B g»½×Ùß|Û=iœÿÿÿi   c         C   s   | d  k s | d  k s t ‚ | | |	 g j d  ƒ d k sB t ‚ | d  k ro | d  k	 rf | d  k	 s¨ t ‚ n9 | } | d  k r� | j ƒ  } n | | j ƒ  k s¨ t ‚ t j j |  | ƒ t j j	 | | | | |	 ƒ } ~ ~ ~	 t
 |  t ƒ  d t ƒd  |  _ d  |  _ d  |  _ d  |  _ d  S(   Ni   t   hide(   t   Nonet   AssertionErrort   countt   d_minR   t   symmetryt   _copy_constructorR   R   t   quality_factor_from_anyR   t   localsR   t   _crystal_griddingt   _crystal_gridding_tagst   _rfftt   _u_base(   t   selft
   miller_sett   crystal_symmetryR$   t   grid_resolution_factort   symmetry_flagst   mandatory_grid_factorst   quality_factort   u_baset   b_baset   wing_cutofft   exp_table_one_over_step_sizet	   max_prime(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyt   __init__-   s&    
$!				c         C   s   |  j  S(   N(   t   _d_min(   R-   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyR$   M   s    c         C   s   |  j  S(   N(   t   _grid_resolution_factor(   R-   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyR0   P   s    c         C   s   |  j  S(   N(   t   _symmetry_flags(   R-   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyR1   S   s    c         C   s   |  j  S(   N(   t   _mandatory_grid_factors(   R-   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyR2   V   s    c         C   s   |  j  S(   N(   t   _quality_factor(   R-   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyR3   Y   s    c         C   s   |  j  S(   N(   t   _wing_cutoff(   R-   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyR6   \   s    c         C   s   |  j  S(   N(   t   _exp_table_one_over_step_size(   R-   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyR7   _   s    c         C   s   |  j  S(   N(   t
   _max_prime(   R-   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyR8   b   s    c         C   s‚   |  j  d  k r{ t j d |  j ƒ  d |  j ƒ  d |  j ƒ  d |  j ƒ  d |  j ƒ  d |  j	 ƒ  d |  j
 ƒ  d | ƒ |  _  n  |  j  S(	   Nt	   unit_cellR$   t   resolution_factorR1   t   space_group_infot   mandatory_factorsR8   t   assert_shannon_sampling(   R)   R!   R   t   crystal_griddingRB   R$   R0   R1   RD   R2   R8   (   R-   RF   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyRG   e   s    	c         C   s1   |  j  d  k r* |  j | ƒ j ƒ  |  _  n  |  j  S(   N(   R*   R!   RG   t   tags(   R-   RF   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyt   crystal_gridding_tagsr   s    c         C   s7   |  j  d  k r0 t j |  j ƒ  j ƒ  ƒ |  _  n  |  j  S(   N(   R+   R!   R   t   real_to_complex_3dRG   t   n_real(   R-   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyt   rfftx   s    !c         C   sC   |  j  d  k r< t j |  j ƒ  |  j ƒ  |  j ƒ  ƒ |  _  n  |  j  S(   N(   R,   R!   R   t   calc_u_baseR$   R0   R3   (   R-   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyR4   }   s    		c         C   s"   |  j  ƒ  |  j ƒ  |  j ƒ  |  S(   N(   RI   RL   R4   (   R-   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyt	   setup_fft…   s    


c         C   sÉ   |  j  ƒ  j ƒ  t j |  j ƒ  j ƒ  ƒ j ƒ  |  j ƒ  j ƒ  | j	 ƒ  j
 ƒ  j ƒ  } | j ƒ  } t j |  j  ƒ  | | j ƒ  | j
 ƒ  ƒ | j
 ƒ  } | t j | d ƒ 9} t j d |  j ƒ  d | ƒ S(   Ni    RG   t   fourier_coefficients(   RB   t   volumeR   t   rowRL   RK   t   productt   space_groupt   order_zt   multiplicitiest   datat	   as_doublet	   deep_copyR   t   apply_u_extrat   indicesR   t   polarR   t   fft_mapRG   (   R-   t   dpt   u_extrat
   multipliert   coefft
   coeff_data(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyt   ft_dp‹   s    W			i    c         C   sî  t  j j ƒ  t j _ t j d | j ƒ  d | j	 ƒ  d | j
 ƒ  d |  j ƒ  d |  j ƒ  d |  j ƒ  d d ƒ } d	 s{ | rœ d
 G| j ƒ  GHd G| j ƒ  GHn  |  j | d | j ƒ  ƒ} | j ƒ  sÒ | j ƒ  } n¤ | j ƒ  } | j ƒ  sñ t ‚ d	 sý | rvd G| j ƒ  GHd t j t j | ƒ ƒ t j t j | ƒ ƒ f GHd t j t j | ƒ ƒ t j t j | ƒ ƒ f GHHn  | j d | j	 ƒ  d | d | j
 ƒ  d | j ƒ  d | d | d t ƒ d	 sÈ| rêd G| j ƒ  GHd G| j ƒ  GHHn  | S(   NRB   t
   scattererst   scattering_type_registryR4   R6   R7   t   tolerance_positive_definitegñhãˆµøä>i    s   u_base:s   u_extra:R^   s   grid:s   ft_dt_map real: %.4g %.4gs   ft_dt_map imag: %.4g %.4gt   u_iso_refinable_paramst   site_symmetry_tablet   ft_d_target_d_f_calct   n_parameterst    sampled_density_must_be_positives   max_sampling_box_edges:s   exp_table_size:(    t   libtbxt   introspectiont   number_of_processorst   omptbxt   envt   num_threadsR   t   fast_gradientsRB   Rc   Rd   R4   R6   R7   R^   Rb   R   t   real_mapt   complex_mapt	   is_paddedR"   t   focusR   t   mint   realt   maxt   imagt   samplingRg   t   Falset   max_sampling_box_edgest   exp_table_size(   R-   t   xray_structureRf   R]   Ri   t   verboset   resultt   gradient_map(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyt   __call__œ   sN    			NgUUUUUUÕ?(   t   __name__t
   __module__R!   R   t   use_space_group_symmetryR9   R$   R0   R1   R2   R3   R6   R7   R8   R   RG   RI   RL   R4   RN   Rb   R‚   (    (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyR   +   s2   													t   judgec           B   s   e  Z d  „  Z d „  Z RS(   c         C   så   | j  j ƒ  r | d 7} n  | j  j ƒ  r8 | d 7} n  d } | | t t | ƒ t t | ƒ t | ƒ ƒ ƒ } | d | | 7} t |  _ t | ƒ d k r³ | d 7} t |  _ n t | ƒ d k rÒ | d 7} n  | j	 ƒ  |  _
 d  S(	   Ns    iso s    aniso t    s    %.5f g¸…ëQ¸ž?s    very large mismatchg{®Gáz„?s    large mismatch(   t   flagst	   use_u_isot   use_u_anisoRx   t   absRv   R{   t   is_badR   t   lstript   s(   R-   t	   scatterert   labelt	   referencet   othert   topRŽ   R   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyR9   Ì   s      2	
c         C   s   |  j  S(   N(   RŽ   (   R-   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyt   __str__Ú   s    (   Rƒ   R„   R9   R”   (    (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyR†   Ê   s   	t   shifted_sitec           B   s   e  Z d  „  Z RS(   c         C   sˆ   | j  ƒ  |  _ t |  j j ƒ  | j ƒ } | | c | 7<| |  j j ƒ  | _ | d  k	 r„ | j d |  j d d ƒ j ƒ  |  _ n  d  S(   NR~   t	   algorithmt   direct(   t   deep_copy_scattererst   structure_shiftedt   listRc   R   R!   t!   structure_factors_from_scattererst   f_calc(   R-   t   f_obst	   structuret   i_scatterert   i_xyzt   shiftR   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyR9   ß   s    	(   Rƒ   R„   R9   (    (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyR•   Ý   s   c         C   sT  t  | |  d d d ƒ } d s$ | r@ d GH| j j ƒ  j ƒ  Hn  t j | j ƒ  | j j ƒ  t d ƒ } t	 t j
 j d t ƒ | j ƒ  ƒ } t j d | j j ƒ  d | j d | j d | j d | j d	 | j d
 | j ƒ t j
 j d | j d d  d | d | j ƒ  d d ƒ } t d | ƒ } | d | j d d  d t j d | d | j ƒ  ƒ d d d | ƒ }	 | j ƒ  }
 d  } xÍ t | j j ƒ  ƒ D]¶ \ } } x§ d D]Ÿ } |
 | | } | d  k rÅ| } n  |	 j ƒ  | | } t | d | | | ƒ } d sý| r+d | | f G| GHd | | f G| G| GHHn  | j sœt ‚ qœWq‰Wt  j! j" ƒ  d  S(   Ni    g{®Gáz„?R   i   Rc   R   R   R   R   R   R~   Rf   R.   t   d_target_d_f_calcRi   R]   RV   R   i   s   direct summ[%d][%d]: s   fast gradie[%d][%d]: (   i    i   i   (#   R•   R™   t   show_summaryt   show_scatterersR   t   targets_least_squares_residualRV   Rœ   R   R   R   R   R   t   set_scatterer_grad_flagsRc   R   R   R   R   R   R   t   gradients_directR!   t   derivativesR   R   t   arrayt   d_target_d_site_cartt	   enumerateR†   RŒ   R"   t   syst   stdoutt   flush(   t   structure_idealR$   R�   R   t   sht   lsR   t   sfdt   ret   map0t   sfd_d_target_d_site_cartt   top_gradientRŸ   R�   R    t   direct_summt   fast_gradiet   match(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyR   è   sZ    !					
				" 	t   shifted_u_isoc           B   s   e  Z d  „  Z RS(   c         C   s{   | j  ƒ  |  _ |  j j ƒ  | j j ƒ  rw |  j j ƒ  | j | 7_ | d  k	 rw | j d |  j ƒ j ƒ  |  _ qw n  d  S(   NR~   (	   R˜   R™   Rc   Rˆ   R‰   R   R!   R›   Rœ   (   R-   R�   Rž   RŸ   R¡   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyR9     s    	(   Rƒ   R„   R9   (    (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyRº     s   c         C   sá  t  | |  d d ƒ } d s! | r= d GH| j j ƒ  j ƒ  Hn  t j | j ƒ  | j j ƒ  t d ƒ } t	 t j
 j d t ƒ | j ƒ  ƒ } | r� t j ƒ  } n d  } xþ | j j ƒ  D]í }	 |	 j j | j ƒ |	 j j | j ƒ |	 j j | j ƒ |	 j j | j ƒ |	 j j | j ƒ |	 j j | j ƒ | r³ |	 j j t ƒ t j  d d ƒ }
 |
 |	 j _! t" j# |	 j t" j$ t% j& |
 ƒ t" j$ d ƒ } | j' | ƒ q³ q³ Wt j( | j j ƒ  ƒ } | j) ƒ  d k rÝt j
 j* d | j d	 | d
 | d | j+ ƒ  d d ƒ } t, d
 | ƒ } | d | j d	 | d t- j. d
 | d | j+ ƒ  ƒ d d d | ƒ } | j d k r| j/ ƒ  } | j/ ƒ  } n  d  } g  } xmt0 | j j ƒ  ƒ D]V\ } }	 |	 j j1 ƒ  rÅd } n  |	 j j2 ƒ  rÝd } n  | d k rµ|	 j j3 ƒ  rµ|	 j j1 ƒ  rµ| j4 ƒ  | } | d  k r,| } n  | j4 ƒ  | } t5 j6 j7 ƒ  | j' | | g ƒ t8 |	 | | | | ƒ } d s€| r¢d | G| GHd | G| G| GHHn  | j9 sµt: ‚ n  | d k r¡|	 j j; ƒ  r¡|	 j j2 ƒ  r¡| j< ƒ  | } t% j= |  j> ƒ  | ƒ } t? | t% j@ |  j> ƒ  | ƒ ƒ s.t: ‚ xÆ tA d ƒ D]µ } | | | } | d  k rd| } n  | | | } | j' | | g ƒ t8 |	 d | | | ƒ } d s²| s²| j9 ràd | | f G| GHd | | f G| G| GHHn  | j9 s;t: ‚ q;Wq¡q¡WxY t0 | j j ƒ  ƒ D]B \ } }	 |	 j j1 ƒ  s8d |	 _ n  |	 j j2 ƒ  sd |	 _B qqWt j
 j* d | j d	 | d
 | d | j+ ƒ  d d ƒ } t, d
 | ƒ } | d | j d	 | d t- j. d
 | d | j+ ƒ  ƒ d d d | ƒ } t j( | j j ƒ  ƒ } | j r| j/ ƒ  } | j/ ƒ  } n  g  } xut0 | j j ƒ  ƒ D]^\ } }	 |	 j j1 ƒ  rZd } n  |	 j j2 ƒ  rrd } n  | d k rÒ|	 j j3 ƒ  rÒ|	 j j1 ƒ  rÒ| j4 ƒ  | } | j4 ƒ  | } | j' | | g ƒ n  | d k r6|	 j j; ƒ  r6|	 j j2 ƒ  r6| j< ƒ  | } t% j= |  j> ƒ  | ƒ } t? | t% j@ |  j> ƒ  | ƒ ƒ sKt: ‚ xF tA d ƒ D]5 } | | | } | | | } | j' | | g ƒ qXWq6q6Wx2 tC | | ƒ D]! \ } } t? | | ƒ s¨t: ‚ q¨Wt5 j6 j7 ƒ  n  d  S(   Ni    gš™™™™™©?R   i   iZ   ix   i   R~   Rf   R.   R¢   Ri   R]   RV   R   t   u_stars   direct summ[%d]: s   fast gradie[%d]: i   s   direct summ[%d][%d]: s   fast gradie[%d][%d]: g    €ÈÀg     8�À(   g     8�Àg     8�Àg     8�Àg     8�Àg     8�Àg     8�À(D   Rº   R™   R£   R¤   R   R¥   RV   Rœ   R   R   R   R   R   R   t   doubleR!   Rc   Rˆ   t   set_grad_siteR   t   set_grad_u_isoR   t   set_grad_u_anisoR   t   set_grad_occupancyR   t   set_grad_fpR   t   set_grad_fdpR   t   set_tan_u_isoR   t   randintt   paramt   matht   tant   piR   t   b_as_ut   appendt   scatterer_grad_flags_countsRi   R§   R¨   R   R   R©   t   d_target_d_u_cartR«   R‰   RŠ   t
   grad_u_isot   d_target_d_u_isoR¬   R­   R®   R†   RŒ   R"   t   grad_u_anisot   d_target_d_u_start   grad_u_star_as_u_cartRB   R   t   grad_u_cart_as_u_start   xrangeR»   t   zip(   R¯   R$   R�   t	   tan_u_isoR   R°   R±   R   Rf   R�   RÅ   t   valuet   grad_flags_countsR²   R³   R´   t   sfd_d_target_d_u_cartt   map0_d_target_d_u_cartR¶   t   gradients_1RŸ   t   parameter_nameR·   R¸   R¹   t   sfd_start   sfd_cartt   ijt   gradients_2t   g1t   g2(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyR      s   !1				" 	 	 		! 	"					" 	 		!t   shifted_u_starc           B   s   e  Z d  „  Z RS(   c         C   sš   | j  ƒ  |  _ |  j j ƒ  | j j ƒ  r– |  j j ƒ  | } t | j ƒ } | | c | 7<| | _ | d  k	 r– | j d |  j ƒ j	 ƒ  |  _	 q– n  d  S(   NR~   (
   R˜   R™   Rc   Rˆ   RŠ   Rš   R»   R!   R›   Rœ   (   R-   R�   Rž   RŸ   RÞ   R¡   R�   R»   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyR9   ¿  s    		(   Rƒ   R„   R9   (    (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyRâ   ½  s   c         C   sí  t  | |  d d d ƒ } d s$ | r@ d GH| j j ƒ  j ƒ  Hn  t j | j ƒ  | j j ƒ  t d ƒ } t	 t j
 j d t ƒ | j ƒ  ƒ } t j d | j j ƒ  d | j d | j d | j d	 | j d
 | j d | j ƒ t j | j j ƒ  ƒ } | j ƒ  d k rét j
 j d | j d d  d | d | j ƒ  d d ƒ } t d | ƒ }	 |	 d | j d d  d t j d | d | j ƒ  ƒ d d d | ƒ }
 t j | j j ƒ  ƒ } | j rÇ| j ƒ  } |
 j ƒ  } n  d  } g  } xOt | j j ƒ  ƒ D]8\ } } | j j  ƒ  rd } n  | j j! ƒ  r%d } n  | d k rî| j j" ƒ  rî| j# ƒ  | } | d  k re| } n  |
 j# ƒ  | } t$ j% j& ƒ  | j' | | g ƒ t( | | | | | ƒ } d s¹| rÛd | G| GHd | G| G| GHHn  | j) sît* ‚ n  | d k ré| j j+ ƒ  ré| j, ƒ  | } t- j. |  j/ ƒ  | ƒ } t0 | t- j1 |  j/ ƒ  | ƒ ƒ sXt* ‚ xÆ t2 d ƒ D]µ } | | | } | d  k rŽ| } n  | | | } | j' | | g ƒ t( | d | | | ƒ } d sÜ| sÜ| j) r
d | | f G| GHd | | f G| G| GHHn  | j) set* ‚ qeWqéqéWxY t | j j ƒ  ƒ D]B \ } } | j j  ƒ  sbd | _ n  | j j! ƒ  s;d | _3 q;q;Wt j
 j d | j d d  d | d | j ƒ  d d ƒ } t d | ƒ }	 |	 d | j d d  d t j d | d | j ƒ  ƒ d d d | ƒ }
 t j | j j ƒ  ƒ } | j rD| j ƒ  } |
 j ƒ  } n  g  } xWt | j j ƒ  ƒ D]@\ } } | j j  ƒ  r„d } n  | j j! ƒ  rœd } n  | d k rí| j j" ƒ  rí| j# ƒ  | } |
 j# ƒ  | } | j' | | g ƒ n  | d k r`| j j+ ƒ  r`| j, ƒ  | } t- j. |  j/ ƒ  | ƒ } t0 | t- j1 |  j/ ƒ  | ƒ ƒ sWt* ‚ xF t2 d ƒ D]5 } | | | } | | | } | j' | | g ƒ qdWq`q`Wx2 t4 | | ƒ D]! \ } } t0 | | ƒ s´t* ‚ q´Wt$ j% j& ƒ  n  d  S(   Ni    g-Cëâ6?R»   i   R   Rc   R   R   R   R   R   R~   Rf   R.   R¢   Ri   R]   RV   R   s   direct summ[%d]: s   fast gradie[%d]: i   s   direct summ[%d][%d]: s   fast gradie[%d][%d]: g    €ÈÀg     8�À(   g     8�Àg     8�Àg     8�Àg     8�Àg     8�Àg     8�À(5   Râ   R™   R£   R¤   R   R¥   RV   Rœ   R   R   R   R   R   R¦   Rc   R   R   R   R   R   R   RË   Ri   R§   R!   R¨   R   R   R©   RÌ   R«   Rˆ   R‰   RŠ   RÍ   RÎ   R¬   R­   R®   RÊ   R†   RŒ   R"   RÏ   RÐ   R   RÑ   RB   R   RÒ   RÓ   R»   RÔ   (   R¯   R$   R�   R   R°   R±   R   R×   R²   R³   R´   RØ   RÙ   R¶   RÚ   RŸ   R�   RÛ   R·   R¸   R¹   RÜ   RÝ   RÞ   Rß   Rà   Rá   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyR»   Ê  sô    !					
					" 	 	 		! 	"					" 	 	!t   shifted_occupancyc           B   s   e  Z d  „  Z RS(   c         C   s\   | j  ƒ  |  _ |  j j ƒ  | j | 7_ | d  k	 rX | j d |  j ƒ j ƒ  |  _ n  d  S(   NR~   (   R˜   R™   Rc   R   R!   R›   Rœ   (   R-   R�   Rž   RŸ   R¡   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyR9   [  s
    	(   Rƒ   R„   R9   (    (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyRã   Y  s   c         C   s&  t  | |  d d ƒ } d s! | r= d GH| j j ƒ  j ƒ  Hn  t j | j ƒ  | j j ƒ  t d ƒ } t	 t j
 j d t ƒ | j ƒ  ƒ } t j d | j j ƒ  d | j d | j d | j d | j d	 | j d
 | j ƒ t j
 j d | j d d  d | d | j ƒ  d d ƒ } t d | ƒ } | d | j d d  d t j d | d | j ƒ  ƒ d d d | ƒ }	 d  }
 x® t | j j ƒ  ƒ D]— \ } } | j ƒ  | } |
 d  k r«| }
 n  |	 j ƒ  | } t | d | | |
 ƒ } d sß| rd | G| GHd | G| G| GHHn  | j szt ‚ qzWt  j! j" ƒ  d  S(   Ni    gš™™™™™É?R   i   Rc   R   R   R   R   R   R~   Rf   R.   R¢   Ri   R]   RV   R   s   direct summ[%d]: s   fast gradie[%d]: (#   Rã   R™   R£   R¤   R   R¥   RV   Rœ   R   R   R   R   R   R¦   Rc   R   R   R   R   R   R   R§   R!   R¨   R   R   R©   R«   t   d_target_d_occupancyR†   RŒ   R"   R¬   R­   R®   (   R¯   R$   R�   R   R°   R±   R   R²   R³   R´   R¶   RŸ   R�   R·   R¸   R¹   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyR   b  sV    !					
				" 	t
   shifted_fpc           B   s   e  Z d  „  Z RS(   c         C   s\   | j  ƒ  |  _ |  j j ƒ  | j | 7_ | d  k	 rX | j d |  j ƒ j ƒ  |  _ n  d  S(   NR~   (   R˜   R™   Rc   R   R!   R›   Rœ   (   R-   R�   Rž   RŸ   R¡   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyR9   �  s
    	(   Rƒ   R„   R9   (    (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyRå   Ž  s   c         C   s&  t  | |  d d ƒ } d s! | r= d GH| j j ƒ  j ƒ  Hn  t j | j ƒ  | j j ƒ  t d ƒ } t	 t j
 j d t ƒ | j ƒ  ƒ } t j d | j j ƒ  d | j d | j d | j d	 | j d | j d
 | j ƒ t j
 j d | j d d  d | d | j ƒ  d d ƒ } t d | ƒ } | d | j d d  d t j d | d | j ƒ  ƒ d d d | ƒ }	 d  }
 x® t | j j ƒ  ƒ D]— \ } } | j ƒ  | } |
 d  k r«| }
 n  |	 j ƒ  | } t | d | | |
 ƒ } d sß| rd | G| GHd | G| G| GHHn  | j szt ‚ qzWt  j! j" ƒ  d  S(   Ni    gš™™™™™É¿R   i   Rc   R   R   R   R   R   R~   Rf   R.   R¢   Ri   R]   RV   R   s   direct summ[%d]: s   fast gradie[%d]: (#   Rå   R™   R£   R¤   R   R¥   RV   Rœ   R   R   R   R   R   R¦   Rc   R   R   R   R   R   R   R§   R!   R¨   R   R   R©   R«   t   d_target_d_fpR†   RŒ   R"   R¬   R­   R®   (   R¯   R$   R�   R   R°   R±   R   R²   R³   R´   R¶   RŸ   R�   R·   R¸   R¹   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyR   —  sV    !					
				" 	t   shifted_fdpc           B   s   e  Z d  „  Z RS(   c         C   s\   | j  ƒ  |  _ |  j j ƒ  | j | 7_ | d  k	 rX | j d |  j ƒ j ƒ  |  _ n  d  S(   NR~   (   R˜   R™   Rc   R   R!   R›   Rœ   (   R-   R�   Rž   RŸ   R¡   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyR9   Å  s
    	(   Rƒ   R„   R9   (    (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyRç   Ã  s   c         C   s&  t  | |  d d ƒ } d s! | r= d GH| j j ƒ  j ƒ  Hn  t j | j ƒ  | j j ƒ  t d ƒ } t	 t j
 j d t ƒ | j ƒ  ƒ } t j d | j j ƒ  d | j d | j d | j d	 | j d
 | j d | j ƒ t j
 j d | j d d  d | d | j ƒ  d d ƒ } t d | ƒ } | d | j d d  d t j d | d | j ƒ  ƒ d d d | ƒ }	 d  }
 x® t | j j ƒ  ƒ D]— \ } } | j ƒ  | } |
 d  k r«| }
 n  |	 j ƒ  | } t | d | | |
 ƒ } d sß| rd | G| GHd | G| G| GHHn  | j szt ‚ qzWt  j! j" ƒ  d  S(   Ni    i   R   i   Rc   R   R   R   R   R   R~   Rf   R.   R¢   Ri   R]   RV   R   s   direct summ[%d]: s   fast gradie[%d]: (#   Rç   R™   R£   R¤   R   R¥   RV   Rœ   R   R   R   R   R   R¦   Rc   R   R   R   R   R   R   R§   R!   R¨   R   R   R©   R«   t   d_target_d_fdpR†   RŒ   R"   R¬   R­   R®   (   R¯   R$   R�   R   R°   R±   R   R²   R³   R´   R¶   RŸ   R�   R·   R¸   R¹   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyR   Ì  sV    !					
				" 	c         C   sÍ   t  d  |  d d d ƒ } t d  | j d d ƒ } t d  | j d d d ƒ } t d  | j d d ƒ } | r„ t d  | j d d ƒ } n  t | | j d d ƒ } t j	 | j
 ƒ  | j j
 ƒ  t d ƒ } | | f S(	   Ni    g{®Gáz„?gš™™™™™©?g-Cëâ6?gš™™™™™É?i   gš™™™™™É¿i   (   R•   R!   Rº   R™   Râ   Rã   Rç   Rå   R   R¥   RV   Rœ   R   (   R¯   R�   R   R°   R±   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyt	   shift_allø  s    !c         C   s¶  t  |  | | ƒ \ } } t j ƒ  d k } t t j j d | d | ƒ | j ƒ  d d ƒ} t j ƒ  } xõ | j	 j
 ƒ  D]ä }	 |	 j j | j ƒ |	 j j | j ƒ |	 j j | j ƒ |	 j j | j ƒ |	 j j | j ƒ |	 j j | j ƒ |	 j j t ƒ t j d d	 ƒ }
 |
 |	 j _ t j |	 j t j t j  |
 ƒ t j d
 ƒ } | j! | ƒ qw Wt j" | j	 j
 ƒ  ƒ j# ƒ  } | | j	 j# ƒ  k s˜t$ ‚ | d k r²t j j% d | j	 d | d | d | j& ƒ  d | ƒ } | j' ƒ  j( ƒ  | k søt$ ‚ t) d | ƒ } | d | j	 d | d t* j+ d | d | j& ƒ  ƒ d | d | ƒ } | j' ƒ  j( ƒ  | k sgt$ ‚ t j, | j' ƒ  | j' ƒ  ƒ } | j- ƒ  s—t$ ‚ | j. ƒ  d k s²t$ ‚ n  d  S(   Ng      à?R   t   uR   i   g       @i    iZ   ix   i   R~   Rf   R.   R¢   Ri   R]   RV   R   g+‡ÙÎ÷ï?g      à?(   g      à?i    (/   Ré   R   R   R   R   R   R   R   R¼   R™   Rc   Rˆ   R½   R   R¾   R   R¿   R   RÀ   R   RÁ   R   RÂ   R   RÃ   R   RÄ   RÅ   RÆ   RÇ   RÈ   R   RÉ   RÊ   RË   Ri   R"   R§   R¨   t   packedt   sizeR   R   R©   t   linear_correlationt   is_well_definedt   coefficient(   R¯   R�   R   R   R°   R±   t   flagR   Rf   R�   RÅ   RÖ   Ri   R²   R³   R´   t   correlation(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyt   exercise_packed  sR    	1				c         C   sy  t  |  | | ƒ \ } } t j j d | d d d d ƒ } t j j d t ƒ } t j d | j j ƒ  d | j	 d	 | j
 d
 | j d | j d | j d | j ƒ t j ƒ  d k r¸ d } n9 t j | j j ƒ  ƒ j ƒ  } | | j j ƒ  k sñ t ‚ | d | j d d  d | d | j ƒ  d | d d ƒ }	 | d | j d d  d | d | j ƒ  d | d d ƒ }
 t j | j j ƒ  ƒ } | d k r!|	 j ƒ  } |
 j ƒ  } t | | d d d | ƒ|	 j ƒ  } |
 j ƒ  } t | | d d d | ƒ| j
 d k r&|	 j ƒ  } |
 j ƒ  } t | | d d d | ƒn  | j d k r‚t | | d d d | ƒ|	 j ƒ  } |
 j ƒ  } t | | d d d | ƒn  |	 j ƒ  } |
 j ƒ  } t | | d d d | ƒ|	 j ƒ  } |
 j ƒ  } t | | d d d | ƒ| ru|	 j ƒ  } |
 j ƒ  } t | | d d d | ƒqunT t j |	 j ƒ  |
 j ƒ  ƒ } | j  ƒ  sQt ‚ | j! ƒ  d k sut | j! ƒ  ƒ ‚ d  S(   NR.   R3   i † R6   g»½×Ùß|Û=R   Rc   R   R   R   R   R   R   g      à?i    R~   Rf   R¢   Ri   R–   R—   t   fftt   slope_toleranceg{®Gáz„?R   g×£p=
×ï?("   Ré   R   R   t	   gradientsR   R   R¦   R™   Rc   R   R   R   R   R   R   R   RË   Ri   R"   R!   R¨   t   d_target_d_site_fracR	   Rª   RÎ   RÌ   Rä   Ræ   Rè   R   Rí   Rë   Rî   Rï   (   R¯   R�   R   R   R°   R±   t   grad_managerR   Ri   t   gdt   gfR×   t   dt   fRñ   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyt   exercise_gradient_manager1  s|    						
					i	   iè  g       @c   	      C   sù  t  j  ƒ  d k  r d } n d } t j |  d d! | |  d | d	 d
 d t d | d d | d | d t d t d t d d d t ƒ} t j d | j ƒ  d d d d ƒ t  j  ƒ  d k  r× t | d t  j  ƒ  d k  ƒn  d sã | rö | j ƒ  j	 ƒ  n  t
 | j d | d | d d ƒ j ƒ  ƒ } t | | | d | ƒt | | | d  t d | ƒt | | | d  t d | ƒt | | | d | ƒt | | | d | ƒt | | | d | ƒd rÕ| rÕt | | | d | ƒn  t | | | ƒ t | | | ƒ d  S("   Ng      à?g333333ã?i    t   elementst   Ot   Nt   Ct   volume_per_atomt   min_distancei   t   general_positions_onlyt   random_f_prime_d_mini   t   random_f_prime_scalet   random_f_double_primeRŠ   R‰   t   random_u_isot   random_u_cart_scaleg333333Ó?t   random_occupancyRc   t   random_u_iso_scalet   random_u_iso_ming        t
   negative_aR$   R   R–   R—   R   RÕ   (   Rþ   Rÿ   R   (   R   R   R~   R   R{   t   random_modify_adp_and_adp_flagsRc   R
   R£   R¤   R‹   R   Rœ   R   R   R»   R   R   R   Rü   Rò   (	   RD   t
   n_elementsR  R$   R   R   R  R¯   R�   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyt   run_one‰  sJ    	
		c         C   s7   x0 t  t g D]" } t d | d | d |  j ƒ q Wd  S(   NRD   R   R   (   R{   R   R  t   Verbose(   Rˆ   RD   R   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyt   run_call_back¹  s
    c          C   sM   t  j j ƒ  }  t j d t j d d t d t ƒ t	 j
 j j ƒ  |  ƒ  d  S(   Nt   argvi   t	   call_backt   show_cpu_times(   Rk   t   utilst
   show_timesR   t   parse_options_loop_space_groupsR¬   R  R  R{   R   R   t   global_counterst   show(   R  (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyt   runÀ  s    	t   __main__gUUUUUUå?gUUUUUUÕ?(9   t
   __future__R    t   cctbx.array_familyR   t   cctbx.developmentR   R   t   cctbxR   t,   cctbx.xray.structure_factors.global_countersR   R   R   R   t%   cctbx.regression.tst_xray_derivativesR	   t*   cctbx.regression.tst_sampled_model_densityR
   t   scitbxR   R   Rn   Rk   R   t   libtbx.test_utilsR   t   libtbx.utilst   libtbx.introspectionR   R¬   RÆ   t   seedt   set_random_seedR   R%   R   t   objectR†   R•   R   Rº   R   Râ   R»   Rã   R   Rå   R   Rç   R   Ré   Rò   Rü   R  R  R  Rƒ   (    (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_xray_fast_gradients.pyt   <module>   s^   Ÿ.
��	,	,	,	-V	.			