ó
F™xTc           @   sW  d  d l  m Z d  d l m Z d  d l m Z m Z d  d l m Z d  d l m	 Z	 d  d l
 Z d  d l Z 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 Z d  d l m Z d  d l m Z m Z m Z d  d l m Z d  d l m Z d  d l Z d d „ Z e d k rSe d d e j  d k ƒ n  d S(   iÿÿÿÿ(   t   division(   t   dump_pdb(   t	   pml_stickt	   pml_write(   t   geometry_restraints(   t   adp_restraintsN(   t   xray(   t   crystal(   t   sgtbx(   t   flex(   t   matrix(   t   approx_equalt   is_below_limitt	   show_diff(   t   count(   t   StringIOi    c   9      C   s‹  d } d } d® } t  j d¯ d° d± d² d³ d´ dµ d¶ d· d¸ d¹ dº d» d¼ d½ d¾ g ƒ } t j d d  ƒ } xi d¿ dÀ dÁ dÂ dÃ dÄ dÅ dÆ dÇ dÈ dÉ dÊ dË dÌ dÍ dÎ dÏ dÐ g D]+ } | j t j d | d | d d ƒ ƒ q  Wt j ƒ  } x#dÑ d g dÒ d g dÓ d g dÔ d g dÕ d g dÖ d g d× d g dØ d g dÙ d g dÚ d g dÛ d g dÜ d g dÝ d g dÞ d g dß d g dà d g dá d g dâ d g dã d g dä d g då d g dæ d g dç d g dè d g dé d g dê d g g D]1 \ } } | j t j	 d | d | d d ƒ ƒ qÌWd s|  r#t
 d d  d! | ƒ n  xnt t g D]`}	 xWt t g D]I}
 | j ƒ  } |
 r€t  j | j ƒ  t ƒ }
 t |
 d <n  | j j ƒ  d k s›t ‚ t j d" | j ƒ  d# | j ƒ } t j j d$ | d% | ƒ } t j j d! | d& | d' t j j d( |	 d) d* d+ d d, d- ƒ d. |
 ƒ } | j j ƒ  d k s:t ‚ | j ƒ  } t ƒ  } | j d/ | ƒ d sk|  r�t
 d d0 d! | ƒ n  t j d! | d1 | j ƒ } t j d! | d1 | ƒ } d sÀ|  r&x0 t | j | ƒ D] \ } } d2 G| j G| GHqÓWx0 t | | ƒ D] \ } } d3 G| j G| GHqWn  t  d4 t  j! t  j" | ƒ ƒ d5 d d6 d7 ƒ sYt ‚ t  d4 t  j! t  j" | ƒ ƒ d5 d d6 d8 ƒ sCt ‚ qCWq0W| t# j$ dë ƒ t# j$ | j% ƒ  ƒ 7} t& t# j$ | j! ƒ  ƒ t# j$ dì ƒ ƒ } | d c d 9<| d c d 9<t' j( d: t) j* d; | d< d= ƒ ƒ } xU t t+ d ƒ | ƒ D]> \ } } | j, t' j- d> d? | d@ | j. ƒ  j/ | ƒ ƒ ƒ q<Wd sŠ|  r�| j0 ƒ  j1 ƒ  n  | j2 dí ƒ j3 ƒ  j2 dî ƒ } x3 dï dð dñ g D]" } | j4 | j2 | ƒ j5 ƒ  ƒ qËWd sý|  rt6 dC dD ƒ j7 | j8 ƒ  ƒ n  dE } | j9 dF | ƒ } t) j: d | ƒ } t j; | | j ƒ t) j< j= dG | dH d ƒ } g  | D] } | j> ƒ  ^ q{}  t j d" | j ƒ  d# | j ƒ } t  j? | j ƒ  dI ƒ }! t j@ dJ | dK d dL | ƒ }" | |" jA jB dI ƒ dI <t jC d$ | dM | dN d  dO d  dP |" dQ |! dR | ƒ }# d sB|  ràdS G|# jD jE ƒ  GdT G|# jD j j ƒ  GdU G|# jD j j ƒ  GHdV G|# jF jE ƒ  GdT G|# jF j j ƒ  GdU G|# jF j j ƒ  GHdW t  j% t jG d! | dX |# jF ƒ ƒ GHn  t ƒ  } |# jD jH d! | d/ | dY dZ ƒ | jI ƒ  jJ ƒ  d d[ k s*t ‚ | jI ƒ  jJ ƒ  d	 jK d\ ƒ sOt ‚ t ƒ  } |# jD jL d! | d/ | dY d] ƒ | jI ƒ  jJ ƒ  d d^ k s™t ‚ | jI ƒ  jJ ƒ  d	 jK d_ ƒ s¾t ‚ t ƒ  } |# jD jM d` da d! | db d d/ | dY dc ƒ | jI ƒ  jJ ƒ  }$ |$ d dd k s	t ‚ |$ d de k s0	t ‚ |$ d jK df ƒ sI	t ‚ |$ d jK dg ƒ sb	t ‚ |$ d dh k sx	t ‚ x- d	 di g D] }% |$ |% jK dj ƒ s…	t ‚ q…	W|$ dk dl k s¾	t ‚ t ƒ  } |# jF jH d! | d/ | dY dm ƒ tN | jI ƒ  dn ƒ s
t ‚ t ƒ  } |# jF jM d` do d! | db d d/ | dY dp ƒ tN | jI ƒ  dq dr tO d
 ƒ tO ds d ƒ g ƒsm
