ó
ž™xTc           @   sû   d  d l  m Z d  d l m Z d  d l m Z d  d l j j Z	 d  d l
 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 d  d l Z d Z d Z d	 Z d
 e j f d „  ƒ  YZ d „  Z e d k r÷ e j ƒ  n  d S(   iÿÿÿÿ(   t   division(   t   approx_equal(   t   flexN(   t   matrix(   t   pdbs  ATOM      1  N   THR A   1       9.670  10.289  11.135  1.00 20.00           N
ATOM      2  CA  THR A   1       9.559   8.931  10.615  1.00 20.00           C
ATOM      3  C   THR A   1       9.634   7.903  11.739  1.00 20.00           C
ATOM      4  O   THR B   1      10.449   8.027  12.653  1.00 20.00           O
ATOM      5  CB  THR B   1      10.660   8.630   9.582  1.00 20.00           C
ATOM      6  OG1 THR A   1      10.560   9.552   8.490  1.00 20.00           O
ATOM      7  CG2 THR A   1      10.523   7.209   9.055  1.00 20.00
sÂ  CRYST1   18.415   14.419   12.493  90.00  90.00  90.00 P 1
ATOM      1  N   THR A   1      11.782  12.419   4.645  1.00 10.00           N
ATOM      2  CA  THR A   1      11.671  11.061   4.125  1.00 10.00           C
ATOM      3  C   THR A   1      11.746  10.033   5.249  1.00 10.00           C
ATOM      4  O   THR A   1      12.561  10.157   6.163  1.00 10.00           O
ATOM      5  CB  THR A   1      12.772  10.760   3.092  1.00 10.00           C
ATOM      6  OG1 THR A   1      12.672  11.682   2.000  1.00 10.00           O
ATOM      7  CG2 THR A   1      12.635   9.340   2.565  1.00 10.00           C
TER
ATOM      1  N   THR B   1       6.768   9.093   9.237  1.00 10.00           N
ATOM      2  CA  THR B   1       7.284   8.654   7.945  1.00 10.00           C
ATOM      3  C   THR B   1       8.638   7.968   8.097  1.00 10.00           C
ATOM      4  O   THR B   1       9.495   8.426   8.852  1.00 10.00           O
ATOM      5  CB  THR B   1       7.423   9.832   6.963  1.00 10.00           C
ATOM      6  OG1 THR B   1       6.144  10.446   6.765  1.00 10.00           O
ATOM      7  CG2 THR B   1       7.962   9.350   5.625  1.00 10.00           C
TER
ATOM      1  N   THR C   1       9.093   2.000  10.493  1.00 10.00           N
ATOM      2  CA  THR C   1       8.879   2.702   9.233  1.00 10.00           C
ATOM      3  C   THR C   1      10.081   3.570   8.875  1.00 10.00           C
ATOM      4  O   THR C   1      10.652   4.241   9.734  1.00 10.00           O
ATOM      5  CB  THR C   1       7.618   3.584   9.284  1.00 10.00           C
ATOM      6  OG1 THR C   1       6.472   2.770   9.559  1.00 10.00           O
ATOM      7  CG2 THR C   1       7.417   4.305   7.960  1.00 10.00           C
END
sÂ  CRYST1   18.415   14.419   12.493  90.00  90.00  90.00 P 1
ATOM      1  N   THR A   1      11.120  12.388   4.399  1.00 10.00           N
ATOM      2  CA  THR A   1      11.623  11.024   4.280  1.00 10.00           C
ATOM      3  C   THR A   1      12.335  10.587   5.556  1.00 10.00           C
ATOM      4  O   THR A   1      13.094  11.353   6.149  1.00 10.00           O
ATOM      5  CB  THR A   1      12.588  10.881   3.089  1.00 10.00           C
ATOM      6  OG1 THR A   1      11.911  11.230   1.876  1.00 10.00           O
ATOM      7  CG2 THR A   1      13.099   9.452   2.986  1.00 10.00           C
TER
ATOM      8  N   THR B   1       7.221   8.778   9.110  1.00 10.00           N
ATOM      9  CA  THR B   1       7.661   8.575   7.734  1.00 10.00           C
ATOM     10  C   THR B   1       9.058   7.965   7.687  1.00 10.00           C
ATOM     11  O   THR B   1       9.944   8.359   8.445  1.00 10.00           O
ATOM     12  CB  THR B   1       7.660   9.895   6.941  1.00 10.00           C
ATOM     13  OG1 THR B   1       6.338  10.446   6.927  1.00 10.00           O
ATOM     14  CG2 THR B   1       8.122   9.659   5.511  1.00 10.00           C
TER
ATOM     15  N   THR C   1       8.639   1.605   9.684  1.00 10.00           N
ATOM     16  CA  THR C   1       8.751   2.735   8.769  1.00 10.00           C
ATOM     17  C   THR C   1      10.144   3.354   8.827  1.00 10.00           C
ATOM     18  O   THR C   1      10.716   3.520   9.904  1.00 10.00           O
ATOM     19  CB  THR C   1       7.704   3.820   9.080  1.00 10.00           C
ATOM     20  OG1 THR C   1       6.388   3.265   8.969  1.00 10.00           O
ATOM     21  CG2 THR C   1       7.842   4.986   8.114  1.00 10.00           C
END
t   Test_ncs_utilsc           B   s°   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s�   
  Consider R = Rx(alpha)Ry(beta)Rz(gamma)

  Test the conversion of rotation angles to rotation matrix
  and the rotation matrix to angle
  c      	   C   sC  t  j d d  d! g ƒ |  _ t  j d" d# d$ g ƒ |  _ t  j d% d& d' g ƒ |  _ t  j d( ƒ |  _ t  j d t j d d f ƒ |  _	 t  j d t j d d f ƒ |  _
 t  j d) ƒ d t j |  _ t j |  j j ƒ  ƒ |  _ t j |  j j ƒ  ƒ |  _ t j |  j j ƒ  ƒ |  _ t j d* d+ ƒ |  _ t j d, d- ƒ |  _ t j d. d/ ƒ |  _ |  j |  j g |  j |  j g |  j |  j g g |  _ t j j d t ƒ |  _ t j j d |  j d |  j |  j g d |  j |  j g ƒ |  _ t j j d |  j d |  j |  j |  j g d |  j |  j |  j g ƒ |  _ |  j j  ƒ  |  _! d  S(0   Ng�7ù-:YÔ¿gKu/3Æ¿gI½§rÚÓí?g�…=íðWè?g%$Ò6þDä¿gÀ$•)æ Â?gæèñ{â?gýM(DÀ!è?gF]kïSUÕ?i    i   g–?ßé?g¼²×Üã¿g¼²×Üã?iÿÿÿÿgà¡(Ð'ò¸?g@mT§Ùï¿gà¡(Ð'ò¸¿g5Ìu¿¯¶Ù¿gU£W4ó?g¨t¸B#@i   i´   g      à?g      à¿i   t
   pdb_stringt   pdb_hierarchy_inpt	   rotationst   translations(   g�7ù-:YÔ¿gKu/3Æ¿gI½§rÚÓí?(   g�…=íðWè?g%$Ò6þDä¿gÀ$•)æ Â?(   gæèñ{â?gýM(DÀ!è?gF]kïSUÕ?(   i    i    i   (   g–?ßé?g¼²×Üã¿i    (   g¼²×Üã?g–?ßé?i    (   i    i    iÿÿÿÿ(   gà¡(Ð'ò¸?g@mT§Ùï¿i    (   g@mT§Ùï¿gà¡(Ð'ò¸¿i    (   g5Ìu¿¯¶Ù¿gU£W4ó?g¨t¸B#@(   g5Ìu¿¯¶Ù¿gU£W4ó?g¨t¸B#@(   g      à?g      à¿i    (   i   i   (   i    i    i    (   i   i   (   i    i   i   (   i   i   ("   R   t   vec3_doublet   rot1t   rot2t   rot3t   doublet   rot_angles1t   matht   pit   rot_angles2t   rot_angles3t   rot_angles1_degR   t   sqrt	   as_doublet	   rotation1t	   rotation2t	   rotation3t   rect   translation1t   translation2t   translation3t   r_tR   t	   hierarchyt   inputt   test_pdb_strt   pdb_objt   iotbxt   ncst   tr_obj1t   tr_obj2t   get_ncs_restraints_group_listt   ncs_restraints_group_list(   t   self(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ncs/tst_ncs_utils.pyt   setUpW   sL    		c         C   sr   t  j ƒ  j j GHt j |  j ƒ } t j d d d d d d d d d d d d g ƒ } t	 | | d	 ƒ sn t
 ‚ d
 S(   s;    Verify correct concatenation of rotation and translations gÄ¹´¯¶Ù¿gá†RZ4ó?gð­²B#@g      à?g      à¿g        guaœ¦lì@gßm Uû!ù?g-Cëâ6?N(   t   syst	   _getframet   f_codet   co_namet   nut   concatenate_rot_tranR%   R   R   R   t   AssertionError(   R)   t   resultst   expected(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ncs/tst_ncs_utils.pyt   test_concatenate_rot_tran„   s    c         C   sÕ   t  j ƒ  j j GHt j d d d d d d d d d d d d g ƒ } t j d	 | d
 |  j ƒ |  _ t j	 d
 |  j ƒ \ } } |  j
 |  j g } |  j |  j g } t | | d ƒ s¹ t ‚ t | | d ƒ sÑ t ‚ d S(   se   
    Verify correct conversion from angles and translation
    to rotation matrices and translations gÄ¹´¯¶Ù¿gá†RZ4ó?gð­²B#@g      à?g      à¿g        guaœ¦lì@gßm Uû!ù?t   xt   transforms_objg-Cëâ6?N(   R+   R,   R-   R.   R   R   R/   t   update_rot_tranR%   t    get_rotation_translation_as_listR   R   R   R   R   R1   (   R)   R5   t   rot_resultst   tran_resultst   rot_expectedt   tran_expected(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ncs/tst_ncs_utils.pyt   test_update_rot_tran�   s    		c         C   s1  t  j ƒ  j j GH|  j } |  j j ƒ  } t j d | d t	 ƒ } t
 | | d ƒ sY t ‚ |  j t j d } t j d | d t ƒ } t
 | | d ƒ s� t ‚ |  j } |  j j ƒ  } t j d | d t	 ƒ } t
 | | d ƒ så t ‚ |  j } |  j j ƒ  } t j d | d t	 ƒ } t
 | | d ƒ s-t ‚ d S(   s‹   
    Verify derivation of rotation matrix R = Rx Ry Rz
    from alpha:
    rotation around x, beta: rotation around y, gamma: around z
    t
   angles_xyzt   degg-Cëâ6?i´   N(   R+   R,   R-   R.   R   R   R   R/   t   angles_to_rotationt   FalseR   R1   R   R   t   TrueR   R   R   R   (   R)   t   anglesR3   t   result(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ncs/tst_ncs_utils.pyt   test_angles_to_matrixž   s     			c         C   sq  t  j ƒ  j j GH|  j j ƒ  } |  j } t j d | d t	 ƒ } t
 | | d ƒ sY t ‚ |  j } t j d | d t ƒ } t
 | | d ƒ s’ t ‚ |  j j ƒ  } |  j d |  j d } t j d | d t	 ƒ } | d | d } t
 | | d ƒ sû t ‚ |  j d |  j d } |  j j ƒ  } |  j } t j d | d t	 ƒ } | d | d } t
 | | d ƒ smt ‚ d S(   s¦   
    Note that there are two possible sets of angles for a rotation
    matrix.
    Also note that for the cases where cos(beta)=0, there is no unique
    answer
    t   rotationR?   gü©ñÒMbP?i    i   N(   R+   R,   R-   R.   R   R   R   R/   t   rotation_to_anglesRA   R   R1   R   RB   R   R   R   R   (   R)   t   rt   expected_anglesRC   t   expected_angles_sumt
   angles_sum(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ncs/tst_ncs_utils.pyt   test_matrix_to_angles·   s&    			c         C   se   t  j ƒ  j j GHxM |  j |  j |  j g D]3 } t j | j	 ƒ  ƒ } | j
 d d ƒ s* t ‚ q* Wd S(   s7   
    Make sure that our rotation matrices are good
    t   rms_tolerancegü©ñÒMbP?N(   R+   R,   R-   R.   R   R   R   R   R   R   t   is_r3_rotation_matrixR1   (   R)   t   rmRH   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ncs/tst_ncs_utils.pyt   test_rotations_are_good×   s    c         C   sc   t  j ƒ  j j GHt |  j j ƒ  ƒ } |  j } t j	 d | d t
 ƒ } t | | d ƒ s_ t ‚ d S(   sÅ   
    When working with scitbx matrix.rec or matrix.sqr
    (the form rotation matrices are in)
    the elements of those matrices are available as tuple.

    Verify that we process tuple well
    RF   R?   gü©ñÒMbP?N(   R+   R,   R-   R.   t   tupleR   R   R   R/   RG   RA   R   R1   (   R)   RH   RI   RC   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ncs/tst_ncs_utils.pyt   test_working_with_tuplesà   s
    	c      	   C   sã  t  j ƒ  j j GHt j |  j ƒ } t j d | d d d d ƒ } t j d | d |  j ƒ |  _ t j d | d |  j	 ƒ |  _	 t j d |  j	 ƒ } t j d |  j ƒ } t
 t t | | ƒ ƒ ƒ d k  sÏ t ‚ | d	 d
 !\ } } } t j j d | d | d | d t ƒ } | j ƒ  }	 | d	 d
 !\ } } } t j j d | d | d | d t ƒ } | j ƒ  }
 t
 t t |	 |
 ƒ ƒ ƒ d k  s‰t ‚ d } g  } xG |  j	 D]< } x3 | j D]( } | j j | ƒ } | j | j ƒ q¯WqŸWd S(   s2       Verify that transforms are getting updated    R5   t   shake_angles_sigmagìQ¸…ë¡?t   shake_translation_sigmag      à?R6   R(   gü©ñÒMbP?i   i	   t   thet   psit   phiR?   i   N(   R+   R,   R-   R.   R/   R0   R%   t   shake_transformationsR7   R(   t   abst   sumt   listR1   t   scitbxt
   rigid_bodyt
   rb_mat_xyzRA   t   rot_matt   copiesRH   t   roundt   appendt   elems(   R)   t   x1t   x2t   x3t   x4RU   RV   RW   t   rott   a3t   a4t	   round_valt   r_elemsR   t   cRH   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ncs/tst_ncs_utils.pyt   test_update_xï   s<    						((c         C   s“   t  j ƒ  j j GHt j t d ƒ ƒ } t j d |  j	 d | ƒ } d d d d d d	 d
 d d d d d d d d d g } t
 | ƒ | k s� t ‚ d S(   s…   
    verify that extended_ncs_selection, which include the master ncs copy and
    the portion of the protein we want to refine.
    i   R(   t   refine_selectioni    i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   N(   R+   R,   R-   R.   R   t   size_tt   rangeR/   t   get_extended_ncs_selectionR(   R[   R1   (   R)   Ro   RD   R3   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ncs/tst_ncs_utils.pyt   test_ncs_selection  s    			6c         C   s™   t  j ƒ  j j GHt j d |  j d d ƒ } t t t t t t t t t t t t t t t t t t t t t t t t t g } t	 | ƒ | k s• t
 ‚ d  S(   NR(   t   asu_sizei   (   R+   R,   R-   R.   R/   t   get_ncs_related_selectionR(   RB   RA   R[   R1   (   R)   RD   R3   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ncs/tst_ncs_utils.pyt   test_ncs_related_selection#  s    			c         C   sÎ  t  j ƒ  j j GH|  j j ƒ  } |  j } t j d | d | ƒ } |  j j	 j
 ƒ  j ƒ  } t j | j ƒ  g ƒ d | j ƒ  j d ƒ } | d j d ƒ } | d j d ƒ } t j | | j ƒ  ƒ j ƒ  j ƒ  } t j | | j ƒ  ƒ j ƒ  j ƒ  }	 | |	 k r| d k st ‚ t j d | d | ƒ }
 d } |
 d j d j j d
 ƒ j | k s`t ‚ t j d | d |
 ƒ } | d j d j j d
 ƒ j } | d j d j j d
 ƒ j } | | k sÊt ‚ d S(   sd   
    test shifting translation to and from the center of coordinates of the
    master ncs copy
    t   xray_structureR(   i   i   i    t   shiftsg? ©Mœ|Àg8©0¶°ÀgôýÔxé&@i   N(   i    i    i    (   g? ©Mœ|Àg8©0¶°ÀgôýÔxé&@(   R+   R,   R-   R.   R"   t   xray_structure_simpleR(   R/   t   get_ncs_gorups_centersR   t   atomst   extract_xyzR   R
   RZ   t   sizeRa   t   sqrtt   dott   min_max_meant   as_tupleR1   t   shift_translation_to_centerR`   t   tRc   t   shift_translation_back_to_place(   R)   t   xrst   nrgRx   t   xyzt   center_of_coort   t1t   t2t   d1t   d2t   new_nrgR3   t   old_nrgRD   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ncs/tst_ncs_utils.pyt    test_center_of_coordinates_shift/  s0    			/%%		,		  c         C   s  t  j ƒ  j j GH|  j } t | d j ƒ } t | d j d j ƒ } t | d j d j ƒ } t	 | ƒ t	 | ƒ k s t
 ‚ | d d d d d d d g k s¦ t
 ‚ | d d	 d
 d d d d g k sÍ t
 ‚ | d d d d d d d g k sô t
 ‚ t j d d d d d d g ƒ } t j d d d d d d	 d
 d d d g
 ƒ } t j d d d d d d	 d
 d d d d d d d g ƒ } t j d | d | ƒ } t | d j ƒ }	 t | d j d j ƒ }
 |	 g  k sÒt
 ‚ |
 g  k sät
 ‚ t j d | d | ƒ } t | d j ƒ }	 t | d j d j ƒ }
 |	 g  k s;t
 ‚ |
 g  k sMt
 ‚ t j d | d | ƒ } t | d j ƒ }	 t | d j d j ƒ }
 t | d j d j ƒ } |	 d d d g k sÇt
 ‚ |
 d d	 d g k sât
 ‚ | d d d g k sýt
 ‚ d S(   sV   
    test that a atom selection propagates correctly to ncs_restraints_group_list
    i    i   i   i   i   i   i   i   i   i	   i   i   i
   i   i   i   i   i   i   i   i   id   ie   R(   t	   selectionN(   R+   R,   R-   R.   R(   R[   t   master_iselectionR`   t
   iselectiont   lenR1   R   Rp   R/   t   ncs_groups_selection(   R)   R†   t   m1t   c1t   c2t
   selection1t
   selection2t
   selection3R�   t   mtt   c1tt   c2t(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ncs/tst_ncs_utils.pyt   test_nrg_selectionT  sF    	'''!-9						c         C   sŸ   t  j ƒ  j j GHt j d d d d d g ƒ } t d d d g ƒ } t j | | ƒ \ } } t	 | ƒ d d d g k s} t
 ‚ t	 | ƒ d d g k s› t
 ‚ d  S(   Ni   i   i   i   i   i    i   (   R+   R,   R-   R.   R   Rp   t   setR/   t   selected_positionsR[   R1   (   R)   t   at   post   st   d(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ncs/tst_ncs_utils.pyt   test_selected_positions‰  s    !c         C   s{   t  j ƒ  j j GHt j d d d d d g ƒ } t j d d g ƒ } t j | | ƒ } t | ƒ d d d g k sw t	 ‚ d  S(   Ni   i   i   i   i   (
   R+   R,   R-   R.   R   Rp   R/   t   remove_items_from_selectionR[   R1   (   R)   R¡   RH   R£   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ncs/tst_ncs_utils.pyt    test_remove_items_from_selection’  s
    c         C   sR  t  j ƒ  j j GH|  j j ƒ  } | d j } | d j d j } t	 j
 d | d d g ƒ } t | ƒ t | d j ƒ k s� t ‚ t | ƒ t | d j d j ƒ k s­ t ‚ |  j j ƒ  } |  j | } |  j | } | |  j } |  j | |  j }	 |  j | |  j }
 | j d ƒ j | d j d j j d ƒ j k sDt ‚ | j d ƒ j | d j d j j d ƒ j k s|t ‚ | j d ƒ j | d j d j j d ƒ j k s´t ‚ | j d ƒ j | d j d j j d ƒ j k sìt ‚ |	 j d ƒ j | d j d j j d ƒ j k s$t ‚ |
 j d ƒ j | d j d j j d ƒ j k s\t ‚ t	 j
 d | d d g ƒ } |  j } |  j } |  j } |  j } |  j } |  j } t | ƒ t | d j ƒ k sÒt ‚ t | ƒ t | d j d j ƒ k sþt ‚ | j d ƒ j | d j d j j d ƒ j k s6t ‚ | j d ƒ j | d j d j j d ƒ j k snt ‚ | j d ƒ j | d j d j j d ƒ j k s¦t ‚ | j d ƒ j | d j d j j d ƒ j k sÞt ‚ | j d ƒ j | d j d j j d ƒ j k st ‚ | j d ƒ j | d j d j j d ƒ j k sNt ‚ d	 S(
   s‹   
    Testing switching of master ncs copy and a copy (turning the copy to master)
    and then switching to the original configuration
    i    R(   t   new_mastersi   i   i   i   i   N(   R+   R,   R-   R.   R&   R'   R‘   R`   R’   R/   t   change_ncs_groups_masterR[   R1   R   t	   transposeR   R   R   R   R   Ra   Rc   RH   Rƒ   (   R)   R†   t   mastert   copy_1t   nrg_newt   R1t   R2t   R3t   T1t   T2t   T3t   nrg_originalt   r1t   r2t   r3R‰   RŠ   t   t3(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ncs/tst_ncs_utils.pyt(   test_ncs_restraints_group_list_switching™  sL    	%,888888							%,88888c      
   C   s  t  j ƒ  j j GHd } t j j d t ƒ } | j ƒ  } t	 j d t d d$ ƒ } | j ƒ  } | j ƒ  j ƒ  | j ƒ  } t	 j d t d d$ ƒ } | j ƒ  } | j ƒ  j ƒ  | j ƒ  }	 |	 j d | d d ƒ j ƒ  }
 |
 j d d	 ƒ } | j ƒ  | j ƒ  } t j d
 d d d d d d g ƒ t j d d d d d d d g ƒ t j d d d d d d d g ƒ g } t j j j d | d  | d | ƒ } | j d! | ƒ } t j | d | d  | d | ƒ} g  | D] } t | d ƒ ^ qÅd" d# d" g k sõt ‚ | d g k s
