ó
R™xTc           @   sp   d  d l  m Z d  d l Z d  d l Z d  d l Z e j Z d  d l m Z d e f d „  ƒ  YZ	 d „  Z
 d S(   iÿÿÿÿ(   t   divisionN(   t   extract_from_cif_filest   cod_datac           B   sr   e  Z d  g e j Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d	 „  Z d
 „  Z RS(   t   cod_idc         C   sœ  |  j  ƒ  | |  _ | \ } } d G| GHd G| GHd d  l } | j j d | ƒ } | j j d | ƒ } x| | g D]ø } xï | j ƒ  j ƒ  D]Û }	 |	 j d ƒ }
 |
 d k rÁ d |
 | f GHd  St |	 j	 ƒ  ƒ } t
 t d	 d
 g ƒ j | ƒ ƒ d k rd G| GHd  St
 t d d g ƒ j | ƒ ƒ d k r;d G| GHd  Sx* | D]" } | j d ƒ rBd G| GHd  SqBWq� Wqt W|  j d | d | d | d | d | ƒ d  S(   Ns
   refl_file:s   model_file:iÿÿÿÿt	   file_patht   _cod_error_flagt   errorst	   retracteds    SKIPPING: _cod_error_flag %s: %st*   _space_group_symop_ssg_operation_algebraict   _space_group_ssg_namei    s+   SKIPPING: COD entry with super-space group:t   _refln_index_mt   _refln_index_m_1s(   SKIPPING: COD entry with _refln_index_m:t   _pd_s%   SKIPPING: COD entry with powder data:t	   report_idt	   refl_filet   refl_cift
   model_filet	   model_cif(   s   errorsR   (   t   init_slots_with_noneR   t	   iotbx.cift   cift   readert   modelt   valuest   gett   sett   keyst   lent   intersectiont
   startswitht   process(   t   OR   t   hkl_cif_pairR   R   t   iotbxR   R   t   cif_objt	   cif_blockt   valueR   t   key(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/omz/cod_select_and_pickle.pyt   __init__   sF    
							c         C   s   |  j  j ƒ  j ƒ  j d ƒ S(   Ni    (   t   xray_structuret
   scattererst   extract_occupanciest   all_ne(   R   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/omz/cod_select_and_pickle.pyt   have_zero_occupancies2   s    c         C   sM   d d l  m } x6 |  j j ƒ  D]% } | j j ƒ  j ƒ  | k r  t Sq  Wt S(   Niÿÿÿÿ(   t.   shelxl_97_2_980324_tabulated_chemical_elements(	   t   cctbx.eltbx.xray_scatteringR,   R'   R(   t   scattering_typet   stript   uppert   Falset   True(   R   t   knownt   sc(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/omz/cod_select_and_pickle.pyt'   have_shelxl_compatible_scattering_types5   s
    c         C   sÕ   | d k r t  S|  j j d |  j ƒ } | j d | ƒ } | j ƒ  } d d l m } d d l m	 } | j
 d | d | j ƒ  j ƒ  d	 | j ƒ  ƒ } d
 G| j ƒ  GH| j ƒ  d k rÑ | j d	 | j ƒ  ƒ t St  S(   Ni    t	   selectiont   distance_cutoffiÿÿÿÿ(   t   crystal(   t   flext   pair_sym_tablet   orthogonalization_matrixt
   sites_fracs   Close contacts:(   R1   R'   t   selectt   non_hydrogen_iselectiont   pair_asu_tablet   extract_pair_sym_tablet   cctbxR8   t   cctbx.array_familyR9   t   get_distancest	   unit_cellR;   R<   t   sizet   show_distancesR2   (   R   t   min_distancet   xst   patt   pstR8   R9   t   dists(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/omz/cod_select_and_pickle.pyt   have_close_contacts=   s     	c         C   s"   |  j  j ƒ  j ƒ  j t ƒ d k S(   Ni    (   t   c_obst   sys_absent_flagst   datat   countR2   (   R   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/omz/cod_select_and_pickle.pyt   have_sys_absentO   s    c         C   s   |  j  j ƒ  S(   N(   RM   t   is_unique_set_under_symmetry(   R   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/omz/cod_select_and_pickle.pyt   have_redundant_dataR   s    c         C   s‰   |  j  j ƒ  d  k r% d G|  j GHt S|  j  j ƒ  d k |  j  j ƒ  d k @} |  j  j | ƒ j ƒ  j d ƒ } | r… d G|  j GHn  | S(   Ns   Missing sigmas:i    s   Zero or negative sigmas:(   RM   t   sigmast   NoneR   R2   RO   R=   t   all_gt(   R   t   selt   result(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/omz/cod_select_and_pickle.pyt   have_bad_sigmasU   s    (#c      	      sP  |  j  j ƒ  j ƒ  d k r t Sd d l m ‰ |  j  j d d ƒ ‰ ˆ j d |  j ƒ j	 ƒ  j
 ƒ  ‰  ˆ j d ˆ  d | j d	 | j d
 t ƒ } | d  k rŸ t S| j r,ˆ j ƒ  j ƒ  d k r,d d l m } |  j  j d d ƒ j ƒ  } ˆ j ˆ  j ƒ  ƒ } | j | j ƒ  | j ƒ  d ƒ | j ƒ  n  | \ } } } | } | j r™d d l m } | j | ƒ } | j | ƒ } | j ƒ  d k r­| j | j ƒ  | j ƒ  d ƒ nq | j | j ƒ  | j ƒ  d ƒ | j | ƒ } | j | ƒ } | j ƒ  d k r| j | j ƒ  | j ƒ  d ƒ n  | j | j d f d d | j f g d ƒ | j d | j f d | j d f g d ƒ | j d d g d ƒ | j ƒ  n  | j t ƒ | j ƒ  }	 ‡  ‡ ‡ f d †  }
 |
 ˆ ˆ  ƒ \ } } |
 ˆ j | ƒ ˆ  j | ƒ ƒ \ } } d |  j Gd | | |	 | | f GH|	 | j k r9t S| | j k  rLt St S(   Ni    iÿÿÿÿ(   R9   t	   algorithmt   xtal_3_7R'   t   f_calct
   offset_lowt   offset_hight   also_return_x_and_y(   t   pyplott   simplet   rot   boi   s   r-s   k--c            sn   ˆ j  |  j ƒ  | j ƒ  ƒ } | j ƒ  s0 t ‚ | j ƒ  } d d l m } ˆ j d ˆ  d | ƒ } | | f S(   Niÿÿÿÿ(   t   Autot   othert   scale_factor(   t   linear_correlationRO   t   is_well_definedt   AssertionErrort   coefficientt   libtbxRd   t	   r1_factor(   t   fot   fct   lct   ccRd   t   r1(   R\   t   f_obsR9   (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/omz/cod_select_and_pickle.pyt   cc_r1‡   s    s   f_obs_f_calc %ssB   | cc_all %.4f | r1_all %.4f | out %.4f | cc_in %.4f | r1_in %.4f |(   i    i    (   i   i   (    RM   t   indicesRE   R1   RB   R9   t   as_amplitude_arrayt!   structure_factors_from_scatterersR'   R\   t
   amplitudest"   f_obs_f_calc_fan_outlier_selectiont   fan_offset_lowt   fan_offset_highR2   RU   t   i_obs_i_calc_plotRk   R`   t   as_intensity_arrayRO   t   pow2t   plott   as_numpy_arrayt   showt   f_obs_f_calc_plotR=   t
   plot_pairsRP   R   t   max_fan_outlier_fractiont   min_f_obs_f_calc_correlation(   R   t   cot   fan_out_selR`   RH   t   yst   xt   yt
   fan_in_selt   fan_outlier_fractionRs   t   cc_allt   r1_allt   cc_int   r1_in(    (   R\   Rr   R9   sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/omz/cod_select_and_pickle.pyt   f_obs_and_f_calc_agree_well_   sd     					!	""&&'c         C   sÔ   |  j  d  k r t S|  j j ƒ  | j k r/ t S|  j ƒ  r? t S|  j | j ƒ rU t S|  j	 ƒ  se t S|  j
 ƒ  ru t S|  j ƒ  r… t S|  j ƒ  r• t S|  j | ƒ s¨ t S| j rÐ |  j j ƒ  j ƒ  d k rÐ t St S(   Ni    (   RM   RU   R1   R>   RE   t	   max_atomsR+   RL   RG   R5   RQ   RS   RY   R�   t   at_least_one_special_positionR'   t   special_position_indicesR2   (   R   R…   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/omz/cod_select_and_pickle.pyt	   is_useful™   s,             	c         C   s@   |  j  j ƒ  |  j j ƒ  j ƒ  |  j j ƒ  j ƒ  |  j j ƒ  f S(   N(   R>   RE   RM   t   space_groupt   order_pRt   t   d_min(   R   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/omz/cod_select_and_pickle.pyt
   quick_info¨   s    (   t   __name__t
   __module__R   t	   __slots__R&   R+   R5   RL   RQ   RS   RY   R�   R”   R˜   (    (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/omz/cod_select_and_pickle.pyR      s   	%						
	:	c      	   C   sÀ  d d l  m } d d l m } d d  l } | j j d d ƒ } | d | d ƒ j d t ƒ j	 ƒ  j
 d  d	 d
 d d d d d ƒj
 d  d d
 d d d d d ƒj
 d  d d d d t ƒj
 d  d d d d t ƒj
 d  d d
 d d d d d ƒj
 d  d d
 d d d d d ƒj
 d  d d
 d d d d d ƒj
 d  d d
 d d d d d ƒj
 d  d d d d t ƒj
 d  d  d
 d! d d" d d# ƒj d$ |  ƒ } | j d% | g ƒ r¬| ƒ  d  S| j } d d& l m } | j d' | j ƒ }	 |	 j ƒ  | j }
 | j r|
 d( 7}
 n  t j |
 ƒ s2d d) l m } | d* |
 ƒ n  d+ } xpt |	 j j ƒ  ƒ D]Y\ } } t j | d+ ƒ d,  } | | j j  | j j! k r“qNn  y t" d- | d. | ƒ } Wn~ t# k
 rÅd/ GHd  St$ k
 r,} t% j& j' ƒ  t% j( d0 | | t) | ƒ f IJt* j+ ƒ  t% j( Jt% j( j' ƒ  | d1 7} qNX| j, | ƒ r”| j- d2 d3 |
 | f d4 | j. | j/ | j0 f ƒ t1 d5 |
 | f d6 ƒ | j2 ƒ  IJn	 d7 G| GHd8 G| GHHqNWHd9 G| GH| ƒ  d  S(:   Niÿÿÿÿ(   t   option_parser(   t   easy_picklet
   time_startt   nowt   usages    [options] [cod_id...]t   easy_alls   --max_atomst   typet   intt   defaultic   t   metavart   INTs   --min_distancet   floatg      à?t   FLOATs   --i_obs_i_calc_plott   actiont
   store_trues   --f_obs_f_calc_plots   --max_fan_outlier_fractiongš™™™™™©?s   --fan_offset_lows   --fan_offset_highgš™™™™™¹?s   --min_f_obs_f_calc_correlationg®Gáz®ï?s   --at_least_one_special_positions   --pickle_dirt   strt	   cod_ma_xst   PATHt   argst   command_call(   t	   cod_toolst   cod_idst   _special(   t   makedirs_racet   pathi    iüÿÿÿR   R    s#   CAUGHT EXCEPTION: KeyboardInterrupts   CAUGHT EXCEPTION: %s: %s: %si   t	   file_names   %s/%s.picklet   objs   %s/qi_%st   ws   filtering out:s
   done_with:s   Number of exceptions caught:(3   t   iotbx.option_parserRœ   Rk   R�   t   libtbx.utilst   utilst
   show_timest   enable_chunkR2   t   enable_multiprocessingt   optionRU   R1   R   t(   run_multiprocessing_chunks_if_applicablet   optionsR   R°   t   build_hkl_cifR®   t   show_summaryt
   pickle_dirR’   t   opt   isdirt   libtbx.pathR³   t	   enumeratet   hkl_cif_pairsR   t   basenamet   chunkt   nt   iR   t   KeyboardInterruptt	   Exceptiont   syst   stdoutt   flusht   stderrR«   t	   tracebackt	   print_excR”   t   dumpRM   R'   t	   edge_listt   openR˜   (   R®   t   command_namet   iotbx_option_parserR�   Rk   R»   t   command_lineR…   R°   t   hkl_cifRÃ   R³   t   n_caughtt   i_pairt   pairR   t   cdt   e(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/omz/cod_select_and_pickle.pyt   run¯   s²    																						
		" 
				(   t
   __future__R    RÓ   RÏ   t   osR´   RÄ   t   cctbx.omz.cif_refineR   R   Rá   (    (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/omz/cod_select_and_pickle.pyt   <module>   s   	§