ó
šxTc           @  s  d  d l  m Z m Z d  d l Z d  d l m Z d  d l m Z m Z m Z d  d l m	 Z	 d  d l m
 Z
 d  d l m 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 m Z m Z m Z 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# Z# e j$ ƒ  d d d d d d d d g Z% d d g Z& e' e( d „ Z) e( e' d d „ Z* d „  Z+ d „  Z, d e- f d „  ƒ  YZ. d  e- f d! „  ƒ  YZ/ d" e- f d# „  ƒ  YZ0 d$ „  Z1 e# j2 e' e' d% „ Z3 d S(&   iÿÿÿÿ(   t   print_functiont   divisionN(   t   pickle_support(   t   master_paramst   phaser_stylet   match_modes(   t   phaser_result(   t	   callbacks(   t   file_reader(   t   crystalt   sgtbx(   t   flex(   t   object_oriented_patterns(   t   Sorryt   import_python_objectt	   multi_outt   null_out(   t	   interface(   t   StringIO(   t   easy_picklet   MR_AUTOt   MR_FRFt   MR_FTFt   MR_LLGt   MR_PAKt   MR_RNPt   MR_BRFt   MR_BTFt   EP_AUTOt   EP_SADc         C  s±   d } | r d } n  | d  k	 r. d | } n  g  |  j d ƒ D] } | d  ^ q> } | d j g  | D] } | j ƒ  ^ qd ƒ 7} | j r­ | j d ƒ r­ | j d d ƒ } n  | S(   Nt   sett   adds   %s_t   _i   (   t   Nonet   splitt   joint   uppert   as_multiplet
   startswitht   replace(   t   namet   stylet   prefixt   multiplet   method_namet   st   fields(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_interface/driver.pyt   translate_keyword   s    	&,i    c         C  sÝ  | } xÐ| j  | D]Á} | j d k r/ q n  t | ƒ }	 |	 j rJ q q t | |	 j | ƒ r | j r| }
 |
 d  k rž t d | j	 d |	 d | j
 ƒ }
 n | j
 r¸ d |
 d }
 n  |	 j sÊ |	 j ræg  } xi | j  D]^ } | j
 sð t ‚ | j ƒ  } | d  k r+| j ƒ  t d | j ƒ  ƒ ‚ n  | j | ƒ qÚ Wt |  |
 ƒ } |	 j r�t d |
 d	 j g  | D] } t | ƒ ^ qjƒ f d
 | ƒ| | Œ  qt d |
 d	 j g  | D] } t | ƒ ^ q³ƒ f d
 | ƒ| | ƒ qÏ|	 j r?i  } g  } x« | j  D]  } | j
 st ‚ | j ƒ  } | d  k rV| j ƒ  t d | j ƒ  ƒ ‚ n  | | | j	 <t | ƒ } t | t ƒ r‹d | } n  | j d | j	 | f ƒ qWt |  |
 ƒ } t d |
 d	 j | ƒ f d
 | ƒy | | �  Wqt k
 r;} t | ƒ j d k r5t d t | ƒ t | ƒ f ƒ ‚ q<‚  qXqÏ|	 j rpt d |  d | d | d | d t ƒ qÏd } xV| j  D]’} | j d k r›q€n  t | ƒ } | j rÀ| d 7} q€n  t | | j t ƒ sÛq€n  | j r;|
 } | j  rüd  } n  t d |  d | d | d | d t d | d | ƒ | d 7} Pn  | j ƒ  } | d  k rc| d 7} q€n  t d | j	 d |	 d | ƒ }
 | j
 s“| j! r¤d |
 d }
 n  | j r¶|
 } n t d | j	 d | d |
 ƒ } t |  | ƒ } | d  k	 rít | t ƒ r%t d | | f d
 | ƒ| | ƒ qt | t" j# ƒ rjt d | t | ƒ f d
 | ƒ| t | ƒ ƒ qt | t$ ƒ rÀ| j! rÀxe | D]0 } t d | t | ƒ f d
 | ƒ| | ƒ q‰Wqt d | t | ƒ f d
 | ƒ| | ƒ n t d | d
 | ƒ| ƒ  | d 7} q€WqÕ| j% rÕ| j ƒ  } | d  k r@q n  t d | j	 d |	 d | d | j
 ƒ } t |  | ƒ } t | t ƒ r¢t d | | f d
 | ƒn  t d | t | ƒ f d
 | ƒ| | ƒ qÕq q q Wd  S(   Ni    R(   R)   R+   R   i   s   %s must not be None.s   input.%s(%s)s   , t   files   input.%s([%s])s   '%s's   %s=%st   ArgumentErrors/   invalid boost.python arguments:
%s
Keywords:
%st   inputt   keyword_philt   modet
   script_outt   inherit_modei   t   default_method_baset   offset_startR*   s   input.%s('%s')s
   input.%s()(&   t   objectst   is_templateR   t   ignoreR   R4   t   is_scopeR!   R/   R(   R+   t   listargst   arrayt   AssertionErrort   extractt   showR   t	   full_patht   appendt   getattrt   printR#   t   strt   kwargst
   isinstancet	   Exceptiont   typet   __name__t   RuntimeErrort   silentt   convert_keywordst   Truet   parent_silentR%   R
   t   space_group_infot   listt   is_definition(   R2   R3   R4   R5   R6   R7   R8   R-   t   keywordR)   t   method_baset   argst   subkeywdt   valuet   methodt   aRG   t
   kwargs_outt	   value_outt   et   current_offsett   style2t   subkeywd_baseR,   t   val_(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_interface/driver.pyRN   (   s
   			
		,	,	
#
	
	
			

				   	 c         C  sM   x0 |  D]( } | j  ƒ  j ƒ  } | | k r | Sq Wt d | | f ƒ ‚ d  S(   Ns"   Couldn't find array %s in file %s.(   t   infot   label_stringR   (   t   miller_arrayst   labint	   file_namet   miller_arrayt   array_labels(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_interface/driver.pyt   get_miller_arrayÇ   s
    c         C  s  t  |  ƒ j d k r$ |  j ƒ  }  n  t  | ƒ j d k rH | j ƒ  } n  d  |  | g k r¼ |  j ƒ  } | d  k	 r¼ | j ƒ  } | | k r¹ t d d | t |  ƒ t | ƒ f ƒ ‚ q¹ q¼ n  d  | | g k r| j | ƒ st d d | t | ƒ t | ƒ f ƒ ‚ qn  d  S(   NRQ   s-   The space group for the data in %s (%s) does s:   not match the point group of the overall space group (%s).s)   The unit cell for the data in %s (%s) is s8   significantly different than the overall unit cell (%s).(   RJ   RK   t   groupR!   t   build_derived_point_groupR   RF   t   is_similar_to(   t   space_groupt	   unit_cellt   master_space_groupt   master_unit_cellt
   array_namet   derived_point_groupt   master_point_group(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_interface/driver.pyt   crystal_sanity_checkÎ   s"    (t   process_mr_hklinc           B  s   e  Z e j d  „ Z RS(   c         C  s«  d | j  j | j  j f } t j | j  j ƒ } | j d ƒ t d | j j ƒ  d | j  j d | j  j ƒ } | j	 ƒ  d  k r� t d ƒ ‚ n  t } | d  k	 r¼ | j d | ƒ } t } nr | j  j j d  k	 rõ | j d | j  j j ƒ } t } n9 | j  j j d  k	 r.| j d	 | j  j j ƒ } t } n  | j ƒ  |  _ | j ƒ  |  _ t d
 | j ƒ  d	 |  j d | j  j j d | j  j j d | ƒ |  j d  k sª|  j d  k rÓt d d | j  j | j  j f ƒ ‚ n  | j ƒ  rAd d l m } | j d | d t d | ƒ } | d  k r8t d d d d d ƒ ‚ n  t } n  | j ƒ  rb| j ƒ  } t } n | j ƒ  s�t d t ƒ ‚ n  | j ƒ  s¨| j ƒ  j ƒ  } t } n  | j	 ƒ  d k }	 |	 j t ƒ d k rè| j  |	 ƒ } t } n  | r€d | j  j! j" j# }
 | j$ s"t% j& j' |
 ƒ }
 n  | j( ƒ  } | j) d d ƒ } | j* ƒ  } | j+ d |
 ƒ ~ |
 | j  _ d } | | j  _ n  | j, ƒ  \ |  _- |  _. | j  j |  _ d  S(    Ns   %s:%st   hklRd   Re   Rf   s!   Experimental sigmas are required.t   crystal_symmetryRQ   Rn   Rm   Ro   Rp   Rq   s7   No build-in crystal information for the data in %s:%s; s4   please define the crystal symmetry parameters first.iÿÿÿÿ(   t   french_wilsonRg   t   merget   logs4   French-Wilson treatment of intensities could not be s;   performed because suitable resolution binning could not be s@   determined.  This may indicate a severely incomplete dataset or s>   corrupted input file; please inspect your data and convert to s!   amplitudes manually if necessary.s   %s is not X-ray data.i    s   %s_data.mtzt   column_root_labelt   Fs   F,SIGF(/   t   phasert   hklinRe   R   t   any_filet   check_file_typeRi   t   file_objectt   as_miller_arrayst   sigmasR!   R   t   Falset   customized_copyRO   Rw   Rm   Rn   RQ   Rt   t   is_xray_intensity_arrayt   cctbxRx   t   french_wilson_scalet   anomalous_flagt   average_bijvoet_matest   is_xray_amplitude_arrayRh   t   is_unique_set_under_symmetryt   merge_equivalentsR>   t   countt   selectt   keywordst   generalt   roott	   test_modet   ost   patht   abspatht
   map_to_asut   as_mtz_datasett
   mtz_objectt   writet	   d_max_mint   d_maxt   d_min(   t   selft   paramst   symmetryt   outRq   t   hkl_filet   input_arrayt
   is_changedRx   t
   bad_sigmasR~   t   mtz_datasetR™   t   labout(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_interface/driver.pyt   __init__ã   sŽ    															(   RK   t
   __module__t   syst   stdoutR¨   (    (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_interface/driver.pyRu   â   s   t   process_ep_crystalc           B  s   e  Z e j d  „ Z RS(   c         C  s�  | j  j j j |  _ | j  j j j |  _ | j  j j |  _ | j  j j	 |  _	 |  j d  k	 rf d  } n  i  |  _ i  } xÅ| j  j D]·} | j } x¥| j D]š} d  | j | j | j g k rÅ q› n  | j }	 | j | k rt j | j ƒ }
 |
 j d ƒ |
 | | j <n  | | j }
 d | j | j f } t d |
 j j ƒ  d | j d | j ƒ } | j ƒ  sˆt d d | j  j | f ƒ ‚ n  | j ƒ  d  k r©t d ƒ ‚ n  | j ƒ  } | j	 ƒ  } t d	 | d
 | d |  j d |  j	 d | ƒ |  j d  k r| |  _ n  |  j	 d  k r"| |  _	 n  | |  j | |	 f <q› Wq‚ W| d  k r¥|  j d  k sg|  j	 d  k r~t d d d ƒ ‚ n  t j d
 |  j	 d |  j d t ƒ } n  t  j! d ƒ } d  } d  |  _" d | j  j j# j$ } | j% s÷t& j' j( | ƒ } n  xi| j  j D][} | j } xI| j D]>} | j }	 d | |	 f } | j) | ƒ d  k	 rnt d d | |	 f ƒ ‚ n< t* | ƒ d k rªt d d | |	 t* | ƒ d f ƒ ‚ n  |  j | |	 f } | j+ d | ƒ } | j, ƒ  \ } } |  j d  k sÿ|  j | k  r| |  _ n  |  j d  k s)|  j | k r5| |  _ n  | j- ƒ  rrd d l. m/ } | j0 d | d  t d! | ƒ } n | j1 ƒ  s‘t d" | ƒ ‚ n  | j2 ƒ  } | j3 ƒ  s¾| j4 ƒ  j5 ƒ  } n  | j ƒ  d# k } | j6 | ƒ } |  j" d  k rû| |  _" n  | d  k r| j7 d$ | ƒ } n | j8 d | d$ | ƒ d% t9 | g d& ƒ } | | _ | | _ qWqW| j: ƒ  } | j; d | ƒ ~ | |  _ d  S('   NRv   s   %s:%sRd   Re   Rf   s0   Anomalous data required in mode '%s' (offending s
   data: %s).s!   Experimental sigmas are required.Rm   Rn   Ro   Rp   Rq   s.   Couldn't determine automatic crystal symmetry s:   information from the provided reflection file(s).  Please s&   specify the space group and unit cell.RQ   t%   raise_sorry_if_incompatible_unit_cells   [^a-zA-Z0-9_\-]{1,}s   %s_data.mtzs   F_%s_%ss0   The crystal ID and dataset ID must only contain s<   alphanumeric characters or underscores (current: '%s','%s').i   s3   The crystal ID and dataset ID combined must not be s4   more than 21 characters (current: '%s'+'%s' = %dc.).i   Rw   iÿÿÿÿ(   Rx   Rg   Ry   Rz   s   %s is not X-ray data.i    R{   s   %s(+),SIG%s(+),%s(-),SIG%s(-)i   (<   R}   R�   t
   resolutiont   highR�   t   lowRœ   Rw   Rm   Rn   R!   Rd   R	   t   xtal_idt   datasett   wave_idR~   Re   R   R   R€   Ri   R�   R‚   R‰   R   R4   Rƒ   RQ   Rt   R    RO   t   ret   compilet   dataR‘   R’   R“   R”   R•   R–   t   searcht   lenR…   R›   R†   R‡   Rx   Rˆ   R‹   R—   RŒ   R�   R>   R�   R˜   t   add_miller_arrayt   tupleR™   Rš   (   Rž   RŸ   R    R¡   Rr   t   input_filest   xtalR±   R²   R³   R¢   Rq   R£   t   array_sgt   array_uct	   not_alnumR¦   R~   R{   t
   input_arryRœ   R�   Rx   R¥   t   labelsR™   (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_interface/driver.pyR¨   1  sÒ    														 				(   RK   R©   Rª   R«   R¨   (    (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_interface/driver.pyR¬   0  s   t   phaser_parameter_interpreterc           B  sA   e  Z e j d  „ Z d „  Z e e d „ Z e j e d „ Z	 RS(   c   2      C  sã  | j  j ƒ  } | |  _ | j j } t ƒ  } | |  _ d  |  _ t	 d d | ƒ| j
 d ƒ r† t	 d d | ƒt j ƒ  } t j } nC | j
 d ƒ r½ t	 d d | ƒt j ƒ  } t j } n d  } d  } t j ƒ  }	 |	 j | ƒ | d  k	 r| j s | j r| j t ƒ qn  t j d ƒ }
 | j j j j d  k rIt d ƒ ‚ n0 |
 j | j j j j ƒ d  k	 ryt d	 ƒ ‚ n  d  } | j j j d  k	 rÜ| j j j d  k	 rÜt j  d
 | j j j d | j j j d t ƒ } n  d  } t! | | j" d ƒ ƒ rö| j j# d  k rt d | ƒ ‚ n% | j j$ d  k rDt d | ƒ ‚ n  t% d | d | d | ƒ } t	 d | j j# d | ƒ| j& | j j# ƒ | j j$ j' d ƒ } t( | ƒ d k s¹t) ‚ t	 d | d | d f d | ƒ| j* | d | d ƒ nt! | | j" d ƒ ƒ rùt( | j j ƒ d k r9t d | ƒ ‚ n' t( | j j ƒ d k r`t d ƒ ‚ n  | j j d } t( | j+ ƒ d k r”t d ƒ ‚ n  t, d | d | d | ƒ } t	 d | j# d | ƒ| j& | j# ƒ | j- |  _ x| j j D]} | j. } d  | j/ | j0 g k r)t d d ƒ ‚ n  xÆ | j+ D]» } | j1 } | j$ j' d ƒ } t( | ƒ d k rŒt d  d! d" d# d$ | j$ ƒ ‚ n  t	 d% | | | d | d | d | d& f d | ƒ| j2 | | | d | d | d | d& ƒ q3WqïWn  t! | | j" d' ƒ ƒ r8| j j j d  k r]| j d  k	 rJ| j | j j _ q]t d( d) ƒ ‚ n  t3 | j j j ƒ } t	 d* | d | ƒ| j4 | ƒ | j j j d  k rß| j d  k	 rÌ| j | j j _ qßt d+ d) ƒ ‚ n  | j j j j5 ƒ  } t	 d, d- j6 g  | D] } d. | ^ qƒ d | ƒ| j7 | ƒ n  | d  k	 r§| j j j8 j9 d  k rt| j: | j j j8 _9 n  | j j j8 j; d  k r§| j< | j j j8 _; q§n  t= d/ d0 | d1 d2 d3 d2 d4 d2 ƒ j> } t	 d5 | d | ƒ| ƒ  } | |  _? | d  k	 rú
t	 d6 | j@ d | ƒ| | |	 ƒ } tA | d7 ƒ t	 d8 d | ƒt	 d9 d | ƒ| j7 | jB ƒ  ƒ | jC | jD ƒ  ƒ | jE jF r³| jE jG d  k r³|  jH | ƒ | jE _G q³n  | j
 d: ƒ r| dx k rt	 d< d | ƒ| jI | jJ ƒ  | jK ƒ  | jL ƒ  ƒ në| j
 d= ƒ rñ
