ó
‰™xTc           @   sÇ  d  d l  m Z d  d l m Z d  d l Z d  d l 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 m Z d  d	 l m Z d  d l Z d  d
 l m Z d  d l Z d  d l Z e j Z d „  Z d „  Z d „  Z d „  Z d „  Z  d „  Z! d „  Z" d „  Z# d „  Z$ d „  Z% d d „ Z& d d „ Z' d „  Z( d „  Z) d „  Z* d „  Z+ d „  Z, d d „ Z. d „  Z/ d  „  Z0 d! „  Z1 e2 d" k rÃe1 ƒ  n  d S(#   iÿÿÿÿ(   t   division(   t   pdbN(   t   crystal(   t   sgtbx(   t   random_structure(   t   flex(   t   approx_equalt	   show_diff(   t   format_cpu_times(   t   StringIOc          C   sÛ   t  j j ƒ  }  t |  ƒ d k s' t ‚ |  d d k s= t ‚ |  d d k sS t ‚ |  d d k si t ‚ |  d d	 k s t ‚ |  d
 d k s• t ‚ |  d d k s« t ‚ |  d d k sÁ t ‚ |  d d k s× t ‚ d  S(   NiB  i    t   Ai   t   Zi   t   ai3   t   zi4   t   0i=   t   9i>   t   AAiÿÿÿÿt   99(   t   iotbxR   t   systematic_chain_idst   lent   AssertionError(   t   cids(    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_pdb.pyt   exercise_systematic_chain_ids   s    c    	      C   sÖ   d d l  m }  |  j } |  j } x0 | j ƒ  D]" \ } } | | | k s/ t ‚ q/ W| d | d k so t ‚ |  j } |  j } t | ƒ t | ƒ k sŸ t ‚ x0 | j ƒ  D]" \ } } | | | k s¬ t ‚ q¬ Wd  S(   Niÿÿÿÿ(   t   amino_acid_codest   MSEt   MET(	   t	   iotbx.pdbR   t   one_letter_given_three_lettert   three_letter_given_one_lettert   itemsR   t#   three_letter_l_given_three_letter_dt#   three_letter_d_given_three_letter_lR   (	   t   aact   ogtt   tgot   ot   tt   lgdt   dglt   dt   l(    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_pdb.pyt   exercise_amino_acid_codes   s    				c       	   C   sÿ  t  j j d d ƒ }  |  j d k s* t ‚ |  j d k s? t ‚ |  j d k sT t ‚ t  j j d d ƒ }  |  j d k s~ t ‚ |  j	 d d	 d
 k s› t ‚ |  j
 d g k s³ t ‚ t  j j d d ƒ }  |  j d d	 d k så t ‚ |  j d k sú t ‚ t  j j d d ƒ }  |  j d	 d k s(t ‚ |  j d  k s=t ‚ t  j j d d ƒ }  |  j d d d d d d g k syt ‚ |  j d k sŽt ‚ |  j d k s£t ‚ t  j j d d ƒ }  |  j d k sÍt ‚ |  j d k sât ‚ |  j d k s÷t ‚ |  j d k st ‚ |  j d k s!t ‚ t  j j d d ƒ }  |  j d k sKt ‚ |  j d  d! d" d# g k slt ‚ |  j d$ d% d& g k sŠt ‚ |  j d' g k s¢t ‚ xt d( j ƒ  ƒ D]\ } } t  j j  d | ƒ }  |  j! |  j" |  j# |  j$ |  j% |  j& |  j' g } |  j( |  j) |  j* |  j+ |  j, |  j- |  j. g } | d) k r½| d* d	 d+ d	 d, d	 d- g k sit ‚ | d. d	 d/ d	 d0 d	 d- g k s�t ‚ |  j/ d  k s¥t ‚ |  j0 d1 k s¼t ‚ qµ| d k rD| d2 d	 d3 d	 d4 d	 d- g k sðt ‚ | d5 d	 d6 d	 d7 d	 d8 g k st ‚ |  j/ d  k s,t ‚ |  j0 d1 k s¼t ‚ qµ| d9 d	 d: d; d< d	 d- g k skt ‚ | d= d	 d> d? d, d	 d- g k s’t ‚ |  j/ d@ k s§t ‚ |  j0 dA k sµt ‚ qµWt  j j1 d dB ƒ }  |  j0 d1 k sêt ‚ t  j j2 d dC ƒ }  |  j3 dD k st ‚ |  j# dE k s)t ‚ |  j$ dF k s>t ‚ |  j% dG k sSt ‚ |  j& dH k sht ‚ |  j* dE k s}t ‚ |  j+ dF k s’t ‚ |  j, dI k s§t ‚ |  j- dJ k s¼t ‚ |  j' dK k sÑt ‚ |  j. dK k sæt ‚ |  j0 d1 k sût ‚ d  S(L   Nt   pdb_strsB   HEADER    PLANT SEED PROTEIN                      31-JAN-97   1AB1s(   PLANT SEED PROTEIN                      s	   31-JAN-97t   1AB1s   EXPDTA    X-RAY DIFFRACTIONs     s   X-RAY DIFFRACTIONt    i+   s&   REMARK   2 RESOLUTION. 0.89 ANGSTROMS.s   RESOLUTION. 0.89 ANGSTROMS.i    g{®Gázì?s
   REMARK   2i;   sF   CRYST1   40.759   18.404   22.273  90.00  90.70  90.00 P 1 21 1      2gþÔxé&aD@g�•C‹lg2@gÙÎ÷SãE6@g     €V@gÍÌÌÌÌ¬V@s   P 1 21 1i   s7   SCALE1      0.024534  0.000000  0.000300        0.00000i   gðl�Þp™?g        ga2U0*©3?s3   CONECT 1021  544 1017 1020 1022 1211 1222 5424 1311s    1021s     544s    1017s    1020s    1022s    1211s    1222s    1311s    5424sÒ   LINK         O1  DDA     1                 C3  DDL     2
