ó
Õ™xTc           @   s1  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	 m
 Z
 d  d l m Z d  d l j j Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d Z d e f d	 „  ƒ  YZ d
 „  Z d „  Z d „  Z d „  Z e d k r-e ƒ  e ƒ  e ƒ  e ƒ  n  d S(   iÿÿÿÿ(   t   division(   t   multimerN(   t   approx_equal(   t   flex(   t   adopt_init_argss4  MTRIX1   1  1.000000  0.000000  0.000000        0.00000    1
MTRIX2   1  0.000000  1.000000  0.000000        0.00000    1
MTRIX3   1  0.000000  0.000000  1.000000        0.00000    1
MTRIX1   2  0.496590 -0.643597  0.582393        0.00000
MTRIX2   2  0.867925  0.376088 -0.324443        0.00000
MTRIX3   2 -0.010221  0.666588  0.745356        0.00000
MTRIX1   3 -0.317946 -0.173437  0.932111        0.00000
MTRIX2   3  0.760735 -0.633422  0.141629        0.00000
MTRIX3   3  0.565855  0.754120  0.333333        0.00000
ATOM      1  N   THR A   1       8.111  11.079  10.645  1.00 20.00           N
ATOM      2  CA  THR A   1       8.000   9.721  10.125  1.00 20.00           C
ATOM      3  C   THR A   1       8.075   8.693  11.249  1.00 20.00           C
ATOM      4  O   THR A   1       8.890   8.817  12.163  1.00 20.00           O
ATOM      5  CB  THR A   1       9.101   9.420   9.092  1.00 20.00           C
ATOM      6  OG1 THR A   1       9.001  10.342   8.000  1.00 20.00           O
ATOM      7  CG2 THR A   1       8.964   8.000   8.565  1.00 20.00           C
TER
t   ncs_minimization_testc           B   s/   e  Z d  d d d d „ Z d „  Z d „  Z RS(   g      ø?i   gìQ¸…ë¡?g      à?c         C   s´  t  |  t ƒ  ƒ g  |  _ t j j d d# d t ƒ } t j j j d t ƒ } | j	 ƒ  } | j
 ƒ  } | j ƒ  } | j d d ƒ } | j | ƒ t d d ƒ } | | j ƒ  IJ| | j d | j ƒ  ƒ IJ| j ƒ  t d	 d d
 t d d d t d d ƒ } | j d k st | j ƒ ‚ | j j d | j ƒ  ƒ } | j d ƒ | j | j ƒ  ƒ | j ƒ  j | j ƒ  ƒ sut ‚ t | j d | d d ƒ j ƒ  ƒ } | j  ƒ  } | j! d d ƒ } | j" d | d d ƒ | j# ƒ  } | j d	 d ƒ | j$ ƒ  } | r| j% d | ƒ n  |  j& rGt' j( | j) ƒ  j* ƒ  ƒ } | j+ d | ƒ } n  |  j, rÈt j- j d | d | ƒ } t. j/ d | ƒ } t. j0 d | d  |  j1 d! |  j2 ƒ } t. j3 d | d | ƒ } | j4 ƒ  } n  | j | ƒ t d" d ƒ } | | j ƒ  IJ| | j d | j ƒ  ƒ IJ| j ƒ  | |  _5 | |  _6 | |  _7 d# |  _8 | j j d | j ƒ  ƒ } d# |  _9 |  j: r°t. j; d | ƒ |  _8 |  j& r°t< j= j> j? } | j@ ƒ  jA |  _9 q°n  d# S($   s+    create temp test files and data for tests t   source_infot   linest
   pdb_stringt   buffer_sizei   s   one_ncs_in_asu.pdbt   wt   crystal_symmetryt	   file_namet   round_coordinatest   reconstruction_typet   caut   error_handlet   epsg{®Gáz„?i   s   full_asu.pdbt   d_mint	   algorithmt   directt   column_root_labels   F-obst   miller_arrays   R-free-flagss   data.mtzt   mean_distancet   valuest   transform_infot   pdb_hierarchy_inpt   transforms_objt   xt   shake_angles_sigmat   shake_translation_sigmas   one_ncs_in_asu_shaken.pdbN(B   R   t   localst   test_files_namest   iotbxt   pdbt   inputt   Nonet
   ncs_1_copyt	   hierarchyt   process_mtrix_recordst   construct_hierarchyt   xray_structure_simplet1   orthorhombic_unit_cell_around_centered_scattererst   adopt_xray_structuret   opent   as_pdb_stringR   t   closeR   t   Falset   Truet   number_of_transformst   AssertionErrort   assembled_multimert   extract_xray_structuret   writet   set_sites_cartt
   sites_cartt   is_similar_symmetryt   abst   structure_factorst   f_calct   generate_r_free_flagst   as_mtz_datasett   add_miller_arrayt
   mtz_objectt   deep_copy_scattererst   shake_sites_in_placet   u_isoR   t   random_doublet
   scattererst   sizet	   set_u_isot   transformationst   ncst   nut   concatenate_rot_trant   shake_transformationsR   R   t   update_rot_trant   build_MTRIX_objectt   f_obst   r_free_flagst   xrs_one_ncst   grmt   iso_restraintst   use_geometry_restraintst   get_restraints_managert   mmtbxt
   refinementt   adp_refinementt   adp_restraints_master_paramst   extractt   iso(   t   selft   n_macro_cyclet   sitesRB   RG   t   finite_grad_differences_testRS   t   shake_site_mean_distanceR   R   R   t   pdb_inpt   pdb_objt   mtrix_objectt   pht   xrsRP   t   oft   mt   xrs_asuRN   RO   t   mtz_datasetR?   t
   xrs_shakent   u_randomR   R   t   pdb_strt   temp(    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/tst_minimization_ncs_constraints.pyt   __init__(   s†    			
$	 	
					
							c         C   sR  t  j j j ƒ  } d | _ t d d d t d d d t d d	 ƒ } | j j	 d
 |  j
 j ƒ  ƒ } | j | j ƒ  ƒ | j d d d
 |  j
 j ƒ  ƒ | j } | j ƒ  |  _ t j t | j ƒ ƒ |  _ t j d | j ƒ  d |  j ƒ |  _ |  j j ƒ  d k st ‚ t  j j d |  j d |  j d | d | d d ƒ |  _ |  j j  ƒ  } | d k sat | ƒ ‚ d | GHxÀt! |  j" ƒ D]¯} |  j# r™|  j r™qzn  d  } |  j% r½t j& d |  ƒ } n  t  j' j( j) d |  j d |  j d |  j d |  j* d | d |  j+ d |  j, d |  j# d |  j- ƒ 	} t  j' j( j. d  | d |  j j/ d |  j d |  j d! |  j0 d" d# d |  j+ d |  j, d |  j# ƒ 	}	 d$ |  j, d% |  j+ d& |  j# }
 d' |  j0 d( } | j1 | |
 |  j j  ƒ  |	 j2 ƒ GH|	 j2 d) k  sét ‚ t3 |  j j  ƒ  | j j  ƒ  ƒ st ‚ | j j  ƒ  d* k  rzPqzqzW|  j, rZt3 |  j j  ƒ  d+ d, ƒ sít ‚ n“ |  j+ r´|  j% r�t3 |  j j  ƒ  d+ d- ƒ s±t ‚ qít3 |  j j  ƒ  d+ d, ƒ sít ‚ n9 |  j# rát3 |  j j  ƒ  d+ d- ƒ sít ‚ n d+ sít ‚ |  j j/ } | j j4 |  j j/ ƒ d. t5 |  j, ƒ t5 |  j+ ƒ f } | j | ƒ |  j6 j7 | ƒ |  j% sNt8 j9 j: d/ d  d0 t; ƒ } t8 j9 j: d | ƒ } | j< ƒ  } | j< ƒ  j= |	 j ƒ } t  j> j? d1 | d2 | d% t ƒ t j@ | jA ƒ  g | jB ƒ  j ƒ  ƒ t j@ | jA ƒ  g | jB ƒ  j ƒ  ƒ } | j d3 | j ƒ  | ƒ t  j> j? d1 | d2 | ƒ n  d  S(4   NR   R   s   one_ncs_in_asu_shaken.pdbR   R   R   R   R   g{®Gáz„?R   t   pdb_output_file_names   asu_shaken.pdbt   ncs_restraints_group_listt   refine_selectioni   RN   RO   t   xray_structuret   sf_and_grads_accuracy_paramst   target_namet   ls_wunit_k1gš™™™™™¹?s   start r_factor: %6.4ft   minimized_objt   fmodelt   restraints_managert   data_weightt   refine_sitest   refine_u_isot   refine_transformationsRR   t   target_and_grads_objectR^   t   max_iterationsid   t   adpR]   t   transformations1     macro_cycle {0:3} ({1})   r_factor: {2:6.4f}   s#   finite_grad_difference_val: {3:.4f}gü©ñÒMbP?g�íµ ÷Æ°>i    gñhãˆµøä>g-Cëâ6?s   refined_u_iso%s_sites%s.pdbR   R   t   x1t   x2R7   (C   RU   t   f_modelt#   sf_and_grads_accuracy_master_paramsRY   R   R   R/   R0   R3   R4   RP   R   R6   R7   R5   R   t   get_ncs_restraints_group_listRo   R   t   size_tt   ranget   total_asu_lengthRp   RI   t   get_extended_ncs_selectiont   extended_ncs_selectionRE   R2   t   managerRN   RO   Rv   t   r_workt   xrangeR\   RG   R$   RS   t
   get_weightRV   t   minimization_ncs_constraintst*   target_function_and_grads_reciprocal_spaceRQ   R]   RB   RR   t   lbfgsRq   R^   t   formatt   finite_grad_difference_valR   R+   t   strR    t   appendR!   R"   R#   R%   R)   t   selectt   utilst   assert_xray_structures_equalt   vec3_doublet   center_of_massRD   (   R[   t   paramst   m_shakent   xrs_shaken_asut   tr_objt   r_startt   macro_cycleRx   R|   t	   minimizedt   refine_typet   outstrt   xrs_refinedt   output_file_namet   pdb_inp_answert   pdb_inp_refinedt   xrs1t   xrs2t   delta(    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/tst_minimization_ncs_constraints.pyt   run_test}   sÂ    								
 													#' 	$		$$	$	%)c         C   s\   d d d d d g } | j  |  j ƒ x0 | D]( } t j j | ƒ r, t j | ƒ q, q, Wd S(   s   delete temporary test files s   one_ncs_in_asu.pdbs   full_asu.pdbs   one_ncs_in_asu_shaken.pdbs   asu_shaken.pdbs   data.mtzN(   t   extendR    t   ost   patht   isfilet   remove(   R[   t   files_to_deletet   fn(    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/tst_minimization_ncs_constraints.pyt   clean_up_temp_test_filesë   s     (   t   __name__t
   __module__Rm   Rª   R²   (    (    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/tst_minimization_ncs_constraints.pyR   &   s   	K	nc          C   s˜   d Gt  j ƒ  j j GHx| t t d f t t d f g D]\ \ }  } } t d | d |  d | d t d t d	 t d
 d d d ƒ } | j ƒ  | j ƒ  q4 Wd  S(   Ns   Running id   i2   R\   R]   RB   RG   R^   RS   R_   g      à?R   g       @(	   t   syst	   _getframet   f_codet   co_nameR0   R/   R   Rª   R²   (   R]   RB   R\   t   t(    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/tst_minimization_ncs_constraints.pyt#   exercise_without_geometry_restaintsô   s    .	
c          C   sf   d Gt  j ƒ  j j GHt d d d t d t d t d t d t d	 d
 d d ƒ }  |  j ƒ  |  j ƒ  d  S(   Ns   Running R\   i(   R]   RB   RG   R^   RS   R_   g      ø?R   i   (	   Rµ   R¶   R·   R¸   R   R0   R/   Rª   R²   (   R¹   (    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/tst_minimization_ncs_constraints.pyt   exercise_site_refinement  s    	
c          C   sf   d Gt  j ƒ  j j GHt d d d t d t d t d t d t d	 d
 d d ƒ }  |  j ƒ  |  j ƒ  d  S(   Ns   Running R\   i(   R]   RB   RG   R^   RS   R_   g      ø?R   i   (	   Rµ   R¶   R·   R¸   R   R/   R0   Rª   R²   (   R¹   (    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/tst_minimization_ncs_constraints.pyt   exercise_u_iso_refinement  s    	
c          C   sl   d Gt  j ƒ  j j GHt d d d t d t d t d t d t d	 d
 d d d d ƒ 	}  |  j ƒ  |  j ƒ  d S(   s"     Test transformation refinement  s   Running R\   i(   R]   RB   RG   R^   RS   R   gü©ñÒMb ?R   g      à?R   i   N(	   Rµ   R¶   R·   R¸   R   R/   R0   Rª   R²   (   R¹   (    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/tst_minimization_ncs_constraints.pyt"   exercise_transformation_refinement  s    	
t   __main__(    t
   __future__R    t!   iotbx.pdb.multimer_reconstructionR   t-   mmtbx.refinement.minimization_ncs_constraintsRU   t   libtbx.test_utilsR   t   mmtbx.refinement.adp_refinementt   scitbx.array_familyR   t   libtbxR   t   mmtbx.ncs.ncs_utilsRH   t	   ncs_utilsRI   t   mmtbx.f_modelt   mmtbx.utilst	   iotbx.ncsR!   t	   iotbx.pdbRµ   R¬   R%   t   objectR   Rº   R»   R¼   R½   R³   (    (    (    s_   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/refinement/tst_minimization_ncs_constraints.pyt   <module>   s0   Î				