ó
‰™xTc        ²   @   sm  d  d l  m Z d  d l m Z d  d l Z e j j d ƒ Z d  d l	 Td  d l
 Z d  d l Z 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 m Z m Z m Z d  d l m Z d  d l m Z d  d l  Z  d  d l! Z! e! j" Z# d „  Z$ d „  Z% d d „ Z& d „  Z' i d d 6d d 6d d 6d d 6d d 6Z( e) d d d d d d d d g ƒ Z* i d  d 6d! d 6d" d 6d d 6d# d 6d  d$ 6d! d% 6d" d& 6d d' 6d# d( 6d) d) 6d* d* 6d+ d+ 6d# d# 6d  d 6d! d 6d" d 6d d 6d# d 6d d, 6d d- 6d d. 6d d/ 6d) d 6d* d 6d+ d 6d# d 6Z+ d0 „  Z, i6 d1 d2 6d3 d4 6d5 d6 6d7 d8 6d9 d: 6d; d< 6d= d> 6d? d@ 6dA dB 6dC dD 6dE dF 6dG dH 6dI dJ 6dK dL 6dM dN 6dO dP 6dQ dR 6dS dT 6dU dV 6dW dX 6dY dZ 6d[ d\ 6d] d^ 6d_ d` 6da db 6dc dd 6de df 6dg dh 6di dj 6dk dl 6dm dn 6do dp 6dq dr 6ds dt 6du dv 6dw dx 6dy dz 6d{ d| 6d} d~ 6d d€ 6d� d‚ 6dƒ d„ 6d… d† 6d‡ dˆ 6d‰ dŠ 6d‹ dŒ 6d� dŽ 6d� d� 6d‘ d’ 6d“ d” 6d• d– 6d— d˜ 6d™ dš 6d› d› 6Z- e) d2 d6 d8 d< d@ dJ dœ dT dV d^ d~ d€ d„ d† dŠ dŒ dŽ d� d’ d” d– d˜ dš d› g ƒ Z. d� dN dž f dŸ dœ d  f d¡ dœ d  f d¢ dX d£ f d¤ d^ d  f d¥ d^ d  f d¦ df d# f d§ db d¨ f d© dN dž f dª dœ d  f d« dœ d  f d¬ dX d£ f d­ d^ d  f d® d^ d  f d¯ df d# f d° db d¨ f d± dP dž f d² d’ d³ f d´ d’ d³ f dµ dZ d£ f d¶ d” d  f d· d” d  f d¸ dh d# f d¹ dd d¨ f dº d– d» f d¼ d– d» f d½ d¾ d  f d¿ dP dž f dÀ d’ d³ f dÁ d’ d³ f dÂ dZ d£ f dÃ d” d  f dÄ d” d  f dÅ dh d# f dÆ dd d¨ f dÇ d– d» f dÈ d– d» f dÉ d¾ d  f dÊ dj d# f dË d› d  f dÌ dj d# f dÍ d› d  f dÎ d2 d  f d1 d2 d  f d3 d4 d  f dÏ d6 d  f d5 d6 d  f dÐ d8 d  f d7 d8 d  f d9 d: d  f dÑ d< d  f d; d< d  f d= d> d  f dÒ d@ d  f d? d@ d  f dC dD d# f dA dB d  f dÓ dD d# f dE dF dÔ f dÕ dH dž f dÖ dJ d  f d× dJ d  f dØ dL d¨ f dÙ dœ d  f dÚ dœ d  f dÛ d’ d³ f dÜ dœ d  f dÝ dœ d  f dÞ d’ d³ f dß d’ d³ f dà dN dž f dá dP dž f dâ dR dã f dä dT d  f då dT d  f dæ d˜ d  f dç dV d  f dè dV d  f dé dX d£ f dê dZ d£ f dë d\ dì f dí d^ d  f dî dš d  f dï d” d  f dð d^ d  f dñ d^ d  f dò d” d  f dó d” d  f dô df d# f dõ dh d# f dö dj d# f d÷ dš d  f dø d` dù f dú db d¨ f dû dd d¨ f dü df d# f dý dh d# f dþ dj d# f dÿ dl dÔ f d d– d» f dd– d» f dG dH dž f ddJ d  f dI dJ d  f dK dL d¨ f ddœ d  f ddœ d  f d’ d’ d³ f ddœ d  f ddœ d  f dd’ d³ f d‘ d’ d³ f dM dN dž f dO dP dž f dQ dR dã f ddT d  f dS dT d  f d	d˜ d  f d
