ó
†™xTc           @   s  d  d l  m Z d  d l m 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 Z d  d l Z e j j d ƒ Z d d d d e e j d	 „ Z d
 e f d „  ƒ  YZ d „  Z d „  Z d „  Z d „  Z e d k re e j d ƒ n  d S(   iÿÿÿÿ(   t   division(   t   miller(   t   crystal(   t   sgtbx(   t   flex(   t   show_stringNt   iotbx_scalepack_extc   &      C   sB  t  |  j ƒ  ƒ } |  j ƒ  r0 |  j ƒ  d  k	 s6 t ‚ t | ƒ j d k r{ | j ƒ  j |  j ƒ  ƒ sl t ‚ | j	 ƒ  } n! | d  k rœ t
 j | d ƒ } n  t | ƒ j d k rá | j ƒ  j |  j ƒ  ƒ sÒ t ‚ | j	 ƒ  } n! | d  k rt
 j | d ƒ } n  t  | ƒ t  | ƒ k o%| k n s0t ‚ | | g j d  ƒ d k sQt ‚ | d  k rot | d ƒ } n  | } |  j ƒ  }	 |  j ƒ  j	 ƒ  }
 |  j ƒ  j ƒ  } |  j ƒ  } | j ƒ  | j ƒ  k } t
 j | d ƒ } | j | j ƒ  d ƒ | j |
 j ƒ  d ƒ |  j ƒ  j ƒ  } t
 j | d ƒ } t j |	 j ƒ  t | | ƒ |	 j ƒ  } | j d | |  j ƒ  f ƒ x• |	 j ƒ  D]‡ } | j ƒ  d d !} | j ƒ  d } x | D] } | j d | ƒ q®W| j d	 ƒ x | D] } | j d | ƒ qÝW| j d	 ƒ q~W| r4d
 d l m } | |  d | ƒ}  n  d
 d l m } xí t  |  j ƒ  ƒ D]Ù \ } \ } } } | | \ } } } | | }  t! | | ƒ d }! | | }" | | }# | | | | f d |  j	 ƒ  | ƒ }$ | | | | f d |  j ƒ  | ƒ }% | j d | | | | | | |# |  |" |! |$ |% f ƒ qWW| j" ƒ  d  S(   Nt   arrayi    i   t   wi   s   %5d %s
