ó

šxTc           @   s  d  d l  Z  d  d l Z d  d l Z d  d l Z d  d l m Z m Z d  d l m Z d  d l m	 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 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 m 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" Z" d  d l m# Z# d  d l$ Z$ d  d l% Z% d  d l& Z& d  d l' Td „  Z( d a) d e* f d „  ƒ  YZ+ d e j, f d „  ƒ  YZ- d d d „  ƒ  YZ. d S(   iÿÿÿÿN(   t   proxiest   homology(   t   sculptor(   t   AlterOriginSymmate(   t   pdb(   t   reflection_file_converter(   t   xtriage(   t
   cif_as_mtz(   t   seq_sequence_parse(   t   SimpleFileProperties(   t   bioinformatics(   t   *c         C   s   t  |  ƒ }  t j d |  ƒ S(   Nt	   file_name(   t   RecaseFilename2R   t   input(   t   pdbfname(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTnMRfunc.pyt   openpdb$   s    t    t   BLASTrunnerExceptionc           B   s   e  Z RS(    (   t   __name__t
   __module__(    (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTnMRfunc.pyR   ,   s   t   MyFormatterc           B   s   e  Z d  „  Z RS(   c         C   s�   t  t j ƒ  ƒ } t d | d ƒ } d } x! t d | ƒ D] } | d } q; W| j t j k rm d |  _ n | d |  _ t j	 j
 |  | ƒ S(   Ni    i
   R   t    s   %(levelname)s: %(message)ss   %(message)s(   t   lent	   tracebackt   format_stackt   maxt   ranget   levelnot   loggingt   WARNt   _fmtt	   Formattert   format(   t   selft   recordt   indentlevelt   indentst   i(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTnMRfunc.pyR!   1   s    (   R   R   R!   (    (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTnMRfunc.pyR   0   s   t   BLASTrunnerc           B   sC  e  Z d  Z e e d „ Z d „  Z d „  Z e d „ Z d „  Z	 e d „ Z
 d „  Z d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d d „ Z d „  Z d „  Z d „  Z d „  Z d „  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! „  Z$ d" „  Z% RS(#   sF   Pickup user specific settings before running BLAST and MR calculationsc         C   sŸ  | |  _  t j j | ƒ |  _ | |  _ | |  _ | |  _ | |  _ | |  _	 | |  _
 d |  _ d |  _ | |  _ | |  _ t |  _ d |  _ d |  _ t g  ƒ |  _ d |  _ d g |  _ | d  k rÏ | |  _ n  t |  _ d |  _ d |  _ d |  _ d |  _ t |  _ d |  _ t |  _  t |  _! d |  _" d |  _# t |  _$ d  |  _% |
 |  _& |	 |  _' t j( j) d	 k rtt |  _ n  t* j+ d
 t* j, t* j- Bt* j. Bƒ |  _/ t* j+ d t* j, t* j- Bt* j. Bƒ |  _0 t* j+ d t* j, t* j- Bt* j. Bƒ |  _1 t* j+ d t* j, t* j- Bt* j. Bƒ |  _2 t* j+ d t* j, t* j- Bt* j. Bƒ |  _3 t* j+ d t* j, t* j- Bt* j. Bƒ |  _4 t* j+ d t* j, t* j- Bt* j. Bƒ |  _0 t* j+ d t* j, t* j- Bt* j. Bƒ |  _5 t* j+ d t* j- t* j6 Bƒ |  _7 t* j+ d t* j- t* j6 Bƒ |  _8 t* j+ d t* j- ƒ |  _9 t* j+ d t* j- ƒ |  _: |  j t j j; d t j j; |  j' d |  _< t= ƒ  |  _> t? j@ d ƒ |  _A t= ƒ  |  _B tC |  jA jD ƒ d k rÅt? jE ƒ  } | jF |  jB ƒ |  jA jG | ƒ |  jA jH t? jI ƒ n  |  j' d k r›t j jJ |  j d d d ƒ |  _K t j jL |  jK ƒ t k r5d t jM k r5t jM d |  _K q5n  tN jN t j jJ |  jK d ƒ t j jJ |  jK d ƒ t j jJ |  jK d ƒ t j jJ |  jK d ƒ ƒ |  _O n  d  S(   Ni2   i0   s   @192.168.102.50s   @ulysses.private.cimr.cam.ac.uki    R   s   superposition.logt   1t   win32s   RFZ=([-+]?[0-9]*\.?[0-9]+)s   TFZ=([-+]?[0-9]*\.?[0-9]+)s   LLG=([-+]?[0-9]*\.?[0-9]+)s   PAK=([-+]?[0-9]*)s   \*T=([-+]?[0-9]*\.?[0-9]+)s   TFZ==([-+]?[0-9]*\.?[0-9]+)s-   ^ \s+ Wilson \s+ B-factor:\s+ ( -? \d+\.\d* )s*   ^ \s+ Wilson \s+ Scale:\s+ ( -? \d+\.\d* )s2   ^\s+Most probable VM for resolution = (-?\d+\.\d*)s1   \r*\nCPU Time: [^\n]* \(\s*(\d*\.\d*) secs\)\r*\nt   Phaserinputs	   input.txtt   rdo20s   ..t   SCOP_MRt   SCOPDIRs   dir.des.scop.txts   dir.cla.scop.txts   PDBsXray1chainASUto2.5A.txts   All_PDB.txt(P   t   targetpdbidt   ost   patht   abspatht	   topfoldert   sshcmdt   sshflagt   scpcmdt   useridt	   mtzfoldert	   phaserexet   nmaxsolst	   fmaxhourst	   superposet   clustalwt   Falset	   osdepboolt   srsPCt   blastPCt   sett
   pdbnamesett
   nuniqueseqt   errorcodesumt   Nonet   Truet   writeBLASTxmlt   SCOPtxtt   superposelogfnamet   sculptprotocolt   targetscatteringt   busecurrenttmplt   resolutionst   buseIntensitiest   refinevrmsdefaultt	   obsoletest   pretextt   useuniquesequencet   mydbt   passwdt	   calclabelt   syst   platformt   ret   compilet   DOTALLt	   MULTILINEt
   IGNORECASEt   RFZrecmpt   TFZrecmpt   LLGrecmpt   PAKrecmpt   TEMPLLLGrecmpt
   Tstarrecmpt   TFZequivrecmpt   VERBOSEt   WILSON_Brecmpt   WILSON_Scalerecmpt   MATTHEWCOEFrecmpt   CPUtimerecmpt   sept   baseinputfnameR   t	   logformatR   t	   getLoggert   loggert	   formatterR   t   handlerst   StreamHandlert   setFormattert
   addHandlert   setLevelt   DEBUGt   joint   scoppatht   existst   environt   SCOPdistillert   scopobj(   R"   R.   R3   R5   R6   R7   R8   R<   t   superposeexeRU   RT   R4   t	   errorcodet   handler1(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTnMRfunc.pyt   __init__I   sž    																																										/!c         C   sª   z¢ yv t  j j | ƒ t k rQ |  j j t j d t j	 | ƒ ƒ t  j
 | ƒ n' |  j j t j d t j	 | ƒ d ƒ Wn% t k
 r  } t |  _ | |  _ n XWd  d  SX(   Ns   creating folder: s   Folder s    already exists(   R/   R0   Rw   R=   Rm   t   logR   t   INFOt	   posixpathR1   t   makedirst	   ExceptionRF   t   failuret   message(   R"   t
   folderpatht   m(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTnMRfunc.pyt   MakeMyfolder©   s     #+	c         C   s)  | d  } | | j  ƒ  d } t j j | ƒ t k rT |  j j t j d | ƒ | Sd | j  ƒ  d } |  j j t j d | ƒ |  j	 d |  j
 |  j | f d | g } |  j d	 k rà | j d
 |  j ƒ | j d
 d ƒ n  t | ƒ } |  j j t j d t j | ƒ ƒ t j | d |  j d t j ƒj ƒ  d t j j | | ƒ r¨|  j j t j d | | ƒ t j | | d ƒ } | j ƒ  }	 | j ƒ  t j | ƒ n= |  j j t j d | ƒ t j d | d ƒ }
 |
 j ƒ  }	 |  j j t j d | ƒ t | d ƒ } | j |	 ƒ | j ƒ  | S(   Ni   s   .pdbs   %s already presentR   s   .ent.gzs   Fetching pdbfile %ss+   %s%s:/srs/srs/data/pdbcurrent/pdbcurrent/%ss   %s.R   i   s   -pws   Executing command: t   shellt   stdouti    s
   Unpacking t   rbs1   pdbfile %s is not present. Trying RCSB instead...s   http://www.pdb.org/pdb/files/s   Writing t   w(   t   lowerR/   R0   Rw   RF   Rm   R   R   R€   R5   R6   R?   RT   t   insertt   tuplet
   subprocesst   list2cmdlinet   PopenR>   t   PIPEt   communicatet   gzipt   GzipFilet   readt   closet   removet   urllib2t   urlopent   opent   write(   R"   t	   subfoldert
   modelpdbidt   pdbidR   t   fnamet
   lstcommandt   commandt   fileObjt   pdbtextt   ut   fileout(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTnMRfunc.pyt   FetchPDBfile»   s<    
 #)

c      
   C   sE  |  j  j t j d | t | ƒ f ƒ | t k ri|  j d |  j |  j f d d d d d d | d	  g } |  j	 d
 k r  | j
 d |  j	 ƒ | j
 d d ƒ n  |  j d  k rÅ | j
 d |  j ƒ n  t | ƒ } |  j  j t j d t j | ƒ ƒ t j | d |  j d t j ƒj ƒ  d } | j d ƒ d k  rD|  j | t ƒ St j d t j d | ƒ d ƒ } n5 t j d | d	  ƒ } | j ƒ  } t j d | ƒ } t | ƒ d	 k rät | ƒ d k rät | ƒ d k rät d | ‚ n  d
 } t | ƒ d	 k r| } nÙ t | ƒ d k r*| d j ƒ  }	 n  t | ƒ d k rO| d j ƒ  }	 n  xŒ t  d t | ƒ ƒ D]u }
 | t k rª| |
 d j ƒ  |	 j ƒ  k rÚ| |
 g } qÚqe| |
 d j ƒ  |	 j ƒ  k re| |
 g } qeqeW| d
 k rt d |	 | d	  f ‚ n=x6| D].} t! | ƒ d d j" } t j d | t j# t j$ Bƒ } t | ƒ d k r| t k r|  j  j t j% d | ƒ |  j | t ƒ } g  } xo | D]g } t! | ƒ d d j" } t! | ƒ d d j& } | d } | j' d | d	  d | d | d ƒ qžW| S|  j( d c d 7<t d  | | | f ‚ qqW| Sd  S(!   Ns   PDB2SeqLocal(%s, %s)s   %s%ss   (source /etc/profile; getzs   -ft   seqs   -sft   fastas   '[pdbcurrent:%s]')i   R   i   s   -pws   Executing command: R‰   RŠ   i    t   >s   >[^>]*s"   Welcome to SRS 8.1.1 -------------iÿÿÿÿs7   http://www.pdb.org/pdb/files/fasta.txt?structureIdList=i   i   s   Is %s supposed to be a pdbid?!i   i
   s.   Could not find sequence for chain %s in pdb %ss   [xzbju]s=   Found illegal letters %s in the sequence. Trying RCSB insteadt   _Chains   