dV d  f dU dV d  f dW dX d£ f dY dZ d£ f d[ d\ dì f dd^ d  f ddš d  f d” d” d  f dd^ d  f d] d^ d  f dd” d  f d“ d” d  f de df d# f dg dh d# f di dj d# f ddš d  f d_ d` dù f da db d¨ f dc dd d¨ f ddf d# f ddh d# f ddj d# f dk dl dÔ f d– d– d» f d• d– d» f d˜ d˜ d  f d— d˜ d  f dš dš d  f d™ dš d  f d¾ d¾ d  f d› d› d  f dm dn d  f do dp dž f dq dr d  f ds dt d£ f du dv d¨ f dw dx dÔ f dy dz dÔ f d‰ dŠ d  f d{ d| dù f dd~ d» f d} d~ d» f d‹ dŒ d  f dd€ d  f d d€ d  f ddŽ d  f d� dŽ d  f d� d‚ dã f dd„ d  f dƒ d„ d  f dd† d  f d… d† d  f ddŽ d  f d‡ dˆ dž f ddŠ d  f ddŒ d  f ddŽ d  f d� d� d  f g° Z/ d„  Z0 e0 ƒ  Z1 de2 f d„  ƒ  YZ3 de2 f d „  ƒ  YZ4 d!e2 f d"„  ƒ  YZ5 d#e2 f d$„  ƒ  YZ6 d%„  Z7 d&e2 f d'„  ƒ  YZ8 d(e2 f d)„  ƒ  YZ9 e: e8 e: e: e; d*„ Z< e: e8 e: e: e; d+„ Z= d,d-g Z> d.d/d0d1d2d3d4d5d6d7d8f Z? d9e2 f d:„  ƒ  YZ@ d;e j jA e j= e@ f d<„  ƒ  YZB d=e2 f d>„  ƒ  YZC d?ZD d@e2 f dA„  ƒ  YZE dBe  jF dC„ ZG dBe  jF dDdE„ ZH dFdGdHdIdJdKdLdMdNdOdPdQdRdSg ZI dTeJ k rVe) eI ƒ ZI n  dU„  ZK e: dV„ ZL e: e: dWdWdWg dX„ ZM e: e: eN e: dWdWdWg dY„ ZO dZ„  ZP d[e2 f d\„  ƒ  YZQ d]eQ f d^„  ƒ  YZR d_„  ZS d`„  ZT da„  ZU e: e: e: e: e: e: e: e: e: e: e: e: e: e: e: e: e: e: e: e: e: db„ ZV e: dc„ ZW e: e: dd„ ZX e: e: de„ ZY d S(f  iÿÿÿÿ(   t   division(   t   flexNt   iotbx_pdb_ext(   t   *(   t   matrix(   t   interpreters(   t
   smart_open(   t   show_string(   t   plural_st   hashlib_md5t   date_and_timet   Sorry(   t   Auto(   t   StringIOc         C   sT  t  j d |  ƒ j ƒ  j ƒ  } x/| D]'} | j d ƒ r› y t j j j d | ƒ } Wn t j j j	 k
 ru q% n X| j
 d  k	 rL| j d  k	 rLt Sq% | j d ƒ s¹ | j d ƒ r% y( t j d d  d t j | g ƒ ƒ } Wn' t k
 r÷ ‚  n t k
 r
q% n X| j ƒ  j ƒ  d k rL| j ƒ  d	 } | j d
 k rIt SqLq% q% Wt S(   Nt	   file_namet   CRYST1t   pdb_strs   ATOM  t   HETATMt   source_infot   linesi   i    s       (   R   t   for_readingt   readt
   splitlinest
   startswitht   iotbxt   pdbt   recordst   cryst1t   FormatErrort   ucparamst   Nonet   sgroupt   Truet   extt   inputR   t
   std_stringt   KeyboardInterruptt	   Exceptiont   atomst   sizet   namet   False(   R   t   pdb_raw_recordsR   R   t   pdb_inpt   atom(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   is_pdb_file   s0    	   	  c         C   sZ   y? t  j j d |  ƒ j ƒ  } | j ƒ  d } d | k r> t SWn t k
 rU } t SXd  S(   Nt	   file_pathi    t
   _atom_site(   R   t   cift   readert   modelt   valuesR    R%   R)   (   R   t	   cif_modelt	   cif_blockt   e(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   is_pdb_mmcif_file.   s    t   PDB_MIRROR_PDBc         C   sŠ   t  |  ƒ d k r% t d |  ƒ ‚ n  |  j ƒ  }  t j | } t j | |  d d !d |  ƒ } t j | ƒ s† t d |  | f ƒ ‚ n  | S(   Ni   s,   Invalid PDB ID: %s (must be four characters)i   i   s   pdb%s.ent.gzs   No file with PDB ID %s (%s)(   t   lent   RuntimeErrort   lowert   ost   environt   opt   joint   isfile(   t   pdb_idt   environ_keyt
   pdb_mirrort   result(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   ent_path_local_mirror7   s     c             s›   d d  l  }  |  j |  j |  j } } } t | ƒ ‰  } ˆ  j | ƒ ˆ  j | ƒ ‡  f d †  } | | | } | | | ƒ | | | ƒ | | | ƒ | S(   Niÿÿÿÿc            s7   x0 |  D]( } x | D] } ˆ  j  | | ƒ q Wq Wd  S(   N(   t   append(   t   firstt   secondt   ft   s(   t   _(    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   xyG   s    (   t   stringt   ascii_uppercaset   ascii_lowercaset   digitst   listt   extend(   RM   t   ut   lt   dRD   RL   t   a(    (   RK   s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   systematic_chain_idsA   s    t   At   ADEt   Ct   CYTt   Gt   GUAt   Tt   THYt   Ut   URIt   ADt   CDt   GDt   TDs   ?As   ?Cs   ?Gt   DTs   +As   +Cs   +Gs   +Us   +Tt   DAt   DCt   DGt   ARt   CRt   GRt   URc         C   s   t  j |  j ƒ  j ƒ  ƒ S(   N(   t   rna_dna_reference_residue_namest   gett   stript   upper(   t   common_name(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   rna_dna_reference_residue_namey   s    s   C1*s    C1't   C2s    C2 s   C2*s    C2's   C3*s    C3't   C4s    C4 s   C4*s    C4't   C5s    C5 s   C5*s    C5't   C6s    C6 t   C5Ms    C7 t   C8s    C8 t   H1s    H1 s   H1*s    H1't   H2s    H2 t   H21s    H21t   H22s    H22t   H3s    H3 s   H3*s    H3's   H4*s    H4't   H41s    H41t   H42s    H42t   H5s    H5 s   H5*1s    H5't   H6s    H6 t   H61s    H61t   H62s    H62t   H5M1s    H71t   H5M2s    H72t   H5M3s    H73t   H8s    H8 t   N1s    N1 t   N2s    N2 t   N3s    N3 t   N4s    N4 t   N6s    N6 t   N7s    N7 t   N9s    N9 t   O2s    O2 s   O2*s    O2's   O3*s    O3't   O4s    O4 s   O4*s    O4's   O5*s    O5't   O6s    O6 t   O1Ps    OP1t   O2Ps    OP2t   O3Ts    OP3t   Ps    P  s   H2*2s   H2''s   H5*2s   H5''s   HO2*s   HO2's   HO3*s   HO3's   HO5*s   HO5't   HOP3s    H2't   1D2s   G DGs   1D2't   ANYs   1D2*t   1D4s   C DCs   1D5's   1D5*t   1D5Mt   1D6s   A DAt   1H2s   1H2's   1H2*t   1H4s   1H5's   1H5*t   1H5Mt   1H6t   2D2s   2D2's   DA DC DG DTs   2D2*t   2D4s   2D5's   2D5*t   2D5Mt   2D6s   2DO's   A C G Us   2DO*t   2DOPt   HOP2t   2H2s   2H2's   2H2*t   2H4s   2H5's   2H5*t   2H5Mt   2H6s   2HO's   2HO*t   2HOPt   3D5Mt   3DOPt   3H5Mt   3HOPs   C1's   C2's   C3's   C4's   C5't   C7s	   A G DA DGt   D1s   D1's   D1*t   D2s   D2's   D2*s   D2''s   D2'1s   D2*1s   D2'2s   D2*2t   D21t   D22t   D3s   U DTs   D3's   D3*t   D3Ts   D4's   D4*t   D41t   D42t   D5s   C U DCs   D5's   D5*s   D5''s   D5'1s   D5*1s   D5'2s   D5*2t   D5M1t   D5M2t   D5M3t   D5Tt   D6s	   C U DC DTt   D61t   D62t   D71t   D72t   D73t   D8s   DO2's   DO2*s   H1's   H2's   H2*s   H2'1s   H2*1s   H2'2s   H3't   H3Ts   H4's   H5's   H5*s   H5'1s   H5'2t   H5Tt   H71t   H72t   H73s   O2's   O3't   O3Ps   O4's   O5't   O5Tt   OP1t   OP2t   OP3c          C   s=   i  }  x0 t  D]( \ } } } | t k r | |  | <q q W|  S(   N(   t   rna_dna_atom_name_aliasest)   rna_dna_atom_names_backbone_reference_set(   RD   RV   t   rRI   (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt%   __rna_dna_atom_names_backbone_aliasesƒ  s
    t!   rna_dna_atom_names_interpretationc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   sG   | d k r d } n | d k s' t  ‚ | |  _ | |  _ t |  ƒ d  S(   NR^   Rf   s   ?As   ?Cs   ?GRX   RZ   R\   R`   Rg   Rh   Ri   (   s   ?As   ?Cs   ?GRX   RZ   R\   R`   Rg   Rh   Ri   Rf   R^   (   t   AssertionErrort   residue_namet
   atom_namest&   rna_dna_atom_names_interpretation_core(   t   selfRÕ   RÖ   (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   __init__�  s    	 		c         C   sO   g  } xB t  |  j |  j ƒ D]+ \ } } | j d  k r | j | ƒ q q W| S(   N(   t   zipRÖ   t   infost   reference_nameR   RF   (   RØ   RD   t	   atom_namet   info(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   unexpected_atom_names˜  s
    "c         C   sË   g  } x¾ |  j  D]³ } | j } | d  k r; | j d  ƒ q t j | ƒ } | d  k	 rf | j | ƒ q | d k r¤ |  j j d ƒ r” | j d ƒ qÃ | j d ƒ q | d k s¶ t ‚ | j d  ƒ q W| S(   Ns    H2't   Ds   H2*1s   H2*R—   (	   RÛ   RÜ   R   RF   t8   rna_dna_atom_names_reference_to_mon_lib_translation_dictRo   RÕ   R   RÔ   (   RØ   RD   RÞ   t   rnt   mn(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   mon_lib_namesŸ  s    	(   t   __name__t
   __module__RÙ   Rß   Rä   (    (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyRÓ   ‹  s   		t(   residue_name_plus_atom_names_interpreterc           B   s   e  Z d e d  „ Z RS(   c         C   s  | j  ƒ  j ƒ  } t | ƒ d k r: d  |  _ d  |  _ d  Sd d l m } | j | ƒ } | d  k rn d  } n | } | } t	 j | ƒ }	 d  }
 |	 d  k	 rÈ |	 j
 d | ƒ }
 |
 d  k	 rÿ| |
 _ qÿn7| d  k sÚ t ‚ | d  k	 r| r| t k rd  } n t d | ƒ } | d  k	 rÿt d | d | ƒ }
 |
 j d k r™t | ƒ d k ru| t k rud  |  _ d  |  _ d  S| d  k r™| t k r™d  }
 q™n  |
 d  k	 rÿ|
 j } | rüi d d 6d	 d	 6d
 d
 6d d 6d d 6d d 6d d 6d d 6| } qüqÿn  | |  _ |
 |  _ d  S(   Ni    iÿÿÿÿ(   t#   three_letter_l_given_three_letter_dRÖ   Rr   RÕ   i   RX   RZ   R\   R`   Rb   Rg   Rc   Rh   Rd   Ri   Re   Rf   (   Rp   Rq   R9   R   t   work_residue_namet   atom_name_interpretationt   iotbx.pdb.amino_acid_codesRè   Ro   t   protein_atom_name_interpreterst   match_atom_namest   d_aa_residue_nameRÔ   t   cns_dna_rna_residue_namesRs   RÓ   t   n_unexpectedt   mon_lib_dna_rna_cifRÕ   (   RØ   RÕ   RÖ   t#   translate_cns_dna_rna_residue_namest   return_mon_lib_dna_nameRé   Rè   t   l_aa_rnt   d_aa_rnt   protein_interpreterRê   t   rna_dna_ref_residue_name(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyRÙ   µ  sj    													N(   Rå   Ræ   R   R)   RÙ   (    (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyRç   ³  s   t   combine_unique_pdb_filesc           B   s    e  Z d  „  Z d d d „ Z RS(   c         C   s1  i  |  _  i  |  _ g  |  _ g  |  _ x| D]þ } | |  j  k rV |  j  | c d 7<q+ d |  j  | <g  t j d | ƒ j ƒ  j ƒ  D] } | j ƒ  j	 ƒ  ^ q‚ } t
 ƒ  } | j d j | ƒ ƒ | j ƒ  } |  j j | ƒ } | d  k	 rù | j | ƒ q+ | g |  j | <|  j j | ƒ |  j j | ƒ q+ Wd  S(   Ni   R   s   
(   t   file_name_registryt   md5_registryt   unique_file_namest   raw_recordsR   R   R   R   t
   expandtabst   rstripR	   t   updateR?   t	   hexdigestRo   R   RF   RR   (   RØ   t
   file_namesR   RJ   RÑ   t   mRT   (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyRÙ   õ  s(    					1	t    c         C   s‰  | d  k r t j } n  d } xe t |  j j ƒ  ƒ D]N } |  j | } | d k r4 | | d | t | ƒ f IJ| | d 7} q4 q4 W| d k r° | | d t d | ƒ IJn  d } xw |  j j	 ƒ  D]f } t
 | ƒ d k rÆ | | d IJx& | D] } | | d t | ƒ IJqó W| t
 | ƒ d 7} qÆ qÆ W| d k rZ| | d t d | ƒ IJn  | d k sr| d k r…| | j ƒ  IJn  d  S(	   Ni    i   s(   INFO: PDB file name appears %d times: %ss"     %d repeated file name%s ignored.t   ns'   INFO: PDB files with identical content:s     %ss(   %d file%s with repeated content ignored.(   R   t   syst   stdoutt   sortedRù   t   keysR   R   Rú   R3   R9   Rþ   (   RØ   t   outt   prefixt	   n_ignoredR   R  t   n_identicalR  (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   report_non_unique  s0     


N(   Rå   Ræ   RÙ   R   R  (    (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyRø   ó  s   	t   header_datec           B   s   e  Z d  „  Z d „  Z RS(   c         C   s�  d |  _ d |  _ d |  _ d |  _ t | ƒ d k r: d S| j d ƒ d k rS d S| d d k ss | d d k rw d S| j d ƒ \ } } } y t | ƒ |  _ Wn t	 k
 rµ n+ X|  j d k  sÔ |  j d k rà d |  _ n  | j
 ƒ  d k r| j
 ƒ  |  _ n  y t | ƒ |  _ Wn t	 k
 r*n+ X|  j d k  sI|  j d k rUd |  _ n  |  j d k	 r™|  j d k  r†d |  j |  _ q™d |  j |  _ n  d S(   s   Expected format: DD-MMM-YYi	   Nt   -i   i   i   i   t   JANt   FEBt   MARt   APRt   MAYt   JUNt   JULt   AUGt   SEPt   OCTt   NOVt   DECi    ic   i<   iÐ  il  (   R  R  R  R  R  R  R  R  R  R  R  R  (   R   t   ddt   mmmt   yyt   yyyyR9   t   countt   splitt   intt
   ValueErrorRq   (   RØ   t   fieldR  R  R  (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyRÙ   (  s>    				       	 	   c         C   s:   |  j  d  k	 o9 |  j d  k	 o9 |  j d  k	 o9 |  j d  k	 S(   N(   R  R   R  R  R  (   RØ   (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   is_fully_definedD  s    (   Rå   Ræ   RÙ   R%  (    (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyR  &  s   	c         C   sˆ   |  j  d ƒ r„ t d |  d d !ƒ } | j ƒ  r8 | j S|  j ƒ  } | j ƒ  x3 | D]( } t d | ƒ } | j ƒ  rU | j SqU Wn  d  S(   Nt   HEADERR$  i2   i;   (   R   R  R%  R  R!  t   reverseR   (   t   recordt   datet   fieldsR$  (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   header_yearJ  s     
 t   Please_pass_string_or_Nonec           B   s   e  Z RS(    (   Rå   Ræ   (    (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyR,  U  s    t   pdb_input_from_anyc           B   s)   e  Z d e d d e d  „ Z d „  Z RS(   c         C   s¬  d  |  _ d  } d d l m } d } | d  k	 rO | j | ƒ rO | t f }	 n t | f }	 d  }
 xù |	 D]ñ } y+ | d | d | d | d | d	 | ƒ } Wn1 t k
 rÌ } |
 d  k rh t j ƒ  }
 qh qh n Xd  }
 | t k rO| j	 ƒ  j
 ƒ  } t | j ƒ  j ƒ  ƒ } | j ƒ  j d
 d ƒ } | | k sh | | | k rCqh n  d |  _ n	 d |  _ Pqh W|
 d  k	 r„|
 d |
 d |
 d ‚ n  | d  k rŸt d ƒ ‚ n  | |  _ d  S(   Niÿÿÿÿ(   t	   cif_inputs   .cifs   .mmcifR   R   R   RA   t   raise_sorry_if_format_errors         i    R   R0   i   i   s+   Could not interpret input as any file type.(   s   .cifs   .mmcif(   R   t   file_formatt   iotbx.pdb.mmcifR.  t   endswitht	   pdb_inputR%   R  t   exc_infot   unknown_sectionR'   t   sumt   record_type_countsR3   Ro   R   t   _file_content(   RØ   R   R   R   RA   R/  t   contentR.  t
   mmcif_extst   file_inputsR4  t
   file_inputR6   t   n_unknown_recordst	   n_recordst   n_blank_records(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyRÙ   Y  sH    	 	c         C   s   |  j  S(   N(   R8  (   RØ   (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   file_content‹  s    N(   Rå   Ræ   R   R,  R)   RÙ   R@  (    (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyR-  W  s   -c         C   so  | d  k	 r0 |  d  k s t ‚ t d | ƒ }  n  |  d  k	 r¿ y< t j d d t |  ƒ d t j t j	 |  ƒ j
 ƒ  ƒ ƒ SWq¿ t k
 r» } | rµ t d t |  ƒ t | ƒ f ƒ ‚ q¼ ‚  q¿ Xn  | t k	 sÑ t ‚ t | t ƒ rò t j | ƒ } n' t | t t f ƒ rt j | ƒ } n  y t j d | d | ƒ SWn5 t k
 rj} | rdt d t | ƒ ƒ ‚ qk‚  n Xd  S(   NRA   R   s   file R   s   Format error in %s:
%ss   Format error:
%s(   R   RÔ   RE   R!   R"   t   strR   t   split_linesR   R   R   R#  R   R,  t
   isinstanceRQ   t   tupleR#   (   R   R   R   RA   R/  R6   (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyR3  Ž  s.    	#%
c         C   s+   t  d |  d | d | d | d | ƒ j ƒ  S(   sá  
  Main input method for both PDB and mmCIF files; will automatically determine
  the actual format and return the appropriate data type.

  Parameters
  ----------
  file_name: path to PDB or mmCIF file
  source_info: string describing source of input (e.g. file name)
  lines: flex.std_string array of input lines
  pdb_id: PDB ID to automatically retrieve from local mirror
  raise_sorry_if_format_error: re-raise any low-level parser errors as a
    libtbx.utils.Sorry exception instance for clean user feedback

  Returns
  -------
  An object representing the result of parsing, including an array of atom
  objects; the actual class will differ depending on the input format.  Much of
  the API will be the same in either case.
  R   R   R   RA   R/  (   R-  R@  (   R   R   R   RA   R/  (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyR"   ®  s    t   PEAKt   SITER5  t   title_sectiont   remark_sectiont   primary_structure_sectiont   heterogen_sectiont   secondary_structure_sectiont   connectivity_annotation_sectiont   miscellaneous_features_sectiont   crystallographic_sectiont   connectivity_sectiont   bookkeeping_sectiont   pdb_input_mixinc           B   sÂ   e  Z d e d  d d „ Z e e e e e e e e d e e d „ Z e e e e e e e e e d „	 Z d e d e e e d  e e e e	 d „ Z
 e d e d e e d  e e e e e	 d „ Z RS(   g      à?i    c         C   se   |  j  d | d | ƒ } | d  k r( d  S| d  k	 rO | j ƒ  } | j ƒ  } n  | j d | d | ƒ S(   Nt   crystal_symmetryt   weak_symmetryt   min_distance_sym_equivt   u_star_tolerance(   RR  R   RT  RU  t   special_position_settings(   RØ   RV  RS  RT  RU  RR  (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyRV  à  s    		 	c         C   sô   |	 d
 k r- t ƒ  }	 | t k rB t } qB n | t k rB t } n  | t k r] |  j ƒ  } n  | t k rx |  j ƒ  } n  | d
 k	 s� | d
 k	 r² |	 t d | d | d | ƒ IJn  |  j d |	 d | d | d | d | d	 | ƒ | rê |	 S|	 j	 ƒ  S(   s]   
    Generate standard PDB format.  Will use built-in crystal symmetry if
    available.
    RR  t   cryst1_zt   write_scale_recordst	   cstringiot
   append_endt   atom_hetatmt   sigatmt   anisout   siguijN(
   R   R   R   R)   R    RR  t   extract_cryst1_z_columnst   format_cryst1_and_scale_recordst   _as_pdb_string_cstringiot   getvalue(   RØ   RR  RW  RX  RZ  R[  R\  R]  R^  RY  t   link_recordst   return_cstringio(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   as_pdb_stringð  s2    		
	c         C   sÌ   | t  k r |  j ƒ  } n  | t  k r6 |  j ƒ  } n  | d  k	 sN | d  k	 r” | r] d } n d } t | | ƒ t d | d | d | ƒ IJt } n  |  j d | d | d | d	 | d
 | d |	 d |
 ƒ d  S(   Nt   abt   wbRR  RW  RX  R   t   open_appendRZ  R[  R\  R]  R^  (   R   RR  R_  R   t   openR`  R    t   _write_pdb_file(   RØ   R   Rh  RR  RW  RX  RZ  R[  R\  R]  R^  t   mode(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   write_pdb_file  s*     				c         C   sV   |  j  d t d | d | d | d | d | d | d | d	 | d
 |	 d |
 d | ƒ d S(   sr   
    Create a single cctbx.xray.structure object from the atom records, using
    only the first model found.
    t   one_structure_for_each_modelRR  RS  t    cryst1_substitution_buffer_layert   unit_cube_pseudo_crystalt   fractional_coordinatest   use_scale_matrix_if_availableRT  t6   non_unit_occupancy_implies_min_distance_sym_equiv_zerot   scattering_type_exactt   enable_scattering_type_unknownt    atom_names_scattering_type_consti    (   t   xray_structures_simpleR)   (   RØ   RR  RS  Rn  Ro  Rp  Rq  RT  Rr  Rs  Rt  Ru  (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   xray_structure_simple?  s    	c         C   sÐ  d d l  m } d d l  m } d d l  m } | ro | d k rN | d k sT t ‚ | j d d d d	 ƒ } n™ |  j d
 | d | ƒ } | d k r¢ | j ƒ  } n  | j ƒ  d k rç | j	 d | j
 d |  j ƒ  j ƒ  d | ƒ ƒ } n  | j ƒ  d k r| j ƒ  } n  | j ƒ  } d } d } | só|	 rÇ|  j ƒ  } | d k	 rÍt g  t | d | j ƒ  ƒ D] \ } } t | | ƒ ^ qaƒ d k  rÄ| d d d d g k r¸| j ƒ  | d <qÁd } qÄqÍn d } | d k	 ró| d } | d } qón  g  } | d k rg  } n  t | | | |
 | |  j ƒ  |  j ƒ  t j j j | ƒ | | | ƒ } | j d | ƒ } y? x8 | j ƒ  r¢| j | j d | d | j d | ƒ ƒ qkWWn% t  k
 rË} t! t" | ƒ ƒ ‚ n X| S(   sÔ   
    Create a list of cctbx.xray.structure objects, one per model in the
    input file.  Note that for most single-model structures (i.e. nearly all
    crystal structures), this will be a single-item list.
    iÿÿÿÿ(   t   xray(   t   crystal(   t   uctbxt	   unit_celli   iZ   t   space_group_symbolt   P1RR  RS  t
   sites_cartt   buffer_layeri    g�íµ ÷Æ°>RT  RV  t
   scatterersRr  N(   i   i   i   iZ   iZ   iZ   (	   i    i    i    i    i    i    i    i    i    (   i    i    i    (#   t   cctbxRx  Ry  Rz  R   RÔ   t   symmetryRR  R{  t   customized_copyt   non_crystallographic_unit_cellR&   t   extract_xyzt   space_group_infot   cell_equivalent_p1t   scale_matrixt   maxRÚ   t   fractionalization_matrixt   abst    xray_structures_simple_extensiont   atoms_with_labelst   model_indicest   scitbxt   stlt   sett
   stl_stringRV  t   nextRF   t	   structureR€  R#  R   RA  (   RØ   Rm  RR  RS  Rn  Ro  Rp  RT  Rr  Rq  Rs  Rt  Ru  Rx  Ry  Rz  R{  t   scale_rt   scale_tRˆ  RJ   RI   RD   t   loopRV  R6   (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyRv  _  s~    						8
							N(   Rå   Ræ   R   R)   RV  R   R    Re  Rl  t(   default_atom_names_scattering_type_constRw  Rv  (    (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyRQ  Þ  s^   &RK   c           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 e d
 „ Z d „  Z d e f d „  ƒ  YZ e d d „ Z e d d „ Z d d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z e d „ Z d „  Z d „  Z d „  Z RS(   sÎ   
  This class parses PDB format, including non-ATOM records.  Atom objects will
  be created as part of the parsing, but the full PDB hierarchy object requires
  calling the construct_hierarchy() method.
  c         C   sÅ   t  j ƒ  } x+ t d  D] } | j t |  | ƒ ƒ  ƒ q Wt ƒ  } |  j d | d t d t d t d t d t ƒ | j t  j	 | j
 ƒ  ƒ ƒ x+ t d D] } | j t |  | ƒ ƒ  ƒ q˜ Wd | f S(	   NiþÿÿÿRY  RZ  R[  R\  R]  R^  t   pickle(   R   R#   t   input_sectionsRR   t   getattrR   Ra  R)   R    RB  Rb  (   RØ   R   t   sectiont
   pdb_string(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   __getinitargs__¿  s    		c         C   s   d S(   NR   (    (   RØ   (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt	   file_typeÐ  s    c         C   s4   x- |  j  ƒ  D] } | j d ƒ r t | ƒ Sq Wd  S(   Ns   HEADER (   RG  R   R+  R   (   RØ   t   line(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   extract_header_yearÓ  s    c         C   sJ   g  } d | } x3 |  j  ƒ  D]% } | j | ƒ r | j | ƒ q q W| S(   Ns   REMARK %3d (   RH  R   RF   (   RØ   t   iiiRD   t   patternR   (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   extract_remark_iii_recordsÙ  s    
c         C   s?   d d l  m } |  j ƒ  } | j ƒ  d k r; | j | ƒ Sd  S(   Niÿÿÿÿ(   t   secondary_structurei    (   t	   iotbx.pdbR¥  RK  R'   t
   annotationR   (   RØ   R¥  R   (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   extract_secondary_structureá  s
    c         C   sO   g  } xB |  j  ƒ  D]4 } | j d ƒ s7 | j d ƒ r | j | ƒ q q W| S(   s,   
    Collect link records from PDB file
    t   LINKt   link(   RL  R   RF   (   RØ   RD   R   (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   extract_LINK_recordsè  s
    c         C   sJ   d d l  m } x3 |  j ƒ  D]% } | j d ƒ r | j d | ƒ Sq Wd  S(   Niÿÿÿÿ(   t   cryst1_interpretationR   t   cryst1_record(   R¦  R¬  RN  R   RR  R   (   RØ   R¬  R   (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   crystal_symmetry_from_cryst1ò  s
    c         C   se   x^ |  j  ƒ  D]P } | j d ƒ r | d } t | ƒ d k  rY | d d t | ƒ 7} n  | Sq Wd  S(   NR   iB   i   t    (   RN  R   R9   R   (   RØ   R   RD   (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyR_  ù  s    
 c         C   s_   d d l  m } xH |  j ƒ  D]: } | j d ƒ r | j d | ƒ } | d  k	 rW | Sq q Wd  S(   Niÿÿÿÿ(   t   pdb_remarkss
   REMARK sg=t
   pdb_record(   t	   iotbx.cnsR°  RH  R   t   extract_symmetryR   (   RØ   R°  R   RR  (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt#   crystal_symmetry_from_cns_remark_sg  s    c         C   s^   |  j  ƒ  } | d  k r' |  j ƒ  } n  | d  k r7 | S| d  k rG | S| j d | d | ƒ S(   Nt   other_symmetryt   force(   R®  R   R´  t   join_symmetry(   RØ   RR  RS  t   self_symmetry(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyRR  
  s    	c         C   sž  t  |  d ƒ s—|  j ƒ  } t | ƒ d k r: d | } n  d  g d d  g d g |  _ t ƒ  } g  } xÛ |  j ƒ  D]Í } | j d ƒ rs | d d !d k rs t d | d | ƒ } | j	 | k r-x= t
 | j ƒ D], \ } } | |  j d | j	 d d | <qÏ W| j |  j d | j	 d <| j | j	 ƒ n  | j | j	 ƒ qs qs Wt | ƒ d k rbd  |  _ q—t | d  ƒ d d d g k r—t d | ƒ ‚ q—n  |  j S(   Nt   _scale_matrixi    s    (%s)i	   i   t   SCALEi   i   t   1t   2t   3R   R   i   i   s#   Improper set of PDB SCALE records%s(   R»  R¼  R½  (   t   hasattrR   R9   R   R¹  R‘  RN  R   t   read_scale_recordR  t	   enumerateRÑ   t   tt   addRF   R  R#  (   RØ   R   t   done_sett	   done_listR   RÑ   t   i_colt   v(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyRˆ    s,     	"$t"   _mtrix_and_biomt_records_containerc           B   s/   e  Z d  „  Z e d „ Z d „  Z d „  Z RS(   c         C   s(   g  |  _  g  |  _ g  |  _ g  |  _ d  S(   N(   RÑ   RÁ  t   coordinates_presentt   serial_number(   RØ   (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyRÙ   0  s    			c         C   sD   |  j  j | ƒ |  j j | ƒ |  j j | ƒ |  j j | ƒ d  S(   N(   RÑ   RF   RÁ  RÈ  RÉ  (   RØ   RÑ   RÁ  RÉ  RÈ  (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyRÂ  5  s    c      	   C   s+   t  d |  j d |  j d |  j d |  j ƒ S(   Nt   rotation_matricest   translation_vectorst   serial_numberst   coordinates_present_flags(   t   format_MTRIX_pdb_stringRÑ   RÁ  RÉ  RÈ  (   RØ   (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyRe  :  s
    			c      	   C   sö   g  } d } d } d } xÎ t  |  j |  j |  j ƒ D]± \ } } } | j | t | ƒ | d | d | d | d f ƒ | j | t | ƒ | d | d | d	 | d f ƒ | j | t | ƒ | d
 | d | d | d f ƒ q4 Wd j | ƒ S(   sj   
      BIOMT data sample
      REMARK 350   BIOMT1   1  1.000000  0.000000  0.000000        0.00000
      s5   REMARK 350   BIOMT1  %2d%10.6f%10.6f%10.6f     %10.5fs5   REMARK 350   BIOMT2  %2d%10.6f%10.6f%10.6f     %10.5fs5   REMARK 350   BIOMT3  %2d%10.6f%10.6f%10.6f     %10.5fi    i   i   i   i   i   i   i   i   s   
(   RÚ   RÉ  RÑ   RÁ  RF   R"  R?   (   RØ   R   t   fmt1t   fmt2t   fmt3t   sn_t   r_t   t_(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   format_BOIMT_pdb_stringA  s    +66:(   Rå   Ræ   RÙ   R)   RÂ  Re  RÕ  (    (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyRÇ  /  s   		g-Cëâ6?c         C   sR  |  j  d ƒ } |  j ƒ  } | rNg  | D]Z } | j ƒ  d j d ƒ d k r( t | j ƒ  d ƒ d k r( t t | j ƒ  d ƒ ^ q( } t | ƒ d d k r½ t d t t | ƒ ƒ ƒ ‚ n  t	 | d j ƒ  d ƒ } t | ƒ d	 t	 | d j ƒ  d ƒ k r4t d
 d j
 t | ƒ d	 ƒ d j
 | ƒ ƒ ‚ n  xt t | ƒ d ƒ D]ü } d | }	 | |	 d d !| |	 d d d !| |	 d d d !}
 | |	 d | |	 d d | |	 d d g } t j |
 ƒ } t j | ƒ } | j d | ƒ s	| r	t d ƒ ‚ q	n  | j ƒ  o| j ƒ  } | j d | d | d | d | d ƒ qKWn  | S(   s³  (pdb_data,boolean,float) -> group of lists
    extract REMARK 350 BIOMT information, information that provides rotation matrices
    and translation  data, required for generating  a complete multimer from the asymmetric unit.

    BIOMT data sample:
    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.559048 -0.789435  0.253492        0.30000
    REMARK 350   BIOMT2   2  0.722264  0.313528 -0.616470        0.00100
    REMARK 350   BIOMT3   2  0.407186  0.527724  0.745457        0.05000

    The data from every 3 lines will be combined to a list
    [[x11,x12,x13,x21,x22,x23,x31,x32,x33],[x1,x2,x3]]
    the first component, with the 9 numbers are the rotation matrix,
    and the second component, with the 3 numbers is the translation information
    x is the serial number of the operation

    Arguments:
    error_handle -- True: will stop execution on improper retation matrices
                    False: will continue execution

    eps -- Rounding accuracy for avoiding numerical issue when when testing proper rotation

    error_handle can be use if one does not want a 'Sorry' to be raised. The program will continue to execute
    but all coordinates of the bad rotation matrix will zero out

    for x=2 the transformation_data will be
    [[0.559048,-0.789435,0.253492,0.722264,0.313528,-0.616470,0.407186,0.527724,0.745457][0.30000,0.00100,0.05000]]

    the result is a list of libtx group_arg constructs, each one contains
      pdb_inp.process_BIOMT_records()[1].values              # give a list containing float type numbers
      pdb_inp.process_BIOMT_records()[1].coordinates_present # True when transformatin included in pdb file
      pdb_inp.process_BIOMT_records()[1].serial_number       # is an integer

    @author: Youval Dar (2013)
    i^  i   t   BIOMTiÿÿÿÿi   i   i    s?   Improper or missing set of PDB BIOMAT records. Data length = %sg      @s+   Missing record sets in PDB BIOMAT records 
s%   Actual number of BIOMT matrices: {} 
s)   expected according to serial number: {} 
i   i   t   rms_tolerances"   Rotation matrices are not proper! RÑ   RÁ  RÈ  RÉ  (   R¤  RÇ  R!  t   findR9   t   mapt   floatR:   RA  R"  t   formatt   rangeR   t   sqrt   colt   is_r3_rotation_matrixR   t   is_r3_identity_matrixt   is_col_zeroRÂ  (   RØ   t   error_handlet   epsR   RD   t   xt
   biomt_datat   tempt   it   jt   rotation_datat   translation_datat   rmt   tvt   ingnor_transform(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   process_BIOMT_recordsP  s:    &Z*
7/	c      
   C   s¨  |  j  ƒ  } t | ƒ d k r+ d | } n  i  } xI|  j ƒ  D];} | j d ƒ r> | d d !d k r> t d	 | d
 | ƒ } | j | j ƒ } | d k rê d g d d g d g } d g d }	 d g d }
 | |	 |
 f } | | j <n | \ } }	 }
 x: t | j	 ƒ D]) \ } } | | d | j
 d d | <q	W| j | d | j
 d <| j
 |	 | j
 d <| j |
 | j
 d <q> q> W|  j ƒ  } xt | j ƒ  ƒ D]} | | \ } }	 }
 t j | d ƒ } t j | d ƒ } | j d | ƒ s| rt d ƒ ‚ qt d ƒ GHn  t |	 ƒ d d d g k sCt t |
 ƒ ƒ d k rVt d | ƒ ‚ n  | j ƒ  ok| j ƒ  } | j d | d | d |
 d d k p–| d | ƒ qœW| S(   s.  
    Read MTRIX records from a pdb file

    Arguments:
    error_handle -- True: will stop execution on improper rotation matrices
                    False: will continue execution but will replace the values in the
                           rotation matrix with [0,0,0,0,0,0,0,0,0]
    eps -- Rounding accuracy for avoiding numerical issue when when testing proper rotation

    error_handle can be use if one does not want a 'Sorry' to be raised. The program will continue to execute
    but all coordinates of the bad rotation matrix will zero out
    i    s    (%s)t   MTRIXi   i   R»  R¼  R½  R   R   i	   i   i   R×  s"   Rotation matrices are not proper! i   s#   Improper set of PDB MTRIX records%sRÑ   RÁ  RÈ  RÉ  (   R»  R¼  R½  N(   R   R9   RN  R   t   read_mtrix_recordRo   RÉ  R   RÀ  RÑ   R  RÁ  RÈ  RÇ  R  R  R   RÝ  RÞ  Rß  R   R‘  R:   Rà  Rá  RÂ  (   RØ   Râ  Rã  R   t   storageR   RÑ   t   storedR3   t   donet   presentRÅ  RÆ  RD   RÉ  Rë  Rì  t   identity_transform(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   process_mtrix_recordsŸ  sJ     "!3	c         C   sE   d d l  m } |  j d ƒ } | j |  j d ƒ ƒ | j | | ƒ S(   Niÿÿÿÿ(   t"   extract_rfactors_resolutions_sigmai   i   (   R¦  R÷  R¤  RR   t   get_r_rfree_sigma(   RØ   R   R÷  t   remark_2_and_3_records(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyRø  Ô  s
    c         C   s‚   |  j  d ƒ } d  } xB | D]: } | j ƒ  } t j j j d | ƒ } | d  k	 r | Sq W| d  k	 r~ d j | j ƒ  ƒ } n  | S(   Ni   t   stRK   (	   R¤  R   Rp   R   R   t   remark_3_interpretationt   get_programR?   R!  (   RØ   t   remark_3_linesRD   R   (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   get_program_nameÛ  s     c         C   s(  |  j  d ƒ } g  } x¹ | D]± } | j ƒ  } | j d ƒ d k r | j d ƒ d k r y | j | j ƒ  d ƒ WqÍ t k
 rÉ y" | j | | j d ƒ d ƒ WqÊ t k
 rÅ | j | ƒ qÊ XqÍ Xq q Wd  } t | ƒ d k r$y t	 | d ƒ } Wq$t
 k
 rq$t k
 r q$Xn  | S(   Ni  t   SOLVENTi   t   CONTENTi   t   :i    (   R¤  Rq   R   RF   R!  R%   t   indexR   R9   RÚ  t
   IndexErrorR#  (   RØ   t   remark_280_linest   mct   remarkRD   (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   get_solvent_contentæ  s,    "   c         C   s(  |  j  d ƒ } g  } x¹ | D]± } | j ƒ  } | j d ƒ d k r | j d ƒ d k r y | j | j ƒ  d ƒ WqÍ t k
 rÉ y" | j | | j d ƒ d ƒ WqÊ t k
 rÅ | j | ƒ qÊ XqÍ Xq q Wd  } t | ƒ d k r$y t	 | d ƒ } Wq$t
 k
 rq$t k
 r q$Xn  | S(   Ni  t   MATTHEWSi   t   COEFFICIENTi   R  i    (   R¤  Rq   R   RF   R!  R%   R  R   R9   RÚ  R  R#  (   RØ   R  R  R  RD   (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   get_matthews_coeffû  s,    "   c         C   s�   d d  l  } |  j d ƒ } g  } x; | j ƒ  D]- } x$ | j ƒ  D] } | j | j ƒ qA Wq. W| j j j d | d | d | ƒ S(   Niÿÿÿÿi   t   remark_3_recordst   pdb_hierarchyt	   chain_ids(	   t!   iotbx.pdb.remark_3_interpretationR¤  t   modelst   chainsRF   t   idR   Rû  t   extract_tls_parameters(   RØ   R  R   R  R  R2   t   chain(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   extract_tls_params  s    c         C   s(   d d  l  } |  j d ƒ } t j | ƒ S(   Niÿÿÿÿi   (   R  R¤  Rû  t   extract_f_model_core_constants(   RØ   R   R  (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyR    s    c         C   s-  x&|  j  ƒ  D]} | j d ƒ r | j d ƒ } t | ƒ d k sI t ‚ | d j d d ƒ j ƒ  j d ƒ } g  } x† | D]~ } | j ƒ  d k r™ q{ q{ | j ƒ  d k r» | j d  ƒ q{ y | j t	 | j ƒ  ƒ ƒ Wq{ t
 k
 rø | j d  ƒ q{ Xq{ W| r!t | ƒ d	 k r| d	 Sd  S| Sq Wd  S(
   Ns   REMARK 200  WAVELENGTH OR RANGER  i   i   t   ;t   ,R  t   NULLi    (   RH  R   R!  R9   RÔ   t   replaceRp   RF   R   RÚ  R#  (   RØ   t
   first_onlyR   R*  t	   subfieldst   wavelengthsR$  (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   extract_wavelength!  s*    %c         C   s@   x9 |  j  ƒ  D]+ } | j d ƒ r t j | ƒ j j ƒ  Sq Wd  S(   Nt   EXPDTA(   RG  R   R   t   expdtat	   techniqueRp   R   (   RØ   R   (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   get_experiment_type:  s    c         C   s@  |  j  ƒ  } t | ƒ d k r" d Sd d l m } | j t |  j ƒ  ƒ g  ƒ } i  } x9 t |  j ƒ  ƒ D]% \ } } | j j	 ƒ  } | | | <qi Wx§ | D]Ÿ } | j
 d ƒ s´ t ‚ t j j j | ƒ }	 | |	 j j	 ƒ  } |	 j j d ƒ d k sú t ‚ x; |	 j D]0 }
 |
 d k r| | j | |
 j	 ƒ  ƒ qqWq™ W| S(   sÀ  
    Parse CONECT records and extract the indices of bonded atoms.  Returns
    a scitbx.array_family.shared.stl_set_unsigned object corresponding to the
    atoms array, with each element being the list of indices of bonded atoms
    (if any).  If no CONECT records are found, returns None.

    Note that the ordering of atoms may be altered by construct_hierarchy(), so
    this method should probably be called after the hierarchy is made.
    i    iÿÿÿÿ(   t   sharedt   CONECTR  i   N(   RO  R9   R   t   scitbx.array_familyR"  t   stl_set_unsignedR&   RÀ  t   serialRp   R   RÔ   R   R   R   t   conectt   serial_numbers_bonded_atomsR   RF   (   RØ   R   R"  t   bondst   serial_ref_hasht   i_seqR,   R&  R   R(  t	   j_seq_str(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   extract_connectivity@  s$    
&c         c   s{   xt |  j  ƒ  D]f } | j s" q n  xM |  j  ƒ  D]? } | j sD q/ n  | j | j k r\ q/ n  | | d d f VPq/ WPq Wd  S(   Nt   1555(   R�  t   heterot   resname(   RØ   t   atom1t   atom2(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   get_link_records]  s    	 	  N(   Rå   Ræ   t   __doc__Rž  RŸ  R¡  R¤  R¨  R«  R®  R_  R´  R   R)   RR  Rˆ  t   objectRÇ  R    Rî  Rö  Rø  Rþ  R  R
  R  R  R  R!  R-  R3  (    (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyRK   ¸  s4   						
			
	!O5							t   rewrite_normalizedc           B   s   e  Z e e d  „ Z RS(   c         C   s«   t  d | ƒ |  _  | rF t | d ƒ d j |  j  j ƒ  ƒ IJd  } n |  j  j ƒ  } |  j  j ƒ  |  _ | rv d  } n d } |  j j d | d | d | d t	 d | ƒ d  S(	   NR   Rg  s   
i   Rh  RR  RZ  t   atoms_reset_serial_first_value(
   R"   Ri  R?   RN  R   RR  t   construct_hierarchyt	   hierarchyRl  R    (   RØ   t   input_file_namet   output_file_namet&   keep_original_crystallographic_sectiont   keep_original_atom_serialRR  R7  (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyRÙ   i  s     		(   Rå   Ræ   R)   RÙ   (    (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyR6  g  s   sä  1bgl 1bgm
1crp 1crr
1f49 1gho
1gix 1giy
1j4z 1kpo
1jgo 1jgp 1jgq
1jyy 1jyz
1jz0 1jz1
1otz 1p0t
1pns 1pnu
1pnx 1pny
1s1h 1s1i
1ti2 1vld
1ti4 1vle
1ti6 1vlf
1utf 1utv
1voq 1vor 1vos 1vou 1vov 1vow 1vox 1voy 1voz 1vp0
1vs5 1vs6 1vs7 1vs8
1vsa 2ow8
1vsp 2qnh
1we3 1wf4
1yl3 1yl4
2avy 2aw4 2aw7 2awb
2b64 2b66
2b9m 2b9n
2b9o 2b9p
2bld 2bvi
2gy9 2gya
2gyb 2gyc
2hgi 2hgj
2hgp 2hgq
2hgr 2hgu
2i2p 2i2t 2i2u 2i2v
2j00 2j01 2j02 2j03
2jl5 2jl6 2jl7 2jl8
2qal 2qam 2qan 2qao
2qb9 2qba 2qbb 2qbc
2qbd 2qbe 2qbf 2qbg
2qbh 2qbi 2qbj 2qbk
2qou 2qov 2qow 2qox
2qoy 2qoz 2qp0 2qp1
2uv9 2uva
2uvb 2uvc
2v46 2v47 2v48 2v49
2vhm 2vhn 2vho 2vhp
2z4k 2z4l 2z4m 2z4n
2zkq 2zkr
2zuo 2zv4 2zv5
3bz1 3bz2
3d5a 3d5b 3d5c 3d5d
3df1 3df2 3df3 3df4
3f1e 3f1f 3f1g 3f1h
t   join_fragment_filesc           B   s   e  Z d  „  Z RS(   c         C   s  t  j ƒ  } | j d ƒ | j d t ƒ  ƒ g  } d  } d d l m } | j ƒ  |  _ d } x*| D]"} t	 j
 j d | ƒ } | j ƒ  }	 |	 d  k	 rÈ |	 j ƒ  }	 |	 d k r¿ t |	 ƒ }	 qÎ d  }	 n d  }	 | d  k rã |	 } n t | |	 ƒ } | j ƒ  }
 | j d t | ƒ ƒ |
 d  k	 rt|
 j ƒ  d  k	 rt| j d t	 j
 j |
 d	 |	 ƒƒ |  j j |
 d
 t ƒ|  _ n  | j | j ƒ  ƒ qe W|  j j ƒ  d  k	 rÈ| j t	 j
 j d |  j d	 | ƒ ƒ n  t	 j
 j j d | ƒ } | j j | ƒ | j ƒ  | |  _ d  S(   Ns(   REMARK JOINED FRAGMENT FILES (iotbx.pdb)s   REMARK iÿÿÿÿ(   Ry  sJ   REMARK Warning: CRYST1 Z field (columns 67-70) is not an integer: "%-4.4s"R   R  s	   REMARK %st   zR¶  RR  t   roots(   R   R#   RF   R
   R   R�  Ry  R‚  RR  R   R   R"   R_  Rp   R"  R‰  R   R{  t   format_cryst1_recordR·  R    R8  R9  t
   join_rootsRÞ   RR   t   reset_i_seq_if_necessaryt   joined(   RØ   R  RÞ   R@  R?  Ry  t	   z_warningR   R+   t   z_t   csRD   (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyRÙ   ¿  sD     		#	
(   Rå   Ræ   RÙ   (    (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyR>  ¾  s   g      à?c   	      C   s”   t  |  ƒ d k s t ‚ t |  ƒ } t ƒ  } | j d | ƒ t |  ƒ j } t | d ƒ } | j | j	 ƒ  ƒ | j
 ƒ  t | d | d | ƒ} | S(   Ni    R	  t   wt   site_clash_cutoff(   R9   RÔ   Rø   R   R  R>  RD  Ri  t   writeRe  t   closet   quick_clash_check(	   R  t   output_fileRI  t   logt   merged_recordst   warningst   merged_hierarchyRI   t	   n_clashes(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt!   merge_files_and_check_for_overlapä  s    	
		i   c         C   s   t  d |  ƒ } | j ƒ  } | j d d d t ƒ } | j ƒ  } | j ƒ  } | j d | ƒ }	 |	 j ƒ  }
 |
 j ƒ  } t	 | ƒ S(   NR   Rn  i
   Rt  t   distance_cutoff(
   R"   R�  Rw  R    t
   sites_fracR{  t   pair_asu_tablet   extract_pair_sym_tablet   simple_edge_listR9   (   R   RI  R	  t   show_outliersR+   t	   pdb_atomst   xray_structureRU  R{  RV  t   pair_sym_tablet
   atom_pairs(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyRL  ó  s    				s   R 3 :Hs   R 3 :Rs   R -3 :Hs   R -3 :Rs   R 3 2 :Hs   R 3 2 :Rs   R 3 m :Hs   R 3 m :Rs   R 3 c :Hs   R 3 c :Rs	   R -3 m :Hs	   R -3 m :Rs	   R -3 c :Hs	   R -3 c :RR‘  c         C   sÕ   |  j  ƒ  j ƒ  } | t k r6 | d | d d !} n  d „  } | | ƒ } t | ƒ d k rÑ |  j ƒ  j ƒ  rÑ d d l m } | d |  d d	 d
 t ƒ } | d  k	 rÑ | | j
 d d ƒ k rÑ | | ƒ } qÑ n  | S(   Niÿÿÿÿi   iýÿÿÿc         S   s&   t  |  ƒ d k r" |  j d d ƒ S|  S(   Ni   R¯  R  (   R9   R  (   RJ   (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   compress  s     i   (   t   ccp4_symbolR†  t   lib_names   syminfo.libt   require_at_least_one_libR¯  R  (   t   typet   lookup_symbolt)   standard_rhombohedral_space_group_symbolsR9   t   groupt
   is_centrict#   iotbx.mtz.extract_from_symmetry_libR_  R)   R   R  (   R†  RD   R^  R_  t   alt(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   format_cryst1_sgroup  s    	%	$c         C   sT   | d  k r d } n t | ƒ } d |  j ƒ  j ƒ  t d |  j ƒ  ƒ | f j ƒ  S(   NR  s2   CRYST1%9.3f%9.3f%9.3f%7.2f%7.2f%7.2f %-11.11s%4.4sR†  (   R   RA  R{  t
   parametersRi  R†  Rþ   (   RR  R?  (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyRA  '  s    
 	i    c         C   sÚ   |  | g j  d  ƒ d k s! t ‚ |  d  k	 r< |  j ƒ  } n t | ƒ d k sT t ‚ | } t | ƒ d k sr t ‚ d | d | d | d | d | d | d | d | d | d	 | d
 | d | d f j d d ƒ S(   Ni   i	   i   sw   SCALE1    %10.6f%10.6f%10.6f     %10.5f
SCALE2    %10.6f%10.6f%10.6f     %10.5f
SCALE3    %10.6f%10.6f%10.6f     %10.5fi    i   i   i   i   i   i   s
    -0.000000s
     0.000000(   R   R   RÔ   RŠ  R9   R  (   R{  RŠ  RS   RI   (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   format_scale_records9  s    !c         C   sØ  d d l  m } d d l  m } d d l  m } d d l m } |  d  k r[ d  }	 d  }
 n¢ t |  | j ƒ rˆ |  j	 ƒ  }	 |  j
 ƒ  }
 nu t |  | j j	 ƒ r¬ |  }	 d  }
 nQ t |  t t f ƒ rñ t |  ƒ d k sÙ t ‚ | j	 |  ƒ }	 d  }
 n t d ƒ ‚ |	 d  k rK| d  k r'| j	 d ƒ }	 qK| j	 d
 | j | ƒ j ƒ  ƒ }	 n  |
 d  k rl| j
 d d ƒ }
 n  t d | j d |	 d |
 ƒ d | ƒ } | rÔ| d  k r´|	 j ƒ  } n  | d t d | d | ƒ 7} n  | S(   Niÿÿÿÿ(   Ry  (   t   sgtbx(   Rz  (   R   i   s   invalid crystal_symmetry objecti   iZ   t   orthogonalization_matrixt   symbols   P 1RR  R{  R†  R?  s   
RŠ  RS   (   i   i   i   iZ   iZ   iZ   (   R�  Ry  Rl  Rz  R�  R   R   RC  R‚  R{  R†  R!   RQ   RD  R9   RÔ   R#  RÝ  t   inverseRA  RŠ  Rk  (   RR  RW  RX  t   scale_fractionalization_matrixt   scale_uRy  Rl  Rz  R   R{  R†  RD   (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyR`  O  sJ    						c         C   s’   d } d „  } d } xv |  D]n \ } } } } | d 7} | | | ƒ 7} | d
 7} | | | ƒ 7} | d 7} | d 7} | d 7} | d 7} q W| S(   s™  
COLUMNS         DATA TYPE      FIELD           DEFINITION
-----------------------------------------------------------------------------
 1 -  6         Record name    "LINK  "
13 - 16         Atom           name1           Atom name.
17              Character      altLoc1         Alternate location indicator.
18 - 20         Residue name   resName1        Residue  name.
22              Character      chainID1        Chain identifier.
23 - 26         Integer        resSeq1         Residue sequence number.
27              AChar          iCode1          Insertion code.
43 - 46         Atom           name2           Atom name.
47              Character      altLoc2         Alternate location indicator.
48 - 50         Residue name   resName2        Residue name.
52              Character      chainID2        Chain identifier.
53 - 56         Integer        resSeq2         Residue sequence number.
57              AChar          iCode2          Insertion code.
60 - 65         SymOP          sym1            Symmetry operator atom 1.
67 - 72         SymOP          sym2            Symmetry operator atom 2.
74 - 78         Real(5.2)      Length          Link distance
sò   
         1         2         3         4         5         6         7         8
12345678901234567890123456789012345678901234567890123456789012345678901234567890
LINK         O   GLY A  49                NA    NA A6001     1555   1555  2.98
c         S   s2   d |  j  |  j |  j |  j |  j |  j f } | S(   Ns   %4s%s%-3s %s%4s%s(   R(   t   altlocR0  t   chain_idt   resseqt   icode(   R,   RD   (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   _format_link_atom—  s    	R  s   LINK        R¯  i   s      1555s    %5.2fg333333@s                  s     2.90(    (   t	   link_listt   testRv  RD   R1  R2  t   sym_op1t   sym_op2(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   format_link_records}  s    		




R¿  c           B   s#   e  Z d  d d g Z d d „ Z RS(   R  RÑ   RÁ  R  c         C   sL  y t  | d d !ƒ |  _ Wn t k
 r6 d  |  _ n X|  j d k ri t d t | d  ƒ | f ƒ ‚ n  g  } x» d d d	 d
 g D]§ } | | | d !} t | j ƒ  ƒ d k rº d } nb y t | ƒ } WnO t k
 rt d t | d  ƒ | f d | d d d | d f ƒ ‚ n X| j	 | ƒ q‚ W| d  | d |  _
 |  _ d  S(   Ni   i   i   i   i   s   Unknown PDB record %s%si
   i   i   i-   i    s-   Not a floating-point value, PDB record %s%s:
s     s   
s     %s%sR¯  t   ^(   i   i   i   s
   ^^^^^^^^^^(   R"  R  R#  R   R:   R   R9   Rp   RÚ  RF   RÑ   RÁ  (   t   OR   R   R3   Rç  t   fldt   value(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyRÙ   °  s&       	 ?(   Rå   Ræ   t	   __slots__RÙ   (    (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyR¿  ¬  s   Rð  c           B   s'   e  Z e j d  d g Z d d „ Z RS(   RÉ  RÈ  R  c         C   sR   t  j |  d | d | ƒ| d d !|  _ t | ƒ d k oH | d d k |  _ d  S(   NR   R   i   i
   i<   i;   R¯  (   R¿  RÙ   RÉ  R9   RÈ  (   R}  R   R   (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyRÙ   Ë  s    (   Rå   Ræ   R¿  R€  RÙ   (    (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyRð  Æ  s   c         C   sC   y t  d d d d |  ƒ SWn! t k
 r> t d |  ƒ ‚ n Xd  S(   Nt   widthi   RJ   s   %4ss&   invalid residue sequence number: "%4s"(   t
   hy36decodeR#  (   RJ   (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   resseq_decodeÐ  s     c         C   s   t  d d d |  ƒ S(   NR�  i   R  (   t
   hy36encode(   R  (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   resseq_encodeÕ  s    c         C   s]   t  | t ƒ r+ t | ƒ |  k s' t ‚ | St  | t ƒ rM t d |  d | ƒ St d ƒ ‚ d  S(   NR�  R  s'   serial number value must be str or int.(   RC  RA  R9   RÔ   R"  R„  R:   (   R�  R  (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   encode_serial_numberØ  s    c         C   s  |  d  k r t j ƒ  }  n t |  ƒ j d k s6 t ‚ | d  k	 rN | |  _ n  | d  k	 rf | |  _ n  | d  k	 r~ | |  _ n  | d  k	 r– | |  _	 n  | d  k	 r® | |  _
 n  | d  k	 rÆ | |  _ n  | d  k	 rÞ | |  _ n  | d  k	 rö | |  _ n  |	 d  k	 r|	 |  _ n  |
 d  k	 r&|
 |  _ n  | d  k	 r>| |  _ n  | d  k	 rV| |  _ n  | d  k	 rn| |  _ n  | d  k	 r†| |  _ n  | d  k	 rž| |  _ n  | d  k	 r¶| |  _ n  | d  k	 rÎ| |  _ n  | d  k	 ræ| |  _ n  | d  k	 rþ| |  _ n  | d  k	 r| |  _ n  |  S(   Nt   atom_with_labels(   R   R9  R‡  Rb  Rå   RÔ   t   xyzt   sigxyzt   occt   sigocct   bt   sigbt   uijR^  R/  R&  R(   t   segidt   elementt   charget   model_idRs  Rt  Ru  Rr  R0  (   RD   Rˆ  R‰  RŠ  R‹  RŒ  R�  RŽ  R^  R/  R&  R(   R�  R�  R‘  R’  Rs  Rt  Ru  Rr  R0  (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   make_atom_with_labelsà  sX                        c         C   sB  | d  k r |  j ƒ  } n  | j ƒ  } g  } xF t | j j ƒ  ƒ D]/ } | d k re | j d ƒ qC | j | ƒ qC Wd | j f d | j f d d j	 | ƒ f d | j
 f g } | j d k rÝ | j d	 d
 | j f ƒ n  | j } d | k r| j d | d f ƒ n  d | k s$d | k r\| j d d	 ƒ | j d d	 ƒ } | j d | f ƒ n  d | k r‚| j d | d f ƒ n  d | k rg  } x9 | j D]. }	 t j j |	 ƒ d k rž| j |	 ƒ qžqžWd | d d j	 | ƒ f }
 | j d |
 f ƒ n  d | k sd | k r´g  } x? | j D]4 }	 t j j |	 ƒ } | d  k r+| j |	 ƒ q+q+W| j d d	 ƒ | j d d	 ƒ } d | d j	 | ƒ f }
 | j d |
 f ƒ n  | j ƒ  } | j ƒ  } t j | ƒ } t j | ƒ } t j | ƒ } | j d d | | | f f ƒ | d	 k rT| d	 k j t ƒ } | j d d | f ƒ n  | j ƒ  } t j | ƒ d	 k r¤| d	 k j t ƒ } | j d d | f ƒ n  |  j ƒ  } | d  k	 r>| j ƒ  } | j d t | ƒ f ƒ | j ƒ  } | d  k	 r>d j	 g  | j  ƒ  D] } d | ^ qƒ } | j d | f ƒ q>n  | S(!   NR¯  s   ' 's   Number of atomss   Number of chainss	   Chain IDss   , s   Alternate conformationsi   i    s   Number of modelst   common_amino_acids   Amino acid residuest   common_nucleic_acidt   ccp4_mon_lib_rna_dnas   Nucleic acid residuest   common_waters   Water moleculest   common_elements   %d (%s)s   Elemental ionst   common_small_moleculet   others   Other moleculess   Mean isotropic B-factors   %.2f (range: %.2f - %.2f)s   Atoms with iso. B <= 0s   %d ***s   Atoms with zero ocupancys   Space groups   %gs	   Unit cell(   R™  s   other(!   R   R8  t   overall_countsR  R  R  RF   t   n_atomst   n_chainsR?   t   n_alt_conf_puret   n_modelst   insertt   resname_classesRo   t   resnamesR   R   t   common_residue_names_get_classR&   t	   extract_bR   t   meant   minR‰  R   R    t   extract_occRR  R†  RA  R{  Rj  (   t   pdb_inR9  t   countsR  R  t	   info_listt   clRœ  t   namesR(   R  t	   res_classR&   t	   b_factorst   mean_bt   min_bt   max_bt	   n_bad_adpRŠ  t
   n_zero_occt   symmt   space_groupR{  Rä  t   uc_str(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   get_file_summary  s|    	",c   
      C   s™   | d  k r t j } n  t |  | ƒ } t g  | D] \ } } t | ƒ ^ q1 ƒ d } d | } x2 | D]* \ } }	 | | | d t |	 ƒ f IJqg W| S(   Ni   s
   %%-%ds %%sR  (   R   R  R  R·  R‰  R9   RA  (
   R¨  R9  R	  RÞ   RT   RÆ  t   label_widthRÛ  t   labelR  (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   show_file_summaryS  s    /
"c      	   C   su  t  |  ƒ t  | ƒ k s t ‚ | d k rB t d t  |  ƒ ƒ } n  | d k rd t g t  |  ƒ } n  g  } d } d } d } xé t | |  | | ƒ D]Ò \ } }	 }
 } d } | r¹ d } n  | j | t | ƒ |	 d |	 d |	 d |
 d | f ƒ | j | t | ƒ |	 d	 |	 d
 |	 d |
 d | f ƒ | j | t | ƒ |	 d |	 d |	 d |
 d | f ƒ q’ Wd j | ƒ S(   sÉ  
  MTRIX data sample
  REMARK 350   BIOMT1   1  1.000000  0.000000  0.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  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
  i    s.   MTRIX1  %2d%10.6f%10.6f%10.6f     %10.5f    %ss.   MTRIX2  %2d%10.6f%10.6f%10.6f     %10.5f    %ss.   MTRIX3  %2d%10.6f%10.6f%10.6f     %10.5f    %sR¯  R»  i   i   i   i   i   i   i   i   s   
N(	   R9   RÔ   R   RÜ  R)   RÚ   RF   R"  R?   (   RÊ  RË  RÌ  RÍ  R   RÏ  RÐ  RÑ  RÒ  RÓ  RÔ  t   p_t   flag(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyRÎ  ]  s$      	99=(Z   t
   __future__R    t   cctbx.array_familyR   t   boost.pythont   boostt   pythont
   import_extR!   R   t   iotbx.pdb.recordsR   t   iotbx.pdb.hierarchyR�  R   t"   iotbx.pdb.atom_name_interpretationR   Rì   t   scitbx.array_family.sharedt   scitbx.stl.sett   libtbxR   t   libtbx.str_utilsR   t   libtbx.utilsR   R	   R
   R   R   t	   cStringIOR   R  R<   t   pathR>   R-   R7   RE   RW   Rï   R‘  Rñ   Rn   Rs   Rá   RÐ   RÏ   RÒ   t#   rna_dna_atom_names_backbone_aliasesR5  RÓ   Rç   Rø   R  R+  R,  R-  R   R)   R3  R"   R˜  Rš  RQ  t   injectorRK   R6  t   pdb_codes_fragment_filesR>  R  RS  RL  Rd  t   __builtins__Ri  RA  Rk  R    R`  R{  R¿  Rð  Rƒ  R…  R†  R“  R·  Rº  RÎ  (    (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/__init__.pyt   <module>   s6  
"				
	
$
	
		(@3$	8	Ú%ÿ °U'			)	/
				C