ó
ý#‡Tc           @   sÂ  d  d l  Z  d  d l Z d  d l m Z m Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l	 Z	 d  d l
 Z d  d l Z d  d l Z d  d l Z d  d l Z d Z d Z d Z e j d k rë e  j j Z d „  Z e e  j _ n  d e f d	 „  ƒ  YZ d
 f  d „  ƒ  YZ d f  d „  ƒ  YZ d „  Z d „  Z e d e  d „ Z! d „  Z" d „  Z# d „  Z$ d „  Z% d „  Z& d f  d „  ƒ  YZ' d „  Z( d „  Z) d „  Z* d „  Z+ d „  Z, d Z- d S(   iÿÿÿÿN(   t   Popent   PIPEs   %3d s   %-15ss   %5.1fs  t   msysc          G   s[   xT t  t |  ƒ d d d ƒ D]6 } | d k sE t j j |  | ƒ r t |  | Œ  Sq Wd  S(   Ni   iÿÿÿÿi    (   t   ranget   lent   ost   patht   isabst
   old_opjoin(   t   argst   n(    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyt
   new_opjoin   s    #"t   JobErrorc           B   s   e  Z d d  „ Z RS(   c         C   s   | |  _  | |  _ d  S(   N(   t   msgt   note(   t   selfR   R   (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyt   __init__    s    	N(   t   __name__t
   __module__t   NoneR   (    (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyR      s   t   Outputc           B   sP   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z e d „ Z	 d „  Z
 RS(   s   storage for Job's stdout/stderrc         C   s(   | |  _  g  |  _ d  |  _ d  |  _ d  S(   N(   t   rolet   linesR   t   saved_tot   que(   R   R   (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyR   '   s    			c         C   s   t  |  j p |  j ƒ S(   N(   t   boolR   R   (   R   (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyt   __nonzero__-   s    c         C   s"   |  j  r d t |  j  ƒ Sd Sd  S(   Ns   %d liness   -      (   R   R   (   R   (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyt   size_as_str0   s    	c         c   sZ   xS |  j  d  k	 rU y |  j  j ƒ  } Wn t j k
 r< Pn X|  j j | ƒ | Vq Wd  S(   N(   R   R   t
   get_nowaitt   Queuet   EmptyR   t   append(   R   t   line(    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyt	   read_line6   s    c         C   sH   |  j  rD x, |  j  j ƒ  s7 |  j j |  j  j ƒ  ƒ q Wd  |  _  n  d  S(   N(   R   t   emptyR   R   R   R   (   R   (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyt
   finish_que?   s    	c         C   s¢   |  j  rž t t j j | | ƒ d ƒ �( } x |  j  D] } | j | ƒ q4 WWd  QX| |  _ t j j	 d |  j
 | ƒ | rž t |  j  ƒ d k rž g  |  _  qž n  d  S(   Nt   wt   stdi   (   R   t   openR   R   t   joint   writeR   t   c4t   utilst	   log_valueR   R   (   R   t
   output_dirt   filenamet   remove_long_listt   fR    (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyt   save_outputE   s    	!	c         C   sc   t  |  j ƒ } | d k  r+ d j |  j ƒ S|  j r? d |  j Sd j |  j d  ƒ d | d Sd  S(   Ni   t    s   -> %ss   %s more lines(   R   R   R'   R   (   R   R
   (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyt   summaryO   s    	(   R   R   t   __doc__R   R   R   R!   R#   t   TrueR0   R2   (    (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyR   %   s   						
t   Jobc           B   s5   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   sˆ   t  j j | ƒ p | |  _ | |  _ | g |  _ d |  _ d  |  _ t	 d ƒ |  _
 t	 d ƒ |  _ d  |  _ d  |  _ d  |  _ i  |  _ d  S(   NR1   t   outt   err(   R   R   t   basenamet   namet   workflowR	   t	   std_inputR   t
   stdin_fileR   R6   R7   t   startedt
   total_timet   parsert   data(   R   R:   t   prog(    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyR   Z   s    						c         C   sA   |  j  r* t j d t j |  j  ƒ ƒ } n d } d |  j | f S(   Ns    %Y-%m-%d %H:%MR1   s
   <Job %s%s>(   R=   t   timet   strftimet	   localtimeR9   (   R   t   t(    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyt   __repr__m   s    	!c         C   sZ   d j  d „  |  j Dƒ ƒ } |  j r9 | d |  j 7} n |  j rV | d |  j 7} n  | S(   Nt    c         s   s   |  ] } t  j | ƒ Vq d  S(   N(   t   pipest   quote(   t   .0t   a(    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pys	   <genexpr>u   s    s    < s    << EOF
%s
EOF(   R'   R	   R<   R;   (   R   t   s(    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyt   args_as_strt   s    		c         C   s   |  j  j d |  d t ƒ S(   Nt   jobt   show_progress(   R:   t   run_jobR4   (   R   (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyt   run|   s    c         C   s  |  j  d k } |  j  d  k s$ | rÕ d } x |  j j ƒ  D] } q: W| rƒ | rƒ d t |  j j ƒ | j ƒ  f } | d  j d ƒ Sd |  j j ƒ  } |  j	 r¹ | d |  j	 j ƒ  7} n  | rÑ | j d ƒ } n  | S|  j  d d k rï |  j  St
 ƒ  |  j  } | |  ƒ Sd  S(	   Nt   previewR1   s   [%d] %si2   s   stdout:%11ss    stderr: %si    RG   (   R?   R   R6   R!   R   R   t   rstript   ljustR   R7   t   globals(   R   t   preview_modeR    t   rett   p(    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyt   parse   s$    "	(   R   R   R   RF   RM   RQ   RY   (    (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyR5   Y   s
   				c   	      C   s{  d |  j  k r, g  |  j  d <g  |  j  d <n  x|  j j ƒ  D]} | j d ƒ rç | j d  d ƒ } t | d ƒ } t rA| d j d ƒ j d ƒ \ } } } |  j  d j	 t | ƒ t | ƒ t | ƒ f ƒ |  j  d j	 | ƒ qAq< | j d	 ƒ r< | j d
 ƒ d j
 d ƒ j d ƒ } t d „  | Dƒ ƒ } | |  j  d <q< q< W|  j  d } | rsd d j d „  | Dƒ ƒ Sd Sd  S(   Nt   blobst   scorest   #i   i   iÿÿÿÿs   () 	
t   ,s   Protein mass center:t   (i   s   
 )c         s   s   |  ] } t  | ƒ Vq d  S(   N(   t   float(   RJ   t   x(    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pys	   <genexpr>«   s    t   centers   Blob scores: RG   c         s   s   |  ] } d  | Vq d S(   s   %.0fN(    (   RJ   t   sc(    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pys	   <genexpr>¯   s    R1   (   R@   R6   R!   t
   startswitht   splitR   R_   R4   t   stripR   RS   t   tupleR'   (	   RN   R    t   spt   scoreR`   t   yt   zt   ctrR[   (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyt   _find_blobs_parser›   s&    %/%c         C   sé  d |  j  k r\ d |  j  d <d |  j  d <|  j  d <d |  j  d <|  j  d <g  |  j  d <n  |  j  d } x=|  j j ƒ  D],} | j d	 ƒ rÕ t | j d
 ƒ d ƒ |  j  d <|  j  d s¥|  j  d |  j  d <q¥qy | j d ƒ r+t | j d
 ƒ d ƒ |  j  d <|  j  d s¥|  j  d |  j  d <q¥qy | j d ƒ sI| j d ƒ rlt | j d
 ƒ d ƒ |  j  d <qy | j d ƒ s•| ry | d j d ƒ ry | j | ƒ qy qy Wd |  j  d |  j |  j  d |  j  d |  j  d |  j  d f S(   Nt   cyclei    g        t   free_rt	   overall_rt
   ini_free_rt   ini_overall_rt   selected_liness   Free R factort   =iÿÿÿÿs   Overall R factors        Rigid body cycle =s        CGMAT cycle number =s"    $TEXT:Result: $$ Final results $$s    $$s*   %2d/%d   Rfree/R  %.4f/%.4f  ->  %.4f/%.4f(	   R@   R6   R!   Rc   R_   Rd   t   intR   t   ncyc(   RN   t   selectedR    (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyt   _refmac_parser³   s2      #R1   c   	      C   s  t  |  t j j | ƒ ƒ } | rv xR d d d d d g D]8 } | j | ƒ r7 | j j | j ƒ  | | g ƒ q7 q7 Wn  t | t	 ƒ r‘ | j
 ƒ  n | } g  | D]% } | rž | j ƒ  rž | j ƒ  ^ qž } | rü | oè | d j ƒ  d k rü | j d ƒ n  d j | ƒ | _ | S(	   sÿ   Handle traditional convention for arguments of CCP4 programs.
    logical is dictionary with where keys are so-called logical names,
    input string or list of lines that are to be passed though stdin
    add_end adds "end" as the last line of stdin
    t   hklint   hkloutt   hklreft   xyzint   xyzoutiÿÿÿÿt   ends   
(   R5   R)   R*   t   cbint   getR	   t   extendt   uppert
   isinstancet
   basestringt
   splitlinest   isspaceRe   t   lowerR   R'   R;   (	   R:   RA   t   logicalt   inputt   add_endRN   RK   R   t   stripped(    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyt   ccp4_jobÏ   s    *!2#c         C   s”   x� | j  d ƒ s� |  j ƒ  } | d  k	 r t t j ƒ  |  j | } t j j | ƒ t	 j
 j ƒ  t j j d t | ƒ ƒ t j j ƒ  q q Wd  S(   Ng      à?s   (   t   waitRY   R   t   _elapsed_fmtRB   R=   R)   R*   t   putt   syst   stdoutt   flushR   t   reset_color(   RN   t   eventRX   t   text(    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyt   _print_elapsedâ   s    c         C   sP   d „  } t  j  ƒ  } t j d | d |  | f ƒ } t | _ | j ƒ  | | f S(   Nc         S   s8   x' t  |  j d ƒ D] } | j | ƒ q W|  j ƒ  d  S(   NR1   (   t   itert   readlineRŽ   t   close(   R/   t   qR    (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyt   enqueue_linesî   s    t   targetR	   (   R   t	   threadingt   ThreadR4   t   daemont   start(   t   file_objRš   R   t   thr(    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyt   _start_enqueue_threadí   s    		
c         C   ss   |  j  rh t j j |  j j |  j  ƒ } y t | d ƒ j ƒ  SWqo t k
 rd t	 d |  j  ƒ ‚ qo Xn |  j
 Sd  S(   Nt   rbs   cannot read input from: %s(   R<   R   R   R'   R:   R,   R&   t   readt   IOErrorR   R;   (   RN   R   (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyt   _get_input_as_stringø   s    	c         C   sR   t  | ƒ } |  j d | ƒ \ } } | j t ƒ | j _ | j t ƒ | j _ d  S(   NRˆ   (   R¦   t   communicateR„   R4   R6   R   R7   (   t   processRN   t	   job_inputR6   R7   (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyt	   _just_run  s    c         C   s  zæ t  |  j ƒ \ } | j _ t  |  j ƒ \ } | j _ y  t | ƒ } |  j j | ƒ WnT t	 k
 r¯ } t
 j j d | j ƒ | j t j | j t j k f k r° ‚  q° n X|  j j ƒ  | j ƒ  | j ƒ  |  j ƒ  | j ƒ  Wd  | j j ƒ  | j j ƒ  Xd  S(   Ns&   
Warning: passing input to %s failed.
(   R¢   R�   R6   R   t   stderrR7   R¦   t   stdinR(   R¥   R)   R*   RŽ   R9   t   errnot   EPIPEt   EINVALR˜   R'   RŒ   RY   R#   (   R¨   RN   t   out_tt   err_tR©   t   e(    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyt   _run_and_parse  s"    $



t   Workflowc           B   s  e  Z d  d „ Z d „  Z d d „ Z d d „ Z d „  Z d „  Z d „  Z d	 „  Z	 d
 „  Z
 d „  Z d „  Z d „  Z d! d! d d „ Z d d „ Z d d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d d „ Z d d „ Z d „  Z d d „ Z d  „  Z RS("   i    c         C   s    t  j j | ƒ |  _ g  |  _ | |  _ | d k r_ y |  j ƒ  j |  _ Wq_ d  |  _ q_ Xn  t	 |  _
 t j |  _ t  j j |  j ƒ sœ t  j |  j ƒ n  d  S(   Ni   (   R   R   t   abspathR,   t   jobst   from_jobt   unpickle_jobst	   repl_jobsR   t   Falset   dry_runR�   t   argvt   isdirt   mkdir(   R   R,   R·   (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyR   "  s    			c         C   s   d t  |  j ƒ |  j f S(   Ns   Workflow with %d jobs @ %s(   R   R¶   R,   (   R   (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyt   __str__0  s    s   workflow.picklec         C   sA   t  t j j |  j | ƒ d ƒ � } t j |  | d ƒ Wd  QXd  S(   Nt   wbiÿÿÿÿ(   R&   R   R   R'   R,   t   picklet   dump(   R   R-   R/   (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyt   pickle_jobs3  s    $c         C   s;   t  t j j |  j | ƒ d ƒ � } t j | ƒ SWd  QXd  S(   NR£   (   R&   R   R   R'   R,   RÁ   t   load(   R   R-   R/   (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyR¸   7  s    $c      
   C   sî   t  j  ƒ  | _ y. t | j d t d t d t d |  j ƒ} WnB t k
 r� } | j t j k r{ t	 d | j d ƒ ‚ q‚ ‚  n XzH y t
 | | ƒ Wn0 t k
 rÈ t	 d | j d | j ƒ  ƒ‚ n XWd  t  j  ƒ  | j | _ X| j ƒ  S(	   NR¬   R�   R«   t   cwds   Program not found: %s
i    s#   
KeyboardInterrupt while running %sR   (   RB   R=   R    R	   R   R,   t   OSErrorR­   t   ENOENTR   Rª   t   KeyboardInterruptR9   RM   R>   t   poll(   R   RN   R¨   R²   (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyt   silently_run_job;  s      c      
   C   s-  t  t j d ƒ s# t j j ƒ  r, t } n  |  j j | ƒ t |  j ƒ } t j	 j
 t | ƒ t j	 j t | j ƒ t j j ƒ  t j	 j | j ƒ t |  j ƒ d } | |  j d k  r|  j rXt |  j ƒ | k rX|  j | } | j | j k r2| } t j	 j
 d ƒ t j	 j d d ƒ | |  j d <q{t j	 j
 d ƒ t j	 j d d ƒ n# t j	 j
 d	 ƒ t j	 j d d
 ƒ | St j ƒ  | _ t j	 j d | j ƒ | j rÆt j	 j d | j ƒ n" | j rèt j	 j d | j ƒ n  t j	 j d | j d ƒ t j	 j d d j d „  | j d Dƒ ƒ ƒ y. t | j d t d t d t d |  j ƒ} WnB t k
 r¡} | j t j  k r›t! d | j d ƒ ‚ q¢‚  n X|  j" r¯| S| rõt# j$ ƒ  } t# j% d t& d | | f ƒ }	 t' |	 _( |	 j) ƒ  n  zm y6 | j* d  k	 s| r t, | | ƒ n t- | | ƒ Wn0 t. k
 r`t! d | j d | j/ ƒ  ƒ‚ n XWd  | r‚| j0 ƒ  |	 j ƒ  n  t j ƒ  }
 |
 | j | _1 t j	 j d |
 ƒ | j2 ƒ  } t j	 j
 t3 | j1 ƒ | j4 ƒ  } t j	 j
 d | põd ƒ | rt j	 j d | ƒ n  |  j5 | ƒ xR | j6 j7 ƒ  D]A \ } } | d k rad d j | ƒ } n  t j	 j | | ƒ q3WX| r)t j	 j d  | ƒ | j/ ƒ  } | d g } | j8 j9 rÙ| d! |  j | j8 j9 f g 7} n  | j: rþ| d" | j: j; ƒ  g 7} n  t! d# | j | f d d j | ƒ ƒ‚ n  | S($   Nt   isattyi   s
   unpickled
t   not_runt	   unpicklediÿÿÿÿs   skipped (mismatch)
s   unpickled/mismatchs   skipped
t   skippedt
   start_timeR¬   Rˆ   RA   i    R	   RG   c         s   s   |  ] } t  j | ƒ Vq d  S(   N(   RH   RI   (   RJ   RK   (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pys	   <genexpr>q  s    R�   R«   RÅ   s   Program not found: %s
R›   s#   
KeyboardInterrupt while running %sR   t   end_times   %s
R1   t   infoRr   s   
t   exit_statuss   stdout -> %s/%ss   stderr:s   %s failed (exit status %d)(<   t   hasattrR�   R�   RË   Rº   R¶   R   R   R)   R*   RŽ   t   _jobindex_fmtt	   put_greent   _jobname_fmtR9   R‘   t   log_sectionR·   R¹   R+   RB   R=   t   log_timeR<   R;   R	   R'   R    R   R,   RÆ   R­   RÇ   R   R»   Rœ   t   EventR�   R•   R4   Rž   RŸ   R?   R   R³   Rª   RÈ   RM   t   setR>   RÉ   R�   RY   t   _write_logsR@   t	   iteritemsR6   R   R7   R2   (   R   RN   RO   t   job_numt   job_idxt   old_jobR¨   R²   R“   t   progress_threadRÐ   t   retcodet   parse_outputt   kt   vt   all_argst   notes(    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyRP   N  s¦    #			!		 
	c         C   s`   d t  |  j ƒ | j j d d ƒ f } | j j |  j d | ƒ | j j |  j d | ƒ d  S(   Ns   %02d-%sRG   t   _s   %s.logs   %s.err(   R   R¶   R9   t   replaceR6   R0   R,   R7   (   R   RN   t   log_basename(    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyRÛ   ­  s    (c         C   s&   |  j  d | d | d | ƒ j ƒ  d  S(   NR{   R|   t   cell(   t   pdbsetRQ   (   R   R{   R|   Rê   (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyt   change_pdb_cell²  s    c         C   s/   t  | d ƒ � } t j j | | ƒ SWd  QXd  S(   NRÀ   (   R&   R)   t   pdbt   remove_hetatm(   R   R{   R|   R6   (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyRî   ¶  s    c         C   s"   t  j j t j j |  j | ƒ ƒ S(   N(   R)   Rí   t   read_metadataR   R   R'   R,   (   R   R{   (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyt   read_pdb_metadataº  s    c         C   s"   t  j j t j j |  j | ƒ ƒ S(   N(   R)   t   mtzRï   R   R   R'   R,   (   R   Rx   (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyt   read_mtz_metadata½  s    c         C   s;   t  |  t j j d ƒ ƒ } | j j d | d | g ƒ | S(   Nt   molreps   -fs   -m(   R5   R)   R*   R~   R	   R€   (   R   R/   t   mRN   (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyRó   À  s    R1   c         C   s   t  |  d d t ƒ  d | ƒS(   Nt	   pointlessR‡   Rˆ   (   R‹   t   locals(   R   Rx   R{   Rz   Ry   t   keys(    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyRõ   Å  s    c         C   s   t  |  d d t ƒ  ƒS(   Nt   mtzdumpR‡   (   R‹   Rö   (   R   Rx   R÷   (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyRø   È  s    s   F=F_UNIQUE SIGF=SIGF_UNIQUEc         C   s8   t  |  d d t ƒ  d d | d | d | d | g ƒS(   Nt   uniqueR‡   Rˆ   s   cell %g %g %g %g %g %gs   symmetry '%s's   resolution %.3fs	   labout %s(   R‹   Rö   (   R   Ry   Rê   t   symmetryt
   resolutiont   labout(    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyRù   Ë  s
    c         C   s   t  |  d d t ƒ  ƒS(   Nt	   freerflagR‡   (   R‹   Rö   (   R   Rx   Ry   (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyRý   Ó  s    c         C   s&   t  |  d d t ƒ  d d | d g ƒS(   Nt   reindexR‡   Rˆ   s   symmetry '%s's   reindex h,k,l(   R‹   Rö   (   R   Rx   Ry   Rú   (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyRþ   Ö  s    c      	   C   s*   t  |  d d t ƒ  d d | d | g ƒS(   Nt   truncateR‡   Rˆ   s   labin %ss	   labout %s(   R‹   Rö   (   R   Rx   Ry   t   labinRü   (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyRÿ   Û  s    c         C   s†   t  | ƒ t k s t ‚ t |  d d i  d | ƒ} x7 t | ƒ D]) \ } } | j d | d | g 7_ q@ W| j d | g 7_ | S(   Nt   cadR‡   Rˆ   s   HKLIN%di   t   HKLOUT(   t   typet   listt   AssertionErrorR‹   t	   enumerateR	   (   R   Rx   Ry   R÷   RN   R
   R9   (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyR  ß  s    !c         C   s#   t  |  d d t ƒ  d d | g ƒS(   NRë   R‡   Rˆ   s   cell %g %g %g %g %g %g(   R‹   Rö   (   R   R{   R|   Rê   (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyRë   è  s    c      	   C   s  t  |  d d t ƒ  d d | d | g | j ƒ  ƒ} | j ƒ  }	 x` t |	 d  ƒ D]N \ }
 } | d k rS |	 |
 d d	 k rS | j d
 |	 |
 d d  7_ qS qS Wd | _ xG t |	 d  ƒ D]5 \ }
 } | j d ƒ r¿ t |	 |
 d ƒ | _ q¿ q¿ Wd | _	 | S(   Nt   refmac5R‡   Rˆ   s   labin %ss	   labout %siþÿÿÿt
   refinementi   R  RG   i   i   iÿÿÿÿRu   Rw   (
   R‹   Rö   R„   Rd   R  R9   Ru   Rc   Rt   R?   (   R   Rx   R{   Ry   R|   R   Rü   R÷   RN   t   wordsR
   R$   (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyR  ì  s     &		g       @c         C   sJ   t  |  d ƒ } | j d | d | d | d | d | d d | g 7_ | S(	   Nt
   findwaterss   --pdbins   --hklins   --fs   --phis   --pdbouts   --sigmas   %g(   R5   R	   (   R   t   pdbinRx   R/   t   phit   pdboutt   sigmaRN   (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyR
  û  s    g      ð?c         C   sG   t  |  t j j d ƒ ƒ } | j d d | | | g 7_ d | _ | S(   Ns
   find-blobss   -cs   -s%gRl   (   R5   R)   R*   t   syspathR	   R?   (   R   Rñ   Rí   R  RN   (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyt
   find_blobs  s    	c         C   s°   t  |  t j j ƒ  ƒ } | j j d d d g ƒ | d 7} t j d k rš t j j	 |  j
 d ƒ } t | d ƒ � } | j | ƒ Wd  QX| j j | ƒ n	 | | _ d | _ | S(	   Ns   --pythons   --no-graphicss
   --no-guanos   
coot_real_exit(0)t   nts   r3d.pyR$   RR   (   R5   R)   t   coott	   find_pathR	   R€   R   R9   R   R'   R,   R&   R(   R   R;   R?   (   R   t   script_textRN   t   helper_pathR/   (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyt   coot_py  s    
		t   pngc         C   sb   t  |  t j j d ƒ ƒ } | j d | d | | f g 7_ | d | _ d | | f | _ | S(   Nt   rendert   -s   %s.%ss   .r3ds	    -> %s.%s(   R5   R)   R*   R  R	   R<   R?   (   R   R9   t
   img_formatRN   (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyt
   render_r3d  s
    #c         C   sy   xr | D]j } t  j j |  j | ƒ } t  j j | ƒ r y t  j | ƒ Wqq t k
 rm } t j j	 | ƒ qq Xq q Wd  S(   N(
   R   R   R'   R,   t   existst   removeRÆ   R)   R*   t	   put_error(   R   t	   filenamesR/   R   R²   (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyt   delete_files   s    N(   R   R   R   R¿   RÃ   R¸   RÊ   RP   RÛ   Rì   Rî   Rð   Rò   Ró   R   Rõ   Rø   Rù   Rý   Rþ   Rÿ   R  Rë   R  R
  R  R  R  R   (    (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyR´   !  s4   			_														c         C   s…   t  j j |  ƒ r* t  j j |  d ƒ } n |  } t  j j | ƒ si t j j d d | ƒ t j	 d ƒ n  t
 | d ƒ } t j | ƒ S(   Ns   workflow.pickles   workflow data file not founds   No such file or directory: %si   R£   (   R   R   R½   R'   R  R)   R*   R  R�   t   exitR&   RÁ   RÄ   (   t   file_or_dirt   pklR/   (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyt   open_pickled_workflow*  s    c         C   sø   t  j j d |  ƒ t  j j d d j d „  |  j Dƒ ƒ ƒ x� t |  j ƒ D]~ \ } } t  j j d | d | j f ƒ | j rN t	 j
 | j ƒ } t  j j t	 j d | ƒ ƒ t  j j d | j ƒ qN qN Wt  j j d	 ƒ t  j j d
 | ƒ d  S(   Ns   %s
s	   Command: RG   c         s   s   |  ] } t  j | ƒ Vq d  S(   N(   RH   RI   (   RJ   RK   (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pys	   <genexpr>9  s    s
   
%3d %-15si   s    %Y-%m-%d %H:%Ms    %7.1fss   
sÝ   
To see details, specify step(s):
%(prog)s info %(output_dir)s STEPS

To re-run selected steps (for debugging):
%(prog)s repeat %(output_dir)s [STEPS]

where STEPS is one or more numbers or a range (examples: 1,2 4-6 8-)
(   R�   R�   R(   R'   R¼   R  R¶   R9   R=   RB   RD   RC   R>   R«   (   t   wft	   mesg_dictR
   RN   t
   started_at(    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyt   show_workflow_info7  s    *!		c         C   sß   t  j j d |  ƒ t  j j |  j ƒ  d ƒ |  j rQ t  j j d |  j ƒ n  |  j rƒ |  j ƒ  rƒ t  j j d |  j ƒ  ƒ n  |  j j r¯ t  j j d |  j j	 ƒ  ƒ n  |  j
 j rÛ t  j j d |  j
 j	 ƒ  ƒ n  d  S(   Ns   %s
s   
s   Total time: %.1fs
s   Output summary: %s
s   stdout: %s
s   stderr: %s
(   R�   R�   R(   RM   R>   R?   RY   R6   R   R2   R7   (   RN   (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyt   show_job_infoK  s    	 c   
      C   sC  g  } x6|  D].} yþ x÷ | j  d ƒ D]æ } d | k rî | j  d ƒ \ } } | d k re t | ƒ n d } | d k rƒ t | ƒ n t | j ƒ } | d k sª | d k r¶ t ƒ  ‚ n  | g  t | | d ƒ D] }	 | j |	 d ^ qÍ 7} q& | j | j t | ƒ d ƒ q& WWq t t f k
 r:t d | ƒ ‚ q Xq W| S(   NR]   R  R1   i   i    s   Invalid step number(s): %s(   Rd   Rt   R   R¶   t
   ValueErrorR   R   t
   IndexError(
   R	   R%  R¶   t   argRL   t   a_t   b_RK   t   bR
   (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyt   parse_stepsX  s    '8&c          C   sç  t  j j t j d ƒ }  t j d } | s0 t S| d d k r× t | ƒ d k rf t j j d ƒ t	 St
 | d ƒ } t | ƒ d k r« t | t d |  d | d ƒ ƒ n( x% t | d | ƒ D] } t | ƒ q¿ Wt	 S| d d k rãt | ƒ d k rt j j d ƒ n  t | ƒ d k r[t
 | d ƒ } t j j d	 d
 j d „  | j Dƒ ƒ ƒ n„ t
 | d ƒ } xq t | d | ƒ D]\ } y i  | _ | j ƒ  Wqt k
 rÚ} t j j | j d | j ƒt j d ƒ qXqWt	 Sd  S(   Ni    i   RÑ   s   Specify output_dir.
i   RA   R,   t   repeats'   Specify steps. For complete re-run:
%s
RG   c         s   s   |  ] } t  j | ƒ Vq d  S(   N(   RH   RI   (   RJ   RK   (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pys	   <genexpr>�  s    t   comment(   R   R   R8   R�   R¼   Rº   R   R«   R(   R4   R$  R(  t   dictR0  R)  R'   R@   RQ   R   R)   R*   R  R   R   R!  (   RA   R	   R%  RN   R²   (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyt   parse_workflow_commandsj  s<    #!	s€   All files are stored in the specified output directory.
For quick summary (after running the program): %(prog)s info OUTPUT_DIR
(.   R   R�   t
   subprocessR    R   R­   RH   Rœ   R   RB   t   cPickleRÁ   t   c4.utilsR)   t   c4.mtzt   c4.pdbt   c4.cootRÔ   RÖ   R�   t   platformR   R'   R   R   t	   ExceptionR   R   R5   Rl   Rw   R   R4   R‹   R•   R¢   R¦   Rª   R³   R´   R$  R(  R)  R0  R4  t   commands_help(    (    (    s9   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/workflow.pyt   <module>   sL   	4B					
		ÿ 
					&