s-   Illegal letter, %s, in the sequence
%s
for %s()   Rm   R   R   R€   t   strRF   R3   R6   R?   RT   RŽ   R4   RE   R�   R�   R‘   R’   R>   R“   R”   t   findt   PDB2SeqLocalR=   RX   t   findallt   splitRš   R›   R—   R   R   t   upperR   R   t   sequenceR[   R\   R   t   namet   appendRD   (   R"   t
   pdbchainidt
   uselocalDBR¢   R£   t   fastastrt   tR¦   R³   t   chainidR&   t   chainseqt   rawseqR‡   t   newseqt   newsequencet   newchainseqR©   R´   t   chainlbl(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTnMRfunc.pyR¯   æ   sn    &#%6	  
-c   "      C   sý  |  j  |  j ƒ } g  } x² | D]ª } d t | ƒ GHt | ƒ d d j } t | ƒ d d j } | j d ƒ d k r• t | ƒ d d j d } n! t | ƒ d d j j ƒ  d } | j | | g ƒ q W|  j	 rõg  }	 |	 j d d g ƒ x¤ t
 d t | ƒ ƒ D]� }
 t } xd t
 d t |	 ƒ ƒ D]M } | |
 d |	 | d k r't } |	 | d | |
 d |	 | d <q'q'W| s|	 j | |
 ƒ qqW|	 j d d g ƒ |  j j t j d |  j ƒ |  j j t j | ƒ |  j j t j d	 ƒ n | }	 |  j j t j |	 ƒ |  j j t j d ƒ | j |	 ƒ t |	 ƒ |  _ g  } x­|	 D]¥\ } } |  j ræ|  j |  j |  j d
 g } |  j d k r¶| j d |  j ƒ | j d d ƒ n  |  j d  k rÛ| j d |  j ƒ n  t | ƒ } |  j j t j d t j | ƒ ƒ t  j! | |  j" ƒ } d g } | j# d d d d d | d | d d d | ƒ |  j j t j | d ƒ | j$ d d ƒ } | j d ƒ } | d k rª| | } n  d |  j | f } t% | d ƒ } | j& | ƒ | j' ƒ  n( d |  j | f } t% | d ƒ j( ƒ  } t) j* ƒ  } | | ƒ } | j+ j, } t | j+ j- d j. ƒ } |  j j t j d | | f ƒ x‡ | j+ j- d j. D]r } | j/ d j0 } | j/ d j1 } | j2 } | j1 }  d t3 | d ƒ t4 |  | ƒ }! | j | |! g | g ƒ qWqPW| S(   Ns
   chainseq= i    s   |PDBID|CHAIN|SEQUENCEiÿÿÿÿi   R   i   s   Sequence list for %s is:s%   Omitting duplicate sequences we have:s$   /srs/blast/blast-2.2.20/bin/blastalls   -pws   Executing command: t   programt   blastpt   databases   /srs/srs/data/blast/pdbaat   queryt
   maxresultst   expectationiè  t   pcmdstrt   jobids   <?xmls   %s_%s_blast.xmlRŒ   t   rs   Chain %s yields %d BLAST hits
s   %4.3fid   (5   R¯   R.   R­   R   R³   R´   R®   t   rstripRµ   RR   R   R   R=   RF   R™   Rm   R   R   R€   t   extendRC   RG   R3   R6   R?   RT   RŽ   R4   RE   R�   R�   R‘   R    t   NCBIBlastStandaloneR>   t   submitt   resultsRœ   R�   R˜   R—   R   t   get_ncbi_blast_parsert   roott	   query_lent
   iterationst   hitst   hspst   identityt   lengtht	   accessiont   floatt   min("   R"   t   maxpdbst   uniquetargetchainsR³   t   untitledseqR»   R¼   t   preamblet
   chainlabelt	   uniqueseqR&   t   founditt   jt   myidsRº   R©   R¢   R£   t   myproxyt   blastcmdstrt   xmldatat   nR¡   R§   t   myparserRÎ   t	   seqlengthRÖ   t   hitRÕ   t	   align_lent   hit_accessiont
   hit_lengtht   seqid(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTnMRfunc.pyt   GetLocalBLASTHomologues@  sŒ    !	)	#	 		!!c   	      C   sI  | | k  s< | d k  s< | d k  s< | d k s< | d k rh t  d ‚ |  j j t j d ƒ t d ƒ n  | d  k r} g  } n  |  j | | ƒ } g  } |  j j t j d ƒ x—t	 d t
 | ƒ ƒ D]€} |  j | | d ƒ } t | | d d ƒ | k rt | | d d ƒ | k rt | ƒ d k r\|  j j t j d | | d d	  d
 ƒ qÁ n  t | ƒ d k  r¢|  j j t j | | d d	  d | d ƒ qÁ n  |  j j t j | | d d	  d | d | | d d | | d f ƒ | j | | ƒ qÁ |  j j t j d | | d | | d d | | d f ƒ qÁ W| S(   Ni    id   s(   Check values of maxseqid and/or minseqidi*   u(   BLAST sequence identities of models are:i   g        s   The i   sK    entry isn't present in the resolution.txt file. Grab the latest from RCSB!s    at u;    Ã… was not determined from crystallography and is ignored.u-    Ã…, seqid: %s target chain: %s is consideredi   s(   %s seqid: %s, target chain: %s is binned(   R   Rm   R   R   t	   EXCEPTIONt   exitRE   Rî   R€   R   R   t   GetResolutionRØ   R   Rµ   (	   R"   t   maxseqidt   minseqidRÚ   t   uniquechainsRâ   t   selectedpdbsR&   t   resol(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTnMRfunc.pyt$   GetPDBidsFromPDBLocalWithSequenceIds¯  s4    <		<"=1c         C   s“  |  j  | ƒ } |  j j t j d ƒ g  } t d | ƒ } xRt d t | ƒ ƒ D];} | }	 | | }
 x"|
 | k rŠd } t } xï | t k rr| t | | ƒ k  rrt	 | | | d d ƒ |	 k rt	 | | | d d ƒ |
 k  r| j
 | | | ƒ t } n  | d } | t | | ƒ k r„ | t k r„ |  j j t j d d |	 |
 f d | | d d ƒ q„ q„ W|	 | }	 |
 | }
 qi WqP W| S(	   Ns-   Purging models with similar sequence identityg      ð?i    i   s   No model found withins    %d%% and %d%%s    seq identity for chain %s i   (   t   PutPDBsInChainIdBinsRm   R   R   R€   R   R   R   R=   RØ   Rµ   RF   (   R"   Rõ   Rò   Ró   t   myinct   binst   evenlyspreadt   incRæ   t   imint   imaxR&   t   found(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTnMRfunc.pyt%   RemovePDBsWithSimilarSeqIdentFromList×  s*    
%D	
"0
c         C   sÈ   g  } t  d d d d d d d d d	 d
 d d g ƒ } |  j | k re |  j j t j d |  j ƒ n  xV | D]N } | d d  j ƒ  | k rœ | j | ƒ ql |  j j t j d | d ƒ ql W| } d  S(   Nt   1BEFt   1CMWt   1DF9t   2QIDt   1G40t   1G44t   1L6Lt   2OU1t   1RIDt   1Y8Et   2A01t   2HR0s   %s is a condemned structure!i    i   s"   Structure %s has been quarantined.(	   RA   R.   Rm   R   R   t   CRITICALR²   Rµ   R€   (   R"   t
   pdbsseqidst   approvedPDBst   condemnedPDBsR   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTnMRfunc.pyt   RemoveQuarantinedPDBsÿ  s     "c         C   s$  d } | d  j  ƒ  } y¾|  j d k rT t |  j t j j d d ƒ j ƒ  |  _ n  |  j j | d  j  ƒ  d ƒ } | d k r|  j j d | ƒ } t	 j
 d | d  j  ƒ  d	 |  j | | !t	 j ƒ } | d  k rt | j ƒ  ƒ d
 k r| j d ƒ } qn  |  j d k r<t |  j t j j d d ƒ j ƒ  |  _ n  |  j j | d ƒ } | d k  r{|  j j t j d | ƒ | S|  j j d | ƒ } t	 j
 d | d |  j | | !t	 j ƒ } d t | j d ƒ ƒ } WnI t k
 r} |  j d c d 7<|  j j t j d | ƒ t | ‚ n X| S(   Ns   0.0i   R   s   obsolete.txtRÉ   i    s   
t   (s   )\s+([A-Za-z0-9]+)i   i   s   resolution.txts-   No resolution found in resolution.txt for %s.s   \s;\s)([-+]?[0-9]*\.?[0-9]+)s   %3.2fi   s   No resolution found in %s.pdb(   R²   RP   Rœ   Rv   R/   R0   Ri   R—   R®   RX   t   searchR[   RE   R   t   groupst   groupRM   Rm   R   R   R   RØ   Rƒ   RD   R   (   R"   R    t
   resolutiont   validpdbR‡   Ræ   t   matcht   e(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTnMRfunc.pyRñ     s6    ,$,c         C   s"   |  j  d k r d |  j  d Sd S(   NR   t   sculptt   _(   RJ   (   R"   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTnMRfunc.pyt
   sculptprotE  s    c   $      C   sg  t  | ƒ } g  } x | D] } | j | d ƒ q Wd j | ƒ } g  } x | D] } | j | d ƒ qP Wd j | ƒ } t j j |  j d | ƒ }	 t j d | |  j d | d ƒ }
 |
 d } t j j | ƒ rù |  j	 j
 t j d | | f ƒ t S|  j |	 ƒ |  j	 j
 t j d | ƒ |	 t j j |  j | d	 } t | d
 d ƒ } | j d ƒ d } y*xÄ | D]¼ } | d } | d d } | d d d } |  j | | d ƒ } t j | |  j ƒ } | j d | | | f ƒ xD | d D]8 } | d } | d } | d | d | d | } qïWqoW| j d | ƒ | j d |
 d ƒ | j ƒ  t j |  j | |  j d d |  ƒ } |  j	 j
 t j d ƒ | j |	 ƒ } |  j d c | j 7<t |
 d d ƒ } | j | ƒ | j ƒ  t | d ƒ } | j ƒ  } | j ƒ  | j d d ƒ } | | } |	 t j |  j d | d } t | d ƒ } | j d | ƒ | j ƒ  |  j	 j
 t j d  | ƒ WnO t k
 rà} |  j d c d 7<|  j	 j
 t j d! | d t | ƒ ƒ t SXt j  ƒ  }  t j! |	 ƒ t" j" d" ƒ }! |! }" x. t# d t$ |" ƒ ƒ D] }# t j% |" |# ƒ q%Wt j! |  ƒ |  j	 j
 t j d# ƒ t S($   Ni    t   ,t   TemplateSolutionss   RNP{s   }.superposeds   .sols?   Not making template solution %s as it was already created as %ss:   Refining superposed search model(s) %s on target structuret   _quickRNPinputs   .txtRŒ   s1   MODE MR_RNP