i	   s   %3ds   
iÿÿÿÿ(   t   scale_intensities_if_necessaryt   out(   t   format_f8_1_or_i8t	   intensityt   sigmas#   %4d%4d%4d%4d%4d%4d%6d%2d%2d%3d%s%s
(#   t   lent   indicest   is_xray_intensity_arrayt   sigmast   Nonet   AssertionErrort   typet   __name__t   all_eqt   dataR   t   intt   countt   opent   space_groupt   centric_flagst   as_non_anomalous_arrayt
   map_to_asut   set_selectedt
   iselectiont	   deep_copyR   t   map_to_asu_isymt   Falset   n_smxt   writet   space_group_infot   smxt   as_int_arrayt   iotbx.scalepack.mergeR	   R   t	   enumeratet   abst   close(&   t   i_obst   file_objectt	   file_namet   batch_numberst   spindle_flagst%   scale_intensities_for_scalepack_mergeR
   t   n_reflt   fR   R   t	   i_obs_asut   i_obs_asu_anomt   friedel_mate_flagst   centric_tagst   uniq_indicest   isymR$   R'   t   smx_rott   smx_trat   rt   tR	   R   t   i_reflt   ht   kt   lt   h_asut   k_asut   l_asut   c_flagt
   asu_numbert   spindle_flagt   batcht   i_formattedt   s_formatted(    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/scalepack/no_merge_original_index.pyt   writer   sn    $!!.!(


%%	t   readerc           B   s€   e  Z e d  „ Z d „  Z d	 d d „ Z d „  Z d	 e d „ Z d	 e e	 d	 d „ Z
 d	 e e	 d	 d „ Z d	 e d	 d „ Z RS(
   c      	   C   sO  t  j j | ƒ |  _ t | ƒ } | j ƒ  } | d d k sC t ‚ t | d  j ƒ  ƒ } | d k sk t ‚ | d j ƒ  |  _	 t
 j ƒ  |  _ xt | ƒ D]þ } | j ƒ  j ƒ  } t | ƒ d k sÊ t ‚ t
 j g  t d ƒ D]% } t | | d | d d !ƒ ^ qÝ d ƒ } | j ƒ  j ƒ  } t | ƒ d k s8t ‚ t
 j g  t d ƒ D]% } t | | d | d d !ƒ ^ qKd	 ƒ }	 |  j j t
 j | |	 ƒ ƒ qš W| j ƒ  | r¹d  |  _ d  St j | | d
 d ƒ }
 |
 j ƒ  |  _ |
 j ƒ  |  _ |
 j ƒ  |  _ |
 j ƒ  |  _ |
 j ƒ  |  _ |
 j ƒ  |  _ |
 j ƒ  |  _ |
 j ƒ  |  _ d  S(   Ni   t    i    i   i   i	   i   i   i   i   (    t   ost   patht   normpathR/   R   t   readlineR   R   t   stript   space_group_symbolR   R   t   space_group_from_opst   xranget   rstripR   t   rot_mxt   tr_vect
   expand_smxt   rt_mxR,   R   t   original_indicest   scalepack_extt   no_merge_original_index_arrayst   unique_indicesR0   R8   R1   t   asymmetric_unit_indicesR-   R   (   t   selfR/   t   header_onlyR4   t   linet   n_sym_ops_from_filet   it   jR=   R>   t
   all_arrays(    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/scalepack/no_merge_original_index.pyt   __init__k   s<    DD 
	c         C   s   t  d |  j d |  j ƒ S(   NRU   RT   (   t   combine_symops_and_symbolRU   RT   (   Ra   (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/scalepack/no_merge_original_index.pyR&   ‹   s    	t    c         C   sÖ   | d  k r t j } n  | | d It |  j ƒ IJ| | d It |  j ƒ IJy |  j ƒ  } Wn$ t k
 rx ‚  n+ t k
 rˆ n X| j	 d | d | d ƒ |  j
 d  k	 rÒ | | d I|  j
 j ƒ  IJn  d  S(   Ns
   File name:s   Space group symbol:R4   t   prefixs   Space group from operations: s   Number of original indices:(   R   t   syst   stdoutR   R/   RT   R&   t   KeyboardInterruptt	   Exceptiont   show_summaryR\   t   size(   Ra   R
   Rk   R&   (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/scalepack/no_merge_original_index.pyRp   �   s         	c         C   s   t  j d d  d |  j ƒ  ƒ S(   Nt	   unit_cellR&   (   R   t   symmetryR   R&   (   Ra   (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/scalepack/no_merge_original_index.pyt   crystal_symmetryŸ   s    	c         C   sq   | s% | d  k s% | j ƒ  d  k r4 |  j ƒ  } n d  } t j d |  j ƒ  j d | d | ƒ d |  j d t ƒ S(   NRt   t   other_symmetryt   forceR   t   anomalous_flag(   R   R&   R   t   setRt   t   join_symmetryR\   t   True(   Ra   Rt   t   force_symmetryR&   (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/scalepack/no_merge_original_index.pyt   unmerged_miller_set¤   s    			c         C   sÍ   | d  k r! t j d d ƒ } n  |  j ƒ  } | j d | d | ƒ } t j d |  j d | d t ƒ d |  j d	 |  j	 ƒ } | r– | j
 ƒ  j ƒ  } n  | j | j d
 d d d d g d | d | ƒ ƒ j ƒ  S(   Nt   source_typet!   scalepack_no_merge_original_indexRu   Rv   t
   miller_setRt   R{   R   R   t   labelss   I(+)s   SIGI(+)s   I(-)s   SIGI(-)t   mergedt   crystal_symmetry_from_file(   R   R   t
   array_infoRt   Ry   R   R|   Rz   R-   R   t   merge_equivalentst   set_infot   customized_copyt#   set_observation_type_xray_intensity(   Ra   Rt   R{   R„   t   base_array_infoR‚   t   result(    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/scalepack/no_merge_original_index.pyt   as_miller_array²   s(    								c      	   C   s%   |  j  d | d | d | d | ƒ g S(   NRt   R{   R„   Rˆ   (   RŠ   (   Ra   Rt   R{   R„   Rˆ   (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/scalepack/no_merge_original_index.pyt   as_miller_arraysÍ   s
    	c         C   sŽ   | d  k r! t j d d ƒ } n  |  j ƒ  } | j d | d | ƒ } t j d |  j d | d t ƒ d |  j ƒ j	 | j
 d	 d
 g d | ƒ ƒ S(   NR}   R~   Ru   Rv   R   Rt   R{   R   R€   t   BATCHR‚   (   R   R   Rƒ   Rt   Ry   R   R|   Rz   R0   R…   R†   (   Ra   Rt   R{   Rˆ   R‚   (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/scalepack/no_merge_original_index.pyt   batch_as_miller_arrayØ   s    								N(   R   t
   __module__R#   Rh   R&   R   Rp   Rt   R|   Rz   RŠ   R‹   R�   (    (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/scalepack/no_merge_original_index.pyRM   j   s     		c         C   sz  | j  d d ƒ j ƒ  } | d  } d j | ƒ d k  rP t d t | ƒ ƒ ‚ n  | d k rl t j d |  ƒ S| d	 k r“ d
 | d d } d
 } nÃ | d
 k rV| j d ƒ rV| j d ƒ rÇ d  } qVxŒ |  D]� } | j	 ƒ  j
 ƒ  } t | j ƒ  ƒ d k rÎ | j ƒ  d k r&d
 | d d } PqO| j ƒ  d k rO| d 7} d  } PqOqÎ qÎ Wn  t j |  ƒ } | d  k	 rŸy | j | ƒ WqŸt k
 r›d  } qŸXn  | d  k	 räy t j d | ƒ j ƒ  } Wqät k
 ràd  } qäXn  | d  k s| d  k s| | k rj| rQt j d i t | j
 ƒ  ƒ d 6t | ƒ d 6t d d ƒ| } qjt d t | ƒ ƒ ‚ n  t j d | ƒ S(   NRN   Rj   i   t   PABCIFRHi    sB   Cannot determine lattice centring type given space group symbol %st   Pt   groupt   Ht   Rs   :Hs   :Ri   t   symbolsá   
WARNING:
  Symmetry operations in input file are for space group %(space_group_exp)s
  However space group symbol is: %(space_group_symbol)s
  This may be a format error in the Scalepack file!
  Using %(space_group_symbol)s
t   space_group_expRT   t
   stackleveli
   sV   Symmetry operations in unmerged SCALEPACK file incompatible with space group symbol %s(   i    i    i   (   i   i   i   (   t   replacet   uppert   findt   RuntimeErrorR   R   R&   t   endswithR   R=   t   infoR+   R   t   evR   t!   expand_conventional_centring_typeR‘   t   warningst   warnt   strt   UserWarning(   RU   RT   t   zt   st   r_infoR•   t   space_group_from_symbol(    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/scalepack/no_merge_original_index.pyRi   ì   sb    
		
		c          C   sB  x;t  j ƒ  D]-}  t  j d d |  j ƒ  ƒ j ƒ  } t  j ƒ  } x+ t | ƒ | j ƒ   D] } | j | ƒ qX Wt	 d | d |  j
 ƒ  ƒ } | j ƒ  | k s¢ t ‚ |  j ƒ  d	 k r t	 d | d |  j ƒ  ƒ } | j ƒ  | k sç t ‚ |  j ƒ  d k r:t	 d | d d |  j ƒ  d ƒ } | j ƒ  | k s7t ‚ q:q q Wd  S(
   NR”   s   Hall: %sRU   RT   R“   R’   s   H i   (   R“   R’   (   R   t   space_group_symbol_iteratorR&   t   hallR‘   R   t   listt   order_pRZ   Ri   t   universal_hermann_mauguinR   t	   extensiont   hermann_mauguin(   t   symbolsR   RU   R¤   t   combined(    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/scalepack/no_merge_original_index.pyt"   exercise_combine_symops_and_symbol'  s(    	c         C   sï  d d l  m } | ƒ  } t |  ƒ } d G| j ƒ  GH| j ƒ  t | j d  ƒ GHt | j d  ƒ GHt | j d  ƒ GHt | j	 d  ƒ GHt | j
 d  ƒ GHt | j d  ƒ GHt | j d  ƒ GHt | j d  ƒ GHt | j d ƒ GHt | j d ƒ GHt | j d ƒ GHt | j	 d ƒ GHt | j
 d ƒ GHt | j d ƒ GHt | j d ƒ GHt | j d ƒ GH| j d t ƒ j ƒ  } d Gt j | j ƒ  j ƒ  ƒ GHd Gt j | j ƒ  j ƒ  ƒ GHd	 Gt j | j ƒ  j ƒ  j ƒ  ƒ GH| j ƒ  d
 j ƒ  Hd  S(   Niÿÿÿÿ(   t   user_plus_sys_times
   Time read:i   iýÿÿÿR„   s   min redundancies:s   max redundancies:s   mean redundancies:i    (   t   libtbx.utilsR±   RM   t   deltaRp   t   tupleR\   R_   R0   R8   R1   R`   R-   R   RŠ   R#   R„   R   t   mint   redundanciesR   t   maxt   meant	   as_doubleR‹   (   R/   R±   R>   R¤   t   m(    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/scalepack/no_merge_original_index.pyt
   quick_test=  s6    	
$c         C   st   t  ƒ  d j ƒ  } xU | D]M } xD |  D]< } | d | } t j j | ƒ r' d G| GHt | ƒ q' q' Wq Wd GHd  S(   Ns×  
p9/data/infl.sca
p9/data/peak.sca
p9/data/high.sca
rh-dehalogenase/data/auki_rd_1.sca
rh-dehalogenase/data/hgi2_rd_1.sca
rh-dehalogenase/data/hgki_rd_1.sca
rh-dehalogenase/data/ndac_rd_1.sca
rh-dehalogenase/data/rt_rd_1.sca
rh-dehalogenase/data/smac_1.sca
vmp/data/infl.sca
vmp/data/peak.sca
vmp/data/high.sca
bnl_2003/karen/shelxd/p123-unmerged.sca
bnl_2003/karen/shelxd/pk1-unmerged.sca
bnl_2003/karen/shelxd/pk12-unmerged.sca
bnl_2003/karen/shelxd/pk1234-unmerged.scat   /s
   File name:t   OK(   R°   t   splitRO   RP   t   isfileR»   (   t   argst
   file_namesR/   t   root_dirt   fn(    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/scalepack/no_merge_original_index.pyt   runZ  s    	t   __main__i   (   t
   __future__R    t   cctbxR   R   R   t   cctbx.array_familyR   t   libtbx.str_utilsR   RŸ   Rl   RO   t   boost.pythont   boostt   pythont
   import_extR]   R   R#   Rm   RL   t   objectRM   Ri   R°   R»   RÄ   R   t   argv(    (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/scalepack/no_merge_original_index.pyt   <module>   s,   F‚	;			