ó
ˆ™xTc           @   sA  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 m 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 e j f d „  ƒ  YZ d Z d Z d Z d Z d Z d Z d Z d „  Z  e! d k r=e j" ƒ  n  d
 S(   iÿÿÿÿ(   t   division(   t   multimer(   t   format_num_as_str(   t   ncs_group_object(   t   apply_transforms(   t   approx_equal(   t   flex(   t   matrix(   t   pdbNt   TestMultimerReconstructionc           B   sz   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 RS(   s9   Test multimer reconstruction from BIOMT and MTRIX recordsc         C   sa   t  j ƒ  |  _ t j d ƒ |  _ t  j |  j ƒ t d d ƒ j t	 ƒ t d d ƒ j t
 ƒ d S(   s7   
    Create temporary file: multimer_test_data.pdb
    t   tempdirs   multimer_test_data.pdbt   ws   multimer_test_data2.pdbN(   t   ost   getcwdt   currnet_dirt   tempfilet   mkdtempR
   t   chdirt   opent   writet   pdb_test_datat   pdb_test_data2(   t   self(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_pdb_manipulation.pyt   setUp   s
    c         C   s[  t  j ƒ  j j GHd d d g d d d g d d d g d d d g d d d g d d	 d
 g d d d	 g d d d
 g d d d
 g d d d
 g d d d g d d d g d d d g d d d g d d d g d d d g d d d g d d d g d  d! d g d d" d g g } t d# d$ d% d& ƒ } t | j ƒ  ƒ } | j ƒ  | j ƒ  t | | d' d( ƒs]t	 ‚ |  j
 | j d) ƒ | j ƒ  j ƒ  j ƒ  } t d* | d+ | j ƒ  d, | j ƒ  d- t j | j ƒ  ƒ d. t ƒ } t | ƒ } | j ƒ  t | | d' d/ ƒsût	 ‚ t d# d$ d. t d% d& ƒ } t | j ƒ  ƒ } | j ƒ  | j ƒ  t | | d' d/ ƒsWt	 ‚ d0 S(1   s   Test MTRIX record processingg      ð?g      ð¿gw-!ôl×¿g^KÈ=Ûõ?g^KÈ=Ûõ¿gw-!ôl×?g      ø?gd;ßO�§W@gP�—nÀgh‘í|?åV@gh‘í|?åVÀgI½§rÚíI@gnàÔ)ÔS@g€¹-@aEÀgCYøúZ$U@gP�—nÀgÃõ(\�2O@gyé&1¬I@gü©ñÒM2T@gü©ñÒM2TÀg4Ëf‰*ÀgÈêVÏIíS@gèÜíziêRÀg0ØÛ]<@gyé&1ìI@g'1¬úC@gÙÎ÷SÃI@g+‡ÙÎR@g+‡ÙÎRÀg@ 3iS¥8Àgå´§äœ.N@g¤ Q0c&PÀg;oc³#­!@gÙÎ÷SJ@t	   file_names   multimer_test_data.pdbt   reconstruction_typet   caut   epsgü©ñÒMbP?i   t   ncs_coordinatest   ncs_restraints_group_listt   total_asu_lengtht   extended_ncs_selectiont   round_coordinatesgñhãˆµøä>N(   t   syst	   _getframet   f_codet   co_nameR   t   listt
   sites_cartt   sortR   t   AssertionErrort   assertEqualt   number_of_transformst   get_ncs_hierarchyt   atomst   extract_xyzR   t   get_ncs_restraints_group_listR   R   t   size_t_ranget   sizet   False(   R   t   cau_expected_resultst   multimer_datat   cau_multimer_xyzt
   source_xyzt   xyz(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_pdb_manipulation.pyt
   test_MTRIX!   sF    0$$$	

	
	

c      *   C   sd  t  j ƒ  j j GHd d d g d d d g d d d g d d d g d d d g d d d g d d d g d d d g d d d g d d d g d	 d
 d g d	 d d
 g d d
 d g d d	 d g d d
 d g d d d g d d d g d d d g d	 d d g d d d g d d d g d d d g d d d g d d d g d d d g d d d g d d d g d d d g d d d g d d d  g d! d" d# g d! d$ d" g d# d" d% g d& d! d# g d# d" d% g d& d# d% g d' d( d# g d) d* d# g d! d+ d# g d) d* d, g g( } t d- d. d/ d0 ƒ } t | j ƒ  ƒ } | j ƒ  | j ƒ  t | | d1 d2 ƒsMt	 ‚ |  j
 | j d3 ƒ d4 S(5   s   Test MTRIX record processingg      ð?g      ð¿gw-!ôl×¿g^KÈ=Ûõ?g^KÈ=Ûõ¿gw-!ôl×?g      ø?g        gd;ßO�§W@gP�—nÀgh‘í|?åV@gh‘í|?åVÀgd;ßO�§WÀgP�—n@gI½§rÚíI@gnàÔ)ÔS@g€¹-@aEÀgCYøúZ$U@gP�—nÀgh‘í|?¥V@gÃõ(\�2O@gyé&1¬I@gü©ñÒM2T@gü©ñÒM2TÀgÃõ(\�2OÀgyé&1¬IÀg4Ëf‰*ÀgÈêVÏIíS@gèÜíziêRÀg0ØÛ]<@gyé&1ìI@gü©ñÒMòS@g'1¬úC@gÙÎ÷SÃI@g+‡ÙÎR@g+‡ÙÎRÀg'1¬úCÀgÙÎ÷SÃIÀg@ 3iS¥8Àgå´§äœ.N@g¤ Q0c&PÀg;oc³#­!@gÙÎ÷SJ@g+‡ÙÎ×Q@R   s   multimer_test_data.pdbR   t   baR   gü©ñÒMbP?i	   N(   R!   R"   R#   R$   R   R%   R&   R'   R   R(   R)   R*   (   R   t   ba_expected_resultst   ba_multimer_datat   ba_multimer_xyz(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_pdb_manipulation.pyt
   test_BIOMTR   s,    <0$$$$$$$$$$	

c         C   sn   t  j ƒ  j j GHt ƒ  } | j d d d d g d ƒ } i d d 6d d 6d	 d 6d
 d 6} |  j | | ƒ d  S(   Ns   chain A_001s   chain B_001s   chain A_002s   chain B_002t   At   Bt   Ct   Dt   Et   F(   R=   R>   (   R!   R"   R#   R$   R   t   make_chains_namesR)   (   R   t   transforms_objt   resultt   expected(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_pdb_manipulation.pyt   test_ncs_copies_namingr   s    	
c         C   sô   t  j ƒ  j j GHxÜ t t g D]Î } t j j d t ƒ } | j	 ƒ  } |  j
 t | j ƒ d ƒ |  j
 t | j ƒ d ƒ |  j
 | j d j ƒ  t ƒ |  j
 | j d j ƒ  t ƒ g  | j D] } t | ƒ ^ q» } |  j
 | d d d g ƒ q Wd S(   s]   
    Verify that insertion and reordering of the identity transform is done
    properly
    t
   pdb_stringi   i    i   i   N(   R!   R"   R#   R$   t   pdb_test_data5t   pdb_test_data6t   iotbxt   ncst   inputt   build_MTRIX_objectR)   t   lent   rt   tt   is_r3_identity_matrixt   Truet   is_col_zerot   serial_numbert   int(   R   t   pdb_strt   ncs_inpt   transform_infot   xt   sn(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_pdb_manipulation.pyt    test_identity_tranform_insertion{   s    "c         C   s,  t  j ƒ  j j GHt j j d t ƒ } t j	 d d d d d d d d d	 g	 ƒ g } | j
 t j	 d d d d d d d d d
 g	 ƒ ƒ t j d d d g ƒ g } | j
 t j d d d g ƒ ƒ t j j d | d | d | ƒ } | j } i d d g d 6d d g d 6} |  j | | ƒ | j } d } |  j | | ƒ t j j d t ƒ } t j j d | d | d | ƒ } | j } i d d g d 6d d g d 6} |  j | | ƒ | j } d } |  j | | ƒ | j j ƒ  } d d g } |  j | | ƒ | j j ƒ  } d d d g } | j ƒ  |  j | | ƒ d S(   sM   
    Verify that processing of transforms provided manually is done properly RH   gš™™™™™¹?g      ð?gš™™™™™É?g      à?g333333ã?gffffffæ?gš™™™™™é?gÍÌÌÌÌÌì?gš™™™™™Ù?i    i   i   iÿÿÿÿi   iþÿÿÿt   pdb_hierarchy_inpt	   rotationst   translationss   chain A_002s   chain B_002t   002s   chain A_003s   chain B_003t   003s   chain A or chain Bt   001N(   R!   R"   R#   R$   R   t	   hierarchyRM   t   pdb_test_data4R   t   sqrt   appendt   colRK   RL   t   transform_to_ncsR)   t   ncs_selection_strR   t   keyst   ncs_transformR'   (   R   t   pdb_objRP   RQ   RD   RE   RF   (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_pdb_manipulation.pyt   test_adding_transforms_directly�   sH    -1						
c         C   sÔ  t  j ƒ  j j GHt j d d# d t ƒ } t j j d t ƒ } | j	 ƒ  } t
 j j d | d | ƒ } d d d d	 g } |  j | j | ƒ i d
 d 6d d 6d d 6d d 6d d	 6d d 6} |  j | j | ƒ d d d d d g } t | j d ƒ } |  j | | ƒ d d g } t | j d ƒ } |  j | | ƒ d d d d d g } t | j d ƒ } |  j | | ƒ d  d! g } t | j d	 ƒ } |  j | | ƒ |  j t | j ƒ d" ƒ |  j | j j t ƒ d ƒ d# S($   sR   
    Verify that transform order is kept even when chain selection is complex
    t   source_infot   linesRH   RY   R]   s   chain A_002s   chain B_002s   chain A_003s   chain B_003R?   RA   R=   s   chain A_001R@   RB   R>   s   chain B_001i    i   i   i   i   s   chain Ai   i   s   chain Bi   i   i	   i   i   i   i   i   N(   R!   R"   R#   R$   R   RM   t   NoneR   Rc   t   process_mtrix_recordsRK   RL   R)   t   transform_chain_assignmentt   ncs_copies_chains_namesR%   t   asu_to_ncs_mapt   ncs_to_asu_mapRO   t   ncs_atom_selectiont   countRS   (   R   t   pdb_inpRl   RY   RD   RF   t   results(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_pdb_manipulation.pyt    test_transform_application_orderº   s6    	c         C   sm   t  j ƒ  j j GH|  j t d ƒ d ƒ |  j t d ƒ d ƒ |  j t d ƒ d ƒ |  j t d ƒ d ƒ d  S(	   Ni²  t   946i.   t   046i   t   006i    t   000(   R!   R"   R#   R$   R)   R   (   R   (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_pdb_manipulation.pyt   test_num_to_strâ   s
    c   	      C   s  t  j ƒ  j j GHt ƒ  } t j d d  d t ƒ } t j	 j d t ƒ } | j
 ƒ  } | j d | d | ƒ t d t d d ƒ } | j } | j d	 t d
 | d t ƒ } | j d	 t d
 | d t ƒ } | j d
 | j	 d t d t ƒ } | j ƒ  } | j d | d t d t ƒ } d  S(   NRn   Ro   RH   RY   R]   RW   R   R   t   ncs_onlyt   pdb_hierarchyR   t   biomtt   xrs(   R!   R"   R#   R$   R   R   RM   Rp   R   Rc   Rq   t   preprocess_ncs_objR   t   assembled_multimert   get_transform_recordsRS   R1   t   extract_xray_structure(	   R   RD   Rx   Rl   RY   R3   t   pdb_hierarchy_asut   pdbstrRƒ   (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_pdb_manipulation.pyt   test_pdb_writingé   s:    												c   
      C   s  t  j ƒ  j j GHt d t d d ƒ } t j j d t ƒ } | j	 } | j
 d | d t ƒ } t j j d | ƒ } | j d j } | j d j } |  j | | ƒ |  j t | j ƒ t | j ƒ ƒ | j } i d	 d
 g d 6d d g d 6} |  j | | ƒ | j } i d d g d 6d d g d 6}	 |  j | |	 ƒ | j d } d } |  j | | ƒ | j d } d }	 |  j | |	 ƒ d S(   s/    Verify that spec object are produced properly RW   R   R   RH   Rˆ   R   t   spec_ncs_groupsR`   s   chain Cs   chain Es   chain As   chain Ds   chain Fs   chain Bs&   chain C and (resseq 1:3 or resseq 6:7)s&   chain E and (resseq 1:3 or resseq 6:7)s&   chain A and (resseq 1:3 or resseq 6:7)s   chain D and (resseq 4:5)s   chain F and (resseq 4:5)s   chain B and (resseq 4:5)s   chain A_003N(   s   chain As   chain E(   s&   chain A and (resseq 1:3 or resseq 6:7)s&   chain E and (resseq 1:3 or resseq 6:7)(   R!   R"   R#   R$   R   R   RK   RL   RM   R…   t   get_ncs_info_as_specR1   Rk   RP   R)   RO   t   ncs_to_asu_selectiont   tr_id_to_selection(
   R   R3   t	   trans_objRˆ   t   spec_outputt
   trans_obj2t   t1t   t2t   t1_expectedt   t2_expected(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_pdb_manipulation.pyt   test_spec_file_format  s>    			"		
  c         C   s•   t  j ƒ  j j GHt ƒ  } t j d d  d t ƒ } t j	 j d t ƒ } | j
 ƒ  } | j d | ƒ t d t d d ƒ } | j d | j d	 t ƒ d  S(
   NRn   Ro   RH   Rx   RW   R   R   Rˆ   R   (   R!   R"   R#   R$   R   R   RM   Rp   R   Rc   Rq   R„   R   RŒ   R…   R1   (   R   RD   Rx   Rl   RY   t   asu(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_pdb_manipulation.pyt   test_writing_spec_fileJ  s    				c         C   s$   t  j |  j ƒ t j |  j ƒ d S(   s   remove temp files and folderN(   R   R   R   t   shutilt   rmtreeR
   (   R   (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_pdb_manipulation.pyt   tearDowna  s    (   t   __name__t
   __module__t   __doc__R   R7   R<   RG   R\   Rm   Rz   R   RŠ   R–   R˜   R›   (    (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_pdb_manipulation.pyR	      s   		1	 				-	(		4	-	s£  REMARK   0 Test molecule with BIOMOLECULE: 1
REMARK   0
REMARK   0 The test will generate the biomolecule (the multimer assembly)
REMARK   0 from the transformation matrices writen below
REMARK   0 and then compare the results to the calculated expected one
REMARK 350 CRYSTALLOGRAPHIC OPERATIONS ARE GIVEN.
REMARK 350   BIOMT1   1  1.000000  0.000000  0.000000        0.000000
REMARK 350   BIOMT2   1  0.000000  1.000000  0.000000        0.000000
REMARK 350   BIOMT3   1  0.000000  0.000000  1.000000        0.000000
REMARK 350   BIOMT1   2  1.000000  0.000000  0.000000        0.000000
REMARK 350   BIOMT2   2  0.000000  0.000000 -1.000000        0.000000
REMARK 350   BIOMT3   2  0.000000  1.000000  0.000000        0.000000
REMARK 350   BIOMT1   3  0.000000  0.000000  1.000000        0.000000
REMARK 350   BIOMT2   3  0.000000  1.000000  0.000000        0.000000
REMARK 350   BIOMT3   3 -1.000000  0.000000  0.000000        0.000000
REMARK 350   BIOMT1   4  0.000000 -1.000000  0.000000        0.000000
REMARK 350   BIOMT2   4  1.000000  0.000000  0.000000        0.000000
REMARK 350   BIOMT3   4  0.000000  0.000000  1.000000        0.000000
REMARK 350   BIOMT1   5  0.000000  0.000000  1.000000        0.000000
REMARK 350   BIOMT2   5  0.000000  1.000000  0.000000        0.000000
REMARK 350   BIOMT3   5 -1.000000  0.000000  0.000000        0.000000
REMARK 350   BIOMT1   6  0.000000 -1.000000  0.000000        0.000000
REMARK 350   BIOMT2   6  0.000000  0.000000  1.000000        0.000000
REMARK 350   BIOMT3   6 -1.000000  0.000000  0.000000        0.000000
REMARK 350   BIOMT1   7  0.500000 -0.866025  0.000000        0.000000
REMARK 350   BIOMT2   7  0.866025  0.500000  0.000000        0.000000
REMARK 350   BIOMT3   7  0.000000  0.000000  1.000000        0.000000
REMARK 350   BIOMT1   8 -0.500000 -0.866025  0.000000        0.000000
REMARK 350   BIOMT2   8  0.866025 -0.500000  0.000000        0.000000
REMARK 350   BIOMT3   8  0.000000  0.000000  1.000000        0.000000
REMARK 350   BIOMT1   9  1.000000  0.000000  0.000000        0.000000
REMARK 350   BIOMT2   9  0.000000  1.000000  0.000000        0.500000
REMARK 350   BIOMT3   9  0.000000  0.000000  1.000000        0.000000
REMARK 350   BIOMT1  10 -0.500000 -0.866025  0.000000        0.000000
REMARK 350   BIOMT2  10  0.866025 -0.500000  0.000000        0.000000
REMARK 350   BIOMT3  10  0.000000  0.000000  1.000000       -1.000000
MTRIX1   1  1.000000  0.000000  0.000000        0.00000
MTRIX2   1  0.000000  1.000000  0.000000        0.00000
MTRIX3   1  0.000000  0.000000  1.000000        0.00000
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  1.000000  0.000000  0.000000        0.00000
MTRIX2   2  0.000000  0.000000 -1.000000        0.00000
MTRIX3   2  0.000000  1.000000  0.000000        0.00000
MTRIX1   3  0.500000 -0.866025  0.000000        0.00000
MTRIX2   3  0.866025  0.500000  0.000000        0.00000
MTRIX3   3  0.000000  0.000000  1.000000        0.00000
MTRIX1   4 -0.500000 -0.866025  0.000000        0.00000
MTRIX2   4  0.866025 -0.500000  0.000000        0.00000
MTRIX3   4  0.000000  0.000000  1.000000        0.00000
MTRIX1   5  1.000000  0.000000  0.000000        0.00000
MTRIX2   5  0.000000  1.000000  0.000000        0.50000
MTRIX3   5  0.000000  0.000000  1.000000        0.00000
ATOM      1   N  ILE A  40       1.000   1.000   1.000  1.00162.33           C
ATOM      2  CA  LEU A  40      94.618  -5.253  91.582  1.00 87.10           C
ATOM      3   C  ARG B  40      62.395  51.344  80.786  1.00107.25           C
HETATM    4  C1  EDO A  40      39.954  51.526  72.372  0.33 60.93           C
s4  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       9.670  10.289  11.135  1.00 20.00           N
ATOM      2  CA  THR A   2       9.559   8.931  10.615  1.00 20.00           C
ATOM      3  C   THR A   3       9.634   7.903  11.739  1.00 20.00           C
ATOM      4  O   THR B   4      10.449   8.027  12.653  1.00 20.00           O
ATOM      5  CB  THR B   5      10.660   8.630   9.582  1.00 20.00           C
ATOM      6  OG1 THR A   6      10.560   9.552   8.490  1.00 20.00           O
ATOM      7  CG2 THR A   7      10.523   7.209   9.055  1.00 20.00           C
TER
sü  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.309017 -0.809017  0.500000        0.00000
MTRIX2   2  0.809017  0.500000  0.309017        0.00000
MTRIX3   2 -0.500000  0.309017  0.809017        0.00000
MTRIX1   3 -0.809017 -0.500000  0.309017        0.00000
MTRIX2   3  0.500000 -0.309017  0.809017        0.00000
MTRIX3   3 -0.309017  0.809017  0.500000        0.00000
ATOM    749  O   UNK A  90      28.392  67.262  97.682  1.00  0.00           O
ATOM    750  N   UNK A  91      30.420  66.924  98.358  1.00  0.00           N
TER
ATOM   1495  N   UNK B  67      33.124   2.704 114.920  1.00  0.00           N
END
s)  ATOM      1  N   THR A   1       9.670  10.289  11.135  1.00 20.00           N
ATOM      2  CA  THR A   2       9.559   8.931  10.615  1.00 20.00           C
ATOM      3  C   THR A   3       9.634   7.903  11.739  1.00 20.00           C
ATOM      4  O   THR B   4      10.449   8.027  12.653  1.00 20.00           O
ATOM      5  CB  THR B   5      10.660   8.630   9.582  1.00 20.00           C
ATOM      6  OG1 THR A   6      10.560   9.552   8.490  1.00 20.00           O
ATOM      7  CG2 THR A   7      10.523   7.209   9.055  1.00 20.00           C
sü  MTRIX1   1  0.309017 -0.809017  0.500000        0.00000
MTRIX2   1  0.809017  0.500000  0.309017        0.00000
MTRIX3   1 -0.500000  0.309017  0.809017        0.00000
MTRIX1   2 -0.809017 -0.500000  0.309017        0.00000
MTRIX2   2  0.500000 -0.309017  0.809017        0.00000
MTRIX3   2 -0.309017  0.809017  0.500000        0.00000
MTRIX1   3  1.000000  0.000000  0.000000        0.00000    1
MTRIX2   3  0.000000  1.000000  0.000000        0.00000    1
MTRIX3   3  0.000000  0.000000  1.000000        0.00000    1
ATOM    749  O   UNK A  90      28.392  67.262  97.682  1.00  0.00           O
ATOM    750  N   UNK A  91      30.420  66.924  98.358  1.00  0.00           N
TER
ATOM   1495  N   UNK B  67      33.124   2.704 114.920  1.00  0.00           N
END
sE  MTRIX1   1  0.309017 -0.809017  0.500000        0.00000
MTRIX2   1  0.809017  0.500000  0.309017        0.00000
MTRIX3   1 -0.500000  0.309017  0.809017        0.00000
MTRIX1   2 -0.809017 -0.500000  0.309017        0.00000
MTRIX2   2  0.500000 -0.309017  0.809017        0.00000
MTRIX3   2 -0.309017  0.809017  0.500000        0.00000
ATOM    749  O   UNK A  90      28.392  67.262  97.682  1.00  0.00           O
ATOM    750  N   UNK A  91      30.420  66.924  98.358  1.00  0.00           N
TER
ATOM   1495  N   UNK B  67      33.124   2.704 114.920  1.00  0.00           N
END
sß  ATOM    749  O   UNK A  90      28.392  67.262  97.682  1.00  0.00           O
ATOM    750  N   UNK A  91      30.420  66.924  98.358  1.00  0.00           N
TER
ATOM   1495  N   UNK B  67      33.124   2.704 114.920  1.00  0.00           N
TER
ATOM    749  O   UNK C  90       3.199  86.786  85.616  1.00  0.00           O
ATOM    750  N   UNK C  91       4.437  88.467  85.044  1.00  0.00           N
TER
ATOM   1495  N   UNK D  67      65.508  63.662  77.246  1.00  0.00           N
TER
ATOM    749  O   UNK E  90     -26.415  72.437  94.483  1.00  0.00           O
ATOM    750  N   UNK E  91     -27.678  74.103  93.921  1.00  0.00           N
TER
ATOM   1495  N   UNK F  67       7.362 108.699  49.412  1.00  0.00           N
TER
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(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_pdb_manipulation.pyt   run_selected_tests  s    	t   __main__(#   t
   __future__R    t!   iotbx.pdb.multimer_reconstructionR   t   iotbx.ncs.ncs_preprocessR   R   t   mmtbx.ncs.ncs_utilsR   t   libtbx.test_utilsR   t   scitbx.array_familyR   t   scitbxR   RK   R   t	   iotbx.ncsRŸ   R   R™   R   R!   t   TestCaseR	   R   R   t   pdb_test_data3Rd   RI   RJ   t   pdb_test_data3_expected_resultsR¤   Rœ   t   main(    (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_pdb_manipulation.pyt   <module>   s4   ÿ �
	