LINK        MN    MN   391                 OE2 GLU   217            2565
LINK         NZ  LYS A 680        1.260    C4A PLP D   1                LYS-PLP
i    s    O1 t   DDAs      1s         s    C3 t   DDLs      2s           s   MN  s    MNs    391s    OE2t   GLUs    217s     2565s    NZ t   LYSR
   s    680s    C4At   PLPt   Dg)\�Âõ(ô?s   LYS-PLP s8   SLTBRG       OE1 GLU B 695                 NZ  LYS B 822sH   SSBOND 123 CYScB  250i   CYScB  277j                         1555   1555t   123t   CYSt   cBs    250t   is    277t   js     1555(4   R   t   recordst   headert   classificationR   t   depdatet   idcodet   expdtat   continuationt	   techniquet   keywordst
   remark_002t   textt
   resolutiont   Nonet   cryst1t   ucparamst   sgroupR   t   scalent   nt   sn1t   sn2t   sn3t   unt   conectt   serialt   serial_numbers_bonded_atomst$   serial_numbers_hydrogen_bonded_atomst!   serial_numbers_salt_bridged_atomst	   enumeratet
   splitlinest   linkt   name1t   altloc1t   resname1t	   chain_id1t   resseq1t   icode1t   sym1t   name2t   altloc2t   resname2t	   chain_id2t   resseq2t   icode2t   sym2t   distancet   margint   sltbrgt   ssbondt   sernum(   t   rR7   R+   t   _1t   _2(    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_pdb.pyt   exercise_records*   s�    					'		!00''''''		c       )   C   s  t  j ƒ  }  t |  j d t ƒ d ƒ s. t ‚ t  j d d9 d d: d d d d d d d d d d; d d< d  t d! d" d# d$ d% d& d' d( d) d* d+ d, d- d. d/ d0 d1 d d2 d3 d4 d5 ƒ }  d6 d7  } t |  j d t ƒ | ƒ sÞ t ‚ t  j j j	 ƒ  rt |  j ƒ  | d8 d7  ƒ st ‚ n  d  S(=   Nt   siguijsB   ATOM                             0.000   0.000   0.000  0.00  0.00t   xyzi   i   i   t   sigxyzi   i   i   t   occi   t   sigocci   t   bi	   t   sigbi
   t   uiji   i   i   i   i   i   i   i   i   i   i   i   t   heteroRP   t   ABCDEt   namet   FGHIt   segidt   JKLMt   elementt   NOt   charget   PQt   model_idt   RSTUt   chain_idt   VWt   resseqt   XYZat   icodet   altloct   ct   resnamet   defsó   HETATMABCDE FGHIcdefVWXYZab      1.000   2.000   3.000  7.00  9.00      JKLMNOPQ
SIGATMABCDE FGHIcdefVWXYZab      4.000   5.000   6.000  8.00 10.00      JKLMNOPQ
ANISOUABCDE FGHIcdefVWXYZab  110000 120000 130000 140000 150000 160000  JKLMNOPQ
iÿÿÿÿsR   
SIGUIJABCDE FGHIcdefVWXYZab  170000 180000 190000 200000 210000 220000  JKLMNOPQ
(   i   i   i   (   i   i   i   (   i   i   i   i   i   i   (   i   i   i   i   i   i   (
   R   t   make_atom_with_labelsR   t   format_atom_record_groupt   FalseR   t   Truet	   hierarchyt   atomt
   has_siguij(   t   awlt   expected(    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_pdb.pyt   exercise_make_atom_with_labels€   s<    		
c       	   C   s÷  x9 d d d d d  g D]" \ }  } t  |  d ƒ j | ƒ q Wxí g  d g d d g g D]Ó } t j d | ƒ } t | j ƒ t | ƒ k sŽ t ‚ t | j ƒ t | ƒ k s¯ t ‚ t | j ƒ t | ƒ k sÐ t ‚ t | j	 ƒ t | ƒ k sñ t ‚ t
 ƒ  } | j d | ƒ t | j ƒ  ƒ d k sU t ‚ qU Wt j d d d g ƒ } t | j ƒ d k s_t ‚ t | j ƒ d k szt ‚ t | j ƒ d k s•t ‚ t | j	 ƒ d k s°t ‚ t
 ƒ  } | j d | ƒ t | j ƒ  d ƒ såt ‚ t j d d d d d g ƒ } t | j ƒ d k st ‚ t | j ƒ d k s9t ‚ t | j ƒ d k sTt ‚ t | j	 ƒ d k sot ‚ t
 ƒ  } | j d | d d ƒ t | j ƒ  d ƒ sªt ‚ t j d d d d g ƒ } t | j ƒ d k sàt ‚ t | j ƒ d k sût ‚ t | j ƒ d k st ‚ t | j	 ƒ d k s1t ‚ t
 ƒ  } | j d | ƒ t | j ƒ  d ƒ sft ‚ t j d d d d d	 g ƒ } t | j ƒ d k sŸt ‚ t | j ƒ d k sºt ‚ t | j ƒ d k sÕt ‚ t | j	 ƒ d k sðt ‚ t
 ƒ  } | j d | d d ƒ t | j ƒ  d ƒ s+t ‚ t j d d d d d d	 d d	 g ƒ } t | j ƒ d k smt ‚ t | j ƒ d k sˆt ‚ t | j ƒ d k s£t ‚ t | j	 ƒ d k s¾t ‚ t
 ƒ  } | j d | ƒ t | j ƒ  d ƒ sót ‚ d  S(!   Nt   tmp1t   1t   tmp2s	           2t   tmp3s   1	t   tmp4s    	2t   tmp5s   1  t   wt
   file_namest   outi    i   sM   INFO: PDB file name appears 2 times: "tmp1"
  1 repeated file name ignored.

i   t   prefixt   ^sQ   ^INFO: PDB file name appears 3 times: "tmp1"
^  2 repeated file names ignored.
^
i   sa   INFO: PDB files with identical content:
  "tmp1"
  "tmp3"
1 file with repeated content ignored.

i   s   : sv   : INFO: PDB files with identical content:
:   "tmp1"
:   "tmp3"
:   "tmp5"
: 2 files with repeated content ignored.
:
i   s  INFO: PDB file name appears 2 times: "tmp4"
INFO: PDB file name appears 2 times: "tmp5"
  2 repeated file names ignored.
INFO: PDB files with identical content:
  "tmp2"
  "tmp4"
INFO: PDB files with identical content:
  "tmp1"
  "tmp3"
  "tmp5"
3 files with repeated content ignored.

(   R•   R–   (   R—   s	           2(   R˜   s   1	(   R™   s    	2(   Rš   s   1  (   t   opent   writeR   t   combine_unique_pdb_filesR   t   file_name_registryR   t   md5_registryt   unique_file_namest   raw_recordsR	   t   report_non_uniquet   getvalueR   (   t	   file_namet   sRœ   Rˆ   (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_pdb.pyt!   exercise_combine_unique_pdb_files¥   sz    !!!!	"						c          C   sà   t  ƒ  }  g  } t j j ƒ  } x£ | D]› } | j ƒ  } xE | D]= } t | ƒ d k s\ t ‚ | |  k sn t ‚ |  j | ƒ q> Wt | ƒ d k s— t ‚ t | ƒ | k s¯ t ‚ | j	 | d ƒ q% Wt | ƒ | k sÜ t ‚ d  S(   Ni   i   i    (
   t   setR   t   pdb_codes_fragment_filesRU   t   splitR   R   t   addt   sortedt   append(   t	   all_codest   first_codest   linest   linet   codest   code(    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_pdb.pyt!   exercise_pdb_codes_fragment_files  s    	c          C   s  t  j d d& d d ƒ j ƒ  }  t j j d |  ƒ d	 k s? t ‚ t j j d |  j ƒ  ƒ j	 ƒ  d
 d d g k su t ‚ t j j d |  j ƒ  j
 ƒ  d d d d g ƒ j	 ƒ  d d d g k sÀ t ‚ t j j } t | ƒ  d ƒ så t ‚ t | d |  ƒ d ƒ st ‚ xf | d |  j ƒ  ƒ | d |  j ƒ  j ƒ  ƒ | d |  j ƒ  j
 ƒ  ƒ g D] } t | d ƒ sMt ‚ qMWt | d d ƒ d ƒ sŒt ‚ t | d t ƒ d ƒ s«t ‚ t | d d' ƒ d  ƒ sÊt ‚ t  j d d( d d$ ƒ }  t j j d |  ƒ } t | d% ƒ st ‚ d  S()   Nt	   unit_celli
   i   iZ   ix   t   space_group_symbols   R 3t   crystal_symmetrys:   CRYST1    7.219    7.219    7.219  87.68  87.68  87.68 R 3s7   SCALE1      0.138527 -0.005617 -0.005402        0.00000s7   SCALE2      0.000000  0.138641 -0.005402        0.00000s7   SCALE3      0.000000  0.000000  0.138746        0.00000t   fractionalization_matrixt   uiÿÿÿÿi   iýÿÿÿs7   SCALE1      0.138527 -0.005617 -0.005402       -1.00000s7   SCALE2      0.000000  0.138641 -0.005402        2.00000s7   SCALE3      0.000000  0.000000  0.138746       -3.00000sâ   CRYST1    1.000    1.000    1.000  90.00  90.00  90.00 P 1
SCALE1      1.000000  0.000000  0.000000        0.00000
SCALE2      0.000000  1.000000  0.000000        0.00000
SCALE3      0.000000  0.000000  1.000000        0.00000sâ   CRYST1    7.219    7.219    7.219  87.68  87.68  87.68 R 3
SCALE1      0.138527 -0.005617 -0.005402        0.00000
SCALE2      0.000000  0.138641 -0.005402        0.00000
SCALE3      0.000000  0.000000  0.138746        0.00000t   scale_fractionalization_matrixsâ   CRYST1    7.219    7.219    7.219  87.68  87.68  87.68 P 1
SCALE1      0.138527 -0.005617 -0.005402        0.00000
SCALE2      0.000000  0.138641 -0.005402        0.00000
SCALE3      0.000000  0.000000  0.138746        0.00000t   cryst1_zi   sî   CRYST1    1.000    1.000    1.000  90.00  90.00  90.00 P 1           3
SCALE1      1.000000  0.000000  0.000000        0.00000
SCALE2      0.000000  1.000000  0.000000        0.00000
SCALE3      0.000000  0.000000  1.000000        0.00000t   write_scale_recordss:   CRYST1    1.000    1.000    1.000  90.00  90.00  90.00 P 1t   scale_ui   sâ   CRYST1    1.000    1.000    1.000  90.00  90.00  90.00 P 1
SCALE1      1.000000  0.000000  0.000000        1.00000
SCALE2      0.000000  1.000000  0.000000        2.00000
SCALE3      0.000000  0.000000  1.000000        3.00000i   i   id   s   C 1 2 1 (a-1/4,b-1/4,c)s?   CRYST1   11.000   12.000   13.000  90.00 100.00  90.00 C 1 21 1(   i
   i
   i   iZ   iZ   ix   (   i   i   i   (   i   i   i   iZ   id   iZ   (   R   t   symmetryt   primitive_settingR   R   t   format_cryst1_recordR   t   format_scale_recordsR¹   RU   R¼   t   format_cryst1_and_scale_recordsR   t
   parametersR�   (   R»   t   fRª   (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_pdb.pyt   exercise_format_records  sL    		"		c          C   sé   x† t  j ƒ  D]x }  t  j d t  j d |  ƒ ƒ } | j d d ƒ } t j j d | ƒ } t j j	 d | ƒ } | j
 d | ƒ s t ‚ q WxY d j ƒ  D]K } t j j	 d | ƒ } | j ƒ  d  k sÉ t ‚ | j ƒ  d  k s– t ‚ q– Wd  S(	   Nt   groupt   space_group_symbolst   volumeiè  R»   t   cryst1_recordt   othersî   ]
CRYST1    1.000    1.000    1.000  90.00  90.00  90.00 P 1
CRYST1    1.000    1.000    1.000   0.00   0.00   0.00 P 1
CRYST1    0.000    0.000    0.000  90.00  90.00  90.00 P 1
CRYST1    1.000    0.000    0.000   0.00  90.00  90.00 P 1
(   R   t   space_group_symbol_iteratort   space_group_infot   space_groupt   any_compatible_crystal_symmetryR   R   RÄ   t   cryst1_interpretationR»   t   is_similar_symmetryR   RU   R¹   RE   (   t   symbolst   sgit   csR+   t   cs2(    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_pdb.pyt$   exercise_format_and_interpret_cryst1K  s    c          C   sN  t  j j d t  j j j ƒ  ƒ }  |  d  k	 s3 t ‚ t |  ƒ d k sK t ‚ |  d t j	 d ƒ k sj t ‚ |  d t j	 d ƒ k s‰ t ‚ |  d t j	 d ƒ k s¨ t ‚ |  d	 t j	 d
 ƒ k sÇ t ‚ x€ d d d d d d d g D]c \ } } t  j j
 d |  d | ƒ } | d  k r+| d  k sFt ‚ qã | t j	 | ƒ k sã t ‚ qã Wd  S(   Nt   remark_290_recordsi   i    s   X,Y,Zi   s   1/2-X,-Y,1/2+Zi   s   -X,1/2+Y,1/2-Zi   s   1/2+X,1/2-Y,-Zt   1555s   x,y,zt   1381s   x-2,y+3,z-4t   3729s   -x+2,1/2+y-3,1/2-z+4s    3_729 s    3 729 t   _3729t   37_29t   symmetry_operatorst   link_sym(   RÛ   s   x,y,z(   RÜ   s   x-2,y+3,z-4(   RÝ   s   -x+2,1/2+y-3,1/2-z+4(   s    3_729 s   -x+2,1/2+y-3,1/2-z+4(   s    3 729 s   -x+2,1/2+y-3,1/2-z+4(   RÞ   N(   Rß   N(   R   t   remark_290_interpretationt   extract_symmetry_operatorst   exampleRU   RE   R   R   R   t   rt_mxt   get_link_symmetry_operator(   Rà   Rá   t   expected_sym_opt   sym_op(    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_pdb.pyt"   exercise_remark_290_interpretation^  s*    	c       #   C   s¿  t  j j }  |  d d d g  ƒ } | j d  k s6 t ‚ | j d  k sK t ‚ |  d d d d g ƒ } | j d  k sx t ‚ | j d  k s� t ‚ |  d d d d d d	 d
 d d d d d d d d d d d g ƒ } | j d k sä t ‚ | j j d g k sÿ t ‚ x¹ d d d d g D]¥ } |  d | d d d d d d d  d! d" d# d$ d% d& d' d( d) d* d+ d, d- d. d/ d0 d1 d2 d3 d4 d5 d6 d7 d8 g ƒ } | j d9 k sœt ‚ | j j ƒ  g  k st ‚ qWd  S(:   Nt   residue_namet    t
   atom_namest   TDt   Xt   thrt   Nt   CAt   Ct   Ot   CBt   OG1t   CG2t   Ht   HAt   HBt   HEt   HG1t   1HG2t   2HG2t   3HG2t   THRRˆ   t   dct   cdt   cytt   Pt   OP1t   OP2s   O5's   C5's   C4's   O4's   C3's   O3's   C2's   C1't   N1t   C2t   O2t   N3t   C4t   N4t   C5t   C6s   H5's   H5''s   H4's   H3's   H2's   H2''s   H1't   H41t   H42t   H5t   H6t   DC(	   R   R   t(   residue_name_plus_atom_names_interpretert   work_residue_nameRE   R   t   atom_name_interpretationt
   unexpectedt   unexpected_atom_names(   t   rnpaniR7   Rê   (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_pdb.pyt1   exercise_residue_name_plus_atom_names_interpreterv  s,    !gš™™™™™¹?c      	   C   s  d d  l  } d d d g } xÚt j |  ƒ D]É} | j d ƒ pL | j d ƒ sU q+ n  | | k ry | j  ƒ  | k ry q+ n  t j |  | ƒ } t j d | ƒ s£ t ‚ t j	 d | ƒ } | j
 ƒ  } g  } g  }	 g  }
 x{ | j ƒ  D]m } xd | j ƒ  D]V } xM | j ƒ  D]? } | j | j ƒ  ƒ |	 j | j ƒ  ƒ |
 j | j ƒ  ƒ qWqó Wqà W| d k rÒ| d d	 g g k sxt ‚ |	 t g k r–|
 t g k sœt ‚ | j | ƒ | j ƒ  d
 j ƒ  d
 j ƒ  sôt ‚ q+ | d k rT| d d g d d g d  d  g k st ‚ |	 t t t t g k s&t ‚ |
 t t t t g k sDt ‚ | j | ƒ q+ | d k r+ | d d d d d d g d d d d d d g d d g d  g k s¨t ‚ |	 t t t t g k sÆt ‚ |
 t t t t g k sät ‚ | j | ƒ q+ q+ Wt | ƒ d
 k rd G| GHn  d  S(   Niÿÿÿÿs   1ee3_stripped.pdbs   jcm.pdbs   pdb1zff.ents   .pdbs   .entR©   s   > chain " A" conformer ""t
   CCGAATTCGGi    s   > chain " P" conformer "A"t   IMEHTVs   > chain " P" conformer "B"tO   MSSIFINREYLLPDYIPDELPHREDQIRKIASILAPLYREEKPNNIFIYGLTGTGKTAVVKFVLSKLHKKFLGKFKHVYtO   INTRQIDTPYRVLADLLESLDVKVPFTGLSIAELYRRLVKAVRDYGSQVVIVLDEIDAFVKKYNDDILYKLSRINSISFtO   IGITNDVKFVDLLDPRVKSSLSEEEIIFPPYNAEELEDILTKRAQMAFKPGVLPDNVIKLCAALAAREHGDARRALDLLtO   RVSGEIAERMKDTKVKEEYVYMAKEEIERDRVRDIILTLPFHSKLVLMAVVSISSEENVVSTTGAVYETYLNICKKLGVt5   EAVTQRRVSDIINELDMVGILTVVNRGRYGKTKEIGLAVDKNIIVRSLIESDSs   > chain " B" conformer ""tO   KNPKVFIDPLSVFKEIPFREDILRDAAIAIRYFVKNEVKFSNLFLGLTGTGKTFVSKYIFNEIEEVKKEDEEYKDVKQAtO   YVNCREVGGTPQAVLSSLAGKLAGFSVPKHGINLGEYIDKIKNGTRNIRAIIYLDEVDTLVKRRGGDIVLYQLLRSDANtO   ISVIMISNDINVRDYMEPRVLSSLGPSVIFKPYDAEQLKFILSKYAEYGLIKGTYDDEILSYIAAISAKEHGDARKAVNtO   LLFRAAQLASGGGIIRKEHVDKAIVDYEQERLIEAVKALPFHYKLALRSLIESEDVMSAHKMYTDLCNKFKQKPLSYRRt.   FSDIISELDMFGIVKIRIINRGRAGGVKKYALVEDKEKVLRALNETs   > chain " C" conformer ""tB   TGTAAATTTCCTACGTTTCATCTGAAAATCTAGAGATTTTCAGATGAAACGTAGGAAATTTACATCs;   WARNING: exercise_format_fasta(): some input files missing:(   t   randomt   ost   listdirt   endswitht   opt   joinR   t   is_pdb_fileR   t   inputt   construct_hierarchyt   modelst   chainst
   conformersR±   t   format_fastat
   is_proteint   is_naR�   RŽ   t   removeRE   R   (   t   regression_pdbt   coverageR'  t   looking_fort   nodeR©   t   pdb_inpR�   t   fastaR4  R5  t   modelt   chaint	   conformer(    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_pdb.pyt   exercise_format_fasta�  st     $)		i    c   
      C   sï  t  j d t j d ƒ d d d d d d g d d	 d
 d d d t d t d |  ƒ } t | j d t d d d d ƒ j ƒ  ƒ } xld$ D]d} x[t t f D]M} | j
 d d d d d g d | d | ƒ } d sÒ | rå t j j | ƒ n  t j j d d  d t j | j ƒ  ƒ ƒ j d | d t ƒ } t | j d  | d d ƒ j ƒ  ƒ } t j | j ƒ  | j ƒ  ƒ }	 |	 j ƒ  sut ‚ d s�| rŽ|	 j ƒ  n  t |	 j ƒ  d! d" d# ƒs¯t ‚ t |	 j ƒ  d d" t j | j ƒ  ƒ d# ƒs– t ‚ q– Wqƒ Wd  S(%   NRÐ   s   P 31t   elementsRð   Rò   Ró   t   Sii   t   volume_per_atomiô  t   min_distanceg       @t   general_positions_onlyt   random_u_isot   use_u_anisot   anomalous_flagt   d_mint	   algorithmt   directt   rest   remarkt   Titlet   remarkst   Anyt   Thingt   fractional_coordinatesR‰   i    t   source_infoR´   t   use_scale_matrix_if_availablet   xray_structurei   t   epsg{®Gáz„?(   Ns   res(   R   RU  R   RÐ   R�   RŽ   t   abst   structure_factorst   f_calcRE   t   as_pdb_filet   syst   stdoutR¡   R   R   R.  R   t
   std_stringRU   t   xray_structure_simplet!   structure_factors_from_scattererst   linear_regressiont   datat   is_well_definedR   t   show_summaryR   t   slopet   y_interceptt   max(
   RG  t   verboset	   structuret   f_absR‰   RR  t   pdb_filet   structure_readt   f_readt
   regression(    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_pdb.pyt   exercise_xray_structureÓ  s@    					!c         C   sz   t  j |  d ƒ } t  j |  d ƒ } t ƒ  } d t j ƒ  } t j j d | | g d | d | ƒ } | d k sv t ‚ d  S(   Ns   1ywf.pdbs
   1ywf_h.pdbs   %d.pdbRœ   t   output_filet   logiO  (	   R+  R,  R	   R(  t   getpidR   R   t!   merge_files_and_check_for_overlapR   (   R7  Rj  t	   pdb_file2Rp  t   pdb_outt	   n_clashes(    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_pdb.pyt*   exercise_merge_files_and_check_for_overlapõ  s    		c         C   s÷   t  j d t j |  d ƒ ƒ } | j ƒ  } t | j ƒ t | j ƒ k oS d k n s^ t ‚ t	 | j d d d d d d	 d
 d d d g	 ƒ s• t ‚ t	 | j d d d d g ƒ sº t ‚ | j
 j t ƒ d k sØ t ‚ | j d d g k só t ‚ d  S(   NR©   s   pdb1a1q.enti   i    ge�zˆFwî¿gM.ÆÀ:ŽÓ?g
†s34Ž¿gP9&‹û�Ó¿g“7ÀÌwî¿g%“S;ÃÔv?gF¹‹0E‰¿g¶ø ã„?güÄôûþï?g3þ}Æ…«6Àg æËBR@g­QÑèé?s     1s     2(   R   R.  R+  R,  t   process_mtrix_recordsR   Rj   R%   R   R   t   coordinates_presentt   countRŽ   t   serial_number(   R7  R;  t
   mtrix_info(    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_pdb.pyt   exercise_mtrix   s    4		%c       	   C   sà   d }  d |  } t  j j d d  d | ƒ } | j ƒ  } t  j j d | j d | j d | j d | j	 ƒ } xo t
 | j ƒ  |  j ƒ  | j ƒ  j ƒ  ƒ D]C \ } } } | j ƒ  | j ƒ  k oÍ | j ƒ  k n s• t ‚ q• Wd  S(	   Ns  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.00000s0  %s
ATOM      1  N   THR 1   1       9.670  10.289  11.135  1.00 26.11           N
ATOM      2  CA  THR 1   1       9.559   8.931  10.615  1.00 27.16           C
ATOM      3  C   THR 1   1       9.634   7.903  11.739  1.00 20.29           C
ATOM      4  O   THR 1   1      10.449   8.027  12.653  1.00 35.00           O
ATOM      5  CB  THR 1   1      10.660   8.630   9.582  1.00 34.84           C
ATOM      6  OG1 THR 1   1      10.560   9.552   8.490  1.00 67.35           O
ATOM      7  CG2 THR 1   1      10.523   7.209   9.055  1.00 43.17           C
TER
RS  R´   t   rotation_matricest   translation_vectorst   serial_numberst   coordinates_present_flags(   R   R   R.  RE   Rw  t   format_MTRIX_pdb_stringRj   R%   Rz  Rx  t   zipRU   t   as_pdb_stringt   stripR   (   t
   mtrix_recsR+   t   piRj   t   rrt   l1t   l2t   l3(    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_pdb.pyt    exercise_mtrix_format_pdb_string  s    

"c          C   s+  d }  t  j d d d t j |  ƒ ƒ } | j ƒ  } t | j ƒ d k sN t ‚ t	 | j d d d d d d d d d d g	 ƒ s… t ‚ t	 | j
 d d d d g ƒ sª t ‚ t	 | j d d	 d
 d d d d	 d d	 d g	 ƒ sá t ‚ t	 | j
 d d d d g ƒ st ‚ | j d d d d g k s't ‚ d S(   s.   
  Verifying BIOMT extraction from pdb file
  sƒ  REMARK 300 BIOMOLECULE: 1
REMARK 300 SEE REMARK 350 FOR THE AUTHOR PROVIDED AND/OR  PROGRAM
REMARK 300 GENERATED ASSEMBLY INFORMATION FOR THE  STRUCTURE IN
REMARK 300 THIS ENTRY.  THE REMARK MAY ALSO PROVIDE INFORMATION ON
REMARK 300 BURIED SURFACE AREA.
REMARK 300 DETAILS: THE ASSEMBLY REPRESENTED IN THIS ENTRY  HAS REGULAR
REMARK 300 ICOSAHEDRAL POINT SYMMETRY (SCHOENFLIES SYMBOL  = I).
REMARK 350
REMARK 350 GENERATING THE BIOMOLECULE
REMARK 350 COORDINATES FOR A COMPLETE MULTIMER REPRESENTING THE KNOWN
REMARK 350 BIOLOGICALLY SIGNIFICANT OLIGOMERIZATION STATE OF THE
REMARK 350 MOLECULE CAN BE GENERATED BY APPLYING BIOMT TRANSFORMATIONS
REMARK 350 GIVEN BELOW.  BOTH NON-CRYSTALLOGRAPHIC AND
REMARK 350 CRYSTALLOGRAPHIC OPERATIONS ARE GIVEN.
REMARK 350
REMARK 350 BIOMOLECULE:  1
REMARK 350 APPLY THE FOLLOWING TO CHAINS: L, S
REMARK 350   BIOMT1   1  1.000000  0.000000  0.000000        0.00000
REMARK 350   BIOMT2   1  0.000000  1.000000  0.000000        0.00000
REMARK 350   BIOMT3   1  0.000000  0.000000  1.000000        0.00000
REMARK 350   BIOMT1   2  0.309017 -0.809017  0.500000        0.10000
REMARK 350   BIOMT2   2  0.809017  0.500000  0.309017        0.02000
REMARK 350   BIOMT3   2 -0.500000  0.309017  0.809017        0.00300
REMARK 350   BIOMT1   3 -0.809017 -0.500000  0.309017        0.00000
REMARK 350   BIOMT2   3  0.500000 -0.309017  0.809017        0.00000
REMARK 350   BIOMT3   3 -0.309017  0.809017  0.500000        0.00000
REMARK 350   BIOMT1   4 -0.809017  0.500000 -0.309017        0.00000
REMARK 350   BIOMT2   4 -0.500000 -0.309017  0.809017        0.00000
REMARK 350   BIOMT3   4  0.309017  0.809017  0.500000        0.00000
  RS  R´   i   i    g      ð?g        i   g2:=ïÆÓ?g™�žwãé¿g      à?g™�žwãé?g      à¿gš™™™™™¹?g{®Gáz”?gú~j¼t“h?i   i   N(   R   t	   pdb_inputRE   R   t   split_linest   process_BIOMT_recordsR   Rj   R   R   R%   Rz  (   t   pdb_test_dataR;  R{  (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_pdb.pyt   exercise_BIOMT,  s"    "			%		%c         C   sa   t  j d t j |  d ƒ ƒ } | j ƒ  } t | d ƒ s? t ‚ | j ƒ  } | d k s] t ‚ d  S(   NR©   s   pdb1a1q.entg×£p=
×ï?s   X-RAY DIFFRACTION(   R   R.  R+  R,  t   extract_wavelengthR   R   t   get_experiment_type(   R7  R;  t
   wavelengtht	   expt_type(    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_pdb.pyt   exercise_header_misc`  s
    c         C   sÈ   t  |  d ƒ } | d  k	 r7 | t j j d | ƒ IJn  xv t | ƒ D]h \ } } t j j j ƒ  } | d | _ d | _	 d | _
 d | _ | | _ d | _ | | j ƒ  IJqD W| d IJ| j ƒ  d  S(   NR›   R»   i   s    C  t   DUMt   END(   R    RE   R   R   RÄ   RT   R�   t   atom_with_labelsRP   Rx   R‰   R„   Ro   Rq   RŒ   t   close(   R©   t
   sites_cartR»   RÈ   R7   t   siteR   (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_pdb.pyt   dump_pdbg  s    					
c          C   s^   xW t  d ƒ D]I }  t j j d |  ƒ } d | j ƒ  } t d d |  d | j | ƒ q Wd  S(   Ni   t   levelg      ø?R©   s   icosahedron_%d.pdbRš  (   t   xranget   scitbxt   matht   icosahedront   next_neighbors_distanceRœ  t   sites(   R�  R¡  t   scale(    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_pdb.pyt   write_icosahedronx  s    
c          C   s>  d d l  m }  d d l  m } d } |  d d ƒ } | j | ƒ | j ƒ  y t j d | j d d  ƒ } Wn; t	 k
 r¨ } t
 | ƒ } | j ƒ  d	 | k s¯ t ‚ n X| ‚ d
 } |  d d ƒ } | j | ƒ | j ƒ  y t j d | j d d  ƒ } Wn7 t j j k
 r3} t
 | ƒ } | d k s:t ‚ n X| ‚ d  S(   Niÿÿÿÿ(   t   open_tmp_file(   t   Exception_expecteds  ATOM   1  CB  LYS 109  16.113   7.345  47.084  1.00 20.00      A
ATOM   2  CG  LYS 109  17.058   6.315  47.703  1.00 20.00      A
ATOM   3  CB  LYS 109  26.721   1.908  15.275  1.00 20.00      B
ATOM   4  CG  LYS 109  27.664   2.793  16.091  1.00 20.00      B
t   suffixs   bad.pdbR©   RS  i    s  data_cif
loop_
  _atom_site.group_PDB
  _atom_site.id
  _atom_site.label_atom_id
  _atom_site.label_alt_id
  _atom_site.label_comp_id
  _atom_site.auth_asym_id
  _atom_site.auth_seq_id
  _atom_site.pdbx_PDB_ins_code
  _atom_site.Cartn_x
  _atom_site.Cartn_y
  _atom_site.Cartn_z
  _atom_site.occupancy
  _atom_site.B_iso_or_equiv
  _atom_site.type_symbol
  _atom_site.pdbx_formal_charge
  _atom_site.label_asym_id
  _atom_site.label_entity_id
  _atom_site.label_seq_id
  #_atom_site.pdbx_PDB_model_num
ATOM  47  CA . THR  C   22  ?   -7.12300  19.28700  -2.26800  1.000   8.32783  C   ? B  ?  11  1
ATOM  52  CA . ASN  C   25  ?  -11.06500  18.97000  -5.48100  1.000   8.20531  C   ? C  ?  12  1
ATOM  60  CA . VAL  C   26  ?  -12.16900  22.54800  -4.78000  1.000   8.45988  C   ? C  ?  13  1
s   bad.cifsC   Wrong number of data items for loop containing _atom_site.group_PDB(   t   libtbx.test_utilsR¦  R§  R¡   R™  R   R.  Rx   RE   t
   ValueErrort   strRU   R   R   t   cift   CifParserError(   R¦  R§  t   bad_pdb_stringRÈ   R;  t   et   err_messaget   bad_cif_loop_string(    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_pdb.pyt!   exercise_pdb_input_error_handling€  s.    
  
 c          C   s  d t  j d k }  t ƒ  t ƒ  t ƒ  t ƒ  t ƒ  t ƒ  t ƒ  t	 ƒ  t
 ƒ  t ƒ  t ƒ  t j j d d d t j ƒ } | d  k r’ d GHnB t d | ƒ t d | ƒ t d | ƒ t ƒ  t ƒ  t d | ƒ x$ t t f D] } t | d |  ƒqá Wt ƒ  t ƒ  GHd  S(	   Ns	   --verbosei   t   relative_paths   phenix_regression/pdbt   tests8   Skipping some tests: phenix_regression/pdb not availableR7  Rg  (   R[  t   argvR²  R   R*   Rm   R”   R«   R¸   RÉ   RÙ   Ré   R  t   libtbxt   envt   find_in_repositoriesR+  t   isdirRE   R@  Rv  R|  R‹  R�  R•  R�   RŽ   Rn  R¥  R   (   Rg  R7  RG  (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_pdb.pyt   runµ  s6    t   __main__(3   t
   __future__R    R   R   t   iotbx.pdb.cryst1_interpretationt#   iotbx.pdb.remark_290_interpretationt   cctbxR   R   t   cctbx.developmentR   t   cctbx.array_familyR   t   scitbx.mathRŸ  R©  R   R   t   libtbx.utilsR   t   libtbx.load_envR¶  t	   cStringIOR	   R[  R(  t   pathR+  R   R*   Rm   R”   R«   R¸   RÉ   RÙ   Ré   R  R@  Rn  Rv  R|  R‹  R�  R•  RE   Rœ  R¥  R²  Rº  t   __name__(    (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/tst_pdb.pyt   <module>   sJ   				V	%	\		;			C"			 	4			5	