ó
Œ™xTc           @   sw   d  d l  m Z d  d l Z d  d l Z d  d l Z d  d l Z d „  Z d „  Z d „  Z	 d d „ Z d d „ Z d S(   iÿÿÿÿ(   t   divisionNc          C   s
   d }  |  S(   Ns7  
  iotbx.pdb_remediator model.pdb [params.eff] [options ...]

Options:

  file_name     specify input pdb file
  output_file   specify output file name (defaults to stdout)
  version       3.2 (default) or 2.3
  dict          optionally supply custom definition file

Examples:

Convert version 2.3 file to version 3.2 naming:

  iotbx.pdb_remediator model.pdb > model_3.2.pdb
  iotbx.pdb_remediator file_name=model.pdb output_file=model_3.2.pdb_file

Convert version 3.2 file to version 2.3 naming:

  iotbx.pdb_remediator model.pdb version=2.3 > model_2.3.pdb_file
(    (   t   summary(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/remediation/remediator.pyt   get_summary!   s    c      	   C   sš  d } d } t  |  ƒ } xu| D]m} | j ƒ  } | j d ƒ } | d d !} | d k r t } t j d | ƒ r� t j d d | ƒ } t } n0 t j d | ƒ r¿ t j d d | ƒ } t } n  t j d | ƒ rï t j d d | ƒ } t } n0 t j d | ƒ rt j d d | ƒ } t } n  | r2| d 7} n  | d d !}	 |	 d d !d |	 d d !}
 | j |
 ƒ rŒ| j |
 ƒ r|q‰| d 7} qŒq q W| | f S(   Ni    iP   i   s   ATOM  t   HETATMs   TER   t   ANISOUt   SIGATMt   SIGUIJs   LINK  s   .{17}([a-zA-Z0-9])  s   \A(.{17})(.)\s\ss   \g<1>  \g<2>s   .{17}([a-zA-Z0-9][a-zA-Z0-9]) s   \A(.{17})(..)\ss   \g<1> \g<2>s   .{17}(GUA|ADE|CYT|THY|URI)s   \A(.{17})(.)..s   .{17}(OIP| Ar| Gr| Cr| Ur)s   \A(.{17}).(.).i   i   i   i   t    i   i   (   s   ATOM  R   s   TER   R   R   R   s   LINK  (	   t   opent   rstript   ljustt   Falset   ret   matcht   subt   Truet   has_key(   t   filenamet	   atom_excht   alt_atom_excht   countt	   res_countt   pdb_filet   linet	   type_testt
   adjust_rest   entryt   clean_entry(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/remediation/remediator.pyt   pre_screen_file;   s<    				c         C   s•  i  } t  j j t j j d ƒ d d d ƒ } t | d ƒ } |  t k r– x9 | D]1 } | j ƒ  } | j	 d ƒ \ } } | | | <qO Wd j
 d ƒ }	 n? x- | D]% } | j	 d ƒ \ } } | | | <q� Wd	 j
 d ƒ }	 | t k r�t | ƒ }
 |  t k r8xx |
 D]1 } | j ƒ  } | j	 d ƒ \ } } | | | <q Wn< x9 |
 D]1 } | j ƒ  } | j	 d ƒ \ } } | | | <q?W|
 j ƒ  n  | j ƒ  | |	 f S(
   Nt   iotbxt   pdbt   remediations   remediation.dictt   rbt   :s9   REMARK   4 REMEDIATOR VALIDATED PDB VERSION 3.2 COMPLIANTiP   s9   REMARK   4 REMEDIATOR VALIDATED PDB VERSION 2.3 COMPLIANT(   t   ost   patht   joint   libtbxt   envt	   dist_pathR   R   R	   t   splitR
   t   close(   t   remediated_outt   custom_dictt	   user_dictR   t	   file_namet   fR   t   newt   oldt   remark4t   user_f(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/remediation/remediator.pyt
   build_hashe   s8    
c      	   C   s  | d  k r t j } n  d  } d  } d } t } t }	 t |  ƒ }
 t j d d ƒ } xD|
 D]<} | j ƒ  } | j d ƒ } | d d !} | t k rW| d k rW|	 t k r· t	 }	 n  t j
 | | ƒ rÒ t	 } qTt j d | ƒ rø | | d	 7} q\ qTt j d
 | ƒ rq\ qTt | d d !ƒ d k r@| | d	 7} t	 } qT| | d	 7} q\ qWn  | d3 k r¦| t k r†| | d	 7} t	 } n  t j d | ƒ r°t j d d | ƒ } n* t j d | ƒ rÚt j d d | ƒ } n  t j d | ƒ rt j d d | ƒ } n* t j d | ƒ r.t j d d | ƒ } n  | d d !} | } | d  d! !} | d d !d" | d# d$ !} | j | ƒ rÕ| j | d d !| | d d !d% ƒ } qÕn/ | t k rÕ|	 t	 k rÕ| | d	 7} t	 } n  | d  k rê| } n  | | k r| | d	 7} q\ | | k r\ t j
 d& | ƒ rðt j
 d' | ƒ d  k rð| d% } | t	 k r t j d( | d" d) | d" | ƒ } t j d* | d" d+ | d" | ƒ } qít j d, | d" d- | d" | ƒ } t j d. | d" d/ | d" | ƒ } qðn  | t k rr| j
 | ƒ } | rr| j d% ƒ } t j
 d0 | | ƒ sLt j
 d1 | | ƒ rot j d2 | d1 | | ƒ } qoqrn  | j d	 ƒ } | | IJ| d	 } q\ q\ W|
 j ƒ  t j
 d& | ƒ rõt j
 d' | ƒ d  k rp| d% } | t	 k r+t j d( | d) | | ƒ } t j d* | d" d+ | d" | ƒ } qpt j d, | d- | | ƒ } t j d. | d" d/ | d" | ƒ } n  | t k rõ| j
 | ƒ } | rò| j d% ƒ } t j
 d0 | | ƒ sÌt j
 d1 | | ƒ rït j d2 | d1 | | ƒ } qïqòqõn  | j d	 ƒ } | | IJd  S(4   Nt    s:    HN2 (ALA|ARG|ASN|ASP|ASX|CSE|CYS|GLN|GLU|GLX|GLY|HIS|ILE|s0   LEU|LYS|MET|MSE|PHE|PRO|SER|THR|TRP|UNK|TYR|VAL)iP   i    i   t   REMARKs   REMARK...\Ds   
s   REMARK   4 REMEDIATORi
   i   s   ATOM  R   s   TER   R   R   R   s   LINK  s   .{17}([a-zA-Z0-9])  s   \A(.{17})(.)\s\ss   \g<1>  \g<2>s   .{17}([a-zA-Z0-9][a-zA-Z0-9]) s   \A(.{17})(..)\ss   \g<1> \g<2>s   .{17}(GUA|ADE|CYT|THY|URI)s   \A(.{17})(.)..s   .{17}(OIP| Ar| Gr| Cr| Ur)s   \A(.{17}).(.).i   i   i   i   R   i   i   i   s   ^.{12}.\S..  .[ACTGIU]s   O2[\'|\*]   .s   (?m)(^.{12}.\S..)   s   \g<1>  Ds   (?m)(^TER.{15}) s   \g<1>Ds   (?m)(^.{12}.\S..)  Ds   \g<1>   s   (?m)(^TER.{15})Ds   \g<1> s   1H   s   2H   s    HN2 (   s   ATOM  s   HETATMs   TER   s   ANISOUs   SIGATMs   SIGUIJs   LINK  (   t   Nonet   syst   stdoutR   R   R   t   compileR	   R
   R   t   searchR   t   intR   R   t   replacet   groupR)   (   R   R   R*   R1   R.   t   previoust   currentt
   print_linet   remark_flagt   remark_blockR   t   aa_reR   R   R   R   t   DNA_baset   mt   res(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/remediation/remediator.pyt	   remediate‰   s¶    
					-		
%(%+,&


((,)c         C   s  | d  k r t j } n  t } t } d } |  j } |  j d k rK t } n |  j d k rc t } n  |  j d  k r„ t } |  j } n  |  j d  k r¨ t	 |  j d ƒ } n	 t j
 } t | | | ƒ \ } }	 | rØ t }
 n t }
 t |
 | | ƒ \ } } t | | | ƒ \ } } | d k s&| d k r^t |  j | | |	 | ƒ |  j d  k r{| j ƒ  q{n | rq| d IJn
 | d IJd  S(   NR4   s   3.2s   2.3t   wi    s4   All atoms conform to PDB v3.x standard  **skipping**s4   All atoms conform to PDB v2.3 standard  **skipping**(   R6   R7   t   stderrR   R   R-   t   versiont   dictt   output_fileR   R8   R3   R   RG   R)   (   t   paramst   logR+   t   remedidated_outR,   R-   R*   R.   R   R1   t   remediated_altR   t   remark4_dumpR   R   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/remediation/remediator.pyt
   remediatorø   sB    					(   t
   __future__R    R7   R"   R   t   libtbx.load_envR%   R   R   R3   R6   RG   RR   (    (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/pdb/remediation/remediator.pyt   <module>   s   		*	$o