ó
±™xTc           @   sS  d  d l  m 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	 d  d l
 m Z d  d l m Z d  d l Z d  d l j j Z d  d l m	 Z	 d  d l m Z d  d l Z d Z d „  Z d	 „  Z d d d d
 „ Z d „  Z d „  Z d „  Z d d „ Z d „  Z d d „ Z e  d k rOe d e j! d ƒ n  d S(   iÿÿÿÿ(   t   divisionN(   t   reflection_file_reader(   t   flex(   t   maptbx(   t   reflection_file_utilss|  bulk_solvent_mode = *fast slow
  .type=choice(multi=False)
map_filter = None
  .type = float
f_obs_label = None
  .type = str
r_free_flags_label = None
  .type = str
grid_step = 0.3
  .type = float
map_type = Fo-Fc
  .type = str
apply_sigma_scaling = False
  .type = bool
apply_volume_scaling = True
  .type = bool
neutron = False
  .type = bool
n_radial_shells = 1
  .type = int
c           C   s   t  j j t d t ƒS(   Nt   process_includes(   t   iotbxt   philt   parset   master_params_strt   False(    (    (    sW   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/map_to_model_histogram.pyt   master_params(   s    c         C   sÃ   t  j |  ƒ Gt  j |  ƒ Gt  j |  ƒ GHt  j d |  d | ƒ } | j ƒ  } t | j ƒ  ƒ } x^ | D]V \ } } | j ƒ  | j ƒ  | d } d | | t	 | ƒ |  j
 ƒ  d f GH| } qe Wd  S(   Nt   datat   n_slotsi   s   %10.3f - %-10.3f : %10.2fg      Y@(   R   t   mint   maxt   meant	   histogramt   data_mint	   enumeratet   slotst
   slot_widtht   floatt   size(   R   R   t   hmt   lc_1t   s_1t   i_1t   n_1t   hc_1(    (    sW   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/map_to_model_histogram.pyt   show_histogram,   s    (&c      	   C   sà   g  } | j  t j d |  d t ƒ ƒ t j d | d t d | d | ƒ } t j j	 ƒ  j
 ƒ  } | d  k	 r| t j j | _ n  | d  k	 r� t j j | j _ n  t j j d | d | d	 t d
 | ƒ } | j }	 | j }
 |	 |
 f S(   Nt	   file_namet   ensure_read_accesst   crystal_symmetryt   force_symmetryt   reflection_filest   errt   reflection_file_servert
   parameterst
   keep_goingt   log(   t   appendR   t   any_reflection_fileR
   R   R%   t   Truet   mmtbxt   utilst   data_and_flags_master_paramst   extractt   Nonet   command_linet   optionst   f_obs_labelt   labelst   r_free_flags_labelt   r_free_flagst   labelt   determine_data_and_flagst   f_obs(   t   reflection_file_nameR!   R3   R5   R(   R#   R%   R&   t   determine_data_and_flags_resultR9   R6   (    (    sW   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/map_to_model_histogram.pyt   get_f_obs_and_flags6   s*    					c         C   sy  |  j  ƒ  } xf| j ƒ  D]X} | j } | \ } } } xª t d ƒ D]œ } | d k  rc | d } n  | d k r| | d } n  | d k  r• | d } n  | d k r® | d } n  | d k  rÇ | d } n  | d k rD | d } qD qD W| | | g | _ | j } | d d k r| d d k s%t ‚ | d d k rE| d d k sKt ‚ | d d k rk| d d k s t ‚ q W| S(   Ni   i    g      ð?i   i   (   t   expand_to_p1t
   scattererst   sitet   xranget   AssertionError(   t   xrst   xrsp1t   scR?   t   xt   yt   zt   t(    (    sW   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/map_to_model_histogram.pyR=   Q   s.    	      	&&*c      	   C   sf  g  } d } d } xz t  d ƒ D]l } | d } | } | | } |  | k } | |  | k  M} | j | ƒ }	 |	 j ƒ  | k r |	 j ƒ  } q q Wd } xÊ t  d ƒ D]¼ } | d } | } | | } |  | k } | |  | k  M} | j | ƒ }	 |	 j ƒ  d k r¢ |	 j ƒ  }
 t j t j |	 |	 ƒ |
 ƒ } | j | | t j |	 ƒ | |
 |
 d | g ƒ q¢ q¢ W| S(   Ngš™™™™™¹?iÿÿÿÿie   g      $@i    g      ð?(	   R@   t   selectR   t   matht   sqrtR   t   sumR)   R   (   t	   distancest
   map_valuest   resultt   inct   n_points_maxt   dt   lt   rt   selt   mvt   szt   rms(    (    sW   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/map_to_model_histogram.pyt   map_stath   s2    

 

 7c         C   sœ  | | } t  j j j ƒ  } d | | _ t  j j d |  j d | d | ƒ } | j ƒ  }	 |	 d k }
 |	 j |
 d ƒ }	 t	 j
 d |  j j ƒ  d |  j ƒ  j ƒ  d	 |	 j ƒ  ƒ } d
 d l  m } d
 d l m } | j d |  ƒ j d | d d d d ƒ } | j d | d | ƒ } | | g j t ƒ d k s3t ‚ | rF| j ƒ  n | rY| j ƒ  n t set ‚ | j ƒ  \ } } } | j ƒ  } | |	 } d G| G| G| G| j ƒ  GHt j ƒ  } t j  ƒ  } xÌ t! | ƒ D]¾ } xµ t! | ƒ D]§ } xž t! | ƒ D]� } | | | | f } | d k rö| t" | ƒ | t" | ƒ | t" | ƒ } } } | j# | | | g ƒ | | | | f } | j# | ƒ qöqöWqãWqÐW| | f S(   Ng      ð?t   xray_structuret   d_mint   mask_paramsi    i   t	   unit_cellt   space_group_infot   pre_determined_n_realiÿÿÿÿ(   t	   map_tools(   t   millert   fmodelt   map_typet   acentrics_scalet   centrics_pre_scalet   crystal_griddingt   fourier_coefficientss   n_real:($   R,   t   maskst   mask_master_paramsR/   t   grid_step_factort   asu_maskRZ   t   mask_data_whole_uct   set_selectedR   Rf   R]   R9   R^   t   focusR`   t   cctbxRa   t   electron_density_mapt   map_coefficientst   fft_mapt   countR+   RA   t   apply_sigma_scalingt   apply_volume_scalingt   RuntimeErrort   n_realt   real_map_unpaddedR   R   t   vec3_doublet   doubleR@   R   R)   (   Rb   Rc   t	   grid_stepR[   Rt   Ru   t   resolution_factort   mpt   mmtbx_masks_asu_mask_objt   bulk_solvent_maskRU   t   cr_grR`   Ra   t   mcRr   t   nxt   nyt   nzt   map_datat   grid_sites_fracRN   t   ixt   iyt   izRV   t   xft   yft   zft   map_at_ixiyiz(    (    sW   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/map_to_model_histogram.pyt"   get_map_values_and_grid_sites_frac„   sZ    
						!  