t	 d> d | ƒ| jM | jJ ƒ  ƒ x¶| j j D]¥} | j. } x| j+ D]} | j1 } t	 d? | | f d | ƒt	 d@ | | f d | ƒt	 dA | | f d | ƒt	 dB | | f d | ƒt	 dC | | f d | ƒt	 dD | | f d | ƒ| jN | | ƒ } | jO | | ƒ } | jP | | ƒ } | jQ | | ƒ } | jR | | ƒ } | jS | | ƒ } t	 dE dF | | f d | ƒ| jT | | | | | | | | ƒ | jU | jV g jW d  ƒ d k ré	t dG dH ƒ ‚ q^| jU d  k	 r"
t	 dI | jU d | ƒ| jX | jU ƒ q^| jV d  k	 r^| jV dJ } t	 dI | d | ƒ| jX | ƒ q^q^W| j/ d  k	 r¨
t	 dK | | j/ f d | ƒ| jY | | j/ ƒ qE| j0 d  k	 rEt	 dL | | j0 f d | ƒ| jZ | | j0 ƒ qEqEWn  ~ ~ n  t[ }  }! t! | | j" dM ƒ ƒ r¥t( | j j\ ƒ d k r¥t( | j j] ƒ d k sRt) ‚ t( | j j^ j_ ƒ d k sst) ‚ t( | j j ƒ d k s‘t) ‚ | j j` d  k	 rµ| j j` d k s»t) ‚ | j ja d  k	 rß| j ja d k såt) ‚ | j jb d  k	 rct( | j j\ ƒ t( | j jb ƒ k s!t) ‚ x— tc | j j\ | j jb ƒ D] \ }" }# | jd dN |" |# ƒ q=WnX | j je d  k	 r»xC tc | j j\ | j je ƒ D]# \ }" }$ | jf dN |" |$ dO ƒ q‘Wn  | j jg d  k	 r| j jh dP k rþ| ji | j jg | j j` ƒ q| jj | j jg | j j` ƒ nb | j jk d  k	 r| j jh dP k r`| jl | j jk | j j` ƒ q| jm | j jk | j j` ƒ n  | jn dN | j ja ƒ t }  }! q¥n  t! | | j" dQ ƒ ƒ rðx0to | j j] ƒ D]\ }% }& |& jp }' |' d  k rt dR |% d ƒ ‚ n  t( |& jq ƒ d k rÞ|& jr d  k	 rCt dS dT |' ƒ ‚ n  x]to |& jq ƒ D]L\ }( }) |) js d  k r�t dU dV |' |( d f ƒ ‚ n  |) jt sl|) ju |) jv g jW d  ƒ d k rÓt dW dX |) js ƒ ‚ qŸ|) ju d  k	 r't	 dY |' |) js t3 |) ju ƒ f d | ƒ| jd |' |) js |) ju ƒ qŸt	 dZ |' |) js t3 |) jv ƒ f d | ƒ| jf |' |) js |) jv ƒ qSt	 d[ |' |) js f d | ƒ| jw |' |) js t ƒ qSW|& jx r¿| jy |' t ƒ n  |& jz rh| j{ |' t ƒ qhnŠ|& jr d  k	 rh|& }* |* j| d  k rt d\ |' ƒ ‚ n  |* j} d  k s]t( |* j} ƒ d& k s]|* j~ d  k s]t( |* j~ ƒ d& k rxt d] d^ d_ |' ƒ ‚ n  d  |* j |* j€ g k s®|* j d k rÅ|* j€ d k rÅt d` da |' ƒ ‚ n  |* j| j' d ƒ \ }+ }, t	 db dc |' |* jr |+ |, t3 |* j} ƒ |* j� t3 |* j~ ƒ |* j |* j€ f	 d | ƒ| j‚ |' |* jr |+ |, |* j} |* j� |* j~ |* j |* j€ ƒ	 n  |& jƒ d  k	 r¶t	 dd |& jp |& jƒ f d | ƒ| j„ |& jp |& jƒ ƒ t }  n  |& j… rÐt	 de |& jp d | ƒ| j† |& jp ƒ qÐqÐWn  t! | | j" df ƒ ƒ r |! r6t( | j j ƒ d k r6t dg ƒ ‚ n  xç to | j j ƒ D]Ð \ }% }- |- j‡ d  k r{t dh |% d ƒ ‚ qIt( |- j‡ ƒ d k r×t	 di |- j‡ d t3 |- jˆ ƒ f d | ƒ| jn |- j‡ d |- jˆ ƒ qIt	 dj t3 |- j‡ ƒ t3 |- jˆ ƒ f d | ƒ| j‰ |- j‡ |- jˆ ƒ qIWn  t! | | j" dk ƒ ƒ rQ|  sQ|  jŠ | ƒ qQn  | j j‹ d  k	 rftŒ j� jŽ | j j‹ ƒ s�t) ‚ t� j� | j j‹ ƒ }. t‘ |. dl ƒ r´|. j’ ƒ  }. n  t“ |. ƒ j@ dm k rØ|. j” ƒ  }/ n |. j• ƒ  }/ t( |/ ƒ d k rt dn ƒ ‚ n  | dy k r3|/ j– ƒ  sVt dq dr ƒ ‚ qVn# |/ j– ƒ  rVt ds dt du ƒ ‚ n  | j— |/ ƒ n  | j j }0 | j˜ dv ƒ }1 t™ | |1 | | ƒ | jš | ƒ | |  _ t	 dw | d | ƒ| j› ƒ  |  _œ | |  _? | |  _ d  S(z   Ns   import phaserR0   t   MR_s   data = phaser.InputMR_DAT()t   EP_s   data = phaser.InputEP_DAT()s   [^a-zA-Z0-9_\-\.]{1,}s+   Please define a root filename for this run.s8   The root filename must be alphanumeric (underscores OK).Rn   RQ   R­   s   phaser.hklins/   You must specify a reflections file in mode %s.s3   You must specify reflection data labels in mode %s.RŸ   R    R¡   s   data.setHKLI('%s')t   ,i   s   data.setLABI('%s','%s')i    i   s   phaser.crystals"   Crystal data required for mode %s.s(   Only one crystal supported at this time.s+   Only one wavelength supported at this time.s5   For each crystal, you may supply heavy-atom sites as s-   EITHER a PDB file OR 'ha' file, but not both.i   s2   The data labels %s do not appear to correspond to s@   the appropriate data type.  For experimental phasing, data must s>   be merged, anomalous amplitudes in MTZ format.  The graphical s>   reflection file editor (phenix.reflection_file_editor) can be s$   used to convert the data as neeeded.s:   data.addCRYS_ANOM_LABI('%s', '%s', '%s', '%s', '%s', '%s')i   s   phaser.crystal_symmetrys4   Couldn't determine space group information - please s#   supply crystal symmetry parameters.s   data.setSPAC_NAME('%s')s2   Couldn't determine unit cell information - please s   data.setCELL6([%s])s   , s   %.3ft   import_paths   phaser.Input%st   error_prefixt    t   target_must_bet	   where_strs   input = phaser.Input%s()s   r = phaser.%s(data)s   setting up data inputss   input.setCELL6(r.getUnitCell())s)   input.setSPAC_HALL(r.getSpaceGroupHall())t   MRR   s7   input.setREFL(r.getMiller(),r.getFobs(),r.getSigFobs())t   EPs#   input.setCRYS_MILLER(r.getMiller())s   Fpos = r.getFpos('%s', '%s')s   Spos = r.getSIGFpos('%s', '%s')s   Ppos = r.getPpos('%s', '%s')s   Fneg = r.getFneg('%s', '%s')s   Sneg = r.getSIGFneg('%s', '%s')s   Pneg = r.getPneg('%s', '%s')s6   input.addCRYS_ANOM_DATA('%s','%s',Fpos,Spos,Ppos,Fneg,s
   Sneg,Pneg)s-   Please enter EITHER a wavelength (Angstroms) s   OR energy (eV), but not both.s   input.setWAVE(%.5f)g     7È@s   input.setATOM_PDB('%s','%s')s   input.setATOM_HA('%s','%s')s   phaser.modelt   ense_1g{®Gáz„?t   proteins   phaser.ensembles"   Missing model ID for ensemble #%d.s/   Please specify either PDB files or an MTZ file s   for ensemble %s, but not both.s0   Missing PDB file for ensemble %s coordinate set s   %d.s,   Please specify EITHER an RMSD OR fractional s   identity for PDB file %s.s#   input.addENSE_PDB_RMS('%s','%s',%s)s"   input.addENSE_PDB_ID('%s','%s',%s)s(   input.addENSE_PDB_CARD('%s', '%s', True)s,   You must specify labels for map data for %s.s2   You must specify the extent and center of the map s<   used for ensemble %s; this must both take the form of three s%   decimal numbers between zero and one.s2   Please specify protein and/or nucleic acid masses s   for ensemble %s.s8   input.addENSE_MAP('%s', '%s', '%s', '%s', %s, %.3f, %s, s
   %.1f, %.1fs   input.setENSE_FRAC('%s',%s)s   input.addSOLU_ORIG_ENSE('%s')s   phaser.searchs   No search procedure defined.s.   No model IDs supplied for search component %d.s   input.addSEAR_ENSE_NUM('%s',%s)s%   input.addSEAR_ENSE_OR_ENSE_NUM(%s,%s)s   phaser.compositiont   get_phaser_objectt   ResultMR_RFs/   The specified previous solutions file is empty.R   R   s6   Input solutions for the translation functions must be s$   the output from a rotation function.s0   The specified solutions file is from a rotation s:   function; both rotation and translation are required when s,   supplying an existing solution in this mode.s   phaser.keywordss   result = phaser.run%s(input)(   R   (   R   R   (�   t   working_philR@   RŸ   R}   R4   R   t   _script_outR!   t
   input_dataRE   R&   t   InputMR_DATt	   runMR_DATt   InputEP_DATt	   runEP_DATt   Outputt   setPackagePhenixt   dry_runt   show_scriptt   setMUTERO   R´   Rµ   R�   R‘   R’   R   R·   Rw   Rn   Rm   R	   R    R   t   get_phaser_modesR~   Re   Ru   t   setHKLIR"   R¸   R?   t   setLABIR²   R¬   R¶   R±   t   pdb_filet   ha_fileR³   t   addCRYS_ANOM_LABIRF   t   setSPAC_NAMEt
   parametersR#   t   setCELL6R®   R¯   R�   R°   Rœ   R   t   objectR2   RK   t   handle_runtime_errort   getUnitCellt   setSPAC_HALLt   getSpaceGroupHallt   density_modificationt   dmt   solvent_fractiont   get_solvent_contentt   setREFLt	   getMillert   getFobst
   getSigFobst   setCRYS_MILLERt   getFpost
   getSIGFpost   getPpost   getFnegt
   getSIGFnegt   getPnegt   addCRYS_ANOM_DATAt
   wavelengtht   energyRŽ   t   setWAVEt   setATOM_PDBt
   setATOM_HAR„   t   modelt   ensemblet   compositiont   chaint   component_copiest   search_copiest
   model_rmsdt   zipt   addENSE_PDB_RMSt   model_identityt   addENSE_PDB_IDt   seq_filet
   chain_typet   addCOMP_PROT_SEQ_NUMt   addCOMP_NUCL_SEQ_NUMt
   mol_weightt   addCOMP_PROT_MW_NUMt   addCOMP_NUCL_MW_NUMt   addSEAR_ENSE_NUMt	   enumeratet   model_idt   coordinatest	   map_hklint   pdbt   read_variance_from_pdb_remarkst   rmsdt   identityt   addENSE_PDB_CARDt   disable_checkt   setENSE_DISA_CHECt
   use_hetatmt   setENSE_HETAt
   map_labelst
   map_extentt
   map_centret   map_protein_mwt   map_nucleic_mwt   map_rmst   addENSE_MAPt   fractional_compt   addCOMP_ENSE_FRACt   solution_at_origint   addSOLU_ORIG_ENSEt	   ensemblest   copiest   addSEAR_ENSE_OR_ENSE_NUMt   set_compositiont   solutionR”   R•   t   isfileR   t   loadt   hasattrRÏ   RJ   t   getDotRlistt	   getDotSolt   is_rlistt   setSOLUt   get_scope_by_nameRN   t   update_from_pythont   getvaluet   script(2   Rž   t   indext   working_dirR¡   RŸ   R4   R-   R¶   t   run_data_classt
   phaser_outR¿   R    t   process_dataRÁ   R¼   t   xtalidR²   t   waveidRm   Rn   t   xt   input_classR2   t   rt   wavet   Fpost   Spost   Ppost   Fnegt   Snegt   PnegRû   t   have_compositiont   have_searchRà   R  R  t   iR  R  t   jt   coordst   enst   f_labelt	   phi_labelt	   componentt
   old_resultR/  R�   R3   (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_interface/driver.pyR¨   ¤  sZ   				!		"			0.		(		"!
!*		!	 	 			$$		&		c         C  sÒ   |  j  } | j j j d  k	 r+ | j j j St j ƒ  } | j | j ƒ  ƒ | j | j	 ƒ  ƒ |  j
 | d t ƒ  ƒ| j t ƒ t j | ƒ } | j ƒ  s¶ t d d d d ƒ ‚ n  | j ƒ  } d d | Sd  S(   NR5   s8   Could not determine solvent fraction automatically.  If sB   you want to use density modification, we recommend you explicitly s@   set the solvent fraction (available under "Density modification"s   in the Settings menu).g      ð?g®Gáz®ó?(   RŸ   R}   R  t   solventR!   t   InputCCARé   Rê   Rå   Rè   R.  R   RÜ   RO   t   runCCAt   SuccessR   t	   getBestVM(   Rž   t   data_resultRŸ   R2   RD  t   vm(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_interface/driver.pyRî   ú  s    	c         C  sw  |  j  } | d  k r! |  j } n  | } | d  k r? |  j } n  | j j j d  k	 rŸ t | j j j ƒ d k r‚ t	 d d ƒ ‚ n  t
 d d | ƒ| j ƒ  nt | j j j ƒ d k r˜t
 d d | ƒ| j ƒ  xÛt | j j j ƒ D]§\ } } d d d	 d
 g } g  | D] } t | | ƒ ^ q}	 |	 j d  ƒ d k r^t	 d d d | d ƒ ‚ n  | j d  k r„t	 d | d ƒ ‚ n  | j d k rœd }
 n d }
 | j d  k	 rÇ|
 d 7}
 | j } n] | j d  k	 rì|
 d 7}
 | j } n8 | j d  k	 r|
 d 7}
 | j } n |
 d 7}
 | j } t | |
 ƒ } t | t ƒ rOd | } n t | ƒ } t
 d |
 | t | j ƒ f d | ƒ| | | j ƒ qê Wn t
 d d | ƒ| j ƒ  x¾ t | j j j ƒ D]§ \ } } | j d  k sò| j d  k rt	 d d | d ƒ ‚ n  t
 d | j | j f d | ƒy | j | j | j ƒ WqÈt k
 rn} t	 t | ƒ ƒ ‚ qÈXqÈWd  S(   Ni    s4   Please specify EITHER fractional solvent content OR s$   individual components, but not both.s   input.setCOMP_SOLV()R0   s   input.setCOMP_ASU()t   sequence_filet   sequencet   nrest   mwi   s2   Please specify ONE source of mass information for s=   chain #%d: sequence file, sequence string, # of residues, or s   molecular weight (Da).i   s4   Please specify a number of copies for component #%d.RÎ   t   addCOMP_PROT_t   addCOMP_NUCL_t   SEQ_NUMt   STR_NUMt   NRES_NUMt   MW_NUMs   '%s's   input.%s(%s,%s)s   input.setCOMP_AVER()s.   Please specify an element and number of atoms s   for heavy atom %d.s    input.addCOMP_ATOM_NUM('%s', %d)(   RŸ   R!   RÒ   R2   R}   R  RV  R¸   R  R   RE   t   setCOMP_SOLVt   setCOMP_ASUR  RD   RŽ   t   numR  R]  R^  R_  R`  RH   RF   t   setCOMP_AVERt   atomt   elementt   addCOMP_ATOM_NUMt
   ValueError(   Rž   R2   R5   RŸ   R-   RN  R  t	   mass_attrR(   t   massesR,   t
   mass_valueRY   t	   out_valueRk  R]   (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_interface/driver.pyR.    st    	
""	



	
"c      
   C  sQ  t  d d |  j d d d d d d ƒ j } t j ƒ  } | rL t j ƒ  } n t j ƒ  } t	 ƒ  } t
 |  j j j j j d d ƒ } | j d	 | ƒ | j d
 | ƒ | j | ƒ | rÆ | j | ƒ n  z6 | |  j | ƒ } | j ƒ  t | d ƒ | |  _ Wd  | j ƒ  X|  j j j rMd d l m }	 g  }
 |  j j j j d ƒ rf|  j j j j j d g }
 nM |  j j j j d ƒ r³|  j j j j j d |  j j j j j d g }
 n  | j d d d d  ƒ xh |
 D]` } t j j | ƒ rÐ| j d d d d | ƒ |	 j  d | d |  j! d |  j j d | ƒ qÐqÐW| j d d d d  ƒ n  d  S(   NRÆ   s   phaser.run%sRÇ   RÈ   RÉ   RÊ   s   .logt   ws   Primary output streams   Phaser logfiles   running main functioniÿÿÿÿ(   Rì   RË   s   .1.mtzRÌ   s   .1.hand.mtzt   messaget   phaser_startR¶   t   MODEs   density modification with %st   phases_filet   f_obsRŸ   Rz   t
   phaser_end("   R   R4   Ræ   R}   RØ   R   t   managert   oopt   nullR   t   openRŸ   R�   R‘   R’   t   registerRÙ   t   setPhenixCallbackR2   t   flush_summaryRç   t   resultt   closeRë   Rì   t   phaser.phenix_interfaceR&   t	   call_backR!   R”   R•   R0  t   run_density_modificationRÓ   (   Rž   R¡   t   use_callbackt	   run_classR>  t   callbackt   out_wrappert   log_fileRD  Rì   t	   mtz_filesRf   (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_interface/driver.pyt   runP  sP    	"
		(
   RK   R©   Rª   R«   R¨   Rî   R!   R.  RO   RŒ  (    (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_interface/driver.pyRÂ   £  s
   ÿ W	Ac         C  s8   |  j  ƒ  s4 t d | |  j ƒ  |  j ƒ  f ƒ ‚ n  d  S(   Ns   ERROR %s (%s): %s(   RY  R   t	   ErrorNamet   ErrorMessage(   R�  t	   procedure(    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_interface/driver.pyRç   |  s    c         C  s‹  y d d l  m } Wn t k
 r3 t j ƒ  } n Xd d  l } | j ƒ  g  } | d  k	 r~ | j j	 | ƒ } | j
 | ƒ n  | d  k	 rš | j
 | ƒ n  t ƒ  } | j j d |  d | d d d d d	 d
 ƒ }	 |	 j } t j | | d | j j	 ƒ}
 |
 j ƒ  } | j r | j d | ƒ t S| j j d  k	 rm| j j d  k rm| j j j rmd d l m } | j | j j d d ƒ} | j d ƒ d  } } xŽ | j j D]€ } | j ƒ  j  ƒ  } | d k rÑ| } Pq£| j! ƒ  r| j" d ƒ r| d  k r| } q£| j# ƒ  r£| d  k r£| } q£q£W| d  k	 rB| | j _ n | d  k	 r]| | j _ n  |
 j$ | ƒ n  | } | j% sˆt& ƒ  } n  t' |
 t( j) ƒ  d | ƒ} | j* rÀ| j+ | j, ƒ t S| j- rÿt. | j/ _- |
 j$ | j/ ƒ |
 j0 ƒ  j d | ƒ t S| j% r!|
 j0 ƒ  j d | ƒ n  | j1 d | ƒ | j/ } | j2 d d d ƒ| j d | d d ƒ t3 d | j4 d | d t( j) ƒ  ƒ } | S(   Niÿÿÿÿ(   t	   citationsRV   t   master_philt   pdb_file_defs   phaser.modelt   reflection_file_defs   phaser.hklint   seq_file_defs   phaser.seq_filet   parseR¡   (   R   t
   force_typeRv   s   F,SIGFs   FOBS,SIGFOBSs   F(+),SIGF(+),F(-),SIGF(-)t   FCR}   t   sourcet   Phasert   phaser_objectRŸ   t   run_dir(   s   F,SIGFs   FOBS,SIGFOBSs   F(+),SIGF(+),F(-),SIGF(-)(5   t   phenix.utilitiesR�  t   ImportErrorR{  R|  t
   iotbx.philt   clear_citationsR!   t   philR•  RC   R   t   process_command_line_with_filest   workt   phil_interfaceR;  t   get_python_objectt   show_defaultsRA   RO   R}   R~   Re   t   run_controlt   gui_runt   iotbxR   R   R€   t   file_serverRd   Rb   Rc   R‹   R&   R†   R8  t   verboseR   RÂ   R”   t   getcwdRÛ   Rš   R:  RÚ   R„   RŸ   t   get_diffRŒ  t   add_citationR   R�  (   RV   R¡   t   phil_strRÑ   R�  R¨  t   sourcest
   input_philR‘  t   cmdlineR;  RŸ   R   R~   RR  t   i_labelR>   t   labelt   tmp_outt
   run_phaserR�  (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_interface/driver.pyRŒ  ‚  sŒ    
				$
							(4   t
   __future__R    R   R}   R   Rƒ  R   R   R   R   R   R¨  R   Rž  R‡   R	   R
   t   scitbx.array_familyR   t   libtbxR   R{  t   libtbx.utilsR   R   R   R   t   libtbx.philR   R£  t   libtbx.str_utilsR   R   R”   R´   Rª   t   enablet   mr_modest   ep_modesR!   R„   R/   RN   Ri   Rt   Ræ   Ru   R¬   RÂ   Rç   R«   RŒ  (    (    (    sL   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/phenix_interface/driver.pyt   <module>   s@   "
™		Nsÿ Ú	