ó
	šxTc           @   sæ   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 m
 Z
 d  d l Z d  d l Z d  d l m Z d  d l Td d	 „ Z d
 „  Z g  d „ Z d d d „  ƒ  YZ d S(   iÿÿÿÿN(   t   matching(   t   template(   t   sgtbx(   t   uctbx(   t   CalcCCFromMRsolutions(   t   *g      @c         C   sß  t  j j |  ƒ } | j ƒ  d j ƒ  } t j d | ƒ } | j ƒ  j ƒ  } t	 j
 d | d | ƒ }	 t  j j | ƒ j ƒ  }
 t	 j j d |
 ƒ } g  } t } t | d g ƒ } | t k rÆ | | f Sxƒ t | ƒ D]u \ } } | d k rñ qÓ n  t | g ƒ sqÓ n  t j j t | ƒ ƒ } | j ƒ  } x | D] } | j | ƒ q1WqÓ Wg  } xb | D]Z } xQ | j D]F } | j t	 j j d | j ƒ  d | j ƒ  d |	 d	 | d
 | ƒ ƒ qiWqYWg  | D] } t	 j | ƒ ^ q¾} t | g ƒ } | t k rþ| | f SxÔ | D]Ì } g  } x° | D]¨ } g  | j D]? } t	 j j d | j ƒ  d | j ƒ  d |	 d	 | d
 d ƒ ^ q(} t	 j d | g d g  | D] } t	 j | ƒ ^ q†ƒ } | r³t  } n  | j | ƒ qW| j | ƒ qW| | f S(   Ni    t
   parameterst   space_groupt   cellt   roott   rotationt   translationt   crystalt   ensemblet   dming      @t   leftt   right(!   t   iotbxt   mtzt   objectt   crystalst   unit_cell_parametersR   t	   unit_cellt   space_group_infot   groupR    t   CrystalInfot   pdbt   inputt   construct_hierarchyt   EnsembleInfot   from_hierarchyt   Falset   TryParseSolfilet	   enumeratet   phasert   test_phaser_parserst   SolutionFileParsert   opent   get_dot_solt   appendt   KNOWNt   Labelledt   phaser_mr_solutiont   getRt   getFracTt   OriginSearchEntityt   phaser_style_equivalence_matcht   True(   t   mtzfnamet   templsolfnamest
   mrsolfnamet
   modelfnamet   mrresolutionR   t   myparmt   ucellt   space_group_hallR   t   mrootR   t   matchest   founditt	   templsolst   it   templsolfnamet   templparsert	   othersolst   solt	   referencet   tmplst   peakt   rt   ref_originst   mrsolst
   ref_origint   matcht   trialt   tt   m(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTMRutils.pyt   AreMatching   s`    
"
L		%	c         C   sr   d  } xe |  D]] } y: t j j t | ƒ ƒ rL t t | d ƒ j ƒ  ƒ } n  Wq t k
 ri d  } q q Xq W| S(   NRD   (	   t   Nonet   ost   patht   existst   strt   evalR%   t   readt	   Exception(   t   rankedfilest   mstrt   fname(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTMRutils.pyt   TryRead]   s    "c         C   s�   g  } z‚ yb x[ |  D]S } t  j j t | ƒ ƒ rf t j j t | ƒ ƒ } | j ƒ  } | j	 | ƒ Pn  q WWn t
 k
 r† } g  } n XWd  | SX(   N(   RN   RO   RP   RQ   R"   R#   R$   R%   R&   R'   RT   (   t   rankedsolfilest   usedfilet   rett   solfnamet   mrparserRK   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTMRutils.pyR    k   s     t   BLASTMRutilsc           B   s8   e  Z d  d d „ Z d  d „ Z d „  Z d  d „ Z RS(   t    c      
   C   sO   | |  _  | |  _ | |  _ | |  _ d  d  d  d  d  d  d  d  d  g  g
 |  _ d  S(   N(   t	   topfoldert   completedrunfnamet   mylockt   parentRM   t   mrsol(   t   selfR`   Rc   Ra   Rb   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTMRutils.pyt   __init__}   s
    				c   8   
   C   sÏ	  d j  t | j d ƒ ƒ ƒ } d | d } d | d } t j j  |  j d | ƒ } t j j  |  j d | ƒ } d  d  d  d  d  d  d  d  d  g  g
 |  _ t j j  |  j d | ƒ }	 t j j |	 |  j ƒ }	 |  j	 j
 | | }
 t j j  |	 |
 ƒ } t j j  |	 |  j	 j
 d | | d ƒ } t j j  |	 d | | d ƒ } t j j  |	 |  j	 j
 d | | d ƒ } t j j  |	 d ƒ } t j j  |	 d	 | | d ƒ } t j j  |	 |  j	 j
 d
 | | d ƒ } t j j  |	 d ƒ } t j j  |	 d |
 d ƒ } t j j  |	 |  j	 j
 d
 | | d ƒ } | d k rIt j j  |	 | ƒ n d } t j j  |	 |  j	 j
 d | | d ƒ } t j j  |	 |
 d ƒ } d  g d  g d  g d  d  d  d  d  g g |  j d <d  g } t | | | g | ƒ |  j d <| d } t j j | ƒ t k rNt j t j j  |	 d ƒ ƒ } t | ƒ d k rN| d } qNn  t j j | ƒ r©t | d ƒ j ƒ  } | d k r©t j d | ƒ j d ƒ |  j d <q©n  t j j  |	 d | ƒ } t t j | ƒ ƒ d k rðt j | ƒ d n d } d } t j j | ƒ r&t | d ƒ j ƒ  } n  t j j  | |  j	 j
 d | d ƒ } t j j  | d | d ƒ } t j j  | d | d ƒ }  t j j  | |  j	 j
 d | d ƒ }! t j j  | |  j	 j
 d | d ƒ }" t j j  | |  j	 j
 d | d ƒ }# t | | g ƒ |  j d d <t | g ƒ |  j d d <t |! g ƒ |  j d d <t | g ƒ |  j d d <t |# |" g ƒ |  j d d  <|  j d d  d  k r%| | k r%t |  j d d  d d t ƒ rg|  j d d  d d }$ |$ j ƒ  g  }% |% j |  j d d  d d ƒ |% j |  j d d  d d ƒ x |$ D] }& |% j |& ƒ q9W|% g |  j d d  <q%|  j d d  d d }$ |$ j ƒ  g  }% |% j |  j d d  d d ƒ |% j |  j d d  d d ƒ |% j |  j d d  d d ƒ x |$ D] }& |% j |& ƒ q÷W|% g |  j d d  <n  g  }' t | | g |' ƒ |  j d <t j j  |	 |  j	 j
 d! ƒ }( t |( g ƒ |  j d" <t | t j j |  j	 j
 d# d ƒ }) |) j ƒ  }* |) j ƒ  t j d$ |* t j t j Bt j Bƒ }+ t  j! ƒ  }, x\ t" d t |+ ƒ ƒ D]E }- t j j  |  j |+ |- d ƒ }. |, j# |+ |- d i d% |. 6ƒ qW|* j$ d& ƒ }/ |* j$ d' |/ ƒ }0 t j d( |* |/ |0 !t j ƒ d }1 t j j  |  j |1 ƒ } t% | ƒ } t& | ƒ } t% |. ƒ }. t' | | g | d |. ƒ }2 | d k rÇ	xÒ t( | j d' ƒ ƒ D]¸ \ }3 }4 |3 d k r&	q	n  |4 j d) ƒ }5 t |5 ƒ d* k  rM	q	n  t j j  |	 d+ t) t* |5 d ƒ ƒ ƒ }6 t' | | | d g |6 |. ƒ }7 |5 j t) |7 d ƒ ƒ |  j d* j |5 ƒ q	Wn  |2 d S(,   Nt   ,t   {t   }t   TemplateSolutionst   MRt   CalcCC_s   .txts   CalcCC_RNP_VRMS.txtt   CalcCC__t   LLGs"   CalcCC_FullResRNP_VRMS_FullRes.txtt   LLGsFromR_   t   _VRMSs   .soli   i    s   .FTF_Scores.txts   *.FTF_Scores.txtRD   s*   Number of selected reflections:\s+([0-9]+)i   i   s   ELLG_*_%s.txtt   RNPs   .superposed.solt   LLGsFromRNPt   RNPLLGs   .superposed.txtt
   RNPCalcCC_i   i   s   RNP_VRMS_FullRes.soli   s   RNPMRinput.txts8   ENSEMBLE\s+(.*?)\s+PDB\s+(.*?)\s+IDENTITY\s+(.+[^])(*)id   t   HKLINs   
s   HKLIN\s+(\S+)s   	i	   s   ELLG_MRcalcs_%d.sol(+   t   joint   sortedt   splitRN   RO   R`   RM   Rd   t   relpathRc   t	   calclabelR    RP   R   t   globt   lenR%   RS   t   ret   searchR   RX   t
   isinstancet   tuplet   reverseR'   t   sept   closet   findallt   DOTALLt	   MULTILINEt
   IGNORECASER   t   EnsembleDefinitiont   ranget   definet   findt   PosixSlashFilePatht   RecaseFilename2RL   R!   t   intt   float(8   Re   t   modeldirt
   partmodelst   solutionfnamet   sortedpartmodelt   sortedpartmodelnamet   modeldirnamet   templmodeldirt   templunsortmodeldirt   workpatht   calclabelmodelsnamet   rootnamet   CorrCoeffname0t   CorrCoeffnamet   CorrCoeffname1t   CorrCoeffname2t   CorrCoeffname3t   realLLGsVRMSfnamet   CorrCoeffullresfnamet   realLLGsfname1t   realLLGsfnameRW   t   fname0t   fname1R2   t   FTFfnamet   fnamest   FTFstrt	   ellgfnamet   ELLGtblt
   templfnamet   templfname1t   realtemplLLGfnamet   realtemplLLGfname1t   templCorrCoeffnamet   templCorrCoeffname1t   lst2t   lst3t   eRZ   R\   t   infilet
   templinputt   pdbst   edR<   R3   RK   t   nt   mtznameR9   t   kt   linet   llstt   ellgsolfnamet   ellgmatches(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTMRutils.pyt   IsthereaPartialSolution‡   sÚ    '+!+!++'+1	
(4#"
  
   	'
	 ##")	c         C   s™   t  } | d k  r t } n  |  j d  k r: |  j j ƒ  n  t |  j d ƒ } | j d | | t | ƒ f ƒ | j	 ƒ  |  j d  k r• |  j j
 ƒ  n  d  S(   Ni   t   as   %s {%s} %s
(   R/   R   Rb   RM   t   acquireR%   Ra   t   writeRQ   Rƒ   t   release(   Re   t   workdirR‘   t   nPartSolWithThisStrategyt   bPartSolWithThisStrategyt   completedruns(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTMRutils.pyt   NoticeCompletedPhaserRunI  s    	
c         C   s  |  j  d k r. t j j |  j  ƒ t k r. t S|  j d  k rM |  j j ƒ  n  | d k r„ t |  j  d ƒ } | j	 ƒ  } | j
 ƒ  n  d } x“ | j d ƒ D]‚ } t j d | t j ƒ } | d  k	 rš xU | j d ƒ j ƒ  j d ƒ D]2 }	 | | j d ƒ d |	 d | j d	 ƒ 7} qã Wqš qš W| | 7} |  j d  k rI|  j j ƒ  n  t | d
 <| j d | d d
 ƒ } | d
 k r| j d d
 | ƒ }
 |
 d k r¯| d
 k r¯d
 }
 n  | |
 | !j ƒ  d
 | d
 <| j d | ƒ }
 | | |
 !j d ƒ d d k r	t | d
 <n
 t | d
 <t St Sd  S(   NR_   RD   s   
s   (.*)(\{.*\})(.*)i   Rg   Rh   Ri   i   i    iÿÿÿÿt    R/   (   Ra   RN   RO   RP   R   Rb   RM   RÁ   R%   RS   Rƒ   Rx   R}   R~   R†   R   t   stripRÃ   R‹   t   rfindR/   (   Re   t   founddirR‘   t   bsolvedt   donerunsRÇ   t	   firstrunsR³   RK   t   partmdlR¸   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTMRutils.pyt   PhaserRanPartModelsBefore\  s<    *%7

	 
N(   t   __name__t
   __module__RM   Rf   R¿   RÈ   RÑ   (    (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTMRutils.pyR^   |   s   
Â	(    (   RN   R}   R{   t   syst   phaser.test_phaser_parsersR"   R    R   t   cctbxR   R   t   scitbx.matht   scitbxt	   iotbx.pdbR   R   t   phaser.utils2RL   RX   R    R^   (    (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/BLASTMRutils.pyt   <module>   s   0
M	