ó
šxTc           @   sA   d  d l  Z  d  d l Z d  d l Z d Z d d d „  ƒ  YZ d S(   iÿÿÿÿNsC  
cd %s
title BLAST MR runs on %s - %d out of %d
mklink /H %s\Sculpt12prtcl%s_DoneMRJobs.txt %s\Strider%s_DoneMRJobs.txt
call phenix.python %%%%PHASER_DIST%%%%\phaser\BLASTrunner.py d %s Sculpt12prtcl B:\Users\oeffner\HomologySearch\sculpt12.db N N
del %s\Sculpt12prtcl%s_DoneMRJobs.txt
cd B:\Users\oeffner\HomologySearch


t   SCOPdistillerc           B   sÂ   e  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 d „ Z d d d „ Z d d „ Z e d „ Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s-  t  | d ƒ } | j ƒ  |  _ | j ƒ  t  | d ƒ } | j ƒ  |  _ | j ƒ  t  | d ƒ } | j ƒ  |  _ | j ƒ  t  | d ƒ } | j ƒ  }	 | j ƒ  |	 j d ƒ |  _ i  |  _ t	 |  _
 i  |  _ i  |  _ i  |  _ i  |  _ t j d |  j ƒ |  _ x& |  j D] }
 |
 d |  j |
 d <qWt j d |  j ƒ |  _ x& |  j D] } | d |  j | d <qHWt j d |  j ƒ |  _ x& |  j D] } | d |  j | d <q‰Wt j d |  j ƒ |  _ x& |  j D] } | d |  j | d <qÊW|  j ƒ  t j d	 ƒ |  _ t j d
 ƒ |  _ t j d ƒ |  _ d  S(   Nt   rs   
s   	cl	([a-z]+)	-	(.+)i   i    s   	cf	([a-z0-9\.]+)	-	(.+)s   	sf	([a-z0-9\.]+)	-	(.+)s   	fa	([a-z0-9\.]+)	-	(.+)s   ([a-z]+)s   ([a-z]\.[0-9]+)s   ([a-z]\.[0-9]+\.[0-9]+)(   t   opent   readt   SCOPdescriptiont   closet   SCOPclassest
   pdbs1chaint   splitt   pdbcodest   pdbdictt   Truet   notmakingdictionaryt   classnamedictt   foldnamedictt
   sfnamedictt   famdictt   ret   findallt
   classnamest	   foldnamest	   sfamnamest   familynamest   MakePDBidDictionaryt   compilet   classIDrecmpt   foldIDrecmpt   sfamIDrecmp(   t   selft   SCOPdescriptionfnamet   SCOPclassesfnamet   pdbs1chainfnamet   totalpdbfnamet   desfilet   clsfilet   asufilet	   pdbIDfilet   txtt	   classnamet   foldnamet   sfamnamet   famname(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/SCOPdistiller.pyt   __init__*   sN    



										
c         C   s   |  j  S(   N(   R   (   R   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/SCOPdistiller.pyt   ListClassNamesg   s    c         C   s_   g  } xR |  j  D]G } t j d | d ƒ j ƒ  } | j | d |  j | | d g ƒ q W| S(   Ns   ([a-z]+)i    i   (   R   R   t   searcht   groupt   appendR   (   R   R   R'   t   classID(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/SCOPdistiller.pyt   ListFoldNamesm   s
    )c         C   s…   g  } xx |  j  D]m } t j d | d ƒ j ƒ  } t j d | d ƒ j ƒ  } | j | d |  j | |  j | | d g ƒ q W| S(   Ns   ([a-z]+)i    s   ([a-z]\.[0-9]+)i   (   R   R   R,   R-   R.   R   R   (   R   t   superfamilynamesR(   R/   t   foldID(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/SCOPdistiller.pyt   ListSuperFamilyNamesy   s    c         C   s«   g  } xž |  j  D]“ } t j d | d ƒ j ƒ  } t j d | d ƒ j ƒ  } t j d | d ƒ j ƒ  } | j | d |  j | |  j | |  j | | d g ƒ q W| S(   Ns   ([a-z]+)i    s   ([a-z]\.[0-9]+)s   ([a-z]\.[0-9]+\.[0-9]+)i   (   R   R   R,   R-   R.   R   R   R   (   R   R   R)   R/   R2   t   sfamID(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/SCOPdistiller.pyt   ListFamilyNames‡   s    &c         C   sÍ   t  |  _ t j d t j ƒ } | j |  j ƒ } xK | D]C } | j ƒ  \ } } } |  j j	 | t
 ƒ  ƒ j | | | f ƒ q7 Wx? |  j D]4 } | j ƒ  |  j k rˆ d g |  j | j ƒ  <qˆ qˆ Wt |  _ d  S(   Ns"   ^d(....)\w+\s+\1\s+(\S+)\s+(\S+)\st    (   R6   R6   R6   (   t   FalseR   R   R   t	   MULTILINEt   finditerR   t   groupsR
   t
   setdefaultt   sett   addR	   t   lowerR   (   R   t   regext   itt   rect   pdbidt   chainidt   scopid(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/SCOPdistiller.pyR   –   s    	,R6   c         C   sä  t  |  j j ƒ  ƒ d k o! |  j rû | j ƒ  |  j k rã t |  j | j ƒ  ƒ } | d k rÚ g  } x@ | D]8 } | d j | j ƒ  d ƒ d k r£ | j | ƒ n  qk Wt  | ƒ d k rÂ | } n d d d d f g } n | } n d d d d f g } n5 | d } t	 j
 d | j ƒ  d | d |  j ƒ } d d d d f g } z—yYt  | d d ƒ d k r g  } x/| D]'}	 t |	 ƒ }	 |	 d j d	 ƒ }
 d } xÓ |
 D]Ë } | j d
 ƒ d } t  | ƒ d k ro| d d k r | t t | j d ƒ d ƒ t | j d ƒ d ƒ ƒ d 7} nL d | d } | t t | j d ƒ d ƒ t | j d ƒ d ƒ ƒ d 7} n  q¤W|	 j | ƒ t |	 ƒ }	 | j |	 ƒ qrWn  Wn7 t k
 rÚ} d t | ƒ GHd d d d f g } n XWd  | SX(   Ni    R6   i   iÿÿÿÿs   \S+s   \s(s   )\s+(s
   )\s(\S+)\st   ,t   :t   -t   0i   s   SCOPdistiller: (   t   lenR
   t   itemsR   R>   t   listt   findt   upperR.   R   R   R   R   t   abst   intt   tuplet	   Exceptiont   str(   R   t   pdbRC   t   famidst   FamidsWithCorrectChainidt   famidt   matcht   chainresidueIDt   rest   mt   residuerangest   resdomainlengtht   rngt   resrngt   nnresrngt   e(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/SCOPdistiller.pyt   GetFamilyIdFromPDB§   sN    $"		
 AEc   
      C   sâ   g  } |  j  | | ƒ } | d g k rÕ x´ | D]  } |  j j | d ƒ j ƒ  } |  j j | d ƒ j ƒ  } |  j j | d ƒ j ƒ  } | d |  j | |  j | |  j | |  j	 | d f }	 | j
 |	 ƒ q. Wn	 d g } | S(   NR6   i   t   UnSCOPed(   R6   R6   R6   R6   (   Rb   Rb   Rb   Rb   Rb   (   Ra   R   R,   R-   R   R   R   R   R   R   R.   (
   R   RS   RC   t   compositefamnameRT   RV   R/   R2   R4   t
   familyname(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/SCOPdistiller.pyt   GetFamilyNameFromPDBç   s    (	c         C   sX   | j  d ƒ } | d k  r( | d 7} n  t j | ƒ } t j d | d |  j ƒ } | S(   Nt   .i   s   \s([a-z0-9]{4})\s.+\s(s   [\S]*)(   t   countR   t   escapeR   R   (   R   t   idt	   dot_countt   escapedt   pdbs(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/SCOPdistiller.pyt   ListPDBsofIDs  s    c         C   s$  d } t  t j d | ƒ ƒ } | d k r9 |  j ƒ  } n  | d k rT |  j ƒ  } n  | d k ro |  j ƒ  } n  | d k rŠ |  j ƒ  } n  x2 t t  | ƒ ƒ D] } | | d | k r� Pq� q� W| | d | k r× d  S|  j | | d ƒ } | | GH| d k r x | D] } d | GHq
