ó
ž™xTc           @   s  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 m	 Z	 d  d l
 m Z m Z d  d l m Z m Z m Z d  d l Z d  d l m Z d  d l Z d  d l Z d	 d
 „ Z d „  Z d „  Z e d k re e j d ƒ n  d S(   iÿÿÿÿ(   t   division(   t   ncsN(   t   monomer_library(   t   flex(   t   Sorryt   format_cpu_times(   t   Exception_expectedt   eps_eqt	   show_diff(   t   StringIOgü©ñÒMbP?c      
   C   sú   | j  ƒ  } g  } xá t | ƒ D]Ó \ } } g  } x§ t d ƒ D]™ } g  }	 xi | | g D]Z }
 t | ƒ } | | c |
 7<| | | <|  j d | d t d | ƒ } |	 j | j ƒ qX W| j |	 d |	 d d | ƒ q> W| j | ƒ | | | <q W| S(   Ni   t
   sites_cartt   compute_gradientst   sites_averagei    i   i   (   t	   deep_copyt	   enumeratet   xranget   listt   energies_sitest   Falset   appendt   residual_sum(   t   ncs_operatorsR
   R   t   epst	   gradientst   i_sitet   sitet   gradt   i_xt   tt
   signed_epst   site_modR   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ncs/tst_restraints_2.pyt    finite_difference_site_gradients   s&    
		%c         C   s  d d d d g } t  j j j d |  d d  d | d d	 d
 d d t ƒ } |  j j j ƒ  } | j	 d | ƒ } t
 ƒ  } | j d | d | d d ƒ t | j ƒ  d ƒ s­ t ‚ | j d | d t ƒ } | j d k sÚ t ‚ t | j d ƒ sò t ‚ t | j d ƒ s
t ‚ | j d  k st ‚ t | j d d d d g ƒ sCt ‚ | j d | ƒ } | j | j k smt ‚ | j | j k s…t ‚ | j | j k s�t ‚ t | j j ƒ  d ƒ s»t ‚ t | j | j ƒ sÖt ‚ g  |  j j D] } d | j ƒ  d ^ qã}	 t
 ƒ  } | j d |	 d | d d ƒ t | j ƒ  d d t d ƒ t d  d! ƒ t d" d# ƒ g ƒskt ‚ xM t | j t d$ | d | d% | j ƒ ƒ D]! \ }
 } t |
 | ƒ s–t ‚ q–W|  j ƒ  j ƒ  } | j d& | d' d( d t ƒ } | } | j d k st ‚ t | j d) ƒ st ‚ t | j | j ƒ s9t ‚ | j d  k sNt ‚ t | j d* d+ d, d- g ƒ srt ‚ | j d& | d' d( ƒ } | j | j k s¢t ‚ t | j | j ƒ s½t ‚ t | j | j ƒ sØt ‚ t | j j ƒ  d. ƒ söt ‚ t | j | j ƒ st ‚ t
 ƒ  } | j  d |	 d | d d/ ƒ t | j ƒ  j! d0 d1 ƒ d2 d t d ƒ t d3 d4 ƒ t d" d# ƒ g ƒs…t ‚ xÿ d( d5 d6 g D]î } t" j# ƒ  } d7 } x£ t$ | j% ƒ  ƒ D]� } g  } x_ | | g D]P } | j& ƒ  } | | c | 7<| j d& | d' | d t ƒ } | j' | j ƒ qÚW| j' | d# | d( d8 | ƒ qÀW| j d& | d' | ƒ } t | j | ƒ s•t ‚ q•Wt  j j( ƒ  } | j) j' | ƒ xZ dV dW g D]L \ } } | j) j' t  j j j d |  d d  d | d | d
 | d t ƒ ƒ q³W| j d& | d' d( ƒ } | j d; k s0t ‚ t | j d< ƒ sHt ‚ t | j | j ƒ sct ‚ t | j j ƒ  d= ƒ s�t ‚ | j d& | d' d( d> t* ƒ } | j d; k s´t ‚ t | j d< ƒ sÌt ‚ t | j | j d; ƒ sët ‚ t | j j ƒ  dX ƒ s	t ‚ x8 | j+ D]- } | d  k	 rt | | j ƒ s@t ‚ qqW| j+ d8 d  k s]t ‚ | j d | ƒ } | j d; k s„t ‚ t | j d? ƒ sœt ‚ t | j | j ƒ s·t ‚ t | j j ƒ  d@ ƒ sÕt ‚ | j d | d> t* ƒ } | j d; k st ‚ t | j d? ƒ st ‚ t | j | j d; ƒ s9t ‚ t | j j ƒ  dY ƒ sWt ‚ x8 | j+ D]- } | d  k	 rat | | j ƒ sŽt ‚ qaqaW| j+ d( d  k s«t ‚ t
 ƒ  } | j, d& | d |	 d | d dA ƒ t | j ƒ  dB d t d ƒ t dC d# ƒ g ƒs	t ‚ t
 ƒ  } | j- d | d | d dD ƒ t | j ƒ  dE d t dF ƒ t dG dH ƒ t dC d# ƒ g ƒsu	t ‚ t
 ƒ  } | j. d | d |	 d | d dI ƒ t | j ƒ  dJ d t dK ƒ t dL dM ƒ t dN d# ƒ g ƒsã	t ‚ | j/ ƒ  } | j% ƒ  dO k s
