ó
¥™xTc           @   sk   d  d l  m Z d  d l Z d  d l m Z d  d l m Z d  d l m Z d „  Z	 d „  Z
 d „  Z d S(	   iÿÿÿÿ(   t   divisionN(   t   geometry_minimization(   t   Usage(   t   StringIOc         C   s‡   g  } t  |  d ƒ } xa | j ƒ  D]S } | j d ƒ r" d | k ru | j ƒ  j d ƒ } | j | d j ƒ  ƒ qu q" q" W| j ƒ  | S(   Nt   rbs	   USER  MODt   FLIPt   :i   (   t   filet	   readlinest
   startswitht   stript   splitt   appendt   rstript   close(   t   filenamet   flipped_residuest   ft   linet   temp(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/molprobity/nqh_minimize.pyt   parse_user_mods   s    !
c         C   sÅ   t  |  d ƒ } t  | d ƒ } xŒ | j ƒ  D]~ } | j d ƒ r™ | d d !} | | k r† | d  | | | d } | | j ƒ  IJq© | | j ƒ  IJq+ | | j ƒ  IJq+ W| j ƒ  | j ƒ  d  S(   NR   t   ws   ATOM  i   i   i   i6   (   R   R   R	   R
   R   (   R   t   outfilet   updated_coordsR   t   out_fR   t   keyt   new_line(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/molprobity/nqh_minimize.pyt   finalize_coords   s    
c         C   sw  t  |  ƒ d k r! t d ƒ ‚ n  |  d } |  d } |  d } t j j | ƒ } t d | ƒ } d d d	 } d
 d d d	 } t } xé| D]á}	 | s° | d 7} | d 7} n t } |	 d d !}
 t  |	 ƒ d k r�|
 d k r.| d |	 d d !j ƒ  |	 d f 7} | d |	 d d !j ƒ  |	 d f 7} qn| d |	 d d !|	 d d !j ƒ  |	 d f 7} | d |	 d d !|	 d d !j ƒ  |	 d f 7} q� |
 d k rü| d |	 d d !j ƒ  |	 d d !|	 d f 7} | d |	 d d !j ƒ  |	 d d !|	 d f 7} q� | d |	 d d !|	 d d !j ƒ  |	 d d !|	 d f 7} | d |	 d d !|	 d d !j ƒ  |	 d d !|	 d f 7} q� W| d 7} | d 7} d } d | } t j j	 | d ƒ } t
 | d ƒ } | | IJ| | IJ| | IJ| | IJ| d IJ| d IJ| j ƒ  t j j	 | d ƒ } t
 | d ƒ } t
 | d ƒ } x› | j ƒ  D]� } | j d ƒ r@| d  d! !} | d" d !| d d# | d d" !} | d d# k r«| d$ | d } n  | | k rÍ| | j ƒ  IJqÍq@q@W| j ƒ  | j ƒ  g  } | j | ƒ | j | ƒ t j j	 | d% ƒ } t
 | d ƒ } t j | d& | ƒ} i  } t d | j d' ƒ ƒ } | d k rr| d( n | |  d( } t
 t j j	 | | ƒ d ƒ } x¯ | j ƒ  D]¡ } | j d ƒ r«| d  d! !} | d" d !| d d# | d d" !} | d d# k r| d$ | d } n  | | k rL| d) d! !} | d* d+ !} | | | <qLq«q«W| j ƒ  t d | d, | d- | ƒ d  S(.   Ni   s5   mmtbx.nqh_minimize input.pdb output.pdb temp_dir_pathi    i   i   R   s<   selection = (not (name ' CA ' or name ' N  ' or name ' C  ' s-   or name ' O  ' or name ' HA ' or name ' H  ' s   or name ' OXT')) and (s9   reference_restraints.restrain_starting_coord_selection = s0   (not (name ' CA ' or name ' N  ' or name ' C  ' s    ori
   s     s    (resseq %s and resname %s)i   i   s*    (chain '%s' and resseq %s and resname %s)s*    (resseq %s and resname %s and altid '%s')iÿÿÿÿs9    (chain '%s' and resseq %s and resname %s and altid '%s')s    )s*   reference_restraints.coordinate_sigma=0.05s
   directory=s
   nqh.paramsR   s   stop_for_unknowns=Falses@   pdb_interpretation.clash_guard.nonbonded_distance_threshold=Nones   nqh_flips.pdbR   s   ATOM  i   i   i   t    s       %ss   nqh.logt   logt   .s   _minimized.pdbi   i   i6   R   R   (   t   lenR   t   ost   patht   basenameR   t   Truet   FalseR
   t   joinR   R   R   R	   R   R   t   runt   maxt   rfindR   (   t   argsR   R   t   temp_dirR"   R   t	   selectiont   restraint   is_firstt   flipt   chain_idt   sigmat	   directoryt   paramst   pt   temp_pdbt   outR   R   t   id_strR   t   min_argst   log_fileR   t   oR   t   indt   ofnt   min_filet	   check_keyt   coords(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/molprobity/nqh_minimize.pyR&   $   sº    



"),),37









$

$$
(   t
   __future__R    R    t   mmtbx.command_lineR   t   libtbx.utilsR   t	   cStringIOR   R   R   R&   (    (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/molprobity/nqh_minimize.pyt   <module>   s   		