t ‚ g  }& g  }' xŠ |# jF j D]| } | jP | k rÐ
|& j tQ dt | | j d du | | j d ƒ ƒ q†
|' j tQ dt | | j d du | | j d ƒ ƒ q†
W| jR ƒ  }( x¨ |# jF j D]š } | jP | k rx|& j tQ dt |( | jS d jT ƒ  du |( | jU | jV jT ƒ  ƒ ƒ q|' j tQ dt |( | jS d jT ƒ  du |( | jU | jV jT ƒ  ƒ ƒ qWd sÉ|  rtW d/ t6 dv dD ƒ d> dw dx |& ƒ tW d/ t6 dy dD ƒ d> dz dx |' ƒ n  t+ d ƒ }) xît t g D]à}* |* sDd  }+ d  }, n | }+ | jX ƒ  }, x°| j ƒ  | j ƒ  g D]–} t j j d: |+ d{ |, dP |" dQ |! d| t jY ƒ  d$ | d} |  d~ | d d d% | d€ d	 ƒ } | jZ d� t  j | j ƒ  t ƒ ƒ } | jZ d‚ t  j[ dƒ | j ƒ  ƒ ƒ } | jC d! | ƒ }# t j j d! | d& | d' t j j d, d- ƒ ƒ } t ƒ  } | j d/ | ƒ d s{|  r©| j\ j] ƒ  d„ G| j j^ ƒ  GHd… G| j_ GHn  |* sâ| j\ j` d† k  sÇt ‚ | j\ ja d‡ k  st ‚ n0 | j\ j` dˆ k  sút ‚ | j\ ja d‡ k  st ‚ | j\ jb d† k  s*t ‚ d s6|  red‰ |) jc ƒ  }- dŠ G|- GHt
 d |- d! | ƒ n  | jX d  k r}d  }. n td jX ƒ  }. | je d‹ d d{ |. dQ t  j? ƒ  ƒ jf | jf k s¿t ‚ |+ d  k	 rotg | jh ƒ dŒ k sæt ‚ d sò|  r| jh j] ƒ  qqoqoWq)W| ji d� t  jj dŽ d� d� d‘ d’ d“ d” d• d– d— d˜ d™ dš d› dœ d� g ƒ ƒ dž dò dŸ „  ƒ  Y}/ d	 |/ _k d  |/ _l d¡ |/ _m d¢ |/ _n t |/ _o tp jq d& | d£ | dž |/ d¤ d  d¥ t d¦ t d§ t d¨ d  d© t dª t ƒ 
}0 |0 jr d« k sót ‚ ts |0 jt d¬ ƒ st ‚ |0 ju d  k s t ‚ |0 jv j ƒ  |0 jr k s>t ‚ |0 jw j ƒ  |0 jr k s\t ‚ |0 jx j ƒ  |0 jr k szt ‚ xd  d d g D]ô}1 t  jj ƒ  }2 d7 }3 xBty | j5 ƒ  j ƒ  ƒ D](}4 g  }5 xø |3 |3 g D]é }6 | jz ƒ  }7 |7 j5 ƒ  |4 j{ |6 7_{ tp jq d& | d£ |7 dž |/ d¤ |1 d¦ t d¥ t d§ t d¨ d  d© t dª t ƒ 
}0 |5 j |0 jt ƒ |0 ju j ƒ  | j5 ƒ  j ƒ  k st ‚ |0 jv d  k s”t ‚ |0 jw d  k s©t ‚ |0 jx d  k sÕt ‚ qÕW|2 j |5 d |5 d d |3 ƒ q»Wt  j | j5 ƒ  j ƒ  t ƒ }8 | j5 ƒ  j| |8 j} ƒ  ƒ tp jq d& | d£ | dž |/ d¤ |1 d¦ t d¥ t d§ t d¨ d  d© t dª t ƒ 
}0 ts |0 ju |2 ƒ sŠt ‚ qŠWd­ GHd  S(ó   NgÍÌÌÌÌÌü?gÍÌÌÌÌÌ@g      @i   i   i    i   i   i   i   i   i   t   asu_mappingsi	   i
   i   i   i   i   i   t   i_seqst   distance_idealt   weightid   i‡   ix   iZ   i–   i<   t   angle_idealt	   file_names
   manual.pdbt
   sites_cartt   n_seqt   bond_simple_proxiest   bond_params_tablet   angle_proxiest   geometry_restraints_managert   lbfgs_termination_paramst   traditional_convergence_testt"   drop_convergence_test_max_drop_epsg#B’¡œÇ;t+   drop_convergence_test_iteration_coefficientt   max_iterationsiè  t   sites_cart_selectiont   fs   minimized_1.pdbt   proxiess   bond:s   angle:t   valuet   limitt   epsg�íµ ÷Æ°>g�íµ ÷ÆÀ>g333333ó¿t   crystal_symmetryt	   unit_cellt   space_group_symbolt   P112t   labels   C%02dt   siteg      à¿g      à?s   p1_structure.pdbt   wg      @t   buffer_thicknesst   pair_asu_tablet	   max_shellt   Defaultt   factor_1_4_interactionst   const_shrink_1_4_interactionst   default_distancet   shell_asu_tablest   model_indicest   conformer_indicest   nonbonded_paramst   nonbonded_typest%   nonbonded_distance_cutoff_plus_buffers$   pair_proxies.bond_proxies.n_total():s   simple:s   sym:s)   pair_proxies.nonbonded_proxies.n_total():s   min_distance_nonbonded: %.2ft   sorted_asu_proxiest   prefixs   []s   []Histogram of bond lengths:s   []      1.80 -     1.80:s   ][s   ][Histogram of bond deltas:s   ][     0.000 -    0.000:t   by_valuet   residualt	   max_itemss   :;s   :;Bond restraints: 18s   :;Sorted by residual:s   :;bond s   :;     s2   :;  ideal  model  delta    sigma   weight residualiþÿÿÿs   :;  1.800  1.800 iÿÿÿÿs   :;... (remaining 15 not shown)s   ]^s»   ]^Histogram of nonbonded interaction distances:
]^      2.16 -     3.03: 3
]^      3.03 -     3.89: 12
]^      3.89 -     4.75: 28
]^      4.75 -     5.61: 44
]^      5.61 -     6.48: 54
t   deltas   >,sð   >,Nonbonded interactions: 141
>,Sorted by model distance:
>,nonbonded 15
>,          15
>,   model   vdw sym.op.
>,   2.164 3.600 -x+2,-y+1,z
...
>,nonbonded 4
>,          8
>,   model   vdw
>,   3.414 3.600
>,... (remaining 134 not shown)
t
   selectionsiûÿÿÿt   begint   ends	   vdw_1.pmlt   vdw_1t   stickss	   vdw_2.pmlt   vdw_2t   site_symmetry_tablet   nonbonded_functiont   shell_sym_tablest   nonbonded_distance_cutofft   nonbonded_buffert   plain_pairs_radiust	   selectiont
   iselectiont   stops   number of function evaluations:s   n_updates_pair_proxies:gü©ñÒMbP?gš™™™™™¹?g{®Gáz„?s   minimized_%d.pdbs   Writing file:t   n_additional_sitesi   t   valuesg�L§•ýÔè?gRÙÌØ?g`f‘qXtÊ?gÇ¼{Sìï?gókB¶
‰ì?g+"VÌºä?g4ÕSl7ØÏ?gúsg	§ã?gØHì½XÈâ?g>QþÂÕ?gÅ§€Õgà?gºö…é?gÊ2{
™Ù?gÈJQ,µÛ?gªÙ.ªûˆæ?gáA¼'Yìë?t
   parametersc           B   s   e  Z RS(    (   t   __name__t
   __module__(    (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_geometry_restraints_lbfgs.pyRR   L  s    gffffffæ?gÍÌÌÌÌÌì?g46<½Rö?t   xray_structuret   wilson_bt   use_hdt   use_u_local_onlyt   compute_gradientst	   gradientst   normalizationt   collectiE   g�î³Ÿþ@t   OKgÇqÇqï?(   i   i   i    (   i   i   i    (   i   i   i    (   i   i   i    (   i   i   i    (   i   i   i    (   i   i   i    (   i   i   i    (   i   i   i    (   i   i   i    (   i   i   i    (   i   i   i    (   i   i   i    (   i   i   i    (   i   i   i    (   i   i   i    (   i    i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i	   (   i	   i
   (   i
   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i    i   i   (   i    i   i   (   i   i   i   (   i   i   i   (   i   i   i   (   i   i   i   (   i   i   i   (   i   i   i   (   i   i   i   (   i   i   i   (   i   i   i   (   i   i   i   (   i   i   i   (   i   i   i	   (   i   i	   i
   (   i	   i
   i   (   i
   i   i   (   i   i   i   (   i   i   i   (   i
   i   i   (   i   i   i   (   i   i   i   (   i   i   i   (   i   i   i   (   i   i   i   (   i   i   i   (   i   i   i    (   i   g333333ó¿i   (   g      à¿g      à¿i    (   g      à?g      à?i    (   i   i    i    (   i    i   i    (   i    i    i   (    (~   R	   t   vec3_doubleR   t   bond_sorted_asu_proxiest   Nonet   processt   bond_simple_proxyt   shared_angle_proxyt   appendt   angle_proxyR   t   Truet   Falset	   deep_copyt   boolt   sizet   asut   AssertionErrort   extract_bond_paramst   simplet   managert   lbfgst   scitbxt   termination_parameterst	   minimizert   iterR   t   show_interactionst   bond_deltast   angle_deltast   zipR   R   t   maxt   absR
   t   colt   mint   listR   t	   structureR   t   symmetryR   t   add_scatterert	   scattererR(   t   fractionalizet   show_summaryt   show_scattererst   apply_shiftt   expand_to_p1t   add_scattererst
   scattererst   opent   writet   as_pdb_fileR   R/   t	   add_pairst   coordination_sequencesR5   t   extract_pair_sym_tablet
   std_stringR8   t   distance_tablet
   setdefaultt   pair_proxiest   bond_proxiest   n_totalt   nonbonded_proxiest   nonbonded_deltast!   show_histogram_of_model_distancest   getvaluet
   splitlinest
   startswitht   show_histogram_of_deltast   show_sortedR   t   ranget   vdw_distanceR   t   mappingst   i_seqt   mapped_sitet   j_seqt   j_symR   RG   t   prolsq_repulsion_functiont   selectt   size_t_ranget   final_target_resultt   showt   nfunt   n_updates_pair_proxiest   bond_residual_sumt   nonbonded_residual_sumt   angle_residual_sumt   nextR   t   new_including_isolated_sitesRL   t   lent   plain_pair_sym_tablet	   set_u_isot   doublet   sphere_radiust   distance_powert   average_powert   wilson_b_weightt   wilson_b_weight_autoR   t   energies_isot   number_of_restraintsR   t   residual_sumRZ   t   u_it   u_jt   r_ijt   xranget   deep_copy_scattererst   u_isot   flags_set_grad_u_isoRN   (9   t   verboseR   t   default_vdw_distancet   vdw_1_4_factort   sites_cart_manualR“   R   R   R   R   R!   R   R   Ro   t	   minimizedt   sites_cart_minimized_1t   sRv   Rw   t   proxyR@   t   unit_cell_lengthsRU   t   serialR,   t   p1_structuret   shiftt   nonbonded_cutoffR   t   bond_asu_tableR5   t   shell_asu_tableRI   t   atom_energy_typesR8   R’   t   lt   it   vdw_1_stickst   vdw_2_stickst   mpst   i_pdbt   use_crystal_symmetryR'   RG   t   pdb_file_namet   additional_site_symmetry_tableRR   t   adp_energiesRV   t   finite_difference_gradientsR&   t   i_scatterert   rst
   signed_epst   xray_structure_epst   sel(    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_geometry_restraints_lbfgs.pyt   exercise   s¶   !																																-5&		"
	 											"%	"%			%!""%		$																			%		t   __main__RÃ   s	   --verbosei   (!   t
   __future__R    t   iotbx.pdb.tst_pdbR   t   iotbx.pymolR   R   t   cctbxR   R   t!   cctbx.geometry_restraints.managert   cctbx.geometry_restraints.lbfgsR   R   t$   cctbx.crystal.coordination_sequencesR   t   cctbx.array_familyR	   t   scitbx.lbfgsRq   R
   t   libtbx.test_utilsR   R   R   t	   itertoolsR   t	   cStringIOR   t   sysRã   RS   t   argv(    (    (    s\   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/regression/tst_geometry_restraints_lbfgs.pyt   <module>   s*   ÿ z