MACMR ROT ON TRA ON BFAC OFF VRMS ON
R   i   i   i   s!   ENSEMBLE %s  PDB %s  IDENTITY %s
s   SOLU 6DIM ENSE s     EULER %2.3f %2.3f %2.3f s$     ORTH %2.3f %2.3f %2.3f  BFAC 0.00
s   
SOLU SET Superposed
s   ROOT s   
t   RNPs   Now refining superposed models   .logRÉ   s   SOLU 6DIM ENSEs	   template{s   }.txts   SOLU TEMPLATE
s:   Eulers and fractionals from refinement of superposition: 
s   Problem refining s   *.mtzs&   Done DoQuickRefinementOfSuperposition
(&   t   sortedRµ   Ru   R/   R0   R2   R�   RU   Rw   Rm   R   R   R€   RF   Rˆ   Ri   Rœ   R�   t   GetSculptFnamet   relpathR˜   t   BLASTphaserthreadt   PhaserRunnerRj   t	   PhaserRunRD   R—   R®   Rƒ   t   ERRORR­   R=   t   getcwdt   chdirt   globR   R   R™   ($   R"   t   searchmodelst   sortedmodelst   sortednamest   sortedmodelt   sortedmodelnamet	   modelnamet   modelt
   modelsnamet   templfoldert   RNProotnamet   RNPsolfnamet   rnpfnameprefixt   RNPinputfilet   solstrt   targetpdbchainidRí   t   ensnameR   t   ncscopyt   eulert   orthot   myphasert	   stdoutputt   phaserlogfilet
   RNPsolfilet   RNPsolRæ   t	   solutionst	   tmplfnamet   templatefileR‡   t   olddirt   mtzst   delfR&   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTnMRfunc.pyt    DoQuickRefinementOfSuperpositionJ  s’    



&



 
(c   
      C   s  g  } g  } g  } xA | D]9 } | j  | d ƒ | j  | d ƒ | j  | d ƒ q W|  j j t j d d j | ƒ ƒ x� | D]y } g  } xj | D]b }	 | j  |	 ƒ |  j | ƒ t k r“ |  j j t j d d j | ƒ ƒ |  j	 d c d 7<t Sq“ Wq€ Wt
 S(   Ni    i   i   s   
PrepareTemplateSolutions(%s)R  sf   
PrepareTemplateSolutions(%s) failed.
No MR calculations with this combined model will be carried out.(   Rµ   Rm   R   R   R€   Ru   RI  R=   R   RD   RF   (
   R"   R+  t   permutationsR1  R9  Rí   t   pdb_idt   permutedmodelst   lmodelt   lmodels(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTnMRfunc.pyt   PrepareTemplateSolutions·  s&    R   c      	   C   sƒ  |  j  j t j d | | | f ƒ t j j | ƒ t k rW t t j j	 | ƒ d ‚ n  t j j | ƒ t k r‹ t t j j	 | ƒ d ‚ n  |  j
 | | d | d | d  d | f } | d k rü |  j
 t j | ƒ t j | ƒ t j | d  d ƒ f } n  |  j  j t j d	 ƒ |  j  j t j t j | ƒ ƒ t j | ƒ d
 t j | d |  j d t j ƒj ƒ  d } d t | ƒ GH|  j d |  _ t |  j d ƒ } | j | ƒ | j ƒ  yWt j d d d | ƒ } g  } | j | j ƒ  d d !ƒ | j | j ƒ  d d !ƒ | j | j ƒ  d d !ƒ | j ƒ  d | j ƒ  d | j ƒ  d f }	 g  | D] }
 t |
 ƒ ^ qZ} g  |	 D] }
 t |
 ƒ ^ qy} t j  j! | ƒ } g  | D] }
 t" t |
 ƒ d ƒ ^ qª} |  j  j t j d t | ƒ ƒ |  j  j t j d t | ƒ ƒ Wn^ t# k
 rl} |  j  j t j$ d | ƒ d d d g } d d d g } |  j% d c d 7<n Xt& | ƒ t& | ƒ f S(   Ns7   GetEuler_and_Translation_of_Model_to_Target(%s, %s, %s)s    doesn't exists   -ss   -oiüÿÿÿs   _superposed_%s.pdbR   s   _superposed.pdbs   Executing command:s   
R‰   RŠ   i    s	   command= s   superposition.logRŒ   s   Rx\s+Ry\s+Rz\s+T\r*\ns   \s+(-?\d+\.\d+)i   i   i   i   i   i   s   model-target Euler angles are: s(   model-target orthogonal translation is: s   Problem with superpose:
%sg        i   ('   Rm   R   R   Rt   R/   R0   Rw   R=   R   R1   R;   R�   R#  R€   R�   R‘   R’   R>   R“   R”   R­   RU   RI   Rœ   R�   R˜   RX   R  RË   R  RØ   t   scitbxt   matht   euler_angles_zyz_anglest   RoundoffRƒ   R'  RD   R�   (   R"   t   modelpdbfnamet   targetpdbfnameR9  R£   t   outputt   soutputR  t	   strmatrixt   strtranst   st	   rotmatrixt
   orthotranst   eult   euleranglesR‡   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTnMRfunc.pyt+   GetEuler_and_Translation_of_Model_to_TargetÕ  sN    <
-( 	$c         C   s3  |  j  j t j d | | d f ƒ t t j |  j d | d  d | d d ƒ d ƒ } | j ƒ  } | j	 ƒ  ygt
 j j d	 ƒ t k rÖ | d
 |  j | d ƒ d d
 } t d	 d ƒ } | j | ƒ | j	 ƒ  n |  j  j t j d ƒ t
 j j d ƒ t k rh|  j d d d f } |  j  j t j d t j | ƒ ƒ t j | d |  j d t j ƒj ƒ  d n |  j  j t j d ƒ | d d  d }	 d |  j d d |	 d d | d d d t |  j ƒ g }
 |  j  j t j d t j |
 ƒ ƒ t |  j d d ƒ } d d l m } | j d  t j ƒ } t j  g  |
 D] } | | ƒ ^ q7| d! t j! ƒd" |  j d# | d d  d# |  j d } t" | ƒ } | j# ƒ  } | j$ ƒ  d j% ƒ  d j& ƒ  d j' ƒ  } | j$ ƒ  d j% ƒ  d j& ƒ  d j' ƒ  } d$ | d <d } x+ | d t( | ƒ |  j) k r1| d% 7} qW| d k rY| d t( | ƒ | d <n  d& | | f | d <|  j) j* | d ƒ t
 j j+ |  j, | | d ƒ ƒ } t
 j j | ƒ rÅt
 j- | ƒ n  t
 j. | | ƒ WnR t/ k
 r*} t0 |  _1 | |  _2 |  j  j t j3 |  j2 ƒ |  j4 d c d% 7<d$ SX| Sd  S('   Ns   TrimModel(%s, %s)i    R*   i   R¬   i   s   .seqRÉ   s   clustinput.txts   
RŒ   s   clustinput.txt already presents	   clust.alns   -INFILE=clustinput.txts   -ALIGNs   -OUTFILE=clust.alns   Executing command:R‰   RŠ   s   clust.aln already presents   .pdbs   output.root = tmps   renumber.use = originals   input.model.file_name = %ss%   input.alignment.file_name = clust.alns"   input.model.selection = chain '%s's   macromolecule.protocols=%ds   Sculptor.run: %s
s   sculptor.logiÿÿÿÿ(   t	   tbx_utilst   master_philt   setupt   tmpR  R   i   s   {%d-%d}(5   Rm   R   R   Rt   Rœ   R�   Ru   R2   R—   R˜   R/   R0   Rw   R=   R¯   R�   R€   R<   R�   R‘   R’   R>   R“   R”   RU   t   intRJ   t   phaserR`  t   PhilArgumentFactoryR   t   PHIL_MULTIPROTOCOL_MASTERt   runt   SETUP_MULTIPROTOCOLR   t   construct_hierarchyt   modelst   chainst   residue_groupst   resseq_as_intR­   RB   t   addt   basenameR"  R™   t   renameRƒ   RF   R„   R…   R'  RD   (   R"   R9  t
   pdbs_seqidt   residuenumberst   targetseqfilet   targseqt	   sequencesR§   R£   t
   modelfnamet	   sculptargt   fhR`  t   factoryt   argt   tmpfnamet   mypdbRÐ   t   firstrsdt   lastrsdt   snt   sculptfnameR‡   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTnMRfunc.pyt	   TrimModel!  sj    $#
#	#,
#(
,**
 "		c         C   s€  |  j  j t j d | ƒ | d } |  j d | t j | d t j } |  j | ƒ t j	 ƒ  } t j
 | ƒ |  j d t j | d ƒ } d g } |  j |  j d | d | | ƒ } t j j | ƒ s |  j  j t j d | d d ƒ t j
 | ƒ t St t j j d	 ƒ d
 ƒ j ƒ  } t j }	 |	 | ƒ d }
 d |
 j ƒ  d | d d <t | ƒ } t j | ƒ \ } } t j j |  j ƒ t j j |  j d } |  j  j t j | ƒ d | |  j } | d j | ƒ t j | | | d ƒ } | d j t | d d d ƒ ƒ |
 j  ƒ  } | d j | ƒ | d d } | d j t! | ƒ ƒ g  } t" | ƒ } g  } d | d } xÒ t# d | ƒ D]Á } |  j$ | | | | ƒ } | d d d k r| d d d k r| d d d k r|  j  j t j d | d d ƒ t j
 | ƒ t S| j | ƒ | j | | | d | | d f ƒ qŒW| j | ƒ | j | d ƒ t j
 | ƒ t% S(   Ns   
PreparePartialModel(%s)i   R  i    t   .R   s   There's an issue with s1   . No MR calculation will be done with that model.s	   clust.alnRÉ   s   %4.3fg      Y@i   s   .pdbi   i   t   MR_g        s   Superpose has an issue with (&   Rm   R   R   R€   R.   R�   Ri   Rˆ   R/   R(  R)  R¨   R‚  R0   Rw   R   R=   Rœ   Ru   R—   R
   t   clustal_alignment_parset   identity_fractionR   R	   t   GetScatteringOfModelInPDBfileR1   R2   RK   Rµ   t   GetSSMSequenceIdentityRS  t   shortest_seqlenRd  R   R   R_  RF   (   R"   Rr  R9  t   modeldirRF  Rw  Rs  t   sculptedpdbt   myalignmentt   clustparsert   clustalnt   modelscatteringt   mstrRU  t   modelcompletenesst	   SSMSeqIDst   clustalalignlent   ssmalignlent   euler_orthot
   samechainst   superpositiont   ensemblenameR&   t   eulerorthos(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTnMRfunc.pyt   PreparePartialModels  sb    
'	!	*"	<*c         C   sH  |  j  d } t j |  j |  j d | | d  | | d ƒ } t j j t | ƒ ƒ t	 k r’ t j |  j |  j d | | d  | | d ƒ } n  d } t j j t | ƒ ƒ t	 k rë t j |  j |  j d | | d  | | d ƒ } n  t j j t | ƒ ƒ t	 k r>t j |  j |  j d | | d  | | d ƒ } n  t | ƒ S(   Nt   sculpt_R  i   s   _singlechain.pdbs   .pdb(
   RU   R�   Ru   R2   R.   R/   R0   Rw   R   R=   (   R"   t   targetchainidt   modelpdbidchainidt   prefixR‹  (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTnMRfunc.pyR"  ¾  s     ))c   "      C   s«  g  } x | D] } | j  | d ƒ q Wd j | ƒ } |  j j t j d | ƒ |  j t j d t j | } |  j	 | ƒ d } d } d } d }	 g  }
 x¤ | D]œ } d | d } |  j
 | d | d ƒ } t j j | ƒ t k r|  j j t j d | ƒ n  | d	 | d
 t j | |  j ƒ d | d d d } q¢ Wg  } g  } xV| D]N} d | d } t | d ƒ } d | | f }	 | j  | d ƒ g  } t | ƒ } x | D] } | j  | ƒ q³Wd j | ƒ } t j |  j d | ƒ } t j | |  j d | d ƒ } d } t j j | ƒ t k rHt | d ƒ j ƒ  } n |  j j t j d | ƒ qU|  j j t j d | ƒ d } t | d  ƒ d k rø|  j r*d } xH| d  D]n } d | } t j d | d | t j ƒ } t j d | d | t j ƒ } | | d d | d d 7} qµWqød j t | d  ƒ ƒ } t j |  j d | ƒ } t j | |  j d | d ƒ } t j j | ƒ t k r¾t | d ƒ j ƒ  } | j d d ƒ } n |  j j t j d | ƒ qU|  j j t j d | ƒ n  d j | ƒ } d } t j | |  j d | d ƒ }  t |  d ƒ }! |! j | | |	 | | d ƒ |! j ƒ  |  j j t j |  d | | |	 | | ƒ | j  | ƒ qUW| S(    Ni    R  s    Preparing MR AUTO for models %s t   MRR   R„  i   s   Couldn't find %s s	   ENSEMBLE s    PDB s     IDENTITY i   s   
s   SEARCH ENSEMBLE %s NUM %d
R  s	   template{s   }.txtRÉ   s   Using template solution: %siÿÿÿÿs	   SOLU SET
s   SOLU 6DIM ENSE.+s   \s+.+s   SOLU ENSE.+s   SOLU TEMPLATEs   SOLU SETs   Using partial solution: %ss‘   
ELLG USE OFF
#MACMR ROT ON TRA ON BFAC OFF VRMS ON
RESOLUTION HIGH 2.5
RESOLUTION AUTO HIGH 0.0
MODE MR_AUTO
SEARCH ORDER AUTO OFF
            
s   modelinput{RŒ   s    :
(   Rµ   Ru   Rm   R   R   R€   R2   R�   Ri   Rˆ   R"  R/   R0   Rw   R=   R   R#  R   R!  RU   RF   Rœ   R—   RL   RX   R°   R[   t   replaceR�   R˜   ("   R"   R+  t   workdirRK  t	   modelsdirt	   mdlfoldert   templatestrt   partstrt   ensemblestrt	   searchstrRk  R  R˜  R‹  t   templmodelst   modelinputsR–  t	   templatest   sortedtemplmodelst   templatenamet   fulltemplatedirt   templatefnamet
   templmodelR:  t	   coordstrst   soluensstrst   partsolnamet   fullpartsoldirt   partialfnamet   tmpstrR2  t   modestrRw  t   modelinputfile(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTnMRfunc.pyt   PrepareInputFilesÖ  s–    =
			
%			
c         C   s€   t  |  j j ƒ d k r| t j | d d ƒ} | j |  j ƒ |  j j | ƒ |  j j t j	 ƒ |  j j
 t j |  j ƒ n  d  S(   Ni   t   encodings   UTF-8(   R   Rm   Ro   R   t   FileHandlerRq   Rn   Rr   Rs   Rt   R   R€   RQ   (   R"   t   logfnamet   handler(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTnMRfunc.pyt   SetupLogfileO  s    c         C   s¥   d } d } d } d } d } d } d } | d k  r? d	 } n  t  | ƒ } d
 d
 | | }	 d
 | |	 | |	 | |	 | |	 | |	 t j | | ƒ }
 | |
 S(   Ng~ZìÆ OÐ?gi<Ì15Ò¿gWáºU¾ö?g9LW@÷¿g-¡UB„ûð?gŒ{=©@÷Ô?i   i    iÿÿÿÿg      ð?(   t   absRQ  t   exp(   R"   t   xt   a1t   a2t   a3t   a4t   a5t   pt   signR¹   t   y(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTnMRfunc.pyt   erfY  s    	@c         C   s©   d t  j | t  j d ƒ | } t  j d ƒ | |  j | ƒ d t  j | | ƒ t  j t  j ƒ | d | | t | ƒ d t  j t  j d ƒ | | | } | S(   Ng       @g      @g      @g      "@g      @@g      @(   RQ  t   pit   sqrtRÉ  R¿  RØ   t   pow(   R"   t   rmst   dresR‘  t   var1t   fracvar(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTnMRfunc.pyt   FracVarq  s    "]&c   §   $      s'  | d d  k s  | d d  k r$ d  Sˆ j j d ƒ ˆ j j ƒ  d d } ˆ j j d ƒ ˆ j j ƒ  d } | j d ƒ } t | ƒ d } | | ‰ | d k rÓ ˆ j j t j	 d	 | | | d | | f ƒ n0 ˆ j j t j	 d
 | | | | d | | f ƒ ˆ j
 ˆ ƒ } ˆ d | d d } ˆ d | d d } d }  d }! d }" t ˆ d | d ƒ d k r³ˆ d | d d }  ˆ d | d d }! ˆ d | d d }" n  ˆ d | d }# |# d }$ t j ˆ j ˆ j d |# ˆ d  d ƒ }% t t |% ƒ d ƒ j ƒ  }& t j }' |' |& ƒ d }( |( j ƒ  }! d }) x; t d | d ƒ D]& }* |) t ˆ d |* d d ƒ 7}) qSW‡ f d †  }+ |+ ˆ |# ƒ }, ‡ ‡ f d †  }- t j ˆ j ˆ j d |# ˆ ˆ j ƒ }. |- |. ƒ }/ t d d t j d d t | ƒ d ƒ ƒ }0 d t j d d t | ƒ d ƒ t j d |, d d ƒ }1 t d t | ƒ ƒ ‰  ˆ j t k rz| ‰  n  ˆ j |0 ˆ  | ƒ }2 ˆ j j  ˆ d  ˆ d ƒ }3 d j |3 d ƒ }4 t! g  ƒ }5 x. |3 D]& }6 |6 d d k rÒ|5 j" |6 ƒ qÒqÒWt |5 ƒ }7 d  j g  |5 D] }8 |8 d ^ qƒ }9 d  j g  |5 D] }8 |8 d ^ q;ƒ }: d  j g  |5 D] }8 |8 d ^ qaƒ }; d  j g  |5 D] }8 |8 d ^ q‡ƒ }< d  j g  |5 D] }8 |8 d ^ q­ƒ }= ˆ j j  ˆ j |$ ƒ }> t! g  ƒ }? x. |> D]& }6 |6 d d k rñ|? j" |6 ƒ qñqñWt |? ƒ }@ d  j g  |? D] }8 |8 d ^ q4ƒ }A d  j g  |? D] }8 |8 d ^ qZƒ }B d  j g  |? D] }8 |8 d ^ q€ƒ }C d  j g  |? D] }8 |8 d ^ q¦ƒ }D d  j g  |? D] }8 |8 d ^ qÌƒ }E t# j$ j ˆ j d! | ƒ }F t# j$ j% |F ˆ j ƒ }F t# j$ j |F ˆ j& d" | d# | d$ ƒ }G t# j$ j' |G ƒ s}t# j$ j |F ˆ j& | | d$ ƒ }G n  t# j$ j' |G ƒ r¤t( |G ƒ j ƒ  }H n d }H t) | d ƒ }I | d d k  rˆ j* j+ |H ƒ }J t |J ƒ d k rt |J d ƒ | d <qn  | d d k  rVˆ j, j+ |H ƒ }K t |K ƒ d k rVt |K d ƒ | d <qVn  | d d k  r¤ˆ j- j+ |H ƒ }L t |L ƒ d k r¤t |L d ƒ | d <q¤n  | d d k  rÁ	t# j. d% ƒ t/ j/ d& ƒ }M d | d <xH |M D]@ }N t |N d ƒ j ƒ  }O t0 j1 |O ƒ \ }P }Q | d c |P 7<qáWt# j$ j' d' ƒ t2 k r~t/ j/ d( ƒ d }R ˆ j3 |R ƒ }S t d' d) ƒ j4 t5 |S ƒ ƒ n t6 t d' d ƒ j ƒ  ƒ }S |S \ }T }U }V }W }X }Y t# j. ˆ j ƒ ˆ j j d* ƒ ˆ j j ƒ  d d | d <| d k rÁ	ˆ j j d+ ˆ j |A |@ |B |C |D |E | |	 |
 | | | d | | d | d | d | |I | t7 | d ƒ | d | d | d | d | t7 |T d ƒ t7 |U d ƒ t7 |V d ƒ |W |X t7 |Y d ƒ f  ƒ qÁ	n  d }Z ˆ j8 j+ |H ƒ }[ d }\ t |[ ƒ d k r
t |[ d ƒ }\ n  | d k rv
ˆ j j d, | d | | d | d t7 |0 d ƒ t7 |/ d ƒ t7 |1 d ƒ t7 |2 d ƒ ˆ |\ |, f ƒ n  d }] g  }^ | d k rÇ
x6 | d D]' }_ |] |_ j9 d- 7}] |^ j: |_ j9 ƒ q™
Wn  ‡  ‡ ‡ f d. †  }` d }a d  g }b | d d }c | d d d  k r| d d d n |Z }d |d |Z k rAt |d ƒ |I n |Z }e | d d  k rx| d d j9 }f ˆ j; j+ |f ƒ }b t | d d j< j= ƒ  ƒ d k rx| d k ruˆ j j d/ | d | | t7 |d d ƒ |b d t7 |e d ƒ f ƒ |` | d d ƒ \ }g }h }i }j x§ t t |h ƒ ƒ D]“ } xŠ t> | ƒ D]| \ }k }l |l |j | d k r.d0 |k |k |k f }m ˆ j j |m t7 |h | d ƒ t7 |g | d ƒ t7 |i | d ƒ | f ƒ q.q.WqW|c d  k rr|c d d }n g  }o g  }p g  }q g  }r | d d j? }s xt t |s ƒ ƒ D]ø } t@ |c d d tA ƒ rŒ|o j: |c d d | d ƒ |p j: |c d d | d ƒ |q j: |c d d | d ƒ |r j: d  ƒ q|o j: |c d d | d ƒ |p j: |c d d | d ƒ |q j: |c d d | d ƒ |r j: |c d d | d ƒ qWxh t t |o ƒ ƒ D]Q } d1 | | | | f }m ˆ j j |m |n |o | |p | |q | |r | | f ƒ qWqrquqxn  | d d }t | d d }u | d d }v | d d }w | d d d  k rÒ| d d n |Z |Z f g }x | d k r0ˆ j j d2 | | |  | |) |! |" |] |9 |7 |: |; |< |= | f ƒ n  xg | D]_ }y d }z ˆ d  |y d k r`d }z n  d3 |y d |z | f }{ | d k r7ˆ j j |{ ƒ q7q7W| d4 g  k rÃxt> | d4 ƒ D]\ }k }| |k d k s»t || ƒ d4 k  rëq»n  t t6 || d ƒ ƒ d k rt6 || d ƒ d n d }} | d k r»ˆ j j d5 d6 | t || d ƒ t || d ƒ t || d ƒ t || d ƒ t || d ƒ t || d ƒ |} t || d7 ƒ t || d8 ƒ || d4 f ƒ q»q»Wn  g  }~ d9 } d9 }€ t ˆ d | d ƒ }a d }� t | d ƒ d k rPxD | d d j? D]. }‚ |‚ jB ƒ  jC ˆ ƒ d k r|� d 7}� qqWn  |a |� k r‚ˆ j j t jD d: |� ˆ |a f ƒ n  g  }ƒ g  }„ g  }~ g  }… g  }† g  }‡ |Z }ˆ |Z }‰ xut> |^ ƒ D]g\ }* }Š ˆ jE j+ |Š ƒ }‹ ˆ jF j+ |Š ƒ }Œ ˆ jG j+ |Š ƒ }‡ ˆ jH j+ |Š ƒ }� ˆ jI j+ |Š ƒ }Ž ˆ jJ j+ |Š ƒ }� |Z }� |v d  k rt|v d  g k rtt |v ƒ |* k rt|v |* n |Z }‘ |Z }’ g  }“ g  }” g  }• g  }– tK |w ƒ tL k rxt |w ƒ |* k rxt |w |* ƒ d k rxt@ |w |* d tA ƒ rÀ|w |* d }’ |u d  k r.t |u ƒ |* k r.|u d  g k r.|u |* n |Z }� x>t t |w |* ƒ d ƒ D]j } |“ j: |w |* d | d ƒ |” j: |w |* d | d ƒ |• j: |w |* d | d ƒ |– j: d  ƒ qOWqx|w |* d }’ |w |* d }� x™ t t |w |* ƒ d ƒ D]z } |“ j: |w |* d | d ƒ |” j: |w |* d | d ƒ |• j: |w |* d | d ƒ |– j: |w |* d | d ƒ q÷Wn  |‡ g  k rî|‡ d rî| d k rºˆ j j d; |‡ d | f ƒ qîd< | }m ˆ j j |m |‡ d | d | ˆ f ƒ n  |� g  k rm|� d }— |— rs| d k r6ˆ j j d= |* d | f ƒ qjd> | }m ˆ j j |m |* d | d | ˆ f ƒ qsn d }— t |‹ ƒ d k r•t |‹ d ƒ n |Z }˜ |ƒ j: |˜ ƒ t |Œ ƒ d k rÊt |Œ d ƒ n |Z }™ |„ j: |™ ƒ t |Ž ƒ d k rÿt |Ž d ƒ n |Z }š |† j: |š ƒ t |� ƒ d k rU|~ j: t |� d ƒ ƒ |… j: t |� d ƒ ƒ n |… j: |Z ƒ |Z g }~ |Z g }� t |� ƒ d k r“|� d }› n |Z }› |� |Z k r»t |� ƒ t |I ƒ n |Z }œ |‘ |Z k rãt |‘ ƒ t | ƒ n |Z }� |Z }ž |Z }Ÿ t |œ | ƒ } t |� |€ ƒ }€ |` | d |* ƒ \ }  }¡ }¢ }£ |Z }¤ |Z }¥ t | d7 ƒ |* k r›t | d7 |* j< j= ƒ  ƒ d k r›|` | d7 |* ƒ \ }¦ }¤ }¥ }£ n  | d k r¿ˆ j j d? | d | |— |˜ |™ |š t7 |’ d ƒ |‘ t7 |� d ƒ |� d |› t7 |� d ƒ t7 |œ d ƒ t7 |¤ d ƒ t7 |¥ d ƒ f ƒ ˆ j j d@ ƒ ˆ j j ƒ  d } xb t t |“ ƒ ƒ D]N } dA | | | | f }m ˆ j j |m |“ | |” | |• | |– | | f ƒ q[Wxv t t |¡ ƒ ƒ D]_ } dB | | | f }m ˆ j j |m t7 |¡ | d ƒ t7 |  | d ƒ t7 |¢ | d ƒ | f ƒ qÀWq¿q¿Wx# t |ƒ ƒ |a k  rO|ƒ j: d  ƒ q-Wx# t |„ ƒ |a k  ru|„ j: d  ƒ qSWx# t |† ƒ |a k  r›|† j: d  ƒ qyW| d9 k r®|Z n | } |€ d9 k rÆ|Z n |€ }€ xTt d |a ƒ D]C}k | d k rSdC |k |k |k |k |k |k f }m ˆ j j |m |ƒ |k |„ |k |† |k t7 |€ d ƒ |ˆ t7 | d ƒ | f ƒ n  t |~ ƒ d k r‰ˆ j j dD |k |… |k | f ƒ n  | d k rÜdE | }m ˆ j j |m tM | d | ˆ f ƒ dF | }m ˆ j j |m |™ | d | ˆ f ƒ dG | }m ˆ j j |m | | d | ˆ f ƒ qÜqÜWd  S(H   Ni   i   s1   SELECT count( * ) as total_record FROM MRModelTbli    i   s4   SELECT count( * ) as total_record FROM AnnotationTblR  R   sL   Databasing results for search %s in %s. %d targets, %d models, %d solutions.sV   Databasing %s results for the search of %s in %s. %d targets, %d models, %d solutions.iÿÿÿÿi   R  i   s	   clust.alnRÉ   g        c            sI   ˆ  j  | |  ƒ } t j j | t j j ˆ  j ƒ ƒ } t j | ƒ } | S(   N(   R"  R/   R0   R#  Ru   R2   R	   t   GetNumberofResiduesinPDBfile(   t   smodelt   chainidsR   t   nmodelresidues(   R"   (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTnMRfunc.pyt   GetModelResidueNumbers°  s    $c            sy  d } t  j j |  ƒ rut |  d ƒ } | j ƒ  } | j ƒ  | j d d ƒ } | j d | ƒ } t j d | | | !t j	 ƒ } | j d d ƒ } | j d | ƒ } t j d | | | !t j	 ƒ } ys | d  k rt | j ƒ  ƒ d	 k r5t | j d
 ƒ ƒ } q5n0 t | j ƒ  ƒ d k  r5t | j d ƒ ƒ } n  Wqut k
 rq} ˆ j j t j d |  ˆ  f ƒ d } quXn  | S(   Ng      ð¿RÉ   s    at RMSD =   i    s   
s%   (at\sRMSD\s=\s*)([0-9]*\.?[0-9]+)(.*)s        r.m.s.d:s"   \s+r\.m\.s\.d:\s+([0-9]*\.?[0-9]+)i   i   i   s   No SSM RSM in %s for %s (   R/   R0   Rw   Rœ   R—   R˜   R®   RX   R  R[   RE   R   R  RØ   R  Rƒ   t   tloggerR   R   R   (   t   superposelogRÍ  t   slogfilet   logtxtR‡   Ræ   t   match1t   match2(   t   searchmodelR"   (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTnMRfunc.pyt	   GetSSMrms¹  s.    
 gš™™™™™é?gš™™™™™Ù?gìQ¸…ëý?g      ð?g      Y@g÷fŠïz­?gD¨R³Zø?g)\�Âõ�e@g      @g      @i   s   	s    | RŸ  t   {t   }s   .logR*   s   *.seqs   xtriagecache.txts   *.mtzRŒ   s0   SELECT COUNT(*) AS total_record FROM MRTargetTbls   INSERT INTO MRTargetTbl (TargetPDBid, SCOPid, NumberofUniqueSCOPids, TargetClass, TargetFold, TargetSuperfamily, TargetFamily, Unitcell, Spacegroup, Spacegroupnumber, Crystalsystem, IsPolarSpacegroup, TargetScattering, NumberofResiduesinTarget, WilsonB, WilsonScale, MatthewsCoefficient, Resolution, UsedReflections, Allreflections, ASUvolume, Robs, Rall, Rwork, Rfree, EDSentry, IsigIgrt3res, hires, lowres, outliers, icerings, twinLtest) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)sÁ   INSERT INTO MRModelTbl (MRTarget_id, Fullmodel, ModelOrder, Foundit, Comment, C_L_rms, SSMrms, NewRMSD, Fracvar, PartialModel, CPUtime, NumberofResiduesinModel) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)s   , c            s9  g  } g  } g  } g  } t  |  j j ƒ  ƒ d k r)xó t |  j j ƒ  ƒ D]Ù \ } } | j | d d ƒ | d } | j |  j | j ƒ  ƒ | j |  j | j ƒ  ƒ | d } d }	 d }
 x= ˆ d D]1 } | d | k rÉ | d }	 | d d }
 qÉ qÉ W| j ˆ j | d d ˆ  |
 ƒ ƒ qI Wn  | | | | f S(   Ni    i   i   R   i   (	   R   t   NEWVRMSt   itemst	   enumerateRµ   t   KNOWNt   getBfact	   getModlidRÑ  (   t   solt   vrmst   fracvarvrmst   Bfact   modelidsR‡   t   vt   vrms_ensnamet   partmodelnamet   cht   partmodelcompletenessRZ  (   RÎ  R  R"   (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTnMRfunc.pyt   GetBfacFracvarVrmsc  s&    "


+s{   INSERT INTO TemplateRMSTbl (MRTarget_id, MRModel_id, RefinedModel, LLGvrms, iLLGtemplate, LLGreflvrms) VALUES (?,?,?,?,?,?)sq   UPDATE TemplateRMSTbl SET vrms%d=?, Bfac%d=?, fracvarvrms%d=?                                  WHERE MRModel_id=?sƒ   UPDATE TemplateRMSTbl SET CCglobal=?, CCmap%d=?,                              CCpdb%d=?, MLAD%d=?, LLGensmbl%d=? WHERE MRModel_id=?s  UPDATE MRModelTbl SET ModelResolution=?, SequenceIdentity=?, SSMseqid=?, ModelCompleteness=?, FullModelCompleteness=?, ClustalWlength=?, SSMlength=?, Annotation=?, ModelSCOPid=?, NumberofUniqueModelSCOPids =?, ModelClass=?, ModelFold=?, ModelSuperfamily=?, ModelFamily=? WHERE ROWID=?s*   UPDATE MRModelTbl SET %s=%d WHERE ROWID=%di	   ss   INSERT INTO ELLGtbl (MRModel_id, eLLGtarget, achievedELLG, LLGachievedres, LLGfullres, TFZfullres, TFZachievedres, sQ   foundit, vrmsachievedres, achievedresol, foundit2) VALUES (?,?,?,?,?,?,?,?,?,?,?)i   i   iüÿÿs9   Solution file has %d components of %s but %d is expected.s/   UPDATE MRModelTbl SET TFZequiv=?  WHERE ROWID=?sZ   UPDATE MRModelTbl SET TFZequiv%s=?  WHERE MRTarget_id=? AND Fullmodel=? AND PartialModel=?s3   UPDATE MRModelTbl SET SolutionRank=?  WHERE ROWID=?s^   UPDATE MRModelTbl SET SolutionRank%s=?  WHERE MRTarget_id=? AND Fullmodel=? AND PartialModel=?sé   INSERT INTO AnnotationTbl (MRTarget_id, MRModel_id, Tstar, RFZ, TFZ, PAK, CCglobal, LLGfullres_vrms, LLGfullres_refl_vrms, iLLG, iLLGvrms, LLGvrms, LLGrefl_vrms, VRMSfullres, FracvarVrmsfullres) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)s2   SELECT COUNT(*) as total_record FROM AnnotationTblsi   UPDATE AnnotationTbl SET CCmap%d=?, CCpdb%d=?, MLAD%d=?,                      LLGensmbl%d=? WHERE ROWID=?s_   UPDATE AnnotationTbl SET vrms%d=?, Bfac%d=?, fracvarvrms%d=?                      WHERE ROWID=?st   UPDATE MRModelTbl SET RFZ%d=?, TFZ%d=?, PAK%d=?, LLG%d=?,                  iLLG%d=?, LLGreflection%d=? WHERE ROWID=?s4   UPDATE MRModelTbl SET iLLGfullres%d=?  WHERE ROWID=?sV   UPDATE MRModelTbl SET iLLG%s=?  WHERE MRTarget_id=? AND Fullmodel=? AND PartialModel=?sV   UPDATE MRModelTbl SET TFZ0%s=?  WHERE MRTarget_id=? AND Fullmodel=? AND PartialModel=?sY   UPDATE MRModelTbl SET Foundit%s=?  WHERE MRTarget_id=? AND Fullmodel=? AND PartialModel=?(N   RE   RS   t   executet   fetchoneR±   R   Rm   R   R   R€   Rñ   R�   Ru   R2   R.   Rœ   R   R—   R
   R…  R‰  R   RØ   RI   R   RQ  R¿  RÌ  RO   RF   RÑ  Rz   t   GetFamilyNameFromPDBRA   Ro  R/   R0   R#  RU   Rw   t   fileRd  Re   R°   Rf   Rg   R)  R*  R	   t   GetScatteringFromSequenceR=   t   GetXtriageResultsR�   R­   t   evalRS  Rh   t
   ANNOTATIONRµ   Ra   Rá  t   valuesRã  Rä  t
   isinstanceR�   Ræ  R®   R   R]   R^   Rc   R_   R`   Rb   t   typet   listt   llg1(§   R"   R  R¡  t
   partmodelst   nadditionalmodelt   mrsolt   suffixt   datarest   Unitcellt
   spacegroupt   spacegroupnumbert   crystalsystemnamet   ispolarspacegroupt	   nsolveditt
   PDBTagsetst   WilsonBt   WilsonScalet   Rfactorst   EDSentryt   MatthewsCoeft   TargetScatteringt   ntargetresiduest   Allreflectionst	   ASUvolumet   lastMRTargetTbl_idt   lastMRModel_idt   lastAnnotation_idt   partmodellistR&   R  Rí   R‘  t   SSMseqidt   ClustalWlengtht	   SSMlengtht   targetchainidsRœ  t
   clustfnameRŒ  R�  RŽ  t   fullmodelcompletenessRá   RÖ  RÕ  RÞ  t   slogt   SSMrmst   C_L_rmst   new_rmsRÐ  t   scopfamnamest   scopstrt   modelscopidsett   scopidt   nmodelscopidR  t   modelscopidst   modelclassnamest   modelfoldnamest   modelsuperfamilynamest   modelfamilynamest   targetscopidnamest	   scopidsett   ntargetscopidt   targetscopidst   targetclassnamest   targetfoldnamest   targetsuperfamilynamest   targetfamilynamesR0   R»  t   logfilet   nreflctt   wbat   wsct   mcat   filest   seqfilet   seqtxtt   scatt   msgt   mtzfnamet   xtriagecachet   IsigIgrt3rest   hirest   lowrest	   noutlierst   iceringst	   twinLtestt   fbvalt   cputimest   cputimet   annot   annolistRç  Rñ  t   ncomponentst	   itemplllgt   templCorrCoeft   templllgt   llgtemplreflctt	   templannot   tmplBfact   tmplvrmst   tmplfracvarvrmst   tmplmodelidst   kRÆ  t   sqlexpt   tmplCCglobalt   tmplCCensmapt   tmplCCenspdbt   tmplmladenst
   tmplllgenst   knownst   LLGrealst   LLGVRMSrealst   LLGVRMSfullrest	   CorrCoefst   CorrCoeffullrest   tagsett   belongstosett   sqlxprt   lineRà   t   llgst   maxllgperreflctt
   maxllgrealt   foundcomponentst	   componentt   rfzst   tfzst   llgfullresst   pakst   tfzequivt   llgmaxt   tfzmaxt   annst   rfzt   tfzt   llgt   pakt   start   llgvrmsrealt   llgvrmsfullrest   CCglobalt   CCensmapt   CCenspdbt   mladenst   llgsenst   Tstart   rfz1t   tfz1t   pak1t   illgvrmst   llgperreflvrmst   llgperreflvrmsfullrest   llgvrmscombinedt   llgvrmscombreflRê  Rè  Ré  Rë  t   vrmsfullrest   fracvarvrmsfullrest   Bfacfullres(    (   RÎ  R  RÝ  R"   sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTnMRfunc.pyt   GatherResultsz  s®    

	$.=	&&&&&&&&&&,'
$$	,"# ,%!/1	6**2=:=!!$
(((		(( 9#",%-##c         C   sw   | s
 g  St  | d ƒ } xV | d D]J } g  } x5 | D]- } | j g  | D] } | | f ^ qK ƒ q8 W| } q% W| S(   Ni    i   (   t   zipRË   (   R"   t   listst   productt   lt   prodsRÆ  Rc  (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTnMRfunc.pyt   multiply©  s    +
c         C   sñ  g  } x� t  d t | ƒ ƒ D]j } t | ƒ d k rL | j | | d ƒ q | | d | t | ƒ d k r | j | | d ƒ q q W|  j r¶ |  j j t j d t | ƒ ƒ n  g  } x4 t  d t | ƒ ƒ D] } | j | | g  f ƒ qÒ Wxu t  d t | ƒ ƒ D]^ } xU t  d t | ƒ ƒ D]> } | | d | | d k r%| | d j | | ƒ q%q%Wq	Wg  t  d t | ƒ ƒ D] } | | d ^ q�} xO t  d t | ƒ ƒ D]8 } |  j j t j d t | | ƒ | | d f ƒ q±W| S(   Ni    i   i   s-   pdb_chainid models refers to %d unique chainss    There are %d models for chain %s(   R   R   Rµ   RR   Rm   R   R   R€   (   R"   t   pdbs_seqidst   chainIDsR&   t   models_chainsRá   Rú   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTnMRfunc.pyRø   ¸  s*    "	$0$c      	   C   s$  |  j  | ƒ } |  j |  j ƒ } t | ƒ |  j k  rO |  j j t j d ƒ n  |  j j t j	 d ƒ xk t
 d t | ƒ ƒ D]T } |  j j t j	 d | | d | | d d | | d d | | d f ƒ q{ W|  j | ƒ } i  } x= | D]5 } d } x | D] }	 | |	 d 7} qW| | | <qï Wg  }
 x | D] } |
 j | | ƒ q5Wg  } x! |
 D] } | j t | ƒ ƒ q]W|  j j t j	 d	 t | ƒ ƒ xƒ t
 d t | ƒ ƒ D]l } | | d d } x; t
 d t | | ƒ ƒ D]  } | d
 | | | d } qâW|  j j t j	 | ƒ q°W| S(   Ns=   Models were not found for all chains in the target structure!sQ   pdb_chainid,	ClustalW2 seq identity,	Completeness of model	 target pdb chainid(s)i    s   %s 		 %s 		 %s 		 %si   i   R   i   s?   Combining those models yields the following %s MR calculations:s   , (   Rø   R¯   R.   R   RC   Rm   R   R   R   R€   R   R‘  Rµ   R!  (   R"   R’  Rú   t   myseqR&   t   searchest   uniquesearchdictR  Rs  t   pdbseqidt   uniquesearchesR  t   sortedsearchest	   mrcalcstrRá   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTnMRfunc.pyt"   GetCombinedSearchesforTargetChainsÜ  s:    @ c         C   s  |  j  j t j d ƒ g  } x | D] } | j | d ƒ q# W|  j  j t j d j | ƒ ƒ t t j | ƒ ƒ } g  } x* | D]" } | j t	 j
 t | ƒ ƒ ƒ q W|  j  j t j d ƒ xU | D]M } g  } x | D] } | j | d ƒ qÕ W|  j  j t j d j | ƒ ƒ qÂ W| S(   Ns#   
Permuting search orders of models:i    R  s#   yields the following search orders:(   Rm   R   R   R€   Rµ   Ru   Rý  t	   itertoolsRJ  t   copyt   deepcopy(   R"   R  R¢  RK  t   lstRJ  R‡   Re  (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTnMRfunc.pyt   PermuteSearches  s      #c         C   s  t  j j d | ƒ } d g } d g } d g } d g } d } d } d }	 d }
 d } d } |  j | | | | | ƒ | j ƒ  d }	 | j ƒ  d } yt j | d d | d g ƒ } | j j j	 } d }
 | j j
 j j j } | d  k rbt | d | d | d | d | d	 ƒ } t | d
 d „  ƒ} x/ | D]$ } |
 d 7}
 | d | k r7Pq7q7Wn  d } x3 | j j
 j j D] } | d  k r{| d 7} q{q{W| j j j j } WnQ t k
 r} t |  _ | |  _ |  j j t j |  j ƒ |  j d c d 7<n X| | |	 |
 | | f S(   NR   R   i    i   s   --quiets%   scaling.input.xray_data.obs_labels=%si   i   i   t   keyc         S   s   |  d S(   Ni    (    (   t   tup(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTnMRfunc.pyt   <lambda>J  s    i2   (   t   iotbxt   mtzt   objectt   GetMtzColumnst   max_min_resolutionR   Rh  t   basic_resultst   data_strengtht   resolution_cutt   basic_data_statst   outliert   acentric_outliers_tablet   dataRE   RŒ  R!  t   ijscot   ice_ring_bin_locationt   twin_resultst   twin_summaryt   maha_lRƒ   RF   R„   R…   Rm   R   R   R'  RD   (   R"   R>  t   mtzobjt   Fcolt   dummy1t   dummy2t   dummy3R@  RA  RB  t   noutlier_outside_rescutt	   niceringsRE  t   xtrobjt   ac_outlierst   zip_outlierst   sortoutliersR  R‡   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTnMRfunc.pyR÷  9  sJ    	 	 	 	     ,
		c         C   s  yÃt  j j d | ƒ } | j ƒ  } |  j rù xS t d t | ƒ ƒ D]< } | j | | ƒ j ƒ  }	 |	 d k rC | | | d <qC qC Wx<t d t | ƒ ƒ D]Y } | j | | ƒ j ƒ  }	 |	 d k r™ | | j	 | d ƒ d k r™ | | | d <q™ q™ WnÉ xS t d t | ƒ ƒ D]< } | j | | ƒ j ƒ  }	 |	 d k r| | | d <qqWxp t d t | ƒ ƒ D]Y } | j | | ƒ j ƒ  }	 |	 d k re| | j	 | d ƒ d k re| | | d <qeqeWWnQ t
 k
 r}
 t |  _ |
 |  _ |  j j t j |  j ƒ |  j d c d 7<n Xd  S(   NR   i    t   Jt   Qi   t   Fi2   (   R¥  R¦  R§  t   column_labelsRN   R   R   t
   get_columnRü  R®   Rƒ   RF   R„   R…   Rm   R   R   R'  RD   (   R"   R¡   R·  t   sigFcolt   Icolt   sigIcolt   objt   columnsR&   t
   columntypeR‡   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTnMRfunc.pyR¨  b  s2    	))		c         C   s¡  t  | ƒ d k r_ t  | d d d ƒ } |  j j t j d t | t  | ƒ ƒ d | ƒ n d  St j |  j ƒ g  } x$ t	 d | ƒ D] } | j
 g  ƒ q‰ Wx6 t	 d t  | ƒ ƒ D] } | | | j
 | | ƒ q¶ Wt j ƒ  } g  } xt | ƒ D]\ }	 }
 |  j j t j d |	 d ƒ xe |
 D]] } g  | d  D]# } g  | D] } | d ^ qG^ q:d } |  j j t j d j | ƒ ƒ q)W| j
 t j d |  j d	 |  j d
 d |  j d d d |  d |
 d |  j d |  j d | d |	 d d | d | ƒ ƒ qø W|  j j t j d |  j ƒ x% t	 d | ƒ D] } | | j ƒ  q-Wx? t	 d | ƒ D]. } | | j ƒ  |  j d c | | j 7<qUW|  j j t j d ƒ d  S(   Ni    i   s   Will now do at most s&    phaser MR calculations in %d threads
s&   %d. thread runs the following MR jobs:iÿÿÿÿR  Rj   t   modelinputfnameprefixt
   modelinputRU   t   rootstrR   t   parentR–  R:   R9   t   mylockt   threadnumbert
   maxthreadst   minmodelordersJ   
To abort the jobs create an empty file named StopThreadsGracefully in %s
s   Done with RunMRauto(   R   Rm   R   R   R€   R­   R/   R)  R2   R   Rµ   t	   threadingt   LockRã  Ru   R$  R%  Rj   RU   R:   R9   t   startRD   (   R"   t	   psearchest   njobsRÓ  t   ndistinctchainst
   shortlistsR&   RÐ  t
   phaserjobst   indext	   shortlistRe  t   e1R  R¢  (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTnMRfunc.pyt	   RunMRauto‰  sP    &8#				
g      ð?c   5   	   C   s~  d |  j  |  j | | | | t |  j ƒ f } t d d ƒ } | j | ƒ | j ƒ  |  j |  j ƒ t	 d k rŸ t
 j j |  j |  j d ƒ a	 |  j t	 ƒ n  t
 j |  j ƒ g  } |  j j t j | ƒ |  j | | | | ƒ }	 |  j |	 ƒ | d k r|  j |	 | | | ƒ }
 n |	 }
 |  j j t j d ƒ d j g  |
 D]" \ } } } d	 | | | f ^ q@ƒ } |  j j t j d
 | ƒ |  j j t j d t | ƒ ƒ |  j d t j |  j  ƒ d |  _ x9 | D]1 } t j | d t ƒ \ } } |  j | 7_ qÏW|  j d ƒ t
 j d ƒ |  j |  j  ƒ } g  } x	t d t | ƒ ƒ D]ò } | | j  d ƒ d k rš| j! | | d d !d | | d d ƒ n | j! | | d d !d ƒ t
 j j" | | ƒ t k ró|  j j t j d | | ƒ qL|  j j t j d | | ƒ t | | d ƒ } | j | | ƒ | j ƒ  qLW|  j  d } |  j# t j | } |  j j t j d | t
 j$ ƒ  f ƒ t
 j j" | ƒ t k rþ|  j j t j% d | d ƒ t& j' d |  j  d ƒ } | j( ƒ  } t d  d! ƒ } | j | ƒ | j ƒ  |  j j t j d" ƒ t) j* d  d# ƒ } | j( ƒ  } | j ƒ  |  j j t j d$ ƒ t d% d ƒ } | j | ƒ | j ƒ  t
 j+ d  ƒ d% d& t j |  j  d' d( |  j  d g } |  j j t j d) t, j- | ƒ ƒ t. j/ | ƒ t
 j+ d% ƒ n  t
 j j" | ƒ t k rVt
 j j" | ƒ t k rVt0 j1 | t
 j j t
 j$ ƒ  | ƒ ƒ n  g  } t
 j j" | ƒ t k r›|  j j t j2 d* ƒ d+ |  j3 d <| Sd g } d g } d g }  d g }! |  j4 | | | |  |! ƒ | d d k r¤|  d d k r¤| d d k r¤|  j j t j d, | ƒ |  j  j5 ƒ  d- }" t
 j j" |" ƒ rWt
 j+ |" ƒ n  d. d/ d0 |  d d1 |" d2 | g }# |  j j t j d3 t, j- |# ƒ ƒ t6 j/ d4 |# ƒ d g }$ d g }% d g }& |  j4 |" |$ |% |& ƒ t7 k r›|  j j t j d5 |" ƒ |  j  j5 ƒ  d6 }' t
 j j" |' ƒ r7t
 j+ |' ƒ n  d. d/ d0 |  d d1 |' d7 d2 | g }# |  j j t j d3 t, j- |# ƒ ƒ t6 j/ d4 |# ƒ |' } q¤|" } n  d g } d g } |  j4 | | | |  |! ƒ | d d k sï| d d k r8|  d k s|! d k r8|  j j t j2 d8 | ƒ |  j3 d c d9 7<| S|  j j t j d: t
 j$ ƒ  ƒ |  j d; }( t
 j j" |( ƒ r”|  j j t j% |( d< ƒ n  t |( d ƒ }) d t j | }* |) j d= |* d ƒ |  j8 rú|) j d> |  d d? |! d d ƒ n% |) j d@ | d dA | d d ƒ x= t d t | ƒ ƒ D]& } |) j dB t j | | dC ƒ q5	W|) j ƒ  t
 j dD ƒ g  }+ x- |
 D]% }, |  j9 |, ƒ rƒ	|+ j! |, ƒ qƒ	qƒ	W| r¶	| S|  j: |+ ƒ }- x? |- D]7 }. |  j; |. ƒ }/ |  j< |. |/ ƒ rÌ	| j= |/ ƒ qÌ	qÌ	WxL | D]D }/ x |/ D] }0 |0 j+ |0 dE ƒ q
W|  j> |/ ƒ }1 |/ j! |1 ƒ q
Wg  | D]- }2 g  |2 d  D] }3 |3 ^ qn
|2 d g ^ q]
} t
 j |  j ƒ t |  j |  j  dF d ƒ }4 |4 j t | ƒ ƒ |4 j ƒ  |  j j t j dG ƒ |  j j t j |  j |  j  dH ƒ |  j j t j dI ƒ |  j j t j |  j dJ ƒ |  j j t j |  j dK ƒ |  j j t j dL ƒ | S(M   Ns©   %s, %s, in BLASTnSetupMRruns, maxseqid: %s,          minseqid: %s, maxpdbs: %s, similarseqidentmodels: %s, Seed with refined template in multicomponent calculations: %s
s   BLASTMRcalculations.txts   a+R   s   BLASTnSetupMRruns.logg        sK   
Models to be used are
pdb_id+chain_id, BLAST sequence_id, target chain_id:s   
s
   %s, %s, %ss   
%s
s/   There is(are) %d unique chain(s) in the target.Rƒ  i   R*   i    s   |PDBID|CHAIN|SEQUENCEiÿÿÿÿi   R¬   i   s   .seqi   s    Using existing sequence file, %ss   Writing sequence file %sRŒ   s   .mtzs   Copying %s to %ss   We don't have an mtz file for s'   . Will try downloading from the RCSB...s   http://www.pdb.org/pdb/files/rs	   sf.ent.gzs   tmp.gzt   wbs   Writing tmp.gzR‹   s   Writing tmp.cifs   tmp.cifs   --symmetry=..s   .pdbs   --output-file-name=s   Executing command: s   No mtz file available!i*   s=   Only intensities available in %s. Converting to amplitudes...s   _I2ampl.mtzs   --write-mtz-amplitudess   --mtz-root-label=FOBSs
   --label=%ss   --mtz=%ss   %ss   reflection_file_converter t   argssb   Some reflections from the conversion %s have amplitude values of zero. Must massage intensities...s   _mssg_I2ampl.mtzs   --massage-intensitiess:   Neither intensity nor amplitude columns seem present in %si)   s   Writing base input.txt file in s	   input.txts     exists and will be overwritten.s   HKLIN s
   LABIN I = s	     SIGI = s
   LABIN F = s	     SIGF = s(   COMPOSITION PROTEIN SEQUENCE Phaserinputs    NUM 1
s   ..i   s   _BLASTchain_ids.txts*   
Subfolders now set up for MR calculationss-   _BLASTchain_ids.txt lists model pdb_chain idss4   with sequence identity and the permuted MR searches.s0   input.txt is toplevel MR input to be joined withs)   modelinput.txt before each MR calulation.s   
Done with BLASTnSetupMRruns.(?   R.   RU   R­   RL   Rœ   R�   R˜   Rˆ   R2   t   LOG_FILENAMER/   R0   Ru   R½  R)  Rm   R   R   R€   R÷   R  R   R   R¨   R�   Ri   RK   R	   Rö  RF   R¯   R   R®   Rµ   Rw   R7   R(  R   Rš   R›   R—   R•   R–   R™   R�   R‘   R   Rh  t   shutilt   copyfilet   FATALRD   R¨  R�   R   R=   RN   Rš  Rœ  R¡  RO  RË   R¸  (5   R"   Rò   Ró   RÚ   Rù   t   noRNPR�  t	   reposfileRô   R  R’  t   at   bt   ct   mdlistR©   R<  R•  t   seqfnameR&   R§   t   localmtznameR>  R¦   t   cifgzt   gzfileR¤   t   cifdataR£   R×  R·  t   SigcolRÇ  t   SigIcolt   mtzwithamplnamet   intensity2amplargt	   FcolI2ampt   SigcolI2ampt	   IcolI2ampt   mtzwithmssgamplnamet   infnamet	   inputfilet   mtzstrt   preparedmodelsR˜  R–  R  t   psearchR1  R©  RÞ  R  t   blastout(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTnMRfunc.pyt   BLASTnSetupMRrunsÄ  s6   +
	8 	/!&


)0(				0#			#				8 	(%
:
$c   I      C   s…  d d  l  } t d d ƒ } | j d |  j |  j f ƒ | j ƒ  t j j |  j	 |  j d ƒ } |  j
 | ƒ |  j j t j d |  j |  j f ƒ t j j |  j	 |  j |  j d ƒ } t | ƒ } t t | d ƒ j ƒ  ƒ }	 g  }
 | t k r^| j ƒ  } t t | ƒ d	 ƒ } xÉ t d
 | ƒ D]¸ } | | d	 } | | d	 d } |  j j t j d | | f ƒ t | d ƒ } | j ƒ  } | j ƒ  t g  ƒ | f } x+ | j ƒ  D] } | d
 j | j ƒ  ƒ q¯W|
 j | ƒ q%Wt j |  j	 ƒ t j ƒ  } t j d |  j j ƒ  d ƒ } t | ƒ } t j  j! d | ƒ } | j" ƒ  j# ƒ  } | j$ ƒ  j% ƒ  j& ƒ  } | j$ ƒ  j% ƒ  j' ƒ  } t t( j) | ƒ d ƒ } | j* ƒ  d
 j+ ƒ  } d | d
 | d | d	 | d | d | d f } | j* ƒ  d
 j, ƒ  j- ƒ  t | j" ƒ  j. ƒ  ƒ } t | j/ | j0 ƒ  d
 ƒ j1 ƒ  ƒ } d d d d g } t t j j |  j2 d ƒ d ƒ j ƒ  }  t3 j4 d |  j d |  t3 j5 ƒ }! |! d  k rö|! j7 ƒ  }" t8 |" d d ƒ t8 |" d	 d ƒ t8 |" d d ƒ t8 |" d d ƒ g } n  t t j j |  j2 d ƒ d ƒ j ƒ  }# t3 j4 d |  j d |# t3 j5 ƒ }! |! d  k rUd }$ q^d
 }$ n  | j9 | ƒ }% |% j: ƒ  |  _; |  j; j< d ƒ |  j; j< d ƒ |  j; j< d ƒ |  j; j< d ƒ |  j; j= ƒ  }& t> }' x( |& D]  }( |( d
 d k rØt }' PqØqØW|' r
d d  d! d" d# d$ d% d& d' d( }) |  j; j< |) ƒ d) d* d+ d, d- d. d/ d0 d1 d2 d3 }) |  j; j< |) ƒ x, |
 D]$ }* d4 |* d }) |  j; j< |) ƒ q�Wd5 d6 d7 d8 d9 }) |  j; j< |) ƒ d: d; }) |  j; j< |) ƒ d< d= d> }) |  j; j< |) ƒ n  t |	 d
 d ƒ }+ x9t |+ ƒ D]+}, |' r+d? |, }) |  j; j< |) ƒ d@ |, }) |  j; j< |) ƒ dA |, }) |  j; j< |) ƒ dB |, }) |  j; j< |) ƒ dC |, }) |  j; j< |) ƒ dD |, }) |  j; j< |) ƒ |  j; j< dE |, ƒ dF |, }) |  j; j< |) ƒ dG |, }) |  j; j< |) ƒ dH |, }) |  j; j< |) ƒ dI |, }) |  j; j< |) ƒ dJ |, }) |  j; j< |) ƒ dK |, }) |  j; j< |) ƒ dL |, }) |  j; j< |) ƒ dM |, }) |  j; j< |) ƒ dN |, }) |  j; j< |) ƒ dO |, }) |  j; j< |) ƒ dP |, }) |  j; j< |) ƒ dQ |, }) |  j; j< |) ƒ dR |, }) |  j; j< |) ƒ dS |, }) |  j; j< |) ƒ q+q+W|' r0	t | ƒ d k r0	x» | d D]¬ }- |- d
 }. dT |. }) |  j; j< |) ƒ dU |. }) |  j; j< |) ƒ dV |. }) |  j; j< |) ƒ dW |. }) |  j; j< |) ƒ dX |. }) |  j; j< |) ƒ dY |. }) |  j; j< |) ƒ q}Wn  t j |  j	 |  j |  j dZ ƒ }/ t |/ d ƒ }0 |0 j ƒ  }1 |0 j ƒ  t? j? |  j	 |  ƒ }2 |  j@ |  j ƒ }3 d g }4 d g }5 d g }6 d g }7 d g }8 | t k rPt j t j |  j	 d ƒ ƒ tA jA d[ ƒ }9 d
 }: x6 |9 D]. }; t |; d ƒ j ƒ  }< |: tB jC |< ƒ 7}: q
Wt j | ƒ xþ| D]ó}- |- d }= |- d
 }. |= d\ k rV
t g  ƒ }> x¾|	 D]³}? d\ }@ g  |? d  D]# }A g  |A D] }B |B d
 ^ q³
^ q¦
d
 }C d] j |C ƒ }D x]tD |? d ƒ D]K\ } }E |E |> k ró
|> j |E ƒ t g }F d\ g }G |2 jE |G |E |F |1 ƒ r#yž |= d\ k rm|2 jF |G d
 |E |= ƒ }H n |2 jF |G d
 |E ƒ }H |2 jG |  jH |? |D |E | |2 jG |. |3 | | | | | |H |
 |4 |5 | |$ |6 |7 |: | | |8 ƒ Wq#tI k
 r}! |  j j t jJ tK |! ƒ d^ tL jM ƒ  ƒ q#Xn  t |? d
 | d	 ƒ }+ qó
qó
Wq�
WqV
qV
Wn  |% jN ƒ  |  j; j ƒ  |  j j t j d_ | ƒ d  S(`   Niÿÿÿÿs   BLASTMRcalculations.txts   a+s,   %s, %s, in CollateMRautoResultsFromlistFile
s   MRResults.logs9   CollateMRautoResultsFromlistFile, pdb: %s, calclabel: %s
s   _BLASTchain_ids.txtRÉ   i   i    i   s5   MR models matching PDB ids in %s will be tagged as %sR*   s   .mtzR   s#   %3.3f %3.3f %3.3f %3.3f %3.3f %3.3fi   i   i   g      ð¿s   Rfactors.txtR  s   )	(.*)	(.*)	(.*)	(.*)	(.*)
s   eds_holdings.txts   )
s   PRAGMA synchronous = OFFs   PRAGMA journal_mode = MEMORYs   PRAGMA cache_size=200000s"   select tbl_name from sqlite_mastert   MRTargetTblsB   create table MRTargetTbl (p_id integer primary key autoincrement, s=   TargetPDBid text, SCOPid text, icerings int, twinLtest real, s>   NumberofUniqueSCOPids int, TargetClass text, TargetFold text, s<   TargetSuperfamily text, TargetFamily text, Spacegroup text, sA   Spacegroupnumber int, IsPolarSpacegroup int, Crystalsystem text, s:   IsigIgrt3res real, hires real, lowres real, outliers int, s:   Resolution real, Unitcell text, MatthewsCoefficient real, s>   NumberofResiduesinTarget int, WilsonB real, WilsonScale real, s<   Robs real, Rall real, Rwork real, Rfree real, EDSentry int, sN   TargetScattering int, UsedReflections int, Allreflections int, ASUVolume real)s@   create table MRModelTbl (p_id integer primary key autoincrement,s.   MRTarget_id int, Fullmodel text, Comment text,s0   ModelOrder int, Foundit int, PartialModel text, s<   ModelResolution real, SequenceIdentity real, SSMseqid real, sR   NumberofResiduesinModel int, SolutionRank int, ClustalWlength int, SSMlength int, sE   FullModelCompleteness real, ModelCompleteness real, Annotation text, s8   C_L_rms real, SSMrms real, NewRMSD real, TFZequiv real, s    Fracvar real, ModelSCOPid text, s1   NumberofUniqueModelSCOPids int, ModelClass text, s9   ModelFold text, ModelSuperfamily text, ModelFamily text, s   CPUtime real)s(   alter table MRModelTbl add column %s intsH   create table AnnotationTbl (MRTarget_id int, MRModel_id int, Tstar int, sC   RFZ real, TFZ real, PAK real, LLGfullres_vrms real, iLLGvrms real, sA   LLGreflection real, LLGrefl_vrms real, iLLG real, CCglobal real, s)   LLGvrms real, LLGfullres_refl_vrms real, s*   VRMSfullres real, FracvarVrmsfullres real)sM   create table TemplateRMSTbl (MRTarget_id int, MRModel_id int, CCglobal real, sE   RefinedModel text, LLGvrms real, iLLGtemplate real, LLGreflvrms real)sJ   create table ELLGtbl (MRModel_id int, eLLGtarget real, achievedELLG real, sL   LLGachievedres real, LLGfullres real, TFZfullres real, TFZachievedres real, sD   foundit int, foundit2 int, vrmsachievedres real, achievedresol real)s,   alter table MRModelTbl add column RFZ%d reals,   alter table MRModelTbl add column TFZ%d reals,   alter table MRModelTbl add column PAK%d reals,   alter table MRModelTbl add column LLG%d reals6   alter table MRModelTbl add column LLGreflection%d reals-   alter table MRModelTbl add column iLLG%d reals4   alter table MRModelTbl add column iLLGfullres%d reals1   ALTER TABLE AnnotationTbl ADD COLUMN CCmap%d reals1   ALTER TABLE AnnotationTbl ADD COLUMN CCpdb%d reals0   ALTER TABLE AnnotationTbl ADD COLUMN MLAD%d reals5   ALTER TABLE AnnotationTbl ADD COLUMN LLGensmbl%d reals0   ALTER TABLE AnnotationTbl ADD COLUMN VRMS%d reals0   ALTER TABLE AnnotationTbl ADD COLUMN Bfac%d reals7   ALTER TABLE AnnotationTbl ADD COLUMN FracvarVrms%d reals2   ALTER TABLE TemplateRMSTbl ADD COLUMN CCmap%d reals2   ALTER TABLE TemplateRMSTbl ADD COLUMN CCpdb%d reals1   ALTER TABLE TemplateRMSTbl ADD COLUMN MLAD%d reals6   ALTER TABLE TemplateRMSTbl ADD COLUMN LLGensmbl%d reals1   ALTER TABLE TemplateRMSTbl ADD COLUMN VRMS%d reals1   ALTER TABLE TemplateRMSTbl ADD COLUMN Bfac%d reals8   ALTER TABLE TemplateRMSTbl ADD COLUMN FracvarVrms%d reals1   alter table MRModelTbl add column TFZequiv%s reals-   alter table MRModelTbl add column TFZ0%s reals-   alter table MRModelTbl add column iLLG%s reals0   alter table MRModelTbl add column Foundit%s reals4   alter table MRModelTbl add column SolutionRank%s ints1   alter table MRModelTbl add column CCglobal%s reals   _DoneMRJobs.txts   *.seqR   R  s   
s   
Results written to (O   t   sqlite3Rœ   R�   R.   RU   R˜   R/   R0   Ru   R2   R½  Rm   R   R   R€   R   Rø  R—   R=   R±   Rd  R   R   RA   Ro  R²   Rµ   R)  R(  R�   R�   R¥  R¦  R§  t   space_groupt   crystal_systemt   space_group_infoRü  t   lookup_symbolt   numberR   t   list_originst   crystalst   unit_cell_parameterst	   unit_cellt   volumet   all_opsRÅ  RÄ  t   extract_valuesRv   RX   R  R\   RE   R  RS  t   connectt   cursorRS   Rò  t   fetchallRF   t   BLASTMRutilsRñ   R*  R	   t   GetNumberofResiduesFromSequenceRã  t   PhaserRanPartModelsBeforet   IsthereaPartialSolutionR  R‹  Rƒ   R'  R­   R   t
   format_exct   commit(I   R"   t   DBfnamet   TaggedPDBfileliststrt   OnlyCreateDBcolumnst   OtherSolutionsR  Rç  Râ  t   searchlistfnameR×  R
  t   TaggedPDBfilelstt   nlenR&   R¡   t   tagt   mfilet   mtxtt   tplR    RF  t   mtznameR¶  t   xtalsysnamet   spgnamet	   spgnumberR  t   ucellt   unitcellR  R  R  t   RfacstrR‡   RÉ   t   EDSstrt   EDSreproducet   connt   list_tablest   createtableR¹   t   sqlxprsRb  RK  Rá   RZ  R  t   completedrunfnamet   completedrunst   donerunst   testsolR  R  R  R  R  R  t   seqfilesR  R:  R;  t   OtherSolfnamet   SetOfResultsR  t   previousmodelscomponentstabsRÞ  R  R¢  R¡  Rÿ  t   bsolvedt   founddirR	  (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTnMRfunc.pyt    CollateMRautoResultsFromlistFile£  s|   
& 
42%'#I'#		*.



























					

8			"-
c   
      C   sË   t  d d ƒ } | j d |  j |  j f ƒ | j ƒ  |  j |  j ƒ t j j	 |  j |  j d ƒ } |  j
 | ƒ |  j | | | | ƒ } t | d d ƒ }	 |  j | | |	 ƒ |  j j t j d ƒ d  S(   Ns   BLASTMRcalculations.txts   a+s   %s, %s, in BLASTnMRrun
s   BLASTnMRrun.logi    i   s   Done with BlastnMRrun.(   Rœ   R�   R.   RU   R˜   Rˆ   R2   R/   R0   Ru   R½  Rÿ  R   Rß  Rm   R   R   R€   (
   R"   Rò   Ró   RÚ   RØ  t   removesimilarseqidentmodelsRç  Râ  R’  RÓ  (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTnMRfunc.pyt   BLASTnMRrun¯	  s    
	c   	      C   s[  |  j  |  j d } t d d ƒ } | j d |  j |  j  | f ƒ | j ƒ  |  j |  j ƒ t j j	 |  j |  j  d ƒ } |  j
 | ƒ |  j j t j d |  j | |  j  f ƒ t j j	 |  j | ƒ } t | ƒ } t | ƒ } t | d ƒ } | j ƒ  } | j ƒ  t | ƒ } t | d d	 ƒ } |  j | | | ƒ |  j j t j d
 |  j ƒ d  S(   Ns   _BLASTchain_ids.txts   BLASTMRcalculations.txts   a+s5   %s, %s, in RunMRautoFromlistFile, pdb searchlist: %s
s   RunMRautoFromlistFile.logsB   RunMRautoFromlistFile, pdb: %s, pdb searchlist: %s, calclabel: %s
RÉ   i    i   s$   Finished RunMRautoFromlistFile on %s(   RU   R.   Rœ   R�   R˜   Rˆ   R2   R/   R0   Ru   R½  Rm   R   R   R€   t   PosixSlashFilePathR   R—   Rø  R   Rß  (	   R"   RØ  R  Rç  Râ  t   pdbsseqidfilet   txtR’  RÓ  (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTnMRfunc.pyt   RunMRautoFromlistFileÀ	  s(    	

(&   R   R   t   __doc__RE   R~   Rˆ   R¨   RF   R¯   Rî   R÷   R   R  Rñ   R  RI  RO  R_  R‚  Rš  R"  R¸  R½  RÉ  RÑ  R‹  R‘  Rø   Rœ  R¡  R÷  R¨  Rß  R=   Rÿ  R9  R;  R?  (    (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTnMRfunc.pyR'   G   sH   _		+Z	p'	(		3		m	K	R	K		y	
				ÿ ÿ 1		$	6	'	)	'	;ß	ÿ 	(    (/   t   timeRX   RQ  R�   t   phaser.pipelineR    R   Re  R   R   t	   iotbx.mtzR¥  R   R   R   R   R•   t   stringRã  R*  RP  t   phaser.test_phaser_parsersR  R/   R�   t   mmtbx.scalingR   t   mmtbx.command_lineR   t   iotbx.bioinformaticsR   Rš   R$  R	   Ry   R
   RÔ  R�  Rž  t   phaser.utils2R   Râ  Rƒ   R   R    R   R'   (    (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTnMRfunc.pyt   <module>   sF   
	