ó
•™xTc           @   së   d  d l  m 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
 m Z d  d l
 m Z d  d l m Z d  d	 l m Z m Z m Z d  d
 l m Z d  d l Z d  d l Z d e d „ Z d S(   iÿÿÿÿ(   t   divisionN(   t   reflection_file_reader(   t   reflection_file_utils(   t   option_parser(   t   crystal(   t   sgtbx(   t   flex(   t   Sorryt   date_and_timet   plural_s(   t   StringIOs    phenix.reflection_file_converterc         C   sý  t  d d | d d | ƒ j ƒ  j d  d d d d t d	 d
 ƒj ƒ  j d  d d d d d d	 d d d ƒj d  d d d d t d	 d ƒj d  d d d d d d	 d d d ƒj d  d d d d d d	 d d d ƒj d  d d d d t d	 d ƒj d  d d d d d d t d	 d ƒj d  d d d d d  d	 d! ƒj d  d" d d d d# d d$ d	 d% d d ƒj d  d& d d d d' d d d	 d( d d) ƒj d  d* d+ dß d d, d	 d/ d d0 ƒj d  d1 d d d d d	 d2 d d3 d d ƒj d  d4 d d d d d	 d5 d d) ƒj d  d6 d d d d d	 d7 d d ƒj d  d8 d d d t d	 d9 ƒj d  d: d d d t d	 d; ƒj d  d< d d d d d	 d= d d> ƒj d  d? d d d t d	 d@ ƒj d  dA d d d t d	 dB ƒj d  dC d d d t d	 dD ƒj d  dE d d d t d	 dF ƒj d  dG d d d d$ d	 dH d d ƒj d  dI d d d d$ d	 dJ d d ƒj d  dK d d d d d	 dL d dM ƒj d  dN d d d d d	 dO d dM ƒj d  dP d d d d d	 dQ d d ƒj d  dR d d d d d	 dS d dM ƒj d  dT d d d d d	 dU d dM ƒj dV |  ƒ } | j } | j	 d  k	 r9t
 j | j	 ƒ t j dW | j	 ƒ n  | j rV| j rVHdX GHHd  S| j sh| j r…| j d  k r…HdY GHHd  Sn  | j d  k	 r®| j d  k	 r®HdZ GHHd  St | j ƒ d[ k rÔ| j j ƒ  d  St j d\ | j d] d  d^ t d_ t d` t da db ƒ } | r| St | ƒ d[ k rEHdc t t | j ƒ ƒ db GHHd  St j dd | ƒ } | j de | j df d ƒ } | d  k r‚d  Sd  } d  }	 | j d  k	 rh| j de | j df d ƒ } | d  k rÈd  St  | j! ƒ  ƒ }	 | j" ƒ  sht j# dd | g dg | j$ ƒ j% d[ }
 |
 d  k rD| j$ d  k r5t& dh ƒ ‚ qDt& di ƒ ‚ n  | j' dj | j( ƒ  |
 k ƒ } qhn  dk GHdl G| j! ƒ  GHdm G| j) ƒ  GHH|	 d  k	 rªdn GHdl G|	 GHHn  | j' d] | j* do | j+ dp | j, ƒ ƒ j- | j) ƒ  ƒ } | d  k	 r| j' d] | ƒ } n  dq GHt. j+ j/ | dr ds ƒH| j0 ƒ  d  k rJ| j j ƒ  dt GHHd  S| j1 ƒ  d  k rs| j j ƒ  du GHHd  S| d  k	 r”| j' d] | ƒ } n  | j2 d  k	 rë| j3 dv | j2 dw | j4 ƒ \ } } | d  k	 rë| j5 dx | ƒ } qën  | j6 ƒ  s<dy GH| j7 ƒ  } | j/ dr ds ƒ H| j8 ƒ  } ~ | j9 dr ds ƒ Hn  | d  k	 rš| j6 ƒ  ršdz GH| j7 ƒ  } | j/ dr ds ƒ H| j8 ƒ  } ~ | j9 dr ds ƒ Hn  | j: rãd{ GH| d  k	 rÃt& d| ƒ ‚ n  | j: ƒ  } | j9 dr ds ƒ Hn  | j; d  k	 r
| d  k	 r	t& d} ƒ ‚ n  t< j1 d~ | j; ƒ } d G| GHt. j+ d€ | j0 ƒ  d� | d‚ t ƒ } | j0 ƒ  j= | j0 ƒ  ƒ s¤	dƒ GHd„ GHdƒ GHd… GHd† GHd‡ G| j0 ƒ  GHdˆ G| j0 ƒ  GHn  | j' d] | ƒ } H| j6 ƒ  s
d‰ GH| j7 ƒ  } | j/ dr dŠ ƒ H| j8 ƒ  } ~ | j9 dr dŠ ƒ Hq
n  | j> ƒ  rq
| j? rq
d‹ GH| j@ ƒ  s@
| jA ƒ  } qq
| jB ƒ  } | jA ƒ  } | jC ƒ  } | jD ƒ  n  | d  k	 r¦
| j> ƒ  r¦
| j? r¦
dŒ GH| jA ƒ  } n  | jE } | jF } | d  k	 sÐ
| d  k	 r1| d  k	 rè
d� | GHn  | d  k	 r dŽ | GHn  | jG d� | d� | ƒ } d‘ G| jH ƒ  jI ƒ  GHHn  | j d  k	 red’ | j GH| jJ d“ | j ƒ } Hn  | j d  k	 r™d” | j GH| jJ d• | j ƒ } Hn  | jK | jL g jM t ƒ d– k rÉt& d— ƒ ‚ n  | jK r@| jN ƒ  r1d˜ GH| jO | j( ƒ  d[ k ƒ } | jP ƒ  d  k	 r=| jO | jP ƒ  d[ k ƒ } q=q@t& d™ ƒ ‚ n  | jL rÙ| jN ƒ  rÊ| j@ ƒ  r»| jQ d  k	 r¬| j r�dš GHd› GHdœ GHd� GHH| jR ƒ  } q¸t& dž ƒ ‚ qÇt& dŸ ƒ ‚ qÖt& d  ƒ ‚ qÙt& d¡ ƒ ‚ n  | jS sÑ| d  k r÷g  }	 q«| j> ƒ  | j> ƒ  k rA| j> ƒ  r$dà } n dá } t& d¤ | d¥ ƒ ‚ n  d¦ |	 g }	 | jH ƒ  jT | jH ƒ  ƒ s«| jU ƒ  } | jU ƒ  jV | ƒ } | jH ƒ  jI ƒ  | jH ƒ  jI ƒ  } | d[ k rÎt& d§ | ƒ ‚ qÎq«nÚ| d  k	 rìt& d¨ ƒ ‚ n  d© GH| jS dª | jW d« | jX d¬ | jY d­ | jZ ƒ } t }
 | jZ d- k r?d[ }
 n | jZ d. k rWd® }
 n  | j' dj | j( ƒ  |
 k ƒ } d¯ | g }	 |	 j[ ds t\ ƒ  ƒ |	 j[ d° | jW ƒ |	 j[ d± t  | jX ƒ ƒ |	 j[ d² | j( ƒ  jM t ƒ ƒ |	 j[ d³ | j( ƒ  jM t ƒ ƒ t] ƒ  } | j^ dr ds d´ | ƒ | jZ d- k rU|	 j[ dµ t j_ | j( ƒ  ƒ ƒ n, | jZ d. k rt|	 j[ d¶ ƒ n |	 j[ d· ƒ d¸ j` |	 d– d¹ !ƒ GH|	 d® GH| ja ƒ  GHHd[ } | jb d  k	 r>| jS rØt& dº ƒ ‚ n  t jc d» | j! ƒ  jd g d¼ | jb d½ d¾ d¿ dÀ ƒ } dÁ G| GHte jf jg jh dÂ | dÃ | ƒ | db 7} Hn  | jQ d  k	 rªt jc d» | j! ƒ  jd g d¼ | jQ d½ dÄ d¿ dÅ ƒ } dÆ G| GHt ji ƒ  } | j[ t\ ƒ  ƒ | j[ dÇ | ƒ | j[ dÈ tj jk jl | j! ƒ  jd ƒ ƒ | j[ dÉ tj jk jm tj jk jn | j! ƒ  jd ƒ ƒ ƒ | j[ dÊ | j! ƒ  jo ƒ  ƒ | } | j rj| jp ƒ  s£dË GH| jB ƒ  } | j[ dÌ ƒ q£n9 | j r£| j@ ƒ  s£dÍ GH| jC ƒ  } | j[ dÎ ƒ q£n  | j } | d  k rÎ| j! ƒ  jq d[ } n  | jr dÏ | ƒ } ~ | d  k	 r-| js dÃ | dÏ | jt ƒ x" |	 D] } | j[ dÐ | ƒ qWn  | j[ dÑ tj jk jl | ƒ ƒ | j[ dÒ tj jk jm tj jk jn | ƒ ƒ ƒ | ju ƒ  } | jv | ƒ | jh dÂ | ƒ | db 7} Hn  | jw d  k	 rEt jc d» | j! ƒ  jd g d¼ | jw d½ dÓ d¿ d, ƒ } dÔ G| GH| jx dÕ ty | dÖ ƒ dÂ | d× dØ t  | j! ƒ  ƒ g |	 dÙ | ƒ | db 7} Hn  | jz d  k	 rÒ| jS rlt& dÚ ƒ ‚ n  t jc d» | j! ƒ  jd g d¼ | jz d½ dÛ d¿ d. ƒ } dÜ G| GH| j{ ƒ  j| ty | dÖ ƒ ƒ | db 7} Hn  | d[ k rù| j j ƒ  dÝ GdÞ GHHd  S| S(â   Nt   usages    %s [options] reflection_file ...t   descriptions   Example: %s w1.sca --mtz .s   --weak_symmetryt   actiont
   store_truet   defaultt   helps?   symmetry on command line is weaker than symmetry found in filess   --labelt   storet   typet   strings,   Substring of reflection data label or numbert   metavart   STRINGs   --non_anomalouss6   Averages Bijvoet mates to obtain a non-anomalous arrays   --r_free_labels   --r_free_test_flag_valuet   ints8   Value in R-free array indicating assignment to free set.t   FLOATs   --generate_r_free_flagssG   Generates a new array of random R-free flags (MTZ and CNS output only).s0   --use_lattice_symmetry_in_r_free_flag_generationt   destt.   use_lattice_symmetry_in_r_free_flag_generations\   group twin/pseudo symmetry related reflections together in r-free set (this is the default).s/   --no_lattice_symmetry_in_r_free_flag_generationt   store_falses<   opposite of --use-lattice-symmetry-in-r-free-flag-generations   --r_free_flags_fractiongš™™™™™¹?t   floats6   Target fraction free/work reflections (default: 0.10).s   --r_free_flags_max_freeiÐ  s3   Maximum number of free reflections (default: 2000).t   INTs   --r_free_flags_formatt   choicest   cnst   ccp4t   shelxs&   Convention for generating R-free flagss   cns|ccp4s   --output_r_free_labelsA   Label for newly generated R-free flags (defaults to R-free-flags)s   R-free-flagss   --random_seedsF   Seed for random number generator (affects generation of R-free flags).s   --change_of_basissw   Change-of-basis operator: h,k,l or x,y,z or to_reference_setting, to_primitive_setting, to_niggli_cell, to_inverse_hands   --eliminate_invalid_indicessB   Remove indices which are invalid given the change of basis desireds   --expand_to_p1s«   Generates all symmetrically equivalent reflections. The space group symmetry is reset to P1. May be used in combination with --change_to_space_group to lower the symmetry.s   --change_to_space_groupsF   Changes the space group and merges equivalent reflections if necessarys   SYMBOL|NUMBERs   --write_mtz_amplitudessW   Converts intensities to amplitudes before writing MTZ format; requires --mtz_root_labels   --write_mtz_intensitiessW   Converts amplitudes to intensities before writing MTZ format; requires --mtz_root_labels   --remove_negativess;   Remove negative intensities or amplitudes from the data sets   --massage_intensitiessÉ   'Treat' negative intensities to get a positive amplitude. |Fnew| = sqrt((Io+sqrt(Io**2 +2sigma**2))/2.0). Requires intensities as input and the flags --mtz, --write_mtz_amplitudes and --mtz_root_label.s   --scale_maxs=   Scales data such that the maximum is equal to the given values   --scale_factors%   Multiplies data with the given factors   --scasB   write data to Scalepack FILE ('--sca .' copies name of input file)t   FILEs   --mtzs<   write data to MTZ FILE ('--mtz .' copies name of input file)s   --mtz_root_labels#   Root label for MTZ file (e.g. Fobs)s   --cnss<   write data to CNS FILE ('--cns .' copies name of input file)s   --shelxs@   write data to SHELX FILE ('--shelx .' copies name of input file)t   argst   valuesJ   --write_mtz_amplitudes and --write_mtz_intensities are mutually exclusive.sL   --write_mtz_amplitudes and --write_mtz_intensities require --mtz_root_label.s6   --scale_max and --scale_factor are mutually exclusive.i    t
   file_namest   crystal_symmetryt   force_symmetryt   merge_equivalentst   discard_arrayst   verbosei   s)   No reflection data found in input file%s.t   miller_arrayst   labelt   command_line_switcht   test_flag_valuesn   Cannot automatically determine r_free_test_flag_value. Please use --r_free_test_flag_value to specify a value.s!   Invalid --r_free_test_flag_value.t   datas   Selected data:t    s     Observation type:s   R-free flags:t   other_symmetryt   forces   Input crystal symmetry:t   prefixs     sC   Unit cell parameters unknown. Please use --symmetry or --unit_cell.s<   Space group unknown. Please use --symmetry or --space_group.t   change_of_basist   eliminate_invalid_indicest   cb_ops#   Merging symmetry-equivalent values:s)   Merging symmetry-equivalent R-free flags:s3   Expanding symmetry and resetting space group to P1:s8   --expand_to_p1 not supported for arrays of R-free flags.sA   --change_to_space_group not supported for arrays of R-free flags.t   symbols   Change to space group:t	   unit_cellt   space_group_infot   assert_is_compatible_unit_cells     *************s     W A R N I N Gs>     Unit cell parameters adapted to new space group symmetry ares:     significantly different from input unit cell parameters:s!         Input unit cell parameters:s!       Adapted unit cell parameters:s8     Merging values symmetry-equivalent under new symmetry:s       s6   Converting data array from anomalous to non-anomalous.s8   Converting R-free flags from anomalous to non-anomalous.s*   Applying low resolution cutoff: d_max=%.6gs+   Applying high resolution cutoff: d_min=%.6gt   d_maxt   d_mins   Number of reflections:s1   Scaling data such that the maximum value is: %.6gt
   target_maxs&   Multiplying data with the factor: %.6gt   factori   sX   It is not possible to use --remove_negatives and --massage_intensities at the same time.s   Removing negatives itemss9   --remove_negatives not applicable to complex data arrays.s1   The supplied intensities will be used to estimates#    amplitudes in the following way:  s8    Fobs = Sqrt[ (Iobs + Sqrt(Iobs**2 + 2sigmaIobs**2))/2 ]s*    Sigmas are estimated in a similar manner.sK   --write_mtz_amplitudes has to be specified when using --massage_intensitiess5   --mtz has to be used when using --massage_intensitiessH   Intensities must be supplied when using the option --massage_intensitiess<   --massage_intensities not applicable to complex data arrays.t    s    nots9   The data array is%s anomalous but the R-free array is%s.
s     Please try --non_anomalous.s   R-free flags source: sa   R-free flags not compatible with data array: missing flag for %d reflections selected for output.sB   --r_free_label and --generate_r_free_flags are mutually exclusive.s'   Generating a new array of R-free flags:t   fractiont   max_freet   use_lattice_symmetryt   formatiÿÿÿÿs   R-free flags generated by %s:s     fraction: %.6gs     max_free: %ss     size of work set: %ds     size of free set: %dt   outs&     convention: CCP4 (test=0, work=1-%d)s&     convention: SHELXL (test=-1, work=1)s)     convention: CNS/X-PLOR (test=1, work=0)s   
i   s,   Cannot write R-free flags to Scalepack file.t   input_file_namest   user_file_namet   file_type_labelt	   Scalepackt   file_extensiont   scas   Writing Scalepack file:t	   file_namet   miller_arrayt   MTZt   mtzs   Writing MTZ file:s   > program: %ss   > input file name: %ss   > input directory: %ss   > input labels: %ss'     Converting intensities to amplitudes.s&   > Intensities converted to amplitudes.s'     Converting amplitudes to intensities.s&   > Amplitudes converted to intensities.t   column_root_labels   > s   > output file name: %ss   > output directory: %st   CNSs   Writing CNS file:t   file_objectt   wt   infos   source of data: t   r_free_flagss(   Cannot write R-free flags to SHELX file.t   SHELXs   Writing SHELX file:s/   Please specify at least one output file format,s   e.g. --mtz, --sca, etc.(   s   cnsR   s   shelx(   R>   s    not(   s    notR>   (}   R   t   enable_symmetry_comprehensivet   optiont   Nonet   Falset   enable_resolutionst   Truet   processt   optionst   random_seedt   randomt   seedR   t   set_random_seedt   write_mtz_amplitudest   write_mtz_intensitiest   mtz_root_labelt	   scale_maxt   scale_factort   lenR"   t   parsert	   show_helpR   t   collect_arraysR	   R   t   label_tablet   select_arrayR+   t   r_free_labelt   match_data_labelt   strRR   t   is_bool_arrayt   get_r_free_flags_scorest   r_free_test_flag_valuet   test_flag_valuesR   t   customized_copyR.   t   observation_typet   join_symmetryt   symmetryt   weak_symmetryt   set_observation_typeR   t   show_summaryR7   R8   R3   t   apply_change_of_basisR4   t   change_basist   is_unique_set_under_symmetryR'   t   arrayt   show_comprehensive_summaryt   expand_to_p1t   change_to_space_groupR   t   is_similar_tot   anomalous_flagt   non_anomaloust   is_xray_intensity_arrayt   average_bijvoet_matest	   f_sq_as_ft	   f_as_f_sqt#   set_observation_type_xray_intensityt   low_resolutiont
   resolutiont   resolution_filtert   indicest   sizet   apply_scalingt   remove_negativest   massage_intensitiest   countt   is_real_arrayt   selectt   sigmasRM   t   enforce_positive_amplitudest   generate_r_free_flagst   all_eqt
   map_to_asut
   common_sett   r_free_flags_fractiont   r_free_flags_max_freeR   t   r_free_flags_formatt   appendR   R
   t   show_r_free_flags_infot   maxt   joint   getvalueRI   t   construct_output_file_namet   sourcet   iotbxt	   scalepackt   merget   writet
   std_stringt   ost   patht   basenamet   dirnamet   abspatht   label_stringt   is_xray_amplitude_arrayt   labelst   as_mtz_datasett   add_miller_arrayt   output_r_free_labelt
   mtz_objectt   add_historyR   t   export_as_cns_hklt   openR    t   as_amplitude_arrayt   export_as_shelx_hklf(   R"   t   command_namet   simply_return_all_miller_arrayst   command_linet   cot   all_miller_arraysRj   t   selected_arrayRS   t   r_free_infoR-   t   processed_arrayR5   t   mergedt   new_space_group_infot   new_crystal_symmetryR:   R;   t   is_nott   n_missing_r_free_flagst   r_free_as_boolt   r_free_info_strt   n_output_filesRJ   t   mtz_history_buffert   mtz_output_arrayRN   t   mtz_datasett   lineR´   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/reflection_file_converter.pyt   run   s   
																																																																		 																									!					 																		
						)							
		 
					
					
(   t
   __future__R    t	   iotbx.mtzR¤   t   iotbx.cns.miller_arrayt   iotbx.scalepack.mergeR   R   t   iotbx.option_parserR   t   cctbxR   R   t   cctbx.array_familyR   t   libtbx.utilsR   R   R	   t	   cStringIOR
   R^   R©   RX   RÎ   (    (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/reflection_file_converter.pyt   <module>   s   