Wn  | S(	   NR6   s   \.i    i   i   i   t   vs   		%s, %s(	   RI   R   R   R+   R0   R3   R5   t   rangeRm   (   R   Ri   t   st   namest   ndotst   iRl   RS   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/SCOPdistiller.pyt   PrintListofPDBsofIDs  s*    	c         C   sy   g  } xC | D]; } |  j  j | d j ƒ  d ƒ d k r | j | ƒ q q W| d k ru x | D] } d | GHq_ Wn  | S(   Ni    Rn   s   		%s, %s(   R   RL   RM   R.   (   R   Rl   Rp   t   selectedpdbsRS   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/SCOPdistiller.pyt   ListPDBs1ChainInASU2  s    %i † c         C   s¤  g  } t  j | ƒ t g  ƒ } | d k r� t | d ƒ } | j ƒ  } | j ƒ  t | ƒ } x" | D] }	 | j |	 d ƒ qc Wn  x|  j ƒ  D]}
 t g  ƒ } t g  ƒ } g  } g  } |  j	 |
 d ƒ } |  j
 | ƒ } t g  ƒ } xH | D]@ }	 |	 d | k r | j |	 ƒ | j |	 ƒ qí d |	 d GHqí WxL | D]D }	 |	 d | k ro| j |	 ƒ | j |	 d ƒ q8d |	 d GHq8W| j | ƒ d t | ƒ GHqŽ W| S(   NR6   R   i    s   %s is already in alreadyusedseti   s   %s is already in foldsets   len(notusedset) = %d(   t   randomt   seedR<   R   R   R   t   evalR=   R+   Rt   Rv   R.   t   extendRI   (   R   t   xt	   pdbsfnamet   maxpdbst   pdbsmodresshuffledt   alreadyusedsett   mfileR%   t   alreadyusedpdbsRS   t   clst   pdbsett   foldsett
   uniquepdbst   uniquefoldsRl   R   t
   notusedset(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/SCOPdistiller.pyt   GetPDBsAndSCOPidsB  s>    
c         C   s<  g  } t  j | ƒ t g  ƒ } t g  ƒ } | d k r“ t | d ƒ } | j ƒ  } | j ƒ  t | ƒ } x( | D] }	 | j |	 d j ƒ  ƒ qo Wn  |  j	 j
 ƒ  }
 x“ |
 D]‹ }	 |	 j ƒ  | k r+t |	 ƒ d k r+d |	 GH|  j |	 ƒ d d } | d k rd } n  | j |	 | f ƒ | j |	 ƒ q© d |	 GHq© W| S(	   NR6   R   i    i   s   pdb = %si   Rb   s   %s is already in alreadyusedset(   Rw   Rx   R<   R   R   R   Ry   R=   R>   R   R   RI   Ra   (   R   R{   R|   R~   R   R‡   R€   R%   R�   RS   t   pdblistRD   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/SCOPdistiller.pyt   GetPDBsWithSCOPids‚  s,    
$		c   
      C   sß  d } d } t  | ƒ } x}| D]u} | d 7} t  | d j d ƒ ƒ d k r� | d j d ƒ d d | d j d ƒ d } n
 | d } | r$| d 7} | d | 7} | d | | d j ƒ  | | f 7} | d | d j ƒ  7} | d	 | d j ƒ  | d | | f 7} | d
 7} | d 7} q | d 7} | d | 7} | d | d j ƒ  7} | d | d j ƒ  | d | | f 7} | d | 7} | d 7} q W| d 7} | d 7} d | GHt | d ƒ }	 |	 j | ƒ |	 j ƒ  d  S(   NR6   i    i   Rf   s,   if exist StopThreadsGracefully goto veryend
s   cd %s
s,   title BLAST MR runs on %s\%s - %d out of %d
so   call phenix.python %%%%PHASER_DIST%%%%\phaser\BLASTrunner.py f %s 60 15 20000 Y P:\MTZ_files rdo20 1 8 Olga 10
s-   @echo BLAST MR run on %s, %s,   %d out of %d sM   returned %errorlevel% >> B:\Users\oeffner\HomologySearch\MRscriptresults.txt
s$   cd B:\Users\oeffner\HomologySearch

s0   if [ -f StopThreadsGracefully ]; then break; fi
sB   phenix.python $PHENIX/phaser/phaser/BLASTrunner.py b %s 4 Strider
s,   echo BLAST MR run on %s, %s,   %d out of %d s   returned $? >> %sresults.txt
s   cd $HOME/HomologySearch/

s	   :veryend
s   echo all over now

s   Writing out %s to disk.t   w(   RI   R   RM   R   t   writeR   (
   R   Rl   t   batfnamet   wint   mstrRs   t   totalRS   R2   t   blastmrfile(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/SCOPdistiller.pyt   MakeBatchFile¤  s8    
3

$(

(

	c      	   C   s  d } d } t  | d ƒ } | j ƒ  } | j ƒ  t | ƒ } t | ƒ }	 t j | ƒ d |	 GHd d d d d d d d g } t j ƒ  }
 |	 d } d } | } d } xt	 | ƒ D]\ } } | d 7} | | k rõ | d 7} | | d } d } n  | d d k rd } n0 | d j
 d ƒ d d | d j
 d ƒ d } t j j | | d j ƒ  ƒ } t j j | d	 | d j ƒ  d
 ƒ } t j j | ƒ r£d | | | d j ƒ  f GH| | c d | | f 7<| | c d | | f 7<| | c d | d j ƒ  7<| | c d | d |
 d t | d ƒ d 7<| | c d | | d j ƒ  | | f 7<| | c d 7<| | c d | d 7<| | c d |
 d 7<q² d | | d j ƒ  | f GHq² WxS t d d ƒ D]B } t  | t | d ƒ d d ƒ } | j | | ƒ | j ƒ  qÓWd  S(   NR6   i    R   s    Skimming through %d calculationsi   i   Rb   Rf   t   Striders   _DoneMRJobs.txts!   %d, Calculation %d on %s seems OKsF   title Extracting BLAST MR results from the %d. calculation out of %d 
s   if exist %s cd %s
s-   python %PHASER_DIST%\phaser\BLASTrunner.py d t    s   \Completeresultss   .db N
s$   @echo Results from %s, %s,  %d , %d s   returned %errorlevel% >> s;   E:\Users\oeffner\HomologySearch\GatherDBaseMRresults%d.txt
s   cd s   

s#   No results for the %d run on %s, %ss   .cmdR‹   (   R   R   R   Ry   RI   Rw   t   shufflet   ost   getcwdt	   enumerateR   t   patht   joinRM   t   existsRR   Ro   RŒ   (   R   t   pdbscopfnamet   getresbatfnamet   calcnameR�   Rs   R€   R%   Rl   R�   t   topdirt   calcs_in_filet   nt   eigthsRZ   RS   R2   t
   pdbcalcdirt   blastMRdonefilet   blastmrresfile(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/SCOPdistiller.pyt   CheckResultsFileÔ  sR    
	


		0'2* !c            s?  d ‰ d ‰ t  | d ƒ } | j ƒ  } | j ƒ  t | ƒ } t | ƒ } t j | ƒ d | GHd d d d d d d d g ‰ ‡  ‡ ‡ ‡ ‡ ‡ ‡ f d †  } t j ƒ  ‰ | d ‰ d ‰ ˆ }	 d ‰ xt	 | ƒ D]\ ‰ }
 ˆ d 7‰ ˆ |	 k rˆ d 7‰ ˆ ˆ d }	 d ‰ n  |  j
 |
 d j ƒ  ƒ } d } | d d d k red	 } | | | |
 ƒ 7} nT xQ | D]I } | d j d
 ƒ d d
 | d j d
 ƒ d } | | | |
 ƒ 7} qlW| d k  rÓ d ˆ |
 d j ƒ  f GHqÓ qÓ WxS t d d ƒ D]B ‰ t  | t ˆ d ƒ d d ƒ } | j ˆ ˆ ƒ | j ƒ  qõWd  S(   NR6   i    R   s    Skimming through %d calculationsc            sn  t  j j |  | d j ƒ  ƒ } t  j j | d | d j ƒ  d ƒ } t  j j | ƒ rfd ˆ ˆ | d j ƒ  f GHˆ ˆ c d ˆ ˆ f 7<ˆ ˆ c d |  |  f 7<ˆ ˆ c d | d j ƒ  7<ˆ ˆ c d ˆ  d ˆ d	 t ˆ d
 ƒ d 7<ˆ ˆ c d |  | d j ƒ  ˆ ˆ f 7<ˆ ˆ c d 7<ˆ ˆ c d ˆ d
 7<ˆ ˆ c d ˆ d 7<d
 Sd Sd  S(   Ni    R“   s   _DoneMRJobs.txts!   %d, Calculation %d on %s seems OKsF   title Extracting BLAST MR results from the %d. calculation out of %d 
s   if exist %s cd %s
s-   python %PHASER_DIST%\phaser\BLASTrunner.py d R”   s   \Completeresultsi   s   .db N N
s$   @echo Results from %s, %s,  %d , %d s   returned %errorlevel% >> s;   E:\Users\oeffner\HomologySearch\GatherDBaseMRresults%d.txt
s   cd s   

(   R–   R™   Rš   RM   R›   RR   (   t   foldidt   tpdbR£   R¤   (   Rž   R    Rs   RZ   R�   R¡   RŸ   (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/SCOPdistiller.pyt   writestrings  s    '2*i   i   i   Rb   Rf   s   No results for the %d run on %ss   .cmdR‹   (   R   R   R   Ry   RI   Rw   R•   R–   R—   R˜   Ra   RM   R   Ro   RR   RŒ   (   R   R|   R�   Rž   R€   R%   Rl   R�   R©   R¢   RS   t   scopidst   retR2   RD   R¥   (    (   Rž   R    Rs   RZ   R�   R¡   RŸ   sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/SCOPdistiller.pyt   CheckResultsFile2  sH    
	!


	0 !c         C   sØ  d } t  | d ƒ } | j ƒ  } | j ƒ  t | ƒ } t | ƒ }	 d |	 GHd } t j ƒ  }
 xIt | ƒ D];\ } } | d d k r� d } n0 | d j d ƒ d d | d j d ƒ d } t j	 j
 | | d j ƒ  ƒ } t j	 j
 | d | d j ƒ  d	 ƒ } t j	 j | ƒ rŠd
 | | d j ƒ  f GH| d | 7} | d | | f 7} | d | d | d d | 7} | d |
 d 7} qk d | | d j ƒ  | f GHqk Wt  | d d ƒ } | j | ƒ | j ƒ  d  S(   NR6   R   s    Skimming through %d calculationsi   Rb   Rf   i    R“   s   _DoneMRJobs.txts   Calculation %d on %s seems OKs1   title MLAD calculations from the %d. calculation
s   if exist %s cd %s
s>   call phenix.python M:\SourceFiles\Python\CalcTemplateMLADs.py R”   s   .pdb s   
cd s   

s#   No results for the %d run on %s, %ss   .cmdR‹   (   R   R   R   Ry   RI   R–   R—   R˜   R   R™   Rš   RM   R›   RŒ   (   R   Rœ   R�   Rž   t   sqlfnameR�   R€   R%   Rl   R�   RŸ   Rs   RS   R2   R£   R¤   R¥   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/SCOPdistiller.pyt   CheckResultsFile3P  s4    
		0' c         C   s™  d } t  | d ƒ } | j ƒ  } | j ƒ  t | ƒ } t | ƒ } d | GHd } t j ƒ  } x
t | ƒ D]ü \ }	 }
 |
 d j ƒ  } |
 d d k r  d } n0 |
 d j	 d ƒ d d |
 d j	 d ƒ d } t j
 j | | ƒ } t j
 j | d | d	 ƒ } t j
 j | ƒ rUd
 |	 | f GH| t | | |	 | | | | | | | | f 7} qk d |	 | | f GHqk Wt  | d d ƒ } | j | ƒ | j ƒ  d  S(   NR6   R   s    Skimming through %d calculationsi    i   Rb   Rf   R“   s   _DoneMRJobs.txts   Calculation %d on %s seems OKs#   No results for the %d run on %s, %ss   .cmdR‹   (   R   R   R   Ry   RI   R–   R—   R˜   RM   R   R™   Rš   R›   t	   formatstrRŒ   (   R   Rœ   R�   R�   R€   R%   Rl   R�   RŸ   Rs   RS   t   targpdbR2   R£   R¤   R¥   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/SCOPdistiller.pyt   CheckResultsFile4{  s0    
		0(   t   __name__t
   __module__R*   R+   R0   R3   R5   R   Ra   Re   Rm   Rt   Rv   Rˆ   RŠ   R   R’   R¦   R¬   R®   R±   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/SCOPdistiller.pyR    )   s$   	=					@	"@"0	:	B	+(    (   R   Rw   R–   R¯   R    (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/SCOPdistiller.pyt   <module>   s   $%