t ‚ d$ S(%   se   
    Verifying that we get a list of chain index for the chain with the best
    map correlation
    g      ð?R   t   linest   source_infot   d_mint	   algorithmt   directt   resolution_factorg      Ð?i    i   i   i   i   i   i   i   i   i	   i
   i   i   i   i   i   i   i   i   i   i   Rw   t   map_datat
   selectionsg      à?gš™™™™™é?N(    R+   R,   R-   R.   R#   R$   R    t
   pdb_poor_0R'   R   t   Nonet   construct_hierarchyR{   t   reset_i_seqRy   t   pdb_answer_0t   structure_factorst   f_calct   fft_mapt   apply_sigma_scalingt   real_map_unpaddedR   Rp   t   mmtbxt   mapst   correlationt%   from_map_and_xray_structure_or_fmodelt   ccR/   t)   get_list_of_best_ncs_copy_map_correlationRa   R1   (   R)   R¼   t   ncs_inpR(   t   pdb_inp_poort   ph_poort   xrs_poort   pdb_inp_answert	   ph_answert
   xrs_answert   fcRÉ   RÀ   RÁ   t   mpRÐ   t	   best_listR5   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ncs/tst_ncs_utils.pyt.   test_get_list_of_best_ncs_copy_map_correlationÓ  s<    
B'		7c         C   sŒ   t  j ƒ  j j GHt j d t d d  ƒ } | j ƒ  } t	 j
 d d d g ƒ } | d } t j | d | ƒ } |  j t | ƒ t | ƒ ƒ d  S(   NRº   R»   i   i	   i   i   t   B(   R+   R,   R-   R.   R   R    RÆ   RÃ   RÄ   R   Rp   R/   t   iselection_ncs_to_asut   assertEqualR[   (   R)   t   pdb_inpt   pht   isel_asut   isel_ncsR2   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ncs/tst_ncs_utils.pyt   test_iselection_ncs_to_asu   s    
c         C   sŒ   t  j ƒ  j j GHt j d t d d  ƒ } | j ƒ  } t	 j
 d d d g ƒ } | d } t j | d | ƒ } |  j t | ƒ t | ƒ ƒ d  S(   NRº   R»   i   i	   i   i   RÝ   (   R+   R,   R-   R.   R   R    RÆ   RÃ   RÄ   R   Rp   R/   t   iselection_asu_to_ncsRß   R[   (   R)   Rà   Rá   Râ   Rã   R2   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ncs/tst_ncs_utils.pyt   test_iselection_asu_to_ncs	  s    
(   t   __name__t
   __module__t   __doc__R*   R4   R=   RE   RL   RP   RR   Rn   Rs   Rv   R�   Rž   R¥   R§   R¹   RÜ   Rä   Ræ   (    (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ncs/tst_ncs_utils.pyR   P   s&   	-					 				'			%	5				:	-		c          C   s%   d g }  t  j t t |  ƒ ƒ } | S(   sÃ     Run selected tests

  1) List in "tests" the names of the particular test you want to run
  2) Comment out unittest.main()
  3) Un-comment unittest.TextTestRunner().run(run_selected_tests())
  RÜ   (   t   unittestt	   TestSuitet   mapR   (   t   testst   suite(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ncs/tst_ncs_utils.pyt   run_selected_tests  s    	t   __main__(   t
   __future__R    t   libtbx.test_utilsR   t   scitbx.array_familyR   t   mmtbx.ncs.ncs_utilsR$   t	   ncs_utilsR/   t   mmtbx.maps.correlationRÌ   R\   R   t   scitbx.rigid_bodyR#   R   t	   iotbx.ncsRê   R   R+   R!   RÆ   RÂ   t   TestCaseR   Rï   Rç   t   main(    (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ncs/tst_ncs_utils.pyt   <module>   s&   
ÿ Ã	