2t    c         C   sF   d | |  j  ƒ  |  j ƒ  |  j ƒ  j ƒ  |  j ƒ  j ƒ  j ƒ  f GHd  S(   Ns0   %s r_work=%6.4f r_free=%6.4f d_min=%6.4f nref=%d(   t   r_workt   r_freeR9   R[   R   R   (   Rb   t   prefix(    (    sW   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/map_to_model_histogram.pyt   show_fmodel¹   s    !c         C   sp  g  } x½t  t g D]¯} t j j d |  ƒ j ƒ  } |	 rG | j ƒ  n  t j j	 j
 ƒ  } |
 | _ t j j d | d | d | d | ƒ } t d | d d ƒ t j j
 ƒ  } | | _ | d	 k rÉ t  } n! | d
 k rÞ t } n d sê t ‚ | j d | d	 | ƒ t d | d d ƒ t d | d | d | d | j ƒ  d | d | ƒ \ } } t j j d t d | ƒ j ƒ  d | d | d | j ƒ  ƒ } | j ƒ  } | j ƒ  } t d | d | ƒ } | j | ƒ q Wx£ t | d | d ƒ D]Š } | d d | d d | d d } } } | d d | d d } } | d d | d d } } d | | | | | | | f GHqÞWd  S(   NR   R9   RZ   R6   R\   Rb   R’   s   start:t   fastt   slowi    t   paramss   final:Rc   R{   R[   Rt   Ru   t   sites_frac_atomsRB   t   sites_frac_peakst   density_valuesR]   RM   RN   i   i   i   i   s.   %4.2f-%4.2f %10.4f | %8.4f %8.4f | %8.4f %8.4f(    R+   R
   R   t   pdbt   inputt   xray_structure_simplet'   switch_to_neutron_scattering_dictionaryR,   Rh   Ri   R/   t   n_radial_shellst   f_modelt   managerR“   t   bssR   t   bulk_solventRA   t   update_all_scalesRŽ   R[   R-   t   density_distribution_per_atomR=   t
   sites_fracR]   RM   RN   RY   R)   t   zip(   t   pdb_file_nameR9   R6   t
   map_filterRc   R{   Ru   Rt   t   modet   neutronRž   t   resultsR¢   RB   R\   Rb   R–   R”   RN   R†   t   resRM   RO   RS   RT   t   pt   m1t   r1t   m2t   r2(    (    sW   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/map_to_model_histogram.pyt	   get_stats¾   sV    			 	 	,c         C   sx  | d  k r t j } n  t |  ƒ d k r7 d GHd GHn  t j j d |  d | d t ƒ  ƒ } | d d IJ| d	 IJ| j j	 d
 | d d ƒ t |  ƒ d k r¢ d  S| j j
 ƒ  } | d d IJ| d IJt d | j d d | j d | ƒ \ } } | d d IJ| d IJt d | j d d | d | d | j d | j d | j d | j d | j d | j d | j d | j ƒ d  S(   Ni    s   Usage:
s=   phenix.map_to_model_histogram model.pdb data.mtz [parameters]t   argsR(   R   t   -iO   s   
Parameters:
t   outR’   t    s   
Data:
R:   R!   s   
Calculations:
R§   R9   R6   R¨   R{   Rc   Ru   Rt   R©   Rª   Rž   (   R0   t   syst   stdoutt   lenR,   R-   t   process_command_line_argsR   R–   t   showR/   R<   t   reflection_file_namesR!   R²   t   pdb_file_namesR¨   R{   Rc   Ru   Rt   t   bulk_solvent_modeRª   Rž   (   R³   R(   t   processed_argsR–   R9   R6   (    (    sW   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/map_to_model_histogram.pyt   run÷   s@     
 
	
							t   __main__R³   i   ("   t
   __future__R    R·   RJ   t	   iotbx.pdbR   t
   iotbx.philt   mmtbx.f_modelR,   R   t   cctbx.array_familyR   Ro   R   t   mmtbx.utilst+   mmtbx.bulk_solvent.bulk_solvent_and_scalingR¢   t   bulk_solvent_and_scalingR¡   R   t   mmtbx.masksR	   R   R   R0   R<   R=   RY   RŽ   R“   R²   RÀ   t   __name__t   argv(    (    (    sW   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/command_line/map_to_model_histogram.pyt   <module>   s4   					5	9!