ó
C™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 d  d l m Z d  d l Z d  d	 l m Z d  d l Z d  d l Z d  d l Z e j d
 ƒ d d d „  ƒ  YZ d d „ Z d d „ Z d „  Z d „  Z d „  Z d „  Z e d k r"e ƒ  n  d S(   iÿÿÿÿ(   t   division(   t   strudat(   t   iotbx_option_parser(   t   flex(   t   matrix(   t   format_cpu_times(   t   approx_equalN(   t   StringIOi    t	   cos_alphac           B   s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C   sL   t  j | ƒ |  _ | |  _ | |  _ t  j |  j j d |  j ƒ ƒ |  _ d  S(   Nt   independent_params(   R   t   rowt   ht   site_constraintsR	   t   colt
   all_paramst   site(   t   selfR   R   R	   (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_sgtbx_site_constraints.pyt   __init__   s
    		c         C   s   t  j |  j j |  j ƒ ƒ S(   N(   t   matht   cosR   t   dotR   (   R   (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_sgtbx_site_constraints.pyt   f   s    c         C   sK   t  j |  j j |  j ƒ ƒ |  j } t j |  j j d t j | ƒ ƒ ƒ S(   Nt   all_gradients(	   R   t   sinR   R   R   R   t   doubleR   t   independent_gradients(   R   R   (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_sgtbx_site_constraints.pyt	   df_d_site   s    &c         C   sT   t  j |  j j |  j ƒ ƒ |  j j ƒ  } |  j j d t j	 | j
 ƒ  ƒ j ƒ  ƒ S(   Nt   all_curvatures(   R   R   R   R   R   t   outer_productR   t   independent_curvaturesR   R   t   as_list_of_listst   matrix_symmetric_as_packed_u(   R   R   (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_sgtbx_site_constraints.pyt
   d2f_d_site    s    ,(   t   __name__t
   __module__R   R   R   R    (    (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_sgtbx_site_constraints.pyR      s   			g:Œ0âŽyE>c   
   	   C   sÆ   t  j ƒ  } t | ƒ } x§ t t | ƒ ƒ D]“ } g  } xU | | g D]F } | | | | | <t d |  d | d | ƒ }	 | j |	 j ƒ  ƒ qE W| j | d | d d | ƒ | | | | <q+ W| S(   NR   R   R	   i    i   i   (   R   R   t   listt   xranget   lenR   t   appendR   (
   R   R   R	   t   epst   resultt   independent_params_epst   ipt   vst
   signed_epst   ca(    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_sgtbx_site_constraints.pyt   df_d_site_finite&   s    	!c      	   C   s÷   t  j ƒ  } t | ƒ } x§ t t | ƒ ƒ D]“ } g  } xU | | g D]F } | | | | | <t d |  d | d | ƒ }	 | j |	 j ƒ  ƒ qE W| j | d | d d | ƒ | | | | <q+ Wt | ƒ }
 | j	 t  j
 |
 |
 ƒ ƒ | j d d ƒ S(	   NR   R   R	   i    i   i   t   relative_epsilongñhãˆµøä>(   R   R   R#   R$   R%   R   R&   R   t   extendt   reshapet   gridR   (   R   R   R	   R'   R(   R)   R*   R+   R,   R-   t   np(    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_sgtbx_site_constraints.pyt   d2f_d_site_finite6   s     	!c         C   sÍ  |  j  d | ƒ |  j ƒ  } x¦t |  j ƒ  ƒ D]’\ } } | j } |  j ƒ  j | ƒ } t | j ƒ  | | ƒ sx t	 ‚ | j
 ƒ  } | j ƒ  j ƒ  d | j ƒ  k s¬ t	 ‚ | j ƒ  } | j ƒ  d k r÷ | d k sÜ t	 ‚ | j ƒ  d k s!t	 ‚ n* | d k  s	t	 ‚ | j ƒ  d k s!t	 ‚ | j d | ƒ }	 | j d |	 ƒ }
 t |
 | ƒ sZt	 ‚ xœ t d ƒ D]ˆ } t j |	 ƒ t j d | ƒ d	 } | j d t | ƒ ƒ } t | j ƒ  | | ƒ sÇt	 ‚ | d k së| j | | ƒ d
 k rgPqgqgWt	 ‚ | j d t j d d ƒ ƒ } t | ƒ | k s/t	 ‚ t | d g | ƒ sKt	 ‚ | j d t j d d ƒ ƒ } t | ƒ | | d d k s�t	 ‚ t | d g | | d d ƒ sµt	 ‚ t j t j d d ƒ d d } t d | d | d |	 ƒ } | d It | ƒ IJt d | d | d |	 ƒ } | j ƒ  } | d It | ƒ IJt | | ƒ sYt	 ‚ t  d | d | d |	 ƒ } | d It | ƒ IJ| j! ƒ  } | d It | ƒ IJt | | ƒ s/ t	 ‚ q/ W| Jd  S(   NR   i    i   i   R   R	   i
   t   sizeg      à?gš™™™™™¹?R   R   i   i   R   R   s
   grads_fin:s
   grads_ana:s
   curvs_fin:s
   curvs_ana:("   t   show_summaryt	   unit_cellt	   enumeratet
   scatterersR   t   site_symmetry_tablet   getR   t
   special_opt   AssertionErrorR   t   row_echelon_formt   focust   n_dependent_paramst   n_independent_paramst
   n_matricesR	   R   R$   R   R   t   random_doubleR#   t   distanceR   R%   R   R   t   piR.   R   R   R4   R    (   t	   structuret   outR7   t   i_scatterert	   scattererR   t   site_symmetry_opsR   t   nipR	   R   t   i_trialt   shifted_paramst   shifted_siteR   R   R   t	   grads_finR-   t	   grads_anat	   curvs_fint	   curvs_ana(    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_sgtbx_site_constraints.pyt   exerciseH   sv    				$		$(!			c         C   sÿ  xød d d d g D]ä} xÛd  t j d |  j ƒ  j ƒ  d d ƒ g D]¯} | d k r_ d } nJ | d  k r€ |  j ƒ  j ƒ  } n | j t ƒ } | |  j d	 | ƒ d 8} |  j ƒ  } y | j	 d
 | d	 | ƒ Wn‚ t
 k
 rS} | d  k	 r8| j t ƒ d k rt | ƒ d k s5t ‚ qPt | ƒ d k sPt ‚ qót | ƒ d k sót ‚ qD Xt t j |  j ƒ  | j ƒ  j ƒ  ƒ | d | ƒ s�t ‚ |  j ƒ  } | j	 d | d	 | ƒ t t j t j |  j ƒ  | j ƒ  j ƒ  ƒ ƒ | | ƒ sD t ‚ qD Wq Wd  S(   Ni    gffffffæ?g      ð?gÍÌÌÌÌÌô?R5   t	   thresholdg      à?i   t	   selectiont   rms_differences   No scatterers selected.s7   All selected scatterers are fixed on special positions.s.   All scatterers are fixed on special positions.t   mean_distance(   t   NoneR   t   random_boolR9   R5   t   countt   Truet$   coordinate_degrees_of_freedom_countst   deep_copy_scattererst   shake_sites_in_placet   RuntimeErrort   strR=   R   t   sumt
   sites_cartR   t   sqrt(   RF   t   target_differenceRU   t
   n_variablet   shakent   e(    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_sgtbx_site_constraints.pyt   exercise_shake_sites_in_placeˆ   sH    	"					c         C   s>  t  ƒ  j d  d d d d d ƒj d  d d d ƒj d |  ƒ } t j j d	 d
 d t j j	 ƒ } | d  k ru d GHd  S| j
 j r� t j } n	 t ƒ  } t j t | ƒ ƒ } xŒ t | j ƒ D]{ \ } } | j ƒ  } | j
 j d  k	 r| j
 j | j k rq» qn  | d I| j IJt d | d | ƒ t d | ƒ q» Wd  S(   Ns   --tagt   actiont   storet   typet   strings	   --verboset
   store_truet   argst   relative_paths,   phenix_regression/misc/strudat_zeolite_atlast   tests:   Skipping process_zeolite_atlas(): input file not availables   strudat tag:RF   RG   (   R   t   optionRX   t   processt   libtbxt   envt   find_in_repositoriest   ost   patht   isfilet   optionst   verboset   syst   stdoutR   R   t   read_all_entriest   openR8   t   entriest   as_xray_structuret   tagRS   Rh   (   Rn   t   command_linet
   atlas_fileRG   t   all_entriest   it   entryRF   (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_sgtbx_site_constraints.pyt   process_zeolite_atlas´   s2    							c           C   s   t  t j d ƒ t ƒ  GHd  S(   Ni   (   R‡   R{   t   argvR   (    (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_sgtbx_site_constraints.pyt   runÐ   s    t   __main__(    (   t
   __future__R    t   iotbx.kriberR   t   iotbx.option_parserR   t   cctbx.array_familyR   t   scitbxR   t   libtbx.utilsR   t   libtbx.test_utilsR   t   libtbx.load_envRs   t	   cStringIOR   R   R{   Rv   t   set_random_seedR   R.   R4   RS   Rh   R‡   R‰   R!   (    (    (    sY   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_sgtbx_site_constraints.pyt   <module>   s(   	@	,		