ó
Q™xTc           @   sw  d  d l  m Z d  d l m 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 m Z d  d l 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 Z d d e d „ Z d „  Z d „  Z d d e d „ Z d „  Z d „  Z d „  Z  d „  Z! d „  Z" d „  Z# d „  Z$ e% d k rse$ d e j& d ƒ n  d S(   iÿÿÿÿ(   t   division(   t   omzN(   t   flex(   t   approx_equal(   t   easy_run(   t   easy_pickle(   t   date_and_timet   user_plus_sys_time(   t   Auto(   t   StringIOic   s   *direct fftc         C   s8   t  j j d d d d d | d d d | d	 d
 t ƒ  ƒ S(   Nt   iteration_limitid   t   show_distances_thresholdg      à?t   bulk_solvent_correctiont   grads_mean_sq_thresholdg�íµ ÷Æ°>t   f_calc_options_algorithmt   additional_phil_strings¨        max_atoms = %(max_atoms)s
        .type = int
      f_obs_f_calc_fan_outliers = *remove keep
        .type = choice
        .optional = False
      use_f_calc_as_f_obs = False
        .type = bool
      reset_u_iso = 0.05
        .type = float
      sites_mod_short = True
        .type = bool
      optimizers = *dev ls_simple ls_lm shelxl_fm shelxl_cg shelx76
        .type = choice(multi=True)
      ls_simple_iterations = 12
        .type = int
      shelxl_wght = None
        .type = str
        .help = '''
          SHELX-97 Manual 7-31:
            Refinement against F2 requires different weights to refinement
            against F; in particular, making all the weights equal ('unit
            weights'), although useful in the initial stages of refinement
            against F, is NEVER a sensible option for F2.'''
      shelxl_reset_sigmas = None
        .type = float
      shelxl_fm_iterations = 12
        .type = int
      shelxl_cg_iterations = 12
        .type = int
      shelx76_iterations = 12
        .type = int
      apply_iteration_limit_to_all = False
        .type = bool
      keep_tmp_files = False
        .type = bool
      export_refined = False
        .type = bool
      pickle_refined_dir = None
        .type = str
      wdir_root = None
        .type = str
      sorting_of_pickle_files = *down up
        .type = choice
        .optional = True
      random_subset {
        size = None
          .type = int
        seed = 0
          .type = int
      }
      tardy_samples {
        iq = None
          .type = int
        qmin = -180
          .type = float
        qmax = 180
          .type = float
        qstep = 3
          .type = float
      }
(   R   t   devt   get_master_philt   vars(   t	   max_atomsR   R   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/omz/cod_refine.pyR      s    >c         C   s�   | j  ƒ  |  j  ƒ  k s t ‚ | j  ƒ  |  j  ƒ  k s< t ‚ d d l m } | j d ƒ sa t ‚ | d | d | d |  d | d | d	 | d
 ƒ S(   Niÿÿÿÿ(   t   calc_wg{®Gáz„?t   wat   wbt   i_obst   i_sigt   i_calct   kg      à?(   t   sizet   AssertionErrort%   cctbx.xray.targets.tst_shelxl_wght_lsR   t   all_ge(   t   fo_sqt   sigmast   fc_sqt   osf_sqt   at   bR   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/omz/cod_refine.pyt   shelxl_weights_a_bY   s    c         C   së   | d  k r d } n  g  | j ƒ  D] } t | ƒ ^ q" } t | ƒ d k sR t ‚ | d d d d d d g t | ƒ \ } } }	 }
 } } |	 d k sœ t ‚ |
 d k s® t ‚ | d k sÀ t ‚ | d k sÒ t ‚ t |  | | | | | ƒ S(   Nt    i   gš™™™™™¹?i    g¾¤1ZGUÕ?(   t   Nonet   splitt   floatt   lenR   R%   (   R   R    R!   R"   t   shelxl_wghtt   st   valsR#   R$   t   ct   dt   et   f(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/omz/cod_refine.pyt   shelxl_weightsa   s    	%8c   
      C   sõ   | | g j  d  ƒ d k s! t ‚ | d  k ri |  j } | j d | d | j d | j ƒ j ƒ  j ƒ  } n  t	 j
 d | j ƒ  d | j ƒ  ƒ } | j ƒ  sŸ t ‚ | j ƒ  } | j d | d | d	 t ƒ }	 d
 | | |	 f GHt j j ƒ  | | |	 f S(   Ni   t   xray_structuret	   algorithmt   cos_sin_tablet   xt   yt   othert   scale_factort   assume_index_matchings   %-12s cc, r1: %.4f %.4f(   t   countR'   R   t   f_calc_optionst!   structure_factors_from_scatterersR4   R5   t   f_calct
   amplitudesR   t   linear_correlationt   datat   is_well_definedt   coefficientt	   r1_factort   Truet   syst   stdoutt   flush(
   t   paramst   labelt   f_obsR3   t   fc_absR9   t   pt   corrt   cct   r1(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/omz/cod_refine.pyt
   show_cc_r1m   s    !			$	c         C   sÏ  d d  l  } | } | j ƒ  d  k	 s* t ‚ | j ƒ  d k | j ƒ  d k @} | j | ƒ } | j | j ƒ  d k ƒ j ƒ  | j ƒ  j d ƒ s– t ‚ | j d t	 j
 | j ƒ  j ƒ  d ƒ ƒ } | j ƒ  }	 t ƒ  }
 | j j d |	 d | d g  d | j j j ƒ  d	 | j j j ƒ  ƒ } | j ƒ  } |  d
 k rxÌ t | j ƒ D]» } | j ƒ  y | j ƒ  Wn> t k
 r } t | ƒ j d ƒ d k r“‚  n  d | GHPn Xx> | j ƒ  D]0 } | j d k sÒ| j d k r®d | _ q®q®Wt | d | d | | ƒ qBW|
 j d d ƒ n· |  d k r»d d l m  } d } y% | j! | d | d | d d ƒ} Wn7 t k
 r”} t | ƒ j" d ƒ sˆ‚  n  d | GHn Xt | d | | ƒ |
 j d d ƒ n t d |  ƒ ‚ d  S(   Niÿÿÿÿi    R    i   R   R3   t   constraintst   restraints_managert   weighting_schemet   simples   cholesky.failures5   Aborting run_smtbx_ls("simple"): cholesky.failure: %sgš™™™™™©?s   ls%02dt   prefixs!   time smtbx_ls_simple_iterations: t   lm(   t   normal_eqns_solvingg�íµ ÷Æ°>t   gradient_thresholdt   step_thresholdt   taugH¯¼šò×z>s:   cctbx::adptbx::debye_waller_factor_exp: arg_limit exceededs@   Aborting run_smtbx_ls("lm"): debye_waller_factor_exp failure: %st   smtbx_lms%   time levenberg_marquardt_iterations: s   Unknown run_smtbx_ls(mode="%s")(#   t   smtbx.refinementR    R'   R   RA   t   selectt
   show_arrayt   all_gtt   customized_copyR   t   doubleR   t   as_xray_observationsR   t
   refinementt   modelt
   restraintst   managert   least_squarest   unit_weightingt   xranget   ls_simple_iterationst   build_upt   solve_and_step_forwardt   RuntimeErrort   strt   findt
   scattererst   u_isoRQ   t   show_elapsedt   scitbx.lstbxRX   t   levenberg_marquardt_iterationst
   startswith(   t   modet   cod_idR   RK   R3   RI   t   smtbxR   t   selt   xobst   tmt   rmt   lst   i_cycleR0   t   scRX   t   thresht   cycles(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/omz/cod_refine.pyt   run_smtbx_ls„   sf    "*	
 	
c         C   sJ   xC |  D]; } t  j | ƒ r, t j | ƒ n  t  j | ƒ s t ‚ q Wd  S(   N(   t   opt   isfilet   ost   removet   existsR   (   t
   file_namest   fn(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/omz/cod_refine.pyt   remove_tmp_filesº   s    c   0         sÊ	  |  d k r3 | j  r! | j } n	 | j } d  }	 nC |  d k rf d  } | j  rZ | j }	 qv | j }	 n t d |  ƒ ‚ t j ƒ  }
 d | |  t j ƒ  f } | j	 d  k	 rÂ t
 j | j	 | ƒ } n  t } t
 j | ƒ sí t j | ƒ t } n  t } z”t j | ƒ d d d d g } t | ƒ | } | j r^| j d	 t j | j ƒ  j ƒ  | j ƒ ƒ } n  d
 d  l } t d d ƒ j | j j j d ˆ d t d d | |  f d | j ƒ  d | d |	 d | j d t ƒ ƒ | j  d t d d ƒ ƒ d
 d  l! } | j j" j# d d ƒ j$ d | ƒ d } t% j& d ƒ } | j' ƒ  t } x? | j( D]4 } | j) d ƒ d k rEt } d |  | f GHPqEqEWt d ƒ j* ƒ  } y( ˆ j+ d t, | ƒ d d d t ƒ ‰  WnO | j j- k
 r} t. | ƒ j) d ƒ d k  rð‚  n  d  |  | f GHd  ‰  n Xˆ  d  k	 rj	ˆ  j/ ƒ  j0 ˆ ƒ s0t1 ‚ xn t2 ˆ j3 ƒ  ˆ  j3 ƒ  ƒ D]Q \ } } | j4 | j4 k spt1 ‚ t5 | j6 | j7 ƒ  d! ƒ s‘t1 ‚ | j6 | _6 qLW‡  ‡ f d" †  } | ƒ  sÂt1 ‚ ˆ j8 ˆ  j3 ƒ  ƒ d  } d  } d  } d  } d  ‰ xF| j9 ƒ  D]8} | j: d# ƒ rO| j; ƒ  } t< | ƒ d$ k s9t1 ‚ t= | d% ƒ } q n  | j: d& ƒ sdq n  | sqt1 ‚ | j: d' ƒ rÇ| j; ƒ  } t< | ƒ d( k s¤t1 ‚ t> | d) ƒ } t= | d* ƒ } q | j) d+ ƒ d k r | j? d, ƒ sñt1 ‚ | j; ƒ  } t< | ƒ d- k st1 ‚ t> | d% ƒ } t> | d. ƒ ‰ q q W| sj	| d  k	 sTt1 ‚ | d  k	 sft1 ‚ | d  k	 sxt1 ‚ | d  k	 sŠt1 ‚ ˆ d  k	 sœt1 ‚ | | j ƒ  j ƒ  k sºt1 ‚ ‡ f d/ †  } |  d k rQ| j@ ƒ  jA ƒ  } ˆ | k r‰t. | j@ ƒ  ƒ }  |  dK k rA| d% k s#t1 ‚ ˆ d k s5t1 ‚ d2 G| GHqN| | ƒ q‰n8 |  d k ryˆ d k r‰| d ƒ q‰n t d |  ƒ ‚ | | d% k sŸt1 ‚ tB | d3 |  | ˆ d4 | ƒ\ }! }" }# |# | }$ d5 |  |# | |$ | f GHtC |$ ƒ d6 k rt d7 | ƒ ‚ n  tB | d8 |  | d9 |! ƒ\ }" }" }% d: | |# |% f GHd  }& d  }' x— t d ƒ j* ƒ  j9 ƒ  D]} } | jD ƒ  }( |( j: d; ƒ r¥t= |( j; ƒ  d< ƒ }& qk|( j: d= ƒ rk|( j? d> ƒ rkt= |( jE d? d@ ƒ j; ƒ  d$ ƒ }' qkqkW|& d  k	 sþt1 ‚ |' d  k	 st1 ‚ |& | k s"t1 ‚ |! jF ƒ  }) tG dA | jH ƒ  d	 | jI ƒ  dB |) jH ƒ  dC | d$ dD | j ƒ }* t jJ |* t jK | jH ƒ  | d$ |) jH ƒ  ƒ ƒ }+ t jJ |* t jK | jH ƒ  | d$ ƒ ƒ }, |, d k sÞt1 ‚ |+ |, dE }- |- |' }. tC |. ƒ d6 k r	dF }/ n dG }/ dH |  |- |' |. | |/ f GHtC |. ƒ tL |' |- ƒ dI k rg	t dJ | ƒ ‚ qg	qj	n  | jM s†	t | ƒ | } n  Wd  t j |
 ƒ | rÅ	y t jN | ƒ WqÅ	tO k
 rÁ	qÅ	Xn  Xd  S(L   Nt   fmt   cgs   Unknown mode: s   wdir_%s_shelxl_%s_%ss   tmp.inss   tmp.hkls   tmp.ress   tmp.lstR    iÿÿÿÿt   wR3   t   data_are_intensitiest   titles   cod_id=%s mode=%st
   wavelengtht    full_matrix_least_squares_cyclest'   conjugate_gradient_least_squares_cyclest   weighting_scheme_paramst   sort_scattererst   file_objectt	   file_namet   crystal_symmetryi    s
   shelxl tmps   ** REFINEMENT UNSTABLE **s*   Aborted: shelxl %s refinement unstable: %st   filet   min_distance_sym_equivt   strictly_shelxls   scatterer parameters5   Aborted: shelxl %s refinement apparently unstable: %sg-Cëâ6?c             s×   t  }  ˆ j ƒ  } ˆ j ƒ  } x² ˆ j ƒ  D]¤ } ˆ  j ƒ  | } | j | ƒ } | j ƒ  sc t ‚ | j ƒ  | j	 } | j
 | j	 | ƒ } | d k r+ d GHd | j GHd | j	 GHd | GHd | GHt }  q+ q+ W|  S(   Ngü©ñÒMbP?s    site moved off special position:s     %ss$       shelxl res: %11.6f %11.6f %11.6fs$       special_op: %11.6f %11.6f %11.6fs       distance moved: %.3f(   RE   t	   unit_cellt   site_symmetry_tablet   special_position_indicesRq   t   gett   is_point_group_1R   t
   special_opt   sitet   mod_short_distanceRJ   t   False(   t   resultt   uct   sstabt   i_scR€   t   site_symmetryt   site_specialR/   (   t   refinedR3   (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/omz/cod_refine.pyt   check_special_positions  s"    		s   FVAR i   i   s   REM s   REM R1 =i   i   i
   s    parameters refined s    restraintsi   iþÿÿÿc            s   t  d ˆ  |  f ƒ ‚ d  S(   Ns<   Unexpected number of SHELXL restraints: %d (vs. %d expected)(   Rn   (   t
   n_expected(   t   res_n_restraints(    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/omz/cod_refine.pyt   raise_unexpected_restraintsE  s    s   P 63 m cs   P 63 c ms2   INFO: SHELXL restraint count incorrect? code_code:t   fvar_R9   s4   R1 recomputed - shelxl_%s.res: %.4f - %.4f = %.4f %sg{®Gáz„?s   R1 MISMATCH %st   shelxl_RL   s   R1 FVAR-Auto %s: %.4fs   R1 = i	   s   wR2 = s    for all datat   ,t    R   R!   R"   R+   g      à?s    significantly differentR&   s7   wR2 recomputed - shelxl_%s.lst: %.4f - %.4f = %.4f %s%sgš™™™™™É?s   wR2 MISMATCH %s(   s   P 63 m cs   P 63 c m(P   t   apply_iteration_limit_to_allR
   t   shelxl_fm_iterationsR'   t   shelxl_cg_iterationsRn   R†   t   getcwdt   getpidt	   wdir_rootR„   t   joinR¤   t   isdirt   mkdirRE   t   chdirR‹   t   shelxl_reset_sigmasRa   R   Rb   t   indicesR   t   iotbx.shelxt   opent
   writelinest   shelxt   writert	   generatort!   minimum_wavelength_based_on_d_minR+   t   export_as_shelx_hklft   iotbx.shelx.hklft   hklft   readert   as_miller_arraysR   t   fully_bufferedt   raise_if_errorst   stdout_linesRp   t   readt
   from_shelxR	   t   errorRo   R˜   t   is_similar_symmetryR   t   zipRq   RJ   R   t	   occupancyt   weightt   replace_scattererst
   splitlinesRv   R(   R*   R)   t   intt   endswitht   space_group_infot*   number_of_continuous_allowed_origin_shiftsRQ   t   abst   stript   replacet	   f_as_f_sqR2   RA   R    t   sumt   pow2t   maxt   keep_tmp_filest   rmdirt	   Exception(0   Rw   Rx   R   RK   R3   RI   t   reference_structuret   expected_n_refinable_parameterst	   fm_cyclest	   cg_cyclest   cwd_origt   wdirt   wdir_is_newt   remove_wdirt   tmp_file_namesR   t   iotbxt   bufferst   refinement_unstablet   linet   resR0   R€   t   rscR¬   t   res_osft   res_hkl_countt   res_r1t   res_n_parameterst   fldsR¯   t   n_caost	   sg_symbolRL   t   _t   r1_fvart   r1_difft   r1_autot   lst_r1t   lst_wr2t   lR!   t   weightst   numt   dent   wr2t   wr2_difft   info(    (   R«   R®   R3   sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/omz/cod_refine.pyt
   run_shelxlÀ   sV   						
		'	

	
(! %
")
.$
		
  c         C   s‹  | j  r | j } n	 | j } t j ƒ  } d |  t j ƒ  f }	 | j d  k	 rg t j	 | j |	 ƒ }	 n  t
 }
 t j |	 ƒ s’ t j |	 ƒ t }
 n  t
 } z°t j |	 ƒ d d d d d d g } t | ƒ t j d ƒ sà t ‚ d d	 l m } | j d
 | d | d | d | d t | ƒ ƒ t j d ƒ s3t ‚ t j d ƒ } | j ƒ  t d ƒ j ƒ  j ƒ  } d  } xŽ | D]† } | j ƒ  } | j d ƒ rq| GH| j ƒ  } t | ƒ d k s»t ‚ | d j  ƒ  d k räd |  GHd } Pn  t! | d ƒ } qqqqW| d  k	 st ‚ | d k rGd d | f GH| j" sGt | ƒ |
 } qGn  Wd  t j | ƒ | r†y t j# |	 ƒ Wq†t$ k
 r‚q†Xn  Xd  S(   Ns   wdir_%s_shelx76_%ss   tmp.inss   tmp.lsts   fort.2s   fort.3s   fort.4s   fort.7iÿÿÿÿ(   t   run_shelx76RK   R3   t   fvarst   encoded_sitest   l_s_parameterss   shelx76 < tmp.ins > tmp.lsts   R = i   i   t   nans3   Aborted: shelx76 refinement apparently unstable: %ss   %-12s cc, r1: None %.4ft   shelx76(%   R´   R
   t   shelx76_iterationsR†   R·   R¸   R¹   R'   R„   Rº   R¤   R»   R¼   RE   R½   R‹   Rˆ   R   t   cctbx.developmentR
  t   write_shelx76_lsRo   R   RÌ   t   raise_if_errors_or_outputRÁ   RÏ   R×   t   lstripRv   R(   R*   t   lowerR)   Rã   Rä   Rå   (   Rx   RK   R3   R  R  RI   Ræ   t	   ls_cyclesRê   Rë   Rì   Rí   Rî   R
  Rð   t   lstt
   r_from_lstRò   R  Rù   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/omz/cod_refine.pyR
  ‘  sj    			
	
	
  c         C   s¾  t  j | ƒ j d d ƒ d } d G| GHt j d | ƒ \ } } } | j ƒ  } |  j rg | j ƒ  } n  d d l m } | j	 d | ƒ } | j
 ƒ  j ƒ  t | ƒ d k rí d d	 l m } d
 | t | ƒ ƒ GHx | D] }	 d |	 GHq× Wn  | j d d ƒ j ƒ  | j | ƒ d d GHt |  j ƒ d k r2d  S| j ƒ  sP| j ƒ  sPt ‚ | j ƒ  rw| }
 | j d d ƒ } n | } | j d d ƒ }
 t d |  d | d | d |
 d | d | ƒ d  S(   Nt   .i   i    s   cod_id:R—   iÿÿÿÿ(   t   fvar_encodingR3   (   t   plural_ss;   INFO: %d atom name%s changed for compatibility with SHELXL:s     changed: "%s" -> "%s"t   tablet   it1992iO   R4   t   xtal_3_7t   shelxlRI   Rx   t   c_obsR   RK   t   structure_prep(   R„   t   basenameR(   R   t   loadt/   make_scatterer_labels_shelx_compatible_in_placet   sites_mod_shortRÀ   R  t/   move_sites_if_necessary_for_shelx_fvar_encodingt   show_summaryt   show_scatterersR*   t   libtbx.utilsR  t   scattering_type_registryt   showt   dev_build_shelx76_fvarst
   optimizerst   is_xray_intensity_arrayt   is_xray_amplitude_arrayR   t	   f_sq_as_fRß   t   process_continue(   RI   t   pickle_file_nameRx   R   R!  t	   edge_listt   changesR  R  t   changeR   RK   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/omz/cod_refine.pyt   processÐ  sB    						c   !         sÕ  ˆ j  } ˆ j d | d | j d | j ƒ j ƒ  } ˆ j d | ƒ } | d  k	 sW t ‚ | j t	 ƒ }	 |	 d k r¼ ˆ j
 }
 d |
 |	 f GH|
 d k r¼ ˆ j | ƒ ‰ ˆ j | ƒ ‰ q¼ n  ˆ j ƒ  rè d GHˆ j ƒ  ‰ ˆ j ƒ  ‰ n  ˆ j ƒ  d k ˆ j ƒ  d k @ˆ j ƒ  d k ˆ j ƒ  d k @B} | j t	 ƒ } | d k rqd	 G| GHˆ j | ƒ ‰ ˆ j | ƒ ‰ n  ˆ j  } ˆ j d | d | j d | j ƒ j ƒ  } ˆ j rd
 GH| j ƒ  j d t j | j ƒ  j ƒ  d ƒ ƒ ‰ | j ƒ  j d t j | j ƒ  j ƒ  d ƒ ƒ ‰ nr ˆ j d | ƒ } | d k s9t ‚ d | d } d | GHˆ j d | ƒ ‰ d | } d | GHˆ j d | ƒ ‰ ‡  f d †  } | j ƒ  r¯| ˆ ƒ n
 | ˆ ƒ d d GH| j ƒ  ‰ ˆ j ƒ  } d G| j t	 ƒ GHˆ j d | ƒ ‰ ˆ j } | d k r9d | GHˆ j d | ƒ d d GHn  ˆ j j  d  k	 rŒd d l! m" } H| j# d ˆ  d ˆ d | d t$ d ˆ j ƒ Hd  Sd d l% m& } | j' ˆ ƒ \ } } d  Gt( | ƒ d GHd d GHt) ˆ d! ˆ | ƒ ‡ ‡ ‡ f d" †  } | d# ƒ ˆ j* ƒ  | d$ ƒ ˆ j ƒ  ‰ ˆ j+ d  k	 rNˆ j, d% ˆ j+ ƒ | d& ƒ n  ˆ j- d  k	 r§t j. d' d ƒ } ˆ j/ d( ˆ j- d) | ƒ d* ˆ j0 ˆ ƒ GH| d+ ƒ n  ˆ j1 d  k	 ríˆ j2 ƒ  j ƒ  } | ˆ j1 k ríd, | ˆ  f GHd  Sn  ˆ j2 ƒ  j3 d- t4 ƒ xI ˆ j2 ƒ  D]; } | j5 j6 t	 ƒ | j5 j7 ƒ  s;t ‚ | j5 j8 t	 ƒ qWˆ j9 d. t	 ƒ ‰ d/ Gˆ GHˆ j: d k  r}d  Sd0 ˆ j; k r•d  } n@ˆ j ƒ  } t< j= j> d1 ˆ d ˆ d | d ˆ d2 ˆ d3 ˆ d4 ˆ  ƒ t) ˆ d0 ˆ | ƒ ˆ j? r;d5 ˆ j@ ˆ jA jB ƒ  ˆ  f } tC | d6 ƒ jD | jE d7 | g ƒ ƒ n  ˆ jF d  k	 rÕtG jH d8 tI jJ ˆ jF ˆ  d9 ƒ d: | | d  f ƒ tC d; ˆ jF ˆ  f d6 ƒ | j2 ƒ  j ƒ  | jK ƒ  jL ƒ  | j ƒ  j ƒ  | jM ƒ  f IJn  ‡  ‡ ‡ ‡ ‡ f d< †  } | d= ƒ } | d> ƒ } ‡  ‡ ‡ ‡ ‡ ‡ ‡ f d? †  } | d@ ƒ } | dA ƒ } dB ˆ j; k rYd  }  nx ˆ j ƒ  }  tN dC ˆ  d ˆ d |  dD | dE | d ˆ d2 ˆ ƒ ˆ j? rÑdF ˆ  } tC | d6 ƒ jD |  jE d7 | g ƒ ƒ n  d  S(G   NR3   R4   R5   R>   i    s(   INFO: f_obs_f_calc_fan_outliers = %s: %dR‡   s4   INFO: converting anomalous i+f_obs to non-anomalous.s6   INFO: removing reflections with i+f_obs=0 and sigma=0:s   INFO: using f_calc as i+f_obsR    g{®Gáz„?i   i   s=   INFO: scaling i_obs to f_calc by multiplying i_obs with: %.6gt   factors=   INFO: scaling f_obs to f_calc by multiplying f_obs with: %.6gc            s+   |  j  ƒ  d d l m } | ˆ  |  ƒ d  S(   Niÿÿÿÿ(   t/   report_fraction_of_negative_observations_if_any(   t   show_comprehensive_summaryt
   cif_refineR8  (   t   obsRü   (   Rx   (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/omz/cod_refine.pyR+  )  s    
R  iO   s   Removing hydrogen atoms:t	   selections   Distances smaller than %.6g A:t   distance_cutoffiÿÿÿÿ(   t   tardy_adaptort   id_codeRK   R3  RI   (   R  s1   Number of FVARs for special position constraints:t   prepc            s   t  ˆ |  ˆ  ˆ ƒ d  S(   N(   RQ   (   RJ   (   RK   RI   t   structure_work(    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/omz/cod_refine.pyt   cc_r1P  s    t   no_ht   isot   valuet   setut   seedt   shift_lengtht   mersenne_twisters/   rms difference after shift_sites_in_place: %.3ft	   shift_xyzs3   Skipping refinement of large model: %d atoms COD %st   statet%   considering_site_symmetry_constraintss   Number of refinable parameters:R   R   Ræ   Rç   t   plot_samples_ids   dev_%s_%s_%s.pdbRŽ   t   remarksR—   s   .picklet   objs   %s/qi_%sc            s‡   d |  ˆ j  k r d  St j j d d ƒ s5 d GHd  Sˆ j ƒ  } t d |  d ˆ  d ˆ d ˆ d	 | d
 ˆ ƒ t ˆ d |  ˆ | ƒ | S(   Nt   ls_t   nameRy   s.   INFO: smtbx not available: refinement skipped.Rw   Rx   R   RK   R3   RI   (   R-  R'   t   libtbxt   envt
   has_modulet   deep_copy_scatterersRƒ   RQ   (   Rw   R¥   (   Rx   RK   R   RI   RA  (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/omz/cod_refine.pyt   use_smtbx_ls’  s    RU   RW   c            sŸ   d |  ˆ j  k r d  Sˆ j ƒ  } t d |  d ˆ  d ˆ d ˆ d | d ˆ d ˆ d	 ˆ ƒ ˆ j r› d
 |  ˆ  f } t | d ƒ j | j d | g ƒ ƒ n  | S(   NR±   Rw   Rx   R   RK   R3   RI   Ræ   Rç   s   shelxl_%s_%s.pdbRŽ   RN  (   R-  R'   RU  R	  t   export_refinedRÁ   t   writet   as_pdb_file(   Rw   R¥   R—   (   Rx   RK   R   t   n_refinable_parametersRI   t   structure_isoRA  (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/omz/cod_refine.pyt
   use_shelxl¥  s"    	RŒ   R�   R  Rx   R  R  s   shelx76_%s.pdb(O   R<   R=   R4   R5   R>   t"   f_obs_f_calc_fan_outlier_selectionR'   R   R;   RE   t   f_obs_f_calc_fan_outliersR^   t   anomalous_flagt   average_bijvoet_matesRA   R    t   use_f_calc_as_f_obst   intensitiesRa   R   Rb   R¿   R   R?   R9   t   apply_scalingR.  RU  t   hd_selectionR   t   show_distancest   tardy_samplest   iqt	   cctbx.omzR>  t   sample_e_potR3  RÀ   R  R,  R*   RQ   t   convert_to_isotropict   reset_u_isot	   set_u_isot   shake_sites_rmsdRI  t   shift_sites_in_placet   rms_differenceR   Rq   t   flags_set_gradsR¤   t   flagst   set_grad_sitet   use_u_iso_onlyt   set_grad_u_isot   n_parametersR
   R-  R   R   Rd   RW  t   target_typet   target_obs_typeR  RÁ   RX  RY  t   pickle_refined_dirR   t   dumpR„   Rº   t   space_groupt   order_pt   d_minR
  (!   RI   Rx   R   R   RK   R!  RM   R>   Rz   t
   n_outlierst   actiont   n_zero_d_and_sR   R,   R+  t   sdtR>  R  R  R  RB  t   mtt   nR€   t   structure_devR—   RV  t   structure_ls_simplet   structure_ls_lmR\  t   structure_shelxl_fmt   structure_shelxl_cgt   structure_shelx76(    (   Rx   RK   R   RZ  RI   R[  RA  sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/omz/cod_refine.pyR1  ÷  s4   				#				!$	
	
				
	


								!		
c            sH  d d l  m } d d  l } | j j d d ƒ } d t g } | d d j | ƒ d ƒ j d	 t ƒ j	 ƒ  j
 d
 |  d d ƒ } | j d | ƒ rš | ƒ  d  S| j } d Gt ƒ  GHHt ƒ  } | j ƒ  } g  }	 g  }
 xO | j D]D } | j d ƒ d k r|	 j | j
 d | ƒ ƒ qÛ |
 j | ƒ qÛ W| j d |	 ƒ } | j ƒ  H| j ƒ  } i  ‰ g  ‰  x-|
 D]%} t j | ƒ rUxt t j | ƒ ƒ D]Ä } | j d ƒ r»ˆ  j t j | | ƒ ƒ qŠ| j d ƒ rŠt | ƒ d k rŠt t j | | ƒ ƒ j ƒ  j  ƒ  } t | ƒ d k rN| d } t! | d ƒ } | ˆ k s>t" ‚ | ˆ | <qNqŠqŠWq_t j# | ƒ rtˆ  j | ƒ q_t$ d | ƒ ‚ q_Wd Gt ˆ  ƒ GHd Gt ˆ ƒ GH| j% ‰ t ˆ ƒ d k r	ˆ d  k	 r	d Gˆ GHˆ d) k sèt" ‚ ‡  ‡ ‡ f d †  } | ƒ  ‰  n  H| j' j( } | d  k	 rº| d k rº| j' j) } d | | f GHt* j+ d | ƒ } | j, d  t ˆ  ƒ ƒ |  } t* j- t ˆ  ƒ t. ƒ j/ | t ƒ } t* j0 ˆ  d! | j1 ƒ  ƒ‰  Hn  d d" l2 m3 } | j4 d  k	 rì| d# | j4 ƒ n  | j5 d  k	 r| d# | j5 ƒ n  d } xt6 ˆ  ƒ D]\ } } | | j7 j8 | j7 j9 k rOq!n  t: ƒ  } y t
 | | ƒ Wn“ t; k
 r¨t< j= d$ IJt> j? ƒ  t< j= Jt< j= j@ ƒ  d  StA k
 rþt< jB j@ ƒ  t< j= d% | IJt> j? ƒ  t< j= Jt< j= j@ ƒ  | d 7} q!Xd& | | jC ƒ  f GHHt< jB j@ ƒ  q!WHd' G| GH| ƒ  Hd( Gt ƒ  GHd  S(*   Niÿÿÿÿ(   t   option_parsert
   time_startt   nows   iotbx.pythont   usageR³   s    [options] directory|file...t   easy_allt   argst	   min_nargsi   t   command_calls   TIME BEGIN cod_refine:t   =i    t   argt   sourcess   .picklet   qi_i
   i   s   Not a file or directory: %ss   Number of pickle files:s   Number of quick_infos:s)   Sorting pickle files by n_atoms * n_refl:t   downt   upc    	         s  ˆ d k r d }  n d }  g  } x‘ t  ˆ  ƒ D]ƒ \ } } t j | ƒ j d d ƒ d } ˆ j | ƒ } | d  k r} d } n | d | d | d } | j | |  | | f ƒ q. W| j ƒ  |  d k  rØ | j ƒ  n  g  } x | D] } | j | d ƒ qå W| S(	   NR•  iÿÿÿÿi   R  i    i   i   l        (	   t	   enumerateR„   R"  R(   RŸ   R'   t   appendt   sortt   reverse(	   t   i_signt   buffert   it   pathRx   t   qit   nnR¥   t   elem(   t   all_picklest   qi_dictt   sort_choice(    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/omz/cod_refine.pyt   sort_pickle_files  s$     	 	
s8   Selecting subset of %d pickle files using random seed %dRG  R   t   permutation(   t   makedirs_raceRž  s#   CAUGHT EXCEPTION: KeyboardInterrupts   CAUGHT EXCEPTION: %ss   done_with: %s (%.2f seconds)s   Number of exceptions caught:s   TIME END cod_refine:(   s   downR–  (D   t   iotbx.option_parserR‰  R)  t   utilst
   show_timest   __file__Rº   t   enable_chunkRE   t   enable_multiprocessingR6  t(   run_multiprocessing_chunks_if_applicablet   optionsR   R   t!   command_line_argument_interpreterRŽ  Rp   R˜  t   fetchR+  t   extractR„   R»   t   sortedR†   t   listdirRÙ   Rv   R*   RÁ   RÏ   R×   t   evalR   R…   Rn   t   sorting_of_pickle_filesR'   t   random_subsetR   RG  R   RI  t   random_permutationt   boolR¤   t   set_selectedR^   t
   iselectiont   libtbx.pathR§  R¹   Rx  R—  t   chunkR‚  R�  R   t   KeyboardInterruptRF   t   stderrt	   tracebackt	   print_excRH   Rå   RG   t   elapsed(   RŽ  t   iotbx_option_parserRR  Rª  R�  t   command_linet   cot   master_philt   argument_interpretert   phil_objectst   remaining_argsR’  t	   work_philRI   t   nodeRŸ  Rx   t
   quick_infoR¥  t   rssRG  R�  t   permRq  R§  t   n_caughtt   i_pickleR2  R|   (    (   R¢  R£  R¤  sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/omz/cod_refine.pyt   runË  sÀ    				
!$
		$ 	

	t   __main__RŽ  i   ('   t
   __future__R    t   cctbxR   t   cctbx.omz.devt   cctbx.array_familyR   t   libtbx.test_utilsR   RR  R   R   R)  R   R   t   libtbx.load_envR   t	   cStringIOR	   RÀ  RF   R†   Rž  R„   R¤   R   R%   R2   R'   RQ   Rƒ   R‹   R	  R
  R6  R1  RÑ  t   __name__t   argv(    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/omz/cod_refine.pyt   <module>   s<   	F			6		Ñ	?	'	Ô	|