t ‚ | j0 t* ƒ d k s"
t ‚ t
 ƒ  } |  j1 dP | d | d dQ ƒ t | j ƒ  dR ƒ sc
t ‚ x) | j) D] } | j2 j3 d# k sm
t ‚ qm
W| j4 dS dT ƒ x) | j) D] } | j2 j3 dT k s©
t ‚ q©
W| j4 dS dF ƒ x) | j) D] } | j2 j3 dU k så
t ‚ qå
Wd  S(Z   Ns   chain As   chain Bs   chain Cs   chain Dt   processed_pdbt   reference_selection_stringt   selection_stringst   coordinate_sigmagš™™™™™©?t   b_factor_weightg�€&Â†§Û?t   special_position_warnings_onlyR
   t   outt   prefixs   {*s½  {*NCS operator 1:
{*  Reference selection: "chain A"
{*      Other selection: "chain B"
{*  Number of atom pairs: 22
{*  Rotation={{-0.925533, 0.322815, -0.197938},
{*            {0.329616, 0.429511, -0.840758},
{*            {-0.186393, -0.843393, -0.503931}}
{*  Translation={{163.62}, {-13.0292}, {44.8533}}
{*  Histogram of differences:
{*    0.092573 - 0.238983: 1
{*    0.238983 - 0.385393: 2
{*    0.385393 - 0.531803: 7
{*    0.531803 - 0.678214: 3
{*    0.678214 - 0.824624: 4
{*    0.824624 - 0.971034: 5
{*  RMS difference with respect to the reference: 0.653687
{*NCS operator 2:
{*  Reference selection: "chain A"
{*      Other selection: "chain C"
{*  Number of atom pairs: 32
{*  Rotation={{-0.988874, -0.139883, -0.0506023},
{*            {0.0139383, -0.425808, 0.904706},
{*            {-0.1481, 0.893935, 0.423021}}
{*  Translation={{177.315}, {18.2319}, {1.24026}}
{*  Histogram of differences:
{*    0.291817 - 0.418479: 2
{*    0.418479 - 0.545141: 9
{*    0.545141 - 0.671802: 5
{*    0.671802 - 0.798464: 10
{*    0.798464 - 0.925126: 3
{*    0.925126 - 1.051787: 3
{*  RMS difference with respect to the reference: 0.677436
{*NCS operator 3:
{*  Reference selection: "chain A"
{*      Other selection: "chain D"
{*  Number of atom pairs: 24
{*  Rotation={{0.950594, -0.191857, 0.244055},
{*            {-0.192933, -0.981014, -0.0197252},
{*            {0.243205, -0.0283355, -0.969561}}
{*  Translation={{6.77797}, {56.2476}, {-5.96327}}
{*  Histogram of differences:
{*    0.270982 - 0.414517: 3
{*    0.414517 - 0.558053: 3
{*    0.558053 - 0.701588: 7
{*    0.701588 - 0.845124: 6
{*    0.845124 - 0.988659: 2
{*    0.988659 - 1.132195: 3
{*  RMS difference with respect to the reference: 0.724248
R   in   gÒJ)
f»@gÙ<­’bÚ?gÍ©þþ´hØ?gYxapÙ?g©™�Ûê™Ù?gÙÅ6ý+ª@t   "t   site_labelss   #^s  #^NCS selection: "chain A"
#^                     Distance to NCS average
#^  " N   GLN A   1 ":   0.4263
#^  " CA  GLN A   1 ":   0.2141
#^  " C   GLN A   1 ":   0.4052
...
#^  " CA  THR B   6 ":   0.4001
#^  " C   THR B   6 ":   0.6281
#^NCS selection: "chain C"
#^                     Distance to NCS average
#^  " N   GLN C   1 ":   0.4135
#^  " CA  GLN C   1 ":   0.5070
...
#^  " C   SER D   4 ":   0.6943
#^  " CA BSER D   4 ":   0.4444
#^  " N   THR D   6 ":   0.3724
#^  " CA  THR D   6 ":   0.4129
#^  " C   THR D   6 ":   0.4017
t
   selectionsi   i8   i>   iûÿÿÿi    R   R   t   u_isost   average_poweri   gë"�*lÃñ?gƒ~:–@g! ¨Å+õ@gK'²<)±@gÍe¾# V@gÚÿ»Ô@s   Y$s    7.66 = s    7.65 = sä  Y$NCS selection: "chain A"
Y$                       B-iso   NCS ave  Difference
Y$  " N   GLN A   1 ":   11.77 -   12.08 =  -0.3133
Y$  " CA  GLN A   1 ":    9.09 -    9.28 =  -0.1933
Y$  " C   GLN A   1 ":   15.40 -   12.05 =   3.3500
...
Y$  " CA  THR A   6 ":    3.98 -    7.65 =  -3.6750
Y$  " C   THR A   6 ":   14.64 -   10.99 =   3.6475
Y$NCS selection: "chain B"
Y$                       B-iso   NCS ave  Difference
Y$  " N   GLU B   2 ":   12.87 -   10.35 =   2.5225
...
Y$  " C   SER D   4 ":    7.29 -   10.45 =  -3.1575
Y$  " CA BSER D   4 ":    5.23 -    7.00 =  -1.7667
Y$  " N   THR D   6 ":    4.55 -    8.69 =  -4.1425
Y$  " CA  THR D   6 ":    8.78 -    7.65 =   1.1250
Y$  " C   THR D   6 ":   10.80 -   10.99 =  -0.1925
i    i%   g®Gázæ?gffffffÖ?g�íµ ÷Æ°>i   gX9´Èv¾ó?gš™™™™™¹?iÜ   g¯?£Ú‚@gâé.ta1@t   normalizationgé½ÎYÆÁ@g›†ÑA~[°@s   W@s<  W@NCS restraint group 1:
W@  weight: 0.4321
W@  NCS selection: "chain A"
W@                         B-iso   NCS ave  Difference
W@    " N   GLN A   1 ":   11.77 -   12.08 =  -0.3133
...
W@    " C   THR D   6 ":   10.80 -   10.99 =  -0.1925
W@NCS restraint group 3:
W@  b_factor_weight: None  =>  restraints disabled
iýÿÿÿs   K&s®  K&NCS restraint group 1:
K&  NCS operator 1:
K&    Reference selection: "chain A"
...
K&      0.824624 - 0.971034: 5
K&    RMS difference with respect to the reference: 0.653687
K&  NCS operator 2:
K&    Reference selection: "chain A"
K&        Other selection: "chain C"
K&    Number of atom pairs: 32
...
K&      0.845124 - 0.988659: 2
K&      0.988659 - 1.132195: 3
K&    RMS difference with respect to the reference: 0.724248
i   i   i   t   [sò  [NCS restraint group 1:
[  coordinate_sigma: 0.05
[  weight:  400
[  NCS selection: "chain A"
[                       Distance to NCS average
[    " N   GLN A   1 ":   0.4263
...
[    " C   THR D   6 ":   0.4017
[NCS restraint group 2:
[  coordinate_sigma: None  =>  restraints disabled
[NCS restraint group 3:
[  coordinate_sigma: 0.1
[  weight:  100
[  NCS selection: "chain A"
[                       Distance to NCS average
[    " N   GLN A   1 ":   0.4263
...
[    " C   THR D   6 ":   0.4017
i   ix   i�   iÿÿÿÿi„   t   ncs_restraints_groupss   %&sn  %&Atoms without NCS restraints:
%&MODEL        1
%&ATOM     20  N   ALA B   3     111.517   7.175  -8.669  1.00 10.73           N
%&ATOM     21  CA  ALA B   3     112.152   8.103  -8.026  1.00 16.28           C
%&ATOM     22  C   ALA B   3     111.702   8.243  -5.903  1.00  9.19           C
%&ATOM     24  CA  SER B   4     111.797   9.689  -4.364  1.00  8.91           C
%&TER
%&ATOM     38  N   ALA C   3     109.043  27.391  28.663  1.00 15.05           N
%&ATOM     39  CA  ALA C   3     109.073  26.531  28.433  1.00  3.14           C
%&ATOM     40  C   ALA C   3     108.930  26.867  26.637  1.00 15.22           C
%&TER
%&ATOM     57  N   ALA D   3      65.439   9.903 -12.471  1.00  7.59           N
%&ATOM     58  CA  ALA D   3      65.019   9.566 -11.201  1.00 15.62           C
%&ATOM     59  C   ALA D   3      65.679  11.045 -11.097  1.00  2.65           C
%&ATOM     61  CA CSER D   4      65.657  12.870  -8.333  1.00  5.84           C
%&TER
%&ENDMDL
%&MODEL        2
%&ATOM     86  N   ALA B   3     111.984   7.364  -8.288  1.00  3.16           N
%&ATOM     87  CA  ALA B   3     112.389   8.456  -7.544  1.00 12.73           C
%&ATOM     88  C   ALA B   3     111.615   8.267  -6.238  1.00  7.17           C
%&ATOM     90  CA  SER B   4     111.707   9.131  -4.317  1.00 13.83           C
%&TER
%&ATOM    104  N   ALA C   3     109.237  27.879  29.334  1.00  6.45           N
%&ATOM    105  CA  ALA C   3     109.043  26.399  28.156  1.00 15.21           C
%&ATOM    106  C   ALA C   3     108.983  26.760  27.178  1.00 11.73           C
%&TER
%&ATOM    123  N   ALA D   3      65.188  10.335 -12.959  1.00  6.94           N
%&ATOM    124  CA  ALA D   3      65.543   9.614 -11.242  1.00  5.18           C
%&ATOM    125  C   ALA D   3      65.064  11.402 -10.648  1.00 16.01           C
%&ATOM    127  CA CSER D   4      65.127  12.969  -9.218  1.00  9.03           C
%&TER
%&ENDMDL
t   numberi
   i   (   NgX9´Èv¾ó?(   gš™™™™™¹?NgÝÙ‹9´?g;6Z'¸3@(5   R   t
   restraintst   groupt   from_atom_selectionst   NoneR   t   all_chain_proxiest	   pdb_atomst   extract_xyzt	   operatorsR	   t   showR   t   getvaluet   AssertionErrorR   t   number_of_restraintsR   R   t   targetR   t   rms_with_respect_to_averaget   normt   pdb_label_columnst   show_distances_to_averaget   ranget   zipR   R   t   xray_structuret   extract_u_iso_or_u_equivt   energies_adp_isot   show_differences_to_averaget   replaceR   t   doubleR   t   sizeR   R   t   groupst   memberst   Truet   rms_with_respect_to_averagest#   show_adp_iso_differences_to_averaget   show_operatorst   show_sites_distances_to_averaget   selection_restrainedt   countt!   show_atoms_without_ncs_restraintst   registryt#   number_of_additional_isolated_sitest"   register_additional_isolated_sites(   R    R"   R2   R
   R   R&   t   energies_sites_no_gradientsR   t   atomR)   t   agt   fgR+   t   engt   energies_adp_iso_no_gradientsRF   R,   t   finite_difference_gradientsR   t   i_u_isot   rsR   t
   u_isos_epst   energiesRK   R#   R$   t   rmst	   selection(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ncs/tst_restraints_2.pyt   exercise_two_models_with_holes'   sB   		1			*		7					7		%						
+	7		7		"c   
      C   sK  d |  k } | r t  j } n d  } t j j ƒ  } t j j ƒ  } t j j d d d t	 j
 j ƒ } | d  k rw d GHnÈx=d d g D]/} t j j d | d	 | d
 t	 j
 j | | ƒ d | ƒ } t j j j d | d d  d d d g d d  d d  d t ƒ } t | j ƒ d k st ‚ t | j d d ƒ d d d d g k sFt ‚ | d k r„t | j d d ƒ d d d d g k s³t ‚ q„ t | j d d ƒ d d d d g k s„ t ‚ q„ Wt j j d | d	 | d
 t	 j
 j | d ƒ d | ƒ } y> t j j j d | d d  d d d g d d  d d  d t ƒ Wn/ t k
 r\}	 t t |	 ƒ d ƒ sct ‚ n Xt ‚ y> t j j j d | d d  d d d g d d  d d  d t ƒ Wn/ t k
 rÒ}	 t t |	 ƒ d  ƒ sÙt ‚ n Xt ‚ t j j d | d	 | d
 t	 j
 j | d! ƒ d | ƒ } y> t j j j d | d d  d d d" g d d  d d  d t ƒ Wn/ t k
 r~}	 t t |	 ƒ d# ƒ s…t ‚ n Xt ‚ t ƒ  } t j j j d | d d  d d d" g d d  d d  d t d | ƒ } t | j ƒ  d$ ƒ sìt ‚ t | j ƒ d k st ‚ t | j d d ƒ d d d d d d d d d% d& g
 k sHt ‚ t | j d d ƒ d' d( d) d* d+ d, d- d. d/ d0 g
 k s‰t ‚ t j j d | d	 | d
 t	 j
 j | d1 ƒ d | ƒ } yA t j j j d | d d  d d d d2 g d d  d d  d t ƒ Wn/ t k
 r1}	 t t |	 ƒ d3 ƒ s2t ‚ n Xt d | ƒ t  ƒ  GHd  S(4   Ns	   --verboset   relative_paths   phenix_regression/ncst   tests.   Skipping exercise(): input files not availables
   simple.pdbs   ambiguous_alignment.pdbt   mon_lib_srvt   ener_libt	   file_namet   logR    R!   R"   s   chain As   chain BR#   R$   R%   i   i    i   i   i   i   i   i   i   s   no_match.pdbs‡   NCS restraints selections do not produce any pairs of matching atoms:
  Reference selection: "chain A"
      Other selection: "chain B"s   chain Cs„   NCS restraints selections produce only one pair of matching atoms:
  Reference selection: "chain A"
      Other selection: "chain C"s   special_position.pdbs   chain Dsy   NCS selection includes an atom on a special position:
  Selection: "chain A"
    "ATOM    456  NE  ARG A  60 .*.     N  "sƒ   WARNING: NCS selection includes an atom on a special position:
  Selection: "chain A"
    "ATOM    456  NE  ARG A  60 .*.     N  "
i	   i
   i   i   i   i   i   i   i   i   i   i   s   two_models_with_holes.pdbs   chain B and resname SERs  Two different NCS operators applied to same pair of atoms:
       Reference selection: "chain A"
  Previous other selection: "chain B"
   Current other selection: "chain B and resname SER"
    "ATOM      7  N   SER A   4 .*.     N  "
    "ATOM     23  N   SER B   4 .*.     N  "(!   t   syst   stdoutR4   R   t   serverRi   t   libtbxt   envt   find_in_repositoriest   ost   patht   isdirt   pdb_interpretationt   processt   joinR   R1   R2   R3   R   t   lent   selection_pairsR;   R   R   R   t   strR   R	   RM   R:   Re   R   (
   t   argst   verboseRk   Rh   Ri   t   ncs_dirRj   R    R2   t   e(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ncs/tst_restraints_2.pyt   exercisel  sÖ    		/23				AA	t   __main__i   (   t
   __future__R    t   mmtbxR   t   mmtbx.ncs.restraintsR   t   mmtbx.monomer_library.servert(   mmtbx.monomer_library.pdb_interpretationt   cctbx.array_familyR   t   libtbx.utilsR   R   t   libtbx.test_utilsR   R   R   t   libtbx.load_envRo   t	   cStringIOR	   Rl   Rr   R   Re   R   t   __name__t   argv(    (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ncs/tst_restraints_2.pyt   <module>   s"   	ÿ F	€