ó

š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 Z 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 Z d  d l m Z d  d l Td  d l Z d  d l m Z d  d l m Z d  d l Td „  Z d „  Z d	 „  Z e e e d
 „ Z d „  Z e e d e d „ Z d „  Z d „  Z e  d k r³e! e j" ƒ d k r�e e j" d e j" d e j" d ƒ n e e j" d e j" d ƒ d GHn  d S(   iÿÿÿÿN(   t   pdbt   mtz(   t   AlterOriginSymmate(   t   *(   t   get_cc_mtz_mtz(   t   get_cc_mtz_pdbc         C   s]   d „  } t  |  d ƒ j ƒ  } t j d | | ƒ } t  | d ƒ } | j | ƒ | j ƒ  d  S(   Nc         S   sM   |  j  d d d ƒ \ } } } d t | ƒ d t | ƒ d t | ƒ d f S(   Ni   i   i   s   FRAC %.5f %.5f %.5f(   t   groupt   float(   t   mt   xst   yst   zs(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/CalcCCFromMRsolutions.pyt   mymatch   s    t   rsO   FRAC\s+([-+]?[0-9]*\.?[0-9]+)\s+([-+]?[0-9]*\.?[0-9]+)\s+([-+]?[0-9]*\.?[0-9]+)t   w(   t   opent   readt   ret   subt   writet   close(   t   solfnamet   outfnameR   t   solsstrt	   newsolstrt   mfile(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/CalcCCFromMRsolutions.pyt   ShiftMRsols   s    		c         C   sA  d | t  | ƒ t  | ƒ f } | GHt j d | ƒ } t j j j t | d ƒ t | d ƒ t | d ƒ ƒ } t | d ƒ t | d ƒ t | d ƒ f } | j ƒ  j	 ƒ  }	 |	 j
 ƒ  }
 | |
 j ƒ  } |  j ƒ  } | j d | ƒ } | | } |
 j | j d | ƒ ƒ | } t | d ƒ } | j |	 j ƒ  ƒ | j ƒ  | S(	   Ns?   
Realizing MR solution with model %s at Euler: %s and Frac: %s
t	   file_namei    i   i   t
   sites_cartt
   sites_fracR   (   t   strR    t   inputt   scitbxt   matht   euler_anglest
   zyz_matrixR   t   construct_hierarchyt	   deep_copyt   atomst   extract_xyzt	   unit_cellt   fractionalizet   set_xyzt   orthogonalizeR   R   t   as_pdb_stringR   (   t   xtalsymt   pdbfnamet   eulert   fracR   t   mstrt   pdbmrsolt   rott   transt   mrsolhiearchyt
   modelatomst   rotatomsitest   ucellt   fracatomsitest
   mrsolsitest   lastpdbfnamet   mrsolpdbfile(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/CalcCCFromMRsolutions.pyt   RealizeSoluPDB*   s$    9-

c         C   s   d |  | f } | GHt  j ƒ  } t j ƒ  } d j | j t j t j d ƒ ƒ } | d | } d } y| d d k rç d |  d | d	 | d
 | g }	 t
 j
 |	 d t d | ƒ}
 | | j ƒ  7} t t |
 j ƒ d ƒ d f } n} d |  d | d	 | d
 | g }	 t j |	 d t d | ƒ}
 | | j ƒ  7} t t |
 j ƒ d ƒ t t |
 j ƒ d ƒ f } t j | ƒ Wn! t k
 r•| t j ƒ  7} n X| | f S(   Ns!   Calculating CC between %s and %s
t    i   t   _iüÿÿÿs   .mtzs   mtz_1=s   mtz_2=s	   temp_dir=s   output_dir=t   quiett   outi   g        s   mtz_in=s   pdb_in=(   NN(   t	   cStringIOt   StringIOt   randomt   SystemRandomt   joint   samplet   stringt   letterst   digitst   NoneR   t   Truet   getvaluet   RoundoffR   t   final_ccR   t   Falset   found_overallt   found_regiont   shutilt   rmtreet	   Exceptiont	   tracebackt
   format_exc(   t   mtz1t   fname2t   tempt   outstrt   dmpstrt   myrandt   randstrt   randtempt   rett   cmdargst   myobj(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/CalcCCFromMRsolutions.pyt   getCCE   s.    %!0c	         C   sä  | d }	 d |	 | f }
 t  j j |	 ƒ rE | rE |
 |	 d 7}
 |
 St ƒ  } | j |  j ƒ  ƒ | j |  j ƒ  ƒ | j |  j	 ƒ  ƒ | j
 | j ƒ  | j ƒ  | j ƒ  | j ƒ  ƒ | j | ƒ | j d ƒ | j t ƒ | j d | | ƒ | j d ƒ x. t t | ƒ ƒ D] } | j | | d ƒ qW| rC| j t ƒ n | j t ƒ | j d ƒ t | ƒ } | j ƒ  sš|
 | j ƒ  d | j ƒ  d 7}
 n& | d  k rÀ| j  | j! ƒ  d	 ƒ n  t" | d
 d ƒ j# | j$ ƒ  ƒ |
 S(   Ns   .1.mtzs%   Making map %s from 0 cycle RNP of %s
s    exists already.
i   t	   RNP0cyclet   OFFs    TargetPDB RNP ERROR: s   
i    s   .logR   (%   t   ost   patht   existst   InputMR_RNPt   setSPAC_HALLt   getSpaceGroupHallt   setCELL6t   getUnitCellt   setREFL_DATAt   getDATAt   setNORMt   getBINSt   getANISOt   getSOLKt   getSOLBt   setROOTt   setJOBSt   setXYZORP   t   addENSE_PDB_RMSt   addSOLU_ORIG_ENSEt   ranget   lent   addCOMP_PROT_SEQ_NUMt   setMUTERL   t   setMACM_PROTt	   runMR_RNPt   Successt	   ErrorNamet   ErrorMessageRK   t   appendt	   getValuesR   R   t   logfile(   t   datrunt   ranot   rootnameR.   t   targseqnamest	   modelrmsdt	   overwritet   llgreft   debugt
   mtzmapnameR[   t   rnptargetinputt   it	   rnptarget(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/CalcCCFromMRsolutions.pyt   CreateZeroRNPcycleMape   s8    
	.% c         C   s�   g  } t  j d |  t  j ƒ } xh | D]` } t  j d | d t  j ƒ } t  j d | d t  j ƒ } | j | d | d | d f ƒ q% W| S(   Ns5   SOLU 6DIM ENSE\s+(.+)\s+(EULER.+)\s+(FRAC.+)\s+BFAC.+sP   EULER\s+([-+]?[0-9]*\.?[0-9]+)\s+([-+]?[0-9]*\.?[0-9]+)\s+([-+]?[0-9]*\.?[0-9]+)i   sO   FRAC\s+([-+]?[0-9]*\.?[0-9]+)\s+([-+]?[0-9]*\.?[0-9]+)\s+([-+]?[0-9]*\.?[0-9]+)i   i    (   R   t   findallt	   MULTILINERƒ   (   t   solstrt   enseulerfract   MRsolenst   mrsolensR/   R0   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/CalcCCFromMRsolutions.pyt   Sol2EulerFrac�   s    		&i   c	   U      C   sÒ  t  j t  j t  j  ƒ  ƒ ƒ d }	 t j ƒ  }
 t | ƒ } t | ƒ } t t j j	 | | d ƒ d ƒ j
 ƒ  } t j d | t j ƒ d } | j d t j j ƒ } t j d | t j ƒ } t j d | t j ƒ } t ƒ  } t | ƒ } t | ƒ } t j | ƒ } | j ƒ  d j ƒ  } | j | ƒ t | ƒ d k r||	 d	 t | d ƒ 7}	 | j | d d ƒ | j | d d
 ƒ nB | j | d d ƒ | j | d d
 ƒ |	 d	 t | d ƒ 7}	 | rÔ| j t ƒ n | j t ƒ t | ƒ } | j  ƒ  rD| d | d | d } t j j	 | | ƒ } d | } |	 | 7}	 | GHt | ƒ } t | ƒ } t j j! | ƒ t k rŽd | } |	 | 7}	 | GH|	 St j j	 | | d | d | d ƒ } t" | | ƒ t# j$ j% t& | ƒ ƒ } | j' ƒ  } t j d | t j ƒ } t j d | t j ƒ } xB t( t | ƒ ƒ D]. } t | | ƒ | | <t | | ƒ | | <q+Wt) ƒ  } | j* | j+ ƒ  ƒ | j, | j- ƒ  ƒ | j. | j/ ƒ  ƒ | rµ| j t ƒ n | j t ƒ t# j0 | ƒ } | j  ƒ  s	| j1 ƒ  d | j2 ƒ  d } |	 | 7}	 |	 S|  d } |  d } t | ƒ }  t |  ƒ }! t j j! | d ƒ t k ry|	 t3 | | | |! | d d | ƒ7}	 n  t4 ƒ  } | j* | j+ ƒ  ƒ | j, | j- ƒ  ƒ | j. | j/ ƒ  ƒ | j5 | j6 ƒ  | j7 ƒ  | j8 ƒ  | j9 ƒ  ƒ t j j	 | | d | d | ƒ }" | j: |" ƒ | j; t ƒ | j< t ƒ | j= | ƒ | j> | ƒ xi | D]a }# |# d
 j d t j j ƒ j? ƒ  }$ t |$ ƒ }$ t |$ ƒ }$ | j@ |# d |$ tA |# d ƒ ƒ qVWx | D] }% | jB |% d
 ƒ qÂW| rò| j t ƒ n | j t ƒ | jC d ƒ | jD t t t t ƒ tE | ƒ }& |& j  ƒ  rS|" d }' t |' d ƒ }( |( jF |& jG ƒ  ƒ |( jH ƒ  |" d }) t |) d ƒ }* |* jF |& jI ƒ  jJ ƒ  ƒ |* jH ƒ  t j j	 | | d | d | d  ƒ } t | d ƒ }+ g  }, xF tK |& jL ƒ  ƒ D]2 \ } }- |, jM |- ƒ d! |- } |	 | 7}	 | GHqýW|+ jF t |, ƒ ƒ |+ jH ƒ  n' |& j1 ƒ  d" |& j2 ƒ  d }. |. GH|. S|& jI ƒ  }/ g  }0 | s–d  S| d# |) t |/ ƒ f 7} |	 | 7}	 | GHd$ }1 |  d% | d% | }2 d& t jN k r	t j j	 t jN d& |2 ƒ }1 n  d' t jN k r7t j j	 t jN d' |2 ƒ }1 n  |1 d$ k ret j j	 t jN d( d) |2 ƒ }1 n  t |/ ƒ }3 xøtK |/ ƒ D]¿\ }4 }5 |4 d
 } d* | |3 f } |	 | 7}	 | GHt j j	 | | d+ | ƒ }6 |6 d } t4 ƒ  } | jC d ƒ | jD t t t t ƒ | j* | j+ ƒ  ƒ | j, | j- ƒ  ƒ | j. | j/ ƒ  ƒ | j5 | j6 ƒ  | j7 ƒ  | j8 ƒ  | j9 ƒ  ƒ | j: |6 ƒ | j< t ƒ | j; t ƒ | j> d
 ƒ | r·	| j t ƒ n | j t ƒ t# jO |5 g ƒ }7 | j= |7 ƒ x | D] }% | jB |% d
 ƒ qê	Wd$ }8 d$ }9 d, }: i  }; x- |5 jP jQ ƒ  D] }< |< d
 d |; |< d <q,
WtR g  ƒ }= g  }> |5 jJ ƒ  }? tS |? ƒ }@ xÍ|@ D]Å}A d- |A d GH|; |A d }B x¡| D]™}C |C d |A d k r¥
|C d
 j d t j j ƒ j? ƒ  }$ t |$ ƒ }$ t |$ ƒ }$ |A d |= k r#| jT |C d |$ |B ƒ n  |= jU |A d ƒ t j j	 | |C d d. t | ƒ ƒ }D |D d }E |	 tV | |$ |A d
 |A d |E ƒ 7}	 g  }, |	 t3 | | |D |E | |B d/ t d0 |, d | ƒ7}	 |D d }F tW | d |F |1 ƒ \ }G }H |	 |G 7}	 |	 d1 |C d t |H d ƒ f 7}	 tW | d |E |1 ƒ \ }G }I |	 |G 7}	 |	 d2 |C d t |I d ƒ f 7}	 tX jY d3 |E d4 |! d5 | g ƒ \ }J }K }G |> jM |H d |I d tZ |J d d d6 ƒ tZ |, d d7 ƒ f ƒ |	 |G 7}	 |	 d 7}	 | s>t[ j[ |D d8 ƒ }L xH |L D]= }M y t j\ |M ƒ Wq÷t] k
 r3}N |	 t^ j_ ƒ  7}	 q÷Xq÷Wq>q¥
q¥
Wq}
WtE | ƒ }O |O j  ƒ  rt |6 d d ƒ jF |O jG ƒ  ƒ tW | d | |1 ƒ \ }G }P |	 |G 7}	 |	 d9 |P d 7}	 tZ |O jL ƒ  d d7 ƒ }Q |P d |P d
 |Q g }R |R j` |> ƒ |0 jM |R ƒ n- |O j1 ƒ  d: |O j2 ƒ  d } |	 | 7}	 | GHt j j	 | | d; ƒ }S |S d | d | d  } t | d ƒ }T |T jF t |0 ƒ ƒ |T jH ƒ  | sót[ j[ |6 d< ƒ }L xH |L D]= }M y t j\ |M ƒ Wq¯t] k
 rë}N |	 t^ j_ ƒ  7}	 q¯Xq¯Wn  t j j! |1 ƒ r~y ta jb |1 ƒ Wq=t] k
 r9|	 t^ j_ ƒ  7}	 q=Xq~q~Wn( | j1 ƒ  d= | j2 ƒ  d } |	 | 7}	 | sÊt[ j[ d> ƒ }L xF |L D]; }M y t j\ |M ƒ Wqˆt] k
 rÂ|	 t^ j_ ƒ  7}	 qˆXqˆWn  |	 d S(?   Ns   

s   MRinput.txtR   s   ^HKLIN\s+(\S+)i    s   \s,   ^LABIN\s*F\s*=\s*(\S*)\s*SIGF\s*=\s*(\S+)\s*s+   ^LABIN.*I\s*=\s*(\S*)\s*SIGI\s*=\s*(\S*)\s*s   Using columns: i   t   {t   }s   .sols   Calculating LLGs from %s
s   Error: %s doesn't exist.
s   _shift{s5   ^ENSEMBLE\s+(\S+)\s+PDB\s+(\S+)\s+IDENTITY\s+(\S+)\s+s-   ^COMPOSITION PROTEIN SEQUENCE\s+(\S+)\s+NUM.+s   ANO ERROR: s   
t   _maps   .pdbs   .1.mtzgš™™™™™¹?R�   s   _VRMS{i   t   CUSTOMs   .logR   s   LLG{s   .txts   llg= %s
s   Model RNP ERROR: sG   Calculating correlation coefficients and MLADs of %s with %d solutions
R>   R?   t   TMPt   TEMPt   HOMEt   CCTEMPs   
RNP solution %d out of %d
s	   CalcCC_%dg        s   Ensemble: %st   .R‹   RŒ   s   CCmap of %s component:  %s
s   CCpdb of %s component: %s
t   pdbfixedrefnamet
   movingnamet   pxtalsymi   i   R   s   CC of all components: %s

s    MR_LLG ERROR: t   CalcCC_s   *.mtzs    MR_DAT ERROR: s   MinMLAD*(c   t   timet   asctimet	   localtimeRf   t   getcwdt   PosixSlashFilePatht   RecaseFilename2R   Rg   RF   R   R   R“   R”   t   replacet   sept   InputMR_DATR   t   objectt   crystalst   crystal_symmetryt   setHKLIR{   R   t	   setLABI_It   setLABI_SIGIt	   setLABI_Ft   setLABI_SIGFR}   RP   RL   t	   runMR_DATR€   Rh   R   t   phasert   test_phaser_parserst   SolutionFileParsert   filet   get_dot_solRz   t   InputANORj   Rk   Rl   Rm   Rn   Ro   t   runANOR�   R‚   R’   Ri   Rp   Rq   Rr   Rs   Rt   Ru   t   setHKLORw   t   setSOLURv   t   stript   addENSE_PDB_IDR   R|   R~   t   addMACMR   R   R…   R   t	   getDotSolt   unparset	   enumerateR„   Rƒ   t   environt   mr_solutiont   NEWVRMSt   itemst   setR™   Rx   t   addR=   Rc   R   t   GetAltOrigSymmatesRN   t   globt   removeRU   RV   RW   t   extendRS   RT   (U   t   targetpdbidt   MRfoldert	   calclabelt   workdirt
   partmodelst   bCalcCCt   mylockt   nthreadsR�   t	   stroutputt   calcdirt   mrinputt   mtzfnamet   mtzfcolt   mtzicolt   myinputt   mtzobjR-   R†   R   t   fnameR1   t   newsolfnamet   mrparsert   mrsolst   MRpdbenst	   seqfnamesR�   t   myanoR‡   t   rnptargetrootnamet   tmpnamet   tmpname2t	   targetpdbRˆ   t   ensemblet
   modelfnamet   seqfnamet   runt   logfnameR…   t   rnpsolfnamet   solfilet   llgfilet   llgst   llgt   msgt   rnpsolst   myCCst   CCtempt   tmpdirt   nsolst   jt   rnpsolt   roott   solut   lastmodelnamet   lastsolcomponentt   lastvrmst
   ensvrmsdict   vitemt   enssett   CCcurR•   t   EnseulerFracsR–   t   vrmst   enst   lastroott   curpdbfnamet   lastrootmtzR[   t   cct   ccpdbt
   AltOrigrest   output_filet   filest   fR   t   llgrunt   CCtotalt   llgallt   CCallt   ccroott   CCfile(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/CalcCCFromMRsolutions.pyt   CalcCCFromMRsolutionš   sê   "(	



)			


	.%"%



)

	
"


	."'



"
"	!?

& 
	


c         C   s  t  |  d ƒ } t | j ƒ  ƒ } | j ƒ  t  | d ƒ } t | j ƒ  ƒ } | j ƒ  t j j | t j j |  ƒ d ƒ } d } t | ƒ } xJt	 | ƒ D]<\ } }	 d }
 x| D]ù} | d j
 ƒ  j |	 d j
 ƒ  ƒ d k r³ | d } | d k rd } n( | j d ƒ d d | j d ƒ d } t j j | | |	 d ƒ } t j j | ƒ s|t j j | | |	 d j
 ƒ  ƒ } n  t j j | d	 |	 d d
 ƒ } t t  | d ƒ j ƒ  ƒ } |
 d | |	 d | | f 7}
 xÓ | D]È } | d d } x± | d D]¥ } t j j | d | ƒ } zv yE t j | ƒ |
 d t 7}
 |
 t |	 d | d	 | | d t ƒ7}
 Wn* t k
 rŽ} |
 d |  | | f 7}
 n XWd  t j | ƒ XqüWqÝWq³ q³ Wt  | d ƒ } | j |
 ƒ | j ƒ  qš Wd |  d }
 t  | d ƒ } | j |
 ƒ | j ƒ  d  S(   NR   s   .logi    R>   iÿÿÿÿi   t   UnSCOPedR¢   t   Striders   _BLASTchain_ids.txts(   CalcCCFromMRcalcs %s, %s, %d. out of %d
t   MRs   Calculating CCs from %s
R×   s   Error in %s, %s, %s
t   as
   Done with s   
(   R   t   evalR   R   Rf   Rg   RF   t   basenameR{   RÇ   t   lowert   findt   splitRh   t   chdirR   R  RL   RU   R   (   t   selectedpdbfnamet   scoppdbsfnameRÛ   R   t   selectedpdbst   scoppdbsRñ   t   nt   lt   pdbsR1   t   scoppdbt   scopidt   foldIDt   fold_targetpdbt   BLASTtxtchainfnamet	   psearchest   psearchRÕ   RÖ   RÓ   R   R…   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/CalcCCFromMRsolutions.pyt   CalcCCFromSCOP_MRcalcsä  sV    

%)
	(%! c         C   sº  d } t  j j |  | |  d ƒ } t  j j | ƒ rHt t | d ƒ j ƒ  ƒ } | d |  7} t  j |  ƒ xñ | D]Ï } | d d } | } t  j j d | ƒ } t  j j d | ƒ }	 yR | t |  | | | | d	 t	 d
 d ƒ7} | t |  |	 | d | d d	 t	 ƒ7} Wqr t
 k
 r@}
 | d |  |
 f 7} d |  |
 f GHqr Xqr Wn | d | 7} d | GHt  j j |  ƒ d } t | d ƒ } | j | ƒ d |  d } | j | ƒ | j ƒ  d  S(   NR>   s   _BLASTchain_ids.txtR   s   CalcCCFromMRcalcs %s
i   iÿÿÿÿR  t   TemplateSolutionsR×   RÙ   i   t   RNPs   .superposeds   Error in %s, %s
s   Error: %s doesn't exists
   CalcCC.logR  s
   Done with s   
(   Rf   Rg   RF   Rh   R  R   R   R$  R  RL   RU   R   R   R   (   t   pdbidRÔ   R1   R0  R1  R2  RÕ   RÖ   RÓ   t   templdirR   Rñ   R…   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/CalcCCFromMRsolutions.pyt   CalcRNP_FromMRcalcs%  s8    		t   __main__i   i   s   Done for today(#   Rf   R   t   sysRS   RÏ   RV   R§   RB   RD   RH   t   iotbxR    R   t   scitbx.math.euler_anglesR    R¹   R   t   phaser.test_phaser_parserst   phenix.command_lineR   R   t   phaser.utils2R   R=   Rc   RP   RK   R’   R™   R  R3  R8  t   __name__R{   t   argv(    (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/CalcCCFromMRsolutions.pyt   <module>   s2   H

			!'	ÿ J	A	,(