ó
§™xTc           @   s&  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	 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 m Z d  d l m Z d  d	 l 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  Z
 d  d l m! Z! d  d l m Z m" Z" d  d l# m$ 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+ j, j- Z. d  d	 l/ Z d  d	 l0 Z
 d  d	 l1 Z
 e j2 j3 d ƒ Z4 d e5 f d „  ƒ  YZ6 d e5 f d „  ƒ  YZ7 d „  Z8 d e5 f d „  ƒ  YZ9 d  e
 j: j; j< f d! „  ƒ  YZ< d" e
 j= j> f d# „  ƒ  YZ? d$ „  Z@ d% e5 f d& „  ƒ  YZA d' e
 j: j; jB f d( „  ƒ  YZC d) „  ZD d* „  ZE d+ „  ZF d, e5 f d- „  ƒ  YZG d. „  ZF d	 S(/   iÿÿÿÿ(   t   division(   t   miller(   t   crystal(   t   sgtbx(   t   xray(   t   adptbx(   t   deepcopy(   t   masksN(   t   wk1995(   t   adopt_init_args(   t   flex(   t   Sorryt   date_and_time(   t   iround(   t   xray_structure(   t   relative_scaling(   t   sigmaa_estimation(   t   max_lik(   t   table_utils(   R   t   user_plus_sys_time(   t   StringIO(   t   format_value(   t   Autos  
  twin_law = None
  .type=str
  .input_size = 80
  .style = bold noauto
  twin_target=*twin_lsq_f
  .type=choice
  detwin{
    mode = algebraic proportional *auto
    .type= choice
    .short_caption = Detwin mode
    map_types{
      twofofc = *two_m_dtfo_d_fc two_dtfo_fc
      .type = choice
      .short_caption = 2Fo-Fc map type
      fofc = *m_dtfo_d_fc gradient m_gradient
      .type = choice
      .short_caption = Fo-Fc map type
      aniso_correct = False
      .type=bool
      .short_caption = Anisotropy correction
    }
  }
  t   twin_fraction_objectc           B   sA   e  Z d  Z d d „ Z d „  Z d „  Z d „  Z d d „ Z RS(   sG   provides methods for derivatives and
  transformastion of twin fractioni    c         C   s}   d |  _  d |  _ t | ƒ |  _ |  j |  j  k rM |  j  |  j  d |  _ n  |  j |  j k ry |  j |  j  d |  _ n  d  S(   Ngü©ñÒMbP?g+‡ÙÎ÷ï?g      $@(   t   min_fract   max_fract   floatt   twin_fraction(   t   selfR   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   __init__@   s    		c         C   sQ   |  j  |  j } |  j |  j | d } | d k  r= d } n  t j | ƒ } | S(   Ng      ð?g�5�éf1(   R   R   R   t   matht   log(   R   t   tmp(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   twin_fraction_to_refI   s    	c         C   sK   | d k  r d } n  |  j  |  j |  j  d t j | ƒ } | |  _ d  S(   Niöÿÿÿi   (   R   R   R   t   expR   (   R   t   xR    (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   ref_to_twin_fractionQ   s    	)c         C   sN   |  j  ƒ  } d t j | ƒ } |  j |  j t j | ƒ | | } | | S(   Ng      ð?(   R!   R   R"   R   R   (   R   t   dtdpR    t   tmp2(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   d_t_d_twin_fraction_refW   s    &c         C   s-   | d  k r t j } n  | d |  j IJd  S(   Ns   twin fraction: %4.3f(   t   Nonet   syst   stdoutR   (   R   t   out(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   show`   s    N(	   t   __name__t
   __module__t   __doc__R   R!   R$   R'   R(   R,   (    (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR   =   s   					t   scaling_parameters_objectc           B   sì   e  Z d  Z d d d d d d d d d d d „
 Z d „  Z d „  Z d „  Z d „  Z d	 „  Z	 d
 „  Z
 d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d d „ Z d „  Z RS(   si   Object holds a set of parameters needed for f model.
  provides tranformations for parameter optimisationg      ð?i    g      @c         C   sÃ  | d  k	 rN | j } | j } | j } | j } | j } | j } | j } n  t | ƒ |  _ t | ƒ |  _ t | ƒ |  _ t | ƒ |  _ t | ƒ |  _ t | d ƒ t | d ƒ t | d ƒ t | d ƒ t | d ƒ t | d ƒ f |  _ t |	 ƒ |  _ t |
 ƒ |  _	 | d  k r)| j
 |  _
 n	 | |  _
 |  j
 d  k	 sGt ‚ |  j
 j ƒ  j ƒ  |  _ t j |  j
 j ƒ  j ƒ  d	 ƒ |  _ |  j
 j ƒ  j ƒ  j ƒ  |  _ |  j
 j ƒ  j |  j ƒ |  _ d  S(
   Ni    i   i   i   i   i   g       Àg      @gUUUUUUå¿(   R(   t	   k_overallt   u_start   k_solt   u_solt   k_partt   u_partR   t	   max_u_solt
   max_u_partt   xst   AssertionErrort   space_groupt   adp_constraintsR   t   powt	   unit_cellt   volumet   vrwgkt   n_independent_paramst	   n_u_indept   average_u_star(   R   R9   R1   R2   R3   R4   R5   R6   t   objectR7   R8   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR   j   s:    							$c         C   s7   | d k r! t  j d ƒ |  _ n t  j | ƒ |  _ d  S(   Ng     @@(   R   R"   R1   (   R   R#   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   ref_to_k_overallœ   s     c         C   s7   | d k r! t  j d ƒ |  _ n t  j | ƒ |  _ d  S(   Ni
   (   R   R"   R3   (   R   R#   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   ref_to_k_sol    s    c         C   sX   | d k r! t  j d ƒ |  _ n t  j | ƒ |  _ |  j |  j k rT |  j |  _ n  d  S(   Ni
   g      $@(   R   R"   R4   R7   (   R   R#   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   ref_to_u_sol¦   s
    c         C   s7   | d k r! t  j d ƒ |  _ n t  j | ƒ |  _ d  S(   Ni
   (   R   R"   R5   (   R   R#   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   ref_to_k_part®   s    c         C   s7   t  j | ƒ |  _ |  j |  j k r3 |  j |  _ n  d  S(   N(   R   R"   R6   R8   (   R   R#   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   ref_to_u_part´   s    c         C   s;   |  j  j | ƒ } t t j | ƒ |  j ƒ } | |  _ d  S(   N(   R<   t
   all_paramst   listR
   t   doubleR@   R2   (   R   R#   R    (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   ref_to_u_star¹   s    c         C   s'   |  j  d k r t j |  j  ƒ Sd  Sd  S(   Ni    (   R1   R   R   R(   (   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   k_overall_to_refÂ   s    c         C   s'   |  j  d k r t j |  j  ƒ Sd Sd  S(   Ni    (   R3   R   R   (   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   k_sol_to_refÇ   s    c         C   s'   |  j  d k r t j |  j  ƒ Sd Sd  S(   Ni    (   R5   R   R   (   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   k_part_to_refÌ   s    c         C   s'   |  j  d k r t j |  j  ƒ Sd Sd  S(   Ni    g     @�À(   R4   R   R   (   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   u_sol_to_refÑ   s    c         C   s'   |  j  d k r t j |  j  ƒ Sd Sd  S(   Ni    g     @�À(   R6   R   R   (   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   u_part_to_ref×   s    c         C   sD   |  j  j ƒ  j ƒ  j d |  j ƒ } t t j | ƒ |  j ƒ } | S(   NRJ   (	   R9   R;   R<   t   independent_paramsR2   RK   R
   RL   R@   (   R   R    (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   u_star_to_refÝ   s    c         C   s   |  j  | S(   N(   R1   (   R   R%   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   d_t_d_k_overall_refæ   s    c         C   s   |  j  | S(   N(   R3   (   R   R%   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   d_t_d_k_sol_refè   s    c         C   s   |  j  | S(   N(   R5   (   R   R%   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   d_t_d_k_part_refê   s    c         C   s   |  j  | S(   N(   R4   (   R   R%   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   d_t_d_u_sol_refì   s    c         C   s   |  j  | S(   N(   R6   (   R   R%   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   d_t_d_u_part_refî   s    c         C   s>   t  t j | ƒ |  j ƒ } t  |  j j t  | ƒ ƒ ƒ } | S(   N(   RK   R
   RL   R@   R<   t   independent_gradients(   R   R%   R    (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   d_t_d_u_star_refð   s    c      
   C   só   | d  k r t j } n  | J| d IJ| d |  j IJ| d |  j d |  j d |  j d |  j d |  j d |  j d	 f IJ| d
 |  j IJ| d |  j IJ| d |  j IJ| d |  j d IJ| d |  j IJ| d |  j	 IJ| Jd  S(   Ns   F-model scaling parameterss   k_overall : %5.2es/   u_star    : %5.2e %5.2e %5.2e %5.2e %5.2e %5.2ei    i   i   i   i   i   s      (%i independent parameters)s   k_sol     : %5.2es   u_sol     : %5.2es       B_sol : %5.2fg     ÀS@s   k_part    : %5.2es   u_part    : %5.2e(
   R(   R)   R*   R1   R2   RB   R3   R4   R5   R6   (   R   R+   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR,   ø   s    
%c         C   s   t  d |  ƒ } | S(   NRD   (   R0   (   R   t   new(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt	   deep_copy
  s    N(   i    i    i    i    i    i    (   R-   R.   R/   R(   R   RE   RF   RG   RH   RI   RM   RN   RO   RP   RQ   RR   RT   RU   RV   RW   RX   RY   R[   R,   R]   (    (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR0   g   s>   (																				c         C   s   | j  ƒ  j ƒ  } |  j  ƒ  j ƒ  } | j t | ƒ ƒ \ } } t j | j ƒ  | j ƒ  ƒ t j | j ƒ  | j ƒ  ƒ } | S(   N(   R]   t
   map_to_asut   common_setst   absR
   t   sumt   data(   t
   miller_obst   f_atomst   tmp_calct   tmp_obst
   init_scale(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   get_initial_scale  s     t   scaling_parameter_maskc           B   s    e  Z e e e e e d  „ Z RS(   c         C   s‹   d |  _  d |  _ d |  _ d |  _ d |  _ | r? d |  _  n  | rQ d |  _ n  | rc d |  _ n  | ru d |  _ n  | r‡ d |  _ n  d  S(   Ng        g      ð?(   R   R1   R2   R3   R4   (   R   R   R1   R2   R3   R4   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR     s    					(   R-   R.   t   TrueR   (    (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyRi     s
   t   target_attributesc           B   s   e  Z d  „  Z RS(   c         C   s2   t  j j j j |  d d ƒd |  _ t |  _ d  S(   Nt   familyt   lst
   amplitudes(   t   mmtbxt
   refinementt   targetsRk   R   t   twint   Falset	   pseudo_ml(   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR   3  s    	(   R-   R.   R   (    (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyRk   1  s   t   twin_model_managerc           B   s5  e  Z dƒ dƒ dƒ dƒ dƒ dƒ e j j j ƒ  dƒ dƒ dƒ dƒ d  d d dƒ dƒ e j ƒ  j d „ Z	 d „  Z
 d „  Z d „  Z d „  Z d „  Z d	 d dƒ d
 „ Z e dƒ d „ Z e dƒ d „ Z e d „ Z d „  Z dƒ d „ Z d „  Z dƒ dƒ d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z dƒ dƒ d „ Z  dƒ dƒ d „ Z! d „  Z" dƒ dƒ e d „ Z# dƒ dƒ e e dƒ e e e e e d „
 Z$ e e e% e dƒ dƒ d  e dƒ dƒ d! „
 Z& dƒ dƒ dƒ dƒ dƒ dƒ dƒ dƒ dƒ dƒ dƒ dƒ d" „ Z' d# „  Z( dƒ dƒ dƒ dƒ dƒ dƒ dƒ dƒ dƒ dƒ dƒ dƒ dƒ dƒ dƒ dƒ d$ „ Z) e dƒ d% „ Z* d& „  Z+ d' „  Z, e d( „ Z- d) „  Z. d* „  Z/ dƒ e e e e% dƒ dƒ dƒ dƒ d+ „	 Z0 d, „  Z1 d- „  Z2 e% e dƒ dƒ e d	 d d. „ Z3 d/ „  Z4 d0 e d1 „ Z5 d2 e d3 „ Z6 d4 d5 „ Z7 e% d6 „ Z8 d7 „  Z9 d8 „  Z: dƒ d9 „ Z; dƒ dƒ dƒ e d: „ Z< d; „  Z= dƒ d< „ Z> dƒ e d= „ Z? dƒ e d> „ Z@ d? „  ZA d@ „  ZB dA „  ZC dB „  ZD dC „  ZE dD „  ZF dE „  ZG dF „  ZH dƒ dG dH dI „ ZI dJ „  ZJ dK „  ZK dL „  ZL dM „  ZM dN „  ZN dO „  ZO dƒ dƒ dƒ dƒ dƒ dƒ dƒ dP „ ZP dQ „  ZQ dR „  ZR dG dG dƒ dƒ d„ e% dƒ dƒ e% dT „	 ZS dU „  ZT dV „  ZU dW „  ZV dX „  ZW dY „  ZX dZ „  ZY d[ „  ZZ d\ „  Z[ d] „  Z\ d^ „  Z] d_ „  Z^ d` „  Z_ da „  Z` db „  Za dc „  Zb dd „  Zc de „  Zd df „  Ze dg „  Zf dh „  Zg di „  Zh dj „  Zi dk „  Zj dl „  Zk dm „  Zl dn „  Zm do dp dƒ dq „ Zn dr dp ds dƒ dt „ Zo dƒ dƒ dƒ du „ Zp dƒ dƒ dv „ Zq ds d	 d dƒ dw „ Zr d	 d dƒ dx „ Zs d	 d dƒ dy „ Zt dr dp ds dƒ dz „ Zo d	 d dƒ d{ „ Zu dƒ d| d} „ Zv dƒ ds ds d~ „ Zw e e% d „ Zx dƒ ds d€ „ Zy d� „  Zz d‚ „  Z{ RS(…   gš™™™™™¹?iÐ  i   c         C   sp
  d  |  _ | |  _ | d  k	 r- t d ƒ ‚ n  | d  k rN t j ƒ  j j } n  | d  k rc d } n  d  |  _ t	 |  _
 | |  _ | |  _ | |  _ t ƒ  |  _ |  j d k rÃ d |  _ t	 |  j _ n  |	 d  k rÛ t j }	 n  |	 |  _ d |  _ |  j d  k rt j |  _ n  t d | ƒ |  _ |
 |  _ | |  _ d d d	 d g |  _ | |  _ |  j t k rhd |  _ n  |  j |  j k s€t ‚ d
 |  _ | |  _ |  j d  k	 s§t ‚ | j ƒ  } | |  _ | j ƒ  j | ƒ |  _ |  j j  ƒ  j! |  j j  ƒ  ƒ sût ‚ | j" |  j j# ƒ  ƒ |  _$ |  j j# ƒ  j% t	 ƒ d k rS| j" |  j j# ƒ  ƒ |  _& n |  j$ j' ƒ  |  _& |  j$ j# ƒ  j( ƒ  d k rª|  j& j# ƒ  j( ƒ  d k rª|  j& |  _$ n  | |  _) | |  _* |  j* | j# ƒ  j( ƒ  k sæ|  j* d  k rþ| j# ƒ  j( ƒ  |  _* n  | j+ ƒ  d  k r[| j  ƒ  j( ƒ  t, | ƒ | k rE| j- d | ƒ q[| j- d |  j* ƒ n  |  j$ j. | ƒ |  j& j. | ƒ | |  _/ t0 j1 d | j2 ƒ  d | j3 ƒ  ƒ |  _4 t5 d |  j4 d | ƒ |  _6 |  j6 d  k rêt5 |  j4 ƒ |  _6 n  d  |  _7 | d  k	 r| |  _7 n t8 j9 j: j ƒ  |  _7 t; j< | j# ƒ  | j# ƒ  ƒ |  _= t; j< |  j$ j# ƒ  |  j$ j# ƒ  ƒ |  _> t; j< |  j& j# ƒ  |  j& j# ƒ  ƒ |  _? d  |  _@ d  |  _A d  |  _B d  |  _@ |  jC ƒ  |  _A d  |  _D | d  k	 r| j# ƒ  j( ƒ  |  jA j# ƒ  j( ƒ  k r| |  _D q$|  jE ƒ  n
 |  jE ƒ  d  |  _F tG jH d |  jA j  ƒ  d |  jA j# ƒ  d |  jD j# ƒ  d |  jA j2 ƒ  d |  j6 jI d |  j6 jJ d |  j6 jK d |  j6 jL d d  d |  j6 jM d |  j6 jN ƒ |  _O tG jP d |  j$ j  ƒ  d |  j$ j# ƒ  d |  j$ jQ ƒ  d |  jA j  ƒ  d | j3 ƒ  d | jR ƒ  d  |  j d! |  j jS ƒ  d d" !ƒ |  _T |  j& j  ƒ  j( ƒ  d k rr|  jT |  _U n‚ tG jP d |  j& j  ƒ  d |  j& j# ƒ  d |  j& jQ ƒ  d |  jA j  ƒ  d | j3 ƒ  d | jR ƒ  d  |  j d! |  j jS ƒ  d d" !ƒ |  _U tG jV d | j  ƒ  d |  jA j  ƒ  d | j3 ƒ  d | jR ƒ  d! |  j jS ƒ  d d" !ƒ |  _W tG jV d |  j$ j  ƒ  d |  jA j  ƒ  d |  j$ j3 ƒ  d | jR ƒ  d! |  j jS ƒ  d d" !ƒ |  _X tG jV d |  j& j  ƒ  d |  jA j  ƒ  d |  j& j3 ƒ  d |  j& jR ƒ  d! |  j jS ƒ  d d" !ƒ |  _Y tG jZ d |  j$ j  ƒ  d |  jA j  ƒ  d |  j$ j3 ƒ  d |  j$ jR ƒ  d! |  j jS ƒ  d d" !ƒ |  _[ |  j& j  ƒ  j( ƒ  d k r–|  j[ |  _\ na tG jZ d |  j& j  ƒ  d |  jA j  ƒ  d |  j& j3 ƒ  d |  j& jR ƒ  d! |  j jS ƒ  d d" !ƒ |  _\ tG jZ d | j  ƒ  d |  jA j  ƒ  d | j3 ƒ  d | jR ƒ  d! |  j jS ƒ  d d" !ƒ |  _] |  j d  k	 rÓ	t^ jG j_ j` d# |  j@ d$ |  j ja d% |  j jb d& |  j jc d' |  j jd d( |  j je d) |  j jf d* |  j jg ƒ |  _h n t^ jG j_ j` d# |  j@ ƒ |  _h d  |  _i t	 |  _j d  |  _k |  j/ d  k	 r0
|  j/ jl ƒ  |  _k n  |  j$ jm ƒ  j# ƒ  jn ƒ  |  _o |  j& jm ƒ  j# ƒ  jn ƒ  |  _p d  S(+   Ns   Not implemented.t   autot   pseudo_ml_ft
   twin_lsq_fi    R   t   proportionalt	   algebraict   gradientgÍÌÌÌÌÌÜ?t   n_binst   reflections_per_binR>   R;   R9   RD   t   hklRd   t   f_maskR1   R2   R3   R4   t   f_partR5   R6   t   hkl_obst   f_obst   w_obst   hkl_calct   anomalous_flagt   alphat   twin_lawi	   t
   miller_sett   cos_sin_tablet   grid_resolution_factort   quality_factort   u_baset   b_baset   wing_cutofft   exp_table_one_over_step_size(q   R(   t
   fmodel_ts1t   f_obs_t   RuntimeErrort   master_paramst   extractt   detwint	   map_typest   alpha_beta_paramsRj   Rr   t   twin_law_strt
   sfg_paramst   target_nameRk   t   _target_attributesRt   R)   R*   R+   t
   did_searchR   R‡   R   t   possible_detwin_modest   detwin_modeR   R:   t   detwin_switch_twin_fractionR^   t
   common_sett   r_free_flags_t   indicest   all_eqt   selectRb   t   f_obs_wt   countt   f_obs_fR]   t   sizet   max_binst
   n_refl_bint   binnerR   t   setup_binnert   use_binning_ofR   R   t   symmetryR>   R;   R9   R0   t   scaling_parameterst   mask_paramsRo   R   t   mask_master_paramsR
   Ra   t   norma_sum_f_sqt   norma_sum_f_sq_wt   norma_sum_f_sq_fRˆ   Rd   t   free_flags_for_f_atomst   compute_f_atomst   f_mask_arrayt   update_f_maskt   f_partial_arrayR   t   f_model_core_dataR1   R2   R3   R4   R5   R6   t	   data_coret&   least_squares_hemihedral_twinning_on_ft   sigmasR…   t   as_double_arrayt   target_evaluatort   free_target_evaluatort   hemihedral_r_valuest   r_all_objectt   r_work_objectt   r_free_objectt   hemihedral_detwinnert   work_detwinnert   free_detwinnert   full_detwinnert   cctbxt   structure_factorst	   gradientsR‰   RŠ   R‹   RŒ   R�   RŽ   R�   t   structure_factor_gradients_wt   sigmaa_object_cachet   update_sigmaa_objectt   xray_structure_mask_cachet   deep_copy_scattererst   epsilonst	   as_doublet
   epsilons_wt
   epsilons_f(   R   R‚   R   t   f_calct   r_free_flagsR   R¯   t   sf_and_grads_accuracy_paramsR°   R+   R‡   R˜   t   start_fractionRª   R©   Rž   R–   t   twin_target(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR   9  sZ   		 							 								'6		*"			"((					'
																c         C   s   |  j  S(   N(   R‘   (   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR‚     s    c         C   s   |  j  S(   N(   R¡   (   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyRÖ   "  s    c         C   s   d S(   Nt   yes(    (   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt	   twin_test%  s    c         C   s   t  S(   N(   Rj   (   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   is_twin_fmodel_manager(  s    c         C   s   d  S(   N(   R(   (   R   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   update_f_hydrogens+  s    iŒ   c      	   C   s%   t  j j d |  d | d | d | ƒ S(   Nt   fmodelt   free_reflections_per_bint   max_number_of_binsR|   (   Ro   t   f_model_infot   info(   R   Rß   Rà   R|   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyRâ   .  s
    c         C   s   d  S(   N(   R(   (   R   R,   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   outlier_selection6  s    c         C   s/   | r+ | d  k r t j } n  | d IJn  |  S(   Nsc  *****************************************************************
NOT performing outlier rejection in twin refinement mode.
If there are many outliers without twin refinement, the resulting
reflection statistics may differ significantly (for example
the percentage of R-free reflections).
*****************************************************************
(   R(   R)   R*   (   R   R,   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   remove_outliers:  s     	c         C   s   d  S(   N(   R(   (   R   t   force_update(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   wilson_bG  s    c         C   s
   |  j  j S(   N(   R¯   R1   (   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   scale_k1K  s    c         C   sj  |  j  d I|  j j I|  j j ƒ  IJ|  j  d I|  j j I|  j j ƒ  IJ|  j  d I|  j j I|  j j ƒ  IJ|  j  d I|  j j	 I|  j j
 ƒ  IJ|  j  d I|  j j I|  j I|  j j ƒ  IJ|  j  d I|  j j IJ|  j  d I|  j j IJ|  j  d I|  j j IJ|  j  d	 I|  j j IJ| d  k	 rf|  j ƒ  j ƒ  } | j ƒ  j ƒ  } |  j  d
 It j t j | | ƒ ƒ IJ|  j ƒ  j ƒ  } | j ƒ  j ƒ  } |  j  d It j t j | | ƒ ƒ IJ|  j j ƒ  } | j j ƒ  } |  j  d It j t j | | ƒ ƒ IJt j |  j ƒ  j | j ƒ  j ƒ } |  j  d It j | ƒ IJn  d  S(   Ns   Usol           s   Ksol           s   Koverall       s   Ustar          s   Twin fraction  s   mask step      s   mask shift     s   mask trunk rad s   mask solv rad  s   Fmodel delta  s   Fatoms delta s   Fmask delta  s   Bit wise diff mask (   R+   R¯   R4   R»   t   usolR3   t   ksolR1   t   koverallR2   t   ustarR   R   R¿   R†   R°   t   grid_step_factort   mean_shift_for_mask_updatet   shrink_truncation_radiust   solvent_radiusR(   t   f_modelRb   R
   Ra   R`   RÕ   R·   t   bulk_solvent_mask(   R   t   managerR#   t   y(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   show_parameter_summaryP  s*    ((((1)))%c         C   s%  t  d |  j ƒ  j ƒ  d |  j j ƒ  d |  j ƒ  j ƒ  d |  j j ƒ  d |  j j ƒ  d t |  j	 ƒ d |  j
 d |  j d	 |  j d
 |  j d |  j d |  j d |  j d |  j d |  j ƒ } t |  j j ƒ | j _ t |  j j ƒ | _ | j ƒ  |  j | _ |  j d  k	 r!|  j j ƒ  | _ n  | S(   NR‚   R   RÖ   R   R¯   R°   R+   R‡   R˜   RØ   Rª   R©   Rž   R–   R×   (   Ru   R‚   R]   R·   RÖ   R   RÐ   R¯   R   R°   R+   R‡   R˜   R   Rª   R©   Rž   R–   R™   R   R   t   updateRœ   R�   R(   (   R   t
   new_object(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR]   k  s.    								
c         C   s  |  j  ƒ  } | j ƒ  j | | ƒ } | j d | ƒ } | j j | ƒ } t d | d | d | j ƒ  j | | ƒ d | j d | j	 j  ƒ  d | j
 d | j d	 | j d
 | j d | j d | j d | j d | j d | j d | j ƒ } | j ƒ  |  j | _ | S(   Nt   external_miller_arrayR‚   R   RÖ   R   R¯   R°   R+   R‡   R˜   RØ   Rª   R©   Rž   R–   R×   (   R]   R‚   t   resolution_filtert   construct_miller_setR·   R    Ru   RÖ   R   R¯   R°   R+   R‡   R˜   R   Rª   R©   Rž   R–   R™   Rõ   Rœ   (   R   t   d_maxt   d_mint   dct	   dummy_obst   twin_completet   appropriate_f_mask_arrayRö   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyRø   …  s.    										
c         C   sá   |  j  ƒ  |  j ƒ  } | d  k r& | St d | j j | ƒ d | j j | ƒ d | j ƒ  j | ƒ d | j d | j	 j ƒ  d | j
 d | j d | j d	 | j d
 | j d | j d | j d | j d | j ƒ } |  j | _ | S(   NR‚   R   RÖ   R   R¯   R°   R+   R‡   RØ   Rª   R©   Rž   R–   R×   (   R¸   R]   R(   Ru   R‚   R¤   R·   RÖ   R   R¯   R°   R+   R‡   R   Rª   R©   Rž   R–   R™   Rœ   (   R   t	   selectionRü   Rö   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR¤   ¡  s*    
 									c         C   sM   |  j  ƒ  } |  j ƒ  } | j ƒ  j ƒ  | j ƒ  j ƒ  k r@ | S| j | ƒ S(   N(   t	   f_model_wt	   f_model_tR¢   R¨   t   concatenate(   R   t   ma_wt   ma_f(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt*   f_model_scaled_with_k1_composite_work_free¹  s
    $ c         C   s"   |  j  j d |  j j ƒ  ƒ } | S(   NRb   (   Rd   t   customized_copyR»   Rð   (   R   t   tmp_f_model(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyRð   À  s    c         C   s   |  j  ƒ  } | j |  j ƒ S(   N(   Rð   R¤   Rµ   (   R   R    (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR  Æ  s    c         C   s   |  j  ƒ  } | j |  j ƒ S(   N(   Rð   R¤   Rµ   (   R   R    (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR  Ê  s    c         C   s(   |  j  d  k r! |  j ƒ  |  _  n  |  j  S(   N(   Rd   R(   R¶   (   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyRÕ   Î  s    c         C   s   |  j  ƒ  } | j |  j ƒ S(   N(   RÕ   R¤   Rµ   (   R   R    (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   f_calc_wÓ  s    c         C   s   |  j  ƒ  } | j |  j ƒ S(   N(   RÕ   R¤   Rµ   (   R   R    (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   f_calc_t×  s    c         C   s   |  j  S(   N(   R›   (   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyRk   Û  s    c         C   sv   |  j  d  k	 rJ |  j  j d |  j d t d t ƒ |  j  j d | d | ƒ S|  j d t d | d | ƒ \ } } | Sd  S(   NR   t   update_f_calcR¸   Rû   Rú   t   table(   R�   R(   t   update_xray_structureR   Rj   t   r_workt   r_valuesRs   (   R   Rû   Rú   t   wt   f(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR  Þ  s    $c         C   sv   |  j  d  k	 rJ |  j  j d |  j d t d t ƒ |  j  j d | d | ƒ S|  j d t d | d | ƒ \ } } | Sd  S(   NR   R  R¸   Rû   Rú   R  (   R�   R(   R  R   Rj   t   r_freeR  Rs   (   R   Rû   Rú   R  R  (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR  ç  s    $c         C   s&   |  j  ƒ  j d |  j  ƒ  j ƒ  d ƒ S(   NRb   i    (   RÕ   R  Rb   (   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   f_part1ð  s    c         C   s:   d } | J| | |  j  ƒ  |  j ƒ  |  j |  j f IJd  S(   Ns9   r_work=%6.4f r_free=%6.4f twin_fraction=%4.2f twin_law=%s(   R  R  R   R˜   (   R   R   t   suffixt   show_headert   fmt(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR,   ó  s    c      	   C   s&   |  j  d | d | d |	 d |
 ƒ d  S(   NR,   R   t   apply_back_tracet   update_f_part1(   t   update_solvent_and_scale(   R   t   paramsR   R,   t   optimize_maskt   nproct   fastRä   t   refine_hd_scatteringR  R  (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   update_all_scalesù  s    iÿÿÿÿc         C   s_  |  j  d  k r< |  j d  k	 r< t j |  j ƒ j ƒ  |  _  n  t j j d |  j	 ƒ  d |  j
 ƒ  d |  j d |  j  d |  j d |  j ƒ  d |  j ƒ  d |  j ƒ  d	 |  j ƒ 	|  _ |  j j |  _ |  j j d
 | d t d | d | d | d t ƒ } |  j d | j ƒ  d d | j ƒ  d	 |  j j d | j ƒ  d |  j j ƒ  ƒ |  j j |  _ |  j j |  _ d  S(   NR‚   RÖ   R   R‡   R°   R3   t   b_solt   b_cartR   R,   R  R  R   R  R  i    R1   (   R˜   R(   R‡   R   t   change_of_basis_opt   as_hklRo   Rð   Rò   R‚   RÖ   R   R°   R3   R   R!  R   R�   t   twin_setR  Rs   t   update_coret   k_solst   scale_k1_w_for_twin_targetst   arrays(   R   R  R,   R  R  t   optimize_mask_thoroughR  R   t   verboset
   initialiseR  R  t   result(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR    s0    					c         C   sô  | d  k	 r | |  _ n  | d  k	 rF |  j j | j ƒ  ƒ | |  _ n@ |  j j ƒ  j |  j j ƒ  ƒ sm t	 ‚ |  j j |  j j ƒ  ƒ | d  k	 r´ |  j j
 | j ƒ  ƒ | |  _ n |  j j
 |  j j ƒ  ƒ | d  k	 rû |  j j | j ƒ  ƒ | |  _ n+ |  j d  k	 r&|  j j |  j j ƒ  ƒ n  | d  k	 rDt j | ƒ }	 n  |	 d  k	 ro|  j j |	 ƒ |	 |  j _ n  |	 d  k r”|  j j |  j j ƒ n  | d  k	 r¿|  j j | ƒ | |  j _ n |  j j |  j j ƒ |
 d  k	 r|
 |  j _ |  j j |  j j ƒ n |  j j |  j j ƒ | d  k	 rqt j |  j j ƒ  t j t | ƒ ƒ ƒ } |  j j | ƒ | |  j _ n  | d  k r»|  j j |  _ |  j  j! |  j j ƒ |  j" j! |  j j ƒ n5 | |  j _ | |  _ |  j  j! | ƒ |  j" j! | ƒ d  S(   N(#   R(   R¡   R»   t   renew_fatomsRb   Rd   R¢   R£   Rˆ   R:   t   renew_fmaskR·   t   renew_fpartt   calcR¹   R   t   b_as_uRè   R¯   R4   Ré   R3   R1   Rê   t   u_cart_as_u_starR9   R>   RK   Rë   R2   R   R   R¿   R†   RÀ   (   R   RÕ   R   R€   R!  R3   R   R5   t   b_partR4   R1   R   RÖ   R2   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR%  *  sV    '*	c         C   s   |  j  S(   N(   R¥   (   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt
   f_obs_workp  s    c         C   sÑ  |	 d  k	 r( |	 |  _ |  j d t ƒ n  | d  k	 rk | j ƒ  j |  j j ƒ  ƒ sX t ‚ |  j d | ƒ n  | d  k	 rƒ | |  _	 n  | d  k	 r| j
 ƒ  j ƒ  |  j j
 ƒ  j ƒ  k s¼ t ‚ | |  _ |  j j |  j ƒ  j
 ƒ  ƒ |  _ |  j j |  j ƒ  j
 ƒ  ƒ |  _ n  | d  k	 r�| j ƒ  j |  j ƒ  j ƒ  ƒ s>t ‚ | j
 ƒ  j ƒ  |  j ƒ  j
 ƒ  j ƒ  k snt ‚ |  j d | ƒ n  | d  k	 r©| |  _ |  j d | ƒ n  | d  k	 ry | j ƒ  d k sÐt ‚ Wn) t k
 rüt | ƒ d k sýt ‚ n X|  j d | ƒ n  | d  k	 r5| |  j _ |  j ƒ  n  | d  k rZ|  j j |  _ |  j n  | d  k r¤|  j j |  _ |  j j |  j j ƒ |  j j |  j j ƒ n) | |  _ |  j j | ƒ |  j j | ƒ d  S(   NR  RÕ   R   RÖ   i   R!  (   R(   R™   R  Rj   R¢   R£   Rð   R:   R%  R°   Rb   R¨   R‘   R¤   RÖ   R¥   R§   R·   R¡   t	   Exceptiont   lenR¯   R1   R   R   t   targetR¿   R†   RÀ   (   R   RÕ   R‚   R   t   f_ordered_solventRÖ   R!  R3   R   R×   Rš   t   abcdR—   R   R°   t   overall_scaleR   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyRõ   s  sN    	$-	"$'0	  
	c         C   së   d  } | } | d  k r' |  j ƒ  } n  t j | j ƒ  |  j j ƒ  | j ƒ  |  j j	 ƒ  d d !ƒ } | j
 ƒ  } t j d |  j d | d | j ƒ  ƒ j ƒ  } | j ƒ  s¯ t ‚ | s¹ | S| j | j ƒ  |  j ƒ  j ƒ  ƒ } | | f Sd  S(   Ni    i	   t   crystal_symmetryR¢   R…   (   R(   R‚   R   t   twin_completionR¢   R9   R;   R…   R‡   R¾   Rþ   R   t   setR^   t   is_unique_set_under_symmetryR:   t   get_free_model_selectionRÖ   Rb   (   R   t   return_free_f_atoms_arrayR÷   t
   completiont
   tmp_millerR¢   Rˆ   t   free_array_for_f_atoms(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyRù   ±  s(    				c         C   sß   |  j  d
 k r- |  j t ƒ \ |  _  |  _ n  |  j d
 k	 r· |  j  j d |  j d |  j j d |  j j	 d |  j j
 d |  j j d |  j j d |  j j d |  j j d	 |  j j ƒ 	} n |  j  j d |  j ƒ } | j ƒ  } | S(   s"   Get f calc from the xray structureR   t	   algorithmR‰   RŠ   R‹   RŒ   R�   RŽ   R�   N(   Rˆ   R(   Rù   Rj   Rµ   R™   t!   structure_factors_from_scatterersR   RD  R‰   RŠ   R‹   RŒ   R�   RŽ   R�   RÕ   (   R   R    Rd   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR¶   Î  s"    	c   	      C   s¯  t  j d d } |  j j ƒ  } t |  j ƒ  |  j j ƒ  ƒ } | d k  r` |  j j d d ƒ n  |  j ƒ  } | | } | d k  r™ | t	 | ƒ d } n | } t	 | ƒ d k r«|  j
 ƒ  } | d | | d	 | | d | | d
 | d | d g } |  j d | ƒ |  j d |  j ƒ  d	 | ƒ |  j j d | ƒ t |  j ƒ  |  j j ƒ  ƒ } | d k sjt ‚ |  j j d d ƒ |  j d |  j d t d t d t d d  ƒ n  d  S(   Ni   i   i    t   u_ming�íµ ÷Æ°>g        gü©ñÒMbP?g     Àr@i   i   i   i   R!  R   t   b_shiftR   R  R¸   t   update_f_ordered_solventR+   (   R   t   piR   R>   t   minR   t   min_u_cart_eigenvaluet   tidy_ust   b_isoR`   R!  Rõ   t   k_sol_b_solt   shift_usR:   R  Rj   Rs   R(   (	   R   t   epsR>   t   b_minRM  t   b_testt   b_adjR!  t
   b_cart_new(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   apply_back_b_isoæ  s4    
 !		c         C   sS   |  j  ƒ  j ƒ  |  j j } | d k  r1 d } n  t d | ƒ } | rO d } n  | S(   Ng333333Ó?gš™™™™™é?(   R‚   Rû   R°   Rì   RJ  (   R   RH  t   step(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt	   _get_step  s     	 	c         C   s³   |  j  d  k r" | j ƒ  |  _  t S|  j  j ƒ  } | j ƒ  } | j ƒ  |  _  | j ƒ  | j ƒ  k rh t St j | | j ƒ  ƒ } t j	 | ƒ } t
 } | | k r« t } n  | Sd  S(   N(   RÏ   R(   RÐ   Rj   t
   sites_cartR¨   R
   t   sqrtt   dott   meanRs   (   R   R   t
   mean_shiftt   sites_cart_1t   sites_cart_2t   atom_atom_distancest   mean_shift_R¸   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   _update_f_mask_flag  s     	c         C   s]   |  j  j ƒ  } |  j j ƒ  } t j | | j ƒ  ƒ } t j | ƒ } |  j d I| IJd  S(   Ns   MEAN SHIFT: (   RÏ   RX  R   R
   RY  RZ  R[  R+   (   R   R]  R^  R_  R`  (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   print_diffs  s
    c
         C   sý  | d  k	 r | |  _ n  | rQ | r- t }
 qQ |  j d |  j d |  j j ƒ }
 n  d  } | r,t ƒ  } |  j d  k	 s{ t ‚ |  j d  k	 r|  j	 j
 d |  j d |  j j d |  j j d |  j j d |  j j d |  j j d |  j j d	 |  j j d
 |  j j ƒ 	j ƒ  } q,|  j	 j
 d |  j ƒ j ƒ  } n  d  } t } | rh|
 rh|  j ƒ  } | j d |  j	 ƒ } n  | | g j d  ƒ d k rŒt } n t } | d  k r­|  j ƒ  } n  | d  k rÈ|  j ƒ  } n  | rù|  j d | d | d |	 d | d | ƒ n  d  S(   NR   R\  RD  R‰   RŠ   R‹   RŒ   R�   RŽ   R�   Rˆ   i   RÕ   R   R!  R3   R   (   R(   R   Rj   Ra  R°   Rí   R   R:   R™   Rˆ   RE  RD  R‰   RŠ   R‹   RŒ   R�   RŽ   R�   RÕ   Rñ   RÊ   R¦   Rs   R   R%  (   R   R   R  R¸   RH  t   force_update_f_maskR+   R3   R   R!  t   consider_mask_updateRÕ   t   timerR   t   set_core_flagt   bulk_solvent_mask_obj(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR  #  sV    
					 	  c         C   sO   |  j  ƒ  } t j d |  j d | d |  j j d |  j j d |  j j ƒ } | S(   NR   t	   grid_stept   ignore_zero_occupancy_atomsRï   Rî   (   RW  R   t   bulk_solventR   R°   Ri  Rï   Rî   (   R   RV  R,  (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyRñ   Z  s    		c         C   s%   |  j  ƒ  } | j |  j ƒ |  _ d  S(   N(   Rñ   RÊ   Rˆ   R·   (   R   t   mask(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR¸   d  s    c   0   "   C   sÉ  | r t  } n  t j |  j j ƒ  j ƒ  t  ƒ } |  j j ƒ  j ƒ  }	 | d  k	 rs t j |	 | k  ƒ }
 | |
 @} n  | d  k	 r¡ t j |	 | k ƒ } | | @} n  t j |  j j ƒ  j ƒ  t  ƒ } |  j j ƒ  j ƒ  } | d  k	 rt j | | k  ƒ } | | @} n  | d  k	 r3t j | | k ƒ } | | @} n  |  j	 j
 d |  j j ƒ  d |  j j ƒ  d | d |  j j ƒ } |  j j
 |  j j ƒ  |  j j ƒ  | |  j j ƒ } |  j ƒ  } | r»g  } g  } g  } g  } g  } g  } g  } g  } |  j d | d | ƒ } |  j j d | ƒ |  j j |  j ƒ |  j j d t  ƒ j } x™|  j j ƒ  j ƒ  D]‚} t j |  j j ƒ  j ƒ  | k ƒ } | j t  ƒ } |  j	 j
 d |  j j ƒ  d |  j j ƒ  d | d |  j j ƒ } t j |  j j ƒ  j | ƒ d  ƒ } t j |  j j ƒ  j ƒ  | k ƒ } | | @} | j t  ƒ } |  j j
 d |  j j ƒ  d |  j j ƒ  d | d |  j j ƒ }  | j | ƒ | j |  ƒ |  j j ƒ  j | ƒ \ } } |  j j ƒ  j d	 | d
 t d t ƒ }! |  j ƒ  \ }" }# |  j  ƒ  \ }$ }% t j |" j ƒ  j ƒ  t  ƒ }& |" j ƒ  j ƒ  }	 | d  k	 rLt j |	 | k  ƒ }
 |& |
 @}& n  | d  k	 rzt j |	 | k ƒ } |& | @}& n  t j |$ j ƒ  j ƒ  t  ƒ }' |$ j ƒ  j ƒ  } | d  k	 rØt j | | k  ƒ } |' | @}' n  | d  k	 rt j | | k ƒ } |' | @}' n  t j |$ j |' ƒ j ƒ  d  ƒ }$ t j |% j |' ƒ j ƒ  d  ƒ }% t j |" j |& ƒ j ƒ  d  ƒ }" t j |# j |& ƒ j ƒ  d  ƒ }# t j |  j! ƒ  j |& ƒ d  ƒ }( t j |  j" ƒ  j |' ƒ d  ƒ }) t j |  j# ƒ  j |& ƒ d  ƒ }* t$ d | ƒ t$ d | ƒ t$ d | ƒ t$ d | ƒ t$ d | ƒ t$ d | ƒ t$ d |  ƒ g }+ | j |+ ƒ t% d	 | d |! d | | d |" d |# d | d |  d d  d d  d | d | d d  d | d |* d |( d |) ƒ }, | j |, ƒ qSW| s´d/ }- d" | | f }. t& j' |- g | d# |. d$ t  d% t d& d' d( d) ƒ}/ |  j( d* IJ|  j( d+ t) j* |  j+ ƒ j, ƒ  IJ|  j( d, |  j j IJ|  j( |/ IJ|  j( d- IJ|  j( J|  j- d. t  ƒ |  j. d. t  ƒ qÅ| Sn
 | | f Sd  S(0   NR‚   Rð   R   R   Rß   t
   max_n_binsR|   t   use_binningt   i_bint   show_bin_numbert   show_countss   %3is   %5.2fs   %5is   %3.2ft   d_ranget   completenesst
   alpha_workt	   beta_workR  R  t   target_workt   target_freet   n_workt   n_freet   scale_k1_workt
   mean_f_obst   fom_workt	   pher_workt	   pher_freet   binRú   Rû   sÕ   
Overall r values
R Work : %4.3f
R Free : %4.3f

R  = \sum_h( |Ft-Fo| )/ \sum_h(Fo)
Ft = Sqrt(tf*F1^2 + (1-tf)F2^2)
F1,F2 are twin related model amplitudes.
tf is the twin fraction and Fo is an observed amplitude.t   commentst
   has_headert   separate_rowst   prefixs   | t   postfixs    |s;   ------------------------  R values ------------------------s     twin law      : %ss     twin fraction : %4.3fs;   -----------------------------------------------------------R,   (   s   bins   d_maxs   d_minRw  R  Rx  R  (/   Rj   R
   t   boolR¥   Rb   R¨   t
   d_spacingsR(   R§   RÃ   t   r_amplitude_absR»   Rð   R   R   RÄ   t   sigmaa_objectt   determine_n_binsR¬   R­   Rr  R«   t
   range_usedt   bin_indicesR¦   t   mean_defaultR¤   t   appendt   bin_d_ranget
   bin_legendRs   t   alpha_beta_wt   alpha_beta_ft   phase_errors_workt   phase_errors_testt   figures_of_merit_workt   strt   resolution_binR   t   formatR+   R   R"  R‡   R#  t   r_work_in_lowest_resolution_bint   r_overall_low_high(0   R   R  t   rowsRû   Rú   t   againRß   Rà   t   additional_selection_wt   d_wt   exclude_low_wt   exclude_high_wt   additional_selection_ft   d_ft   exclude_low_ft   exclude_high_ft   r_abs_work_f_overallt   r_abs_free_f_overallt   tmp_sigmaa_objectt   r_abs_work_f_bint   r_abs_free_f_bint   bin_lowt   bin_highRx  Rw  t   binsR|   Rr  Rn  R   t   tmp_workt   mean_f_obs_wt   tmp_freeRq  t   alpha_wt   beta_wt   alpha_ft   beta_ft   n_additional_selection_wt   n_additional_selection_ft   phase_error_wt   phase_error_ft   fom_wR    R~  t   headerR  t	   table_txt(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR  h  s   	!!			$$$
!!!!!!!
			#c      	   C   sj   t  j |  j ƒ  j ƒ  j ƒ  t ƒ } |  j j d |  j ƒ  j ƒ  d |  j j	 ƒ  d | d |  j
 j ƒ } | S(   NR‚   Rð   R   R   (   R
   R„  R‚   Rb   R¨   Rj   RÂ   R†  R»   Rð   R   R   (   R   R   t	   overall_r(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   r_all#  s    $iÈ   c      	   C   s  |  j  j ƒ  j ƒ  } t j | ƒ } | j ƒ  | k  rE | j ƒ  } n  | | d  } t j | j ƒ  t ƒ } | j | t	 ƒ } |  j
 j d |  j  j ƒ  d |  j j ƒ  d | d |  j j ƒ } | sÆ | S|  j d IJ|  j d | IJ|  j d |  j | ƒ IJ|  j d IJd  S(	   Ni   R‚   Rð   R   R   s;   -----------------------------------------------------------s3     R-value for the %i lowest resolution reflections:s	       %4.3f(   R¥   t	   d_star_sqRb   R
   t   sort_permutationR¨   R„  Rs   t   set_selectedRj   RÃ   R†  R»   Rð   R   R   R+   R—  (   R   R}   R,   R»  t   sort_permutt   i_selectt   b_selectR«  (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR—  -  s$    g      @c   
      C   s  |  j  ƒ  } |  j j ƒ  \ } } | | k  r6 | } n  | | k rK | } n  |  j j d | d d ƒ j ƒ  j ƒ  } | d k r£ |  j d | d d d t ƒ d } n d  } |  j j d d d | ƒ j ƒ  j ƒ  } | d k r|  j d d d | d t ƒ d }	 n d  }	 | d  k	 r| } n d } |	 d  k	 r7|	 }	 n d }	 | sV| | |	 | | f S|  j	 d IJ|  j	 d IJ|  j	 J|  j	 d	 | | f IJ|  j	 d
 | | f IJ|  j	 d | | f IJ|  j	 J|  j	 d IJ|  j	 d | | |	 f IJ|  j	 d | | | | f IJ|  j	 d IJd  S(   NRû   Rú   g33333?�@i    R  g        s:   ----------------------------------------------------------s.   Overall, low and high resolution R-work valuess   Limits: Overall: %6.2f -- %6.2fs           Low    : %6.2f -- %6.2fs           High   : %6.2f -- %6.2fs$   R values    : Overall    low    highs"                 %6.3f   %6.3f  %6.3fs   Contributors:%7i  %7i %7i(
   R  R¥   t	   d_max_minRø   Rb   R¨   R  Rs   R(   R+   (
   R   t   dR,   R  Rú   Rû   t   n_lowt   r_work_lt   n_hight   r_work_h(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR˜  E  sB     	 	'%'%		i
   c         C   s…  |  j  J|  j  J|  j  d IJ|  j  J|  j  d IJ|  j  Jt |  j j ƒ } t t j t | d ƒ ƒ d | ƒ } g  } x� | D]ˆ } t | ƒ } |  j d | ƒ |  j d t	 ƒ \ } } |  j
 d t	 ƒ \ }	 }
 d | d | d | d	 |	 d	 |
 g } | j | ƒ q| Wd } t j | g | d d d t d t	 d d d d ƒ} |  j  | IJ|  j  J|  j  d IJ|  j  J|  j  J|  j d | ƒ d S(   s<   for each twin fraction, compute the target value and r valuesB   ------------------------ Twin fraction scan ----------------------sB    R-values and target values for various twin fractions are listed.i   g       @t   twin_fraction_parametersR  t   print_its   %4.3fs   %5.4es   Twin fractions   R-works   R-frees   Target-works   Target-freeR  R€  R�  R‚  s   | Rƒ  s    |sB   ------------------------------------------------------------------N(   s   Twin fractions   R-works   R-frees   Target-works   Target-free(   R+   R   R   RK   R
   RL   t   rangeR  R  Rs   R7  RŒ  R   R–  R(   Rj   (   R   t   nt   current_twin_fractiont   trail_twin_fractionsR™  t   tft   tmp_twin_fractiont   rwt   rft   ttwt   ttfR    t   legendR¸  (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   twin_fraction_scans  sB    '	c         C   s¶   |  j  j |  j j ƒ  ƒ |  j } |  j d k r: | } n" |  j j |  j j ƒ  ƒ |  j } | r¨ |  j J|  j d IJ|  j d | IJ|  j d | IJ|  j d IJn
 | | f Sd  S(   Ni    s1   ----------------- Target values -----------------s      working set  : %8.6e s      free set     : %8.6e s1   -------------------------------------------------(   R¿   R7  R»   Rð   R³   R´   RÀ   R+   (   R   RÈ  t   tmp_wt   tmp_f(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR7  ›  s    "	"c         C   s   t  d |  ƒ S(   NRò   (   t   target_functor(   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR×  ª  s    c         C   s
   |  j  ƒ  S(   N(   t   target_t(   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   target_f­  s    c         C   s÷  | d  k r d } n  | d k rj |  j j |  j k ra d } |  j j d |  j k rg d } qg qj d } n  | d k r¥ t |  j j d ƒ d k  r¥ |  j d IJq¥ n  | |  j k sº t ‚ | d k sÌ t ‚ |  j ƒ  j	 ƒ  j
 ƒ  } |  j ƒ  j	 ƒ  j
 ƒ  } d  } |  j ƒ  j	 ƒ  } | d k r¿| j ƒ  } | d  k rYt j | j ƒ  j ƒ  d ƒ } n  |  j j | j ƒ  | |  j j ƒ  |  j j ƒ \ } } | j d | d	 | ƒ j | ƒ } | j ƒ  } n  | d k rÃ| j ƒ  } | d  k rt j | j ƒ  j ƒ  d ƒ } n  |  j j | j ƒ  | |  j j ƒ \ } } t j | d
 k ƒ }	 | j |	 ƒ }
 | j ƒ  j |	 ƒ } | j d | d	 | ƒ j | ƒ } | j |	 ƒ j ƒ  } | j |	 ƒ } | j |	 ƒ } n  |  j ƒ  } t j t j | j ƒ  ƒ ƒ } t j t j | j ƒ  ƒ ƒ } | d k } | | d k O} | j ƒ  j | d ƒ } | j d | ƒ } t | ƒ j | ƒ j | ƒ } | j | ƒ } t  j! d | d | d t" d t" d t" ƒ } | j ƒ  j ƒ  d
 k rê| d k rÛt# d ƒ ‚ qêt# d ƒ ‚ n  | | | f S(   NRv   Ry   g      ð?Rz   g      à?gü©ñÒMbP?s9   Automatic adjustment: detwinning mode set to proportionalRb   R½   i    gšd~ÅQJy                t   miller_nativet   miller_derivativet   use_intensitiest   scale_weightt   use_weightss—   Algebraic detwinning of data resulted in a dataset without data! 
 Please try to use detwinning using proportionality rules (detwin.mode=proportional) s6   This should never have happend. Please contact authorsy                ($   R(   R   R   RŸ   R`   R+   R�   R:   R‚   R]   t	   f_as_f_sqRÖ   R½   R
   RL   Rb   R¨   RÈ   t   detwin_with_model_dataR»   Rð   R  t   set_observation_typet	   f_sq_as_ft   detwin_with_twin_fractionR„  R¤   t   realt   imagR½  t   arrayR    R   t   ls_rel_scale_driverRs   R   (   R   t   modet	   tmp_i_obst	   untouchedt   dt_f_obsR­  R½   t   dt_iobst	   dt_isigmat   zerosR#   Ró   RÞ   t   ret   imt   selRÂ  t   abs_tmp_f_modelR  t   scaler(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   detwin_data°  s„    		!			!					c      	   C   s‡  |  j  d  k r t } n  | | g j d  ƒ d k s9 t ‚ | d  k rQ |  j } n  | d  k rŸ | sr |  j t k rÝ t |  _ |  j d |  j ƒ \ } } } qÝ n> t	 j
 d | d | d | d d ƒ } | sÍ | S| |  _  |  j  S| rt |  _ |  j d |  j ƒ \ } } } n  |  j r€t |  _ | j ƒ  j t ƒ d k rV| j d	 | j ƒ  ƒ } n  t	 j
 d | d | d | d d ƒ |  _  n  |  j  S(
   Ni   Rè  Rc   t   miller_calcRÖ   t   kernel_width_free_reflectionsiÈ   i    Rb   (   RÍ   R(   Rj   R¦   R:   RÖ   RÎ   Rô  Rž   R   t   sigmaa_estimatorRs   Rb   Ræ  (   R   t   detwinned_datat   f_model_dataR­  t   forced_updateR¥  (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR‡    s>    	!	$				!			c         C   s   d  S(   N(   R(   (   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   model_error_ml-  s    c         C   s+   | } | d  k r! |  j ƒ  } n  | j ƒ  S(   N(   R(   R‡  t
   alpha_beta(   R   t   external_sigmaa_objectR‡  (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyRü  0  s    c         C   sc   |  j  d | ƒ \ } } |  j ƒ  } | j } | j | j ƒ  ƒ } | j | j ƒ  ƒ } | | f S(   NRý  (   Rü  R‡  RÖ   R¤   Rb   (   R   Rý  t   only_if_required_by_targett   at   bt
   tmp_sigmaaR­  (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR�  6  s    	c         C   sa   |  j  d | ƒ \ } } |  j ƒ  } | j } | j | j ƒ  ƒ } | j | j ƒ  ƒ } | | f S(   NRý  (   Rü  R‡  RÖ   R¤   Rb   (   R   Rý  Rþ  Rÿ  R   R  R­  (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR�  >  s    	c         C   s   |  j  ƒ  } | j ƒ  j ƒ  S(   N(   R‡  t   fomRb   (   R   R‡  (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   figures_of_meritF  s    c         C   s5   |  j  ƒ  } | j } |  j ƒ  j | j ƒ  ƒ } | S(   N(   R‡  RÖ   R  R¤   Rb   (   R   R  R­  R  (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR“  J  s
    	c         C   s4   |  j  ƒ  } | j } |  j ƒ  j | j ƒ  ƒ } | S(   N(   R‡  RÖ   R  R¤   Rb   (   R   R  R­  R  (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   figures_of_merit_tQ  s
    	c         C   s   |  j  ƒ  } | j ƒ  j ƒ  S(   N(   R‡  t   phase_errorsRb   (   R   R‡  (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR  X  s    c         C   s5   |  j  ƒ  } | j } |  j ƒ  j | j ƒ  ƒ } | S(   N(   R‡  RÖ   R  R¤   Rb   (   R   R  R­  t   pher(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR‘  \  s    	c         C   s4   |  j  ƒ  } | j } |  j ƒ  j | j ƒ  ƒ } | S(   N(   R‡  RÖ   R  R¤   Rb   (   R   R  R­  R  (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR’  b  s    	c   	      C   s×   |  j  d d ƒ \ } } } |  j | | | ƒ } |  j | ƒ \ } } t j d | j ƒ  d t j | j ƒ  ƒ d | j ƒ  d | j ƒ  d |  j j	 ƒ  d | j
 ƒ  ƒ } t j d	 | d
 | j ƒ  ƒ } |  j d t ƒ | S(   NRè  Ry   R‚   Rð   R†   t   betaR;   t   miller_indicesRˆ   Rb   Rú  (   Rô  R‡  Rü  R   t   f_star_w_star_mu_nuRb   R
   R`   R‘   R;   R¢   R   Ræ  t   w_starRj   (	   R   t   t_ot   t_ct   t_freet   t_sigmaa_objectRÿ  R   t   objt   w_star_o(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR
  i  s    	c         C   s�   |  j  ƒ  j ƒ  } t j |  j j ƒ  |  j j ƒ  |  j j ƒ  |  j	 j
 ƒ  d d !ƒ } | j | |  j j ƒ } |  j j | ƒ d  S(   Ni    i	   (   R
  Rb   R   R<  R‘   R¢   R9   R;   R…   R‡   R¾   t   twin_sumR   R   R¿   t   set_weightsR(   (   R   t   weightsRA  t   twinned_weights(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   set_pseudo_ml_weightsz  s    i   id   c   	      C   sò   | d k s t  ‚ |  j ƒ  j ƒ  j ƒ  } |  j ƒ  j ƒ  j t ƒ } | } | d k rh | | | 9} n  t | t | ƒ ƒ } t d t | t d | ƒ ƒ ƒ } | d  k	 rÐ t | t | t | | ƒ ƒ ƒ } n  | d  k	 rî t | | ƒ } n  | S(   Ni    i   (
   R:   RÖ   Rb   R¨   R¦   Rj   RJ  R   t   maxR(   (	   R   Rß   Rl  t
   min_n_binst   min_refl_per_bint   n_reflRx  t   n_refl_per_binR,  (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyRˆ  …  s    "%c         C   sX   t  j d | d | j ƒ  | ƒ j d | ƒ } t  j d | d | j ƒ  | j ƒ  | ƒ S(   NRˆ   Rb   t   phase_source(   R   Ræ  Rb   t   phase_transfer(   R   R‚   Rð   t   f_obs_scalet   f_model_scalet   d_obs(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt
   _map_coeffš  s
    	c         K   s   |  j  ƒ  } | j | �  S(   N(   t   electron_density_mapt   map_coefficients(   R   t   kwdst   emap(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR"  ¡  s    c         K   s+   |  j  | �  } | j d d ƒ j ƒ  j ƒ  S(   Nt   resolution_factorg      Ð?(   R"  t   fft_mapt   apply_sigma_scalingt   real_map_unpadded(   R   R#  t
   map_coeffs(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   _get_real_map¥  s    	c         K   s   d | d <|  j  | �  S(   Ns   2mFo-DFct   map_type(   R*  (   R   R#  (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   two_fofc_mapª  s    
c         K   s   d | d <|  j  | �  S(   Ns   mFo-DFcR+  (   R*  (   R   R#  (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   fofc_map®  s    
c         K   s-   |  j  ƒ  j ƒ  s d  Sd | d <|  j | �  S(   Nt   anomR+  (   R‚   R…   R(   R*  (   R   R#  (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   anomalous_map²  s     
c         C   so  | d k r d } n | d k r* d } n  | j  ƒ  j d ƒ rH d } n  d) } | | k r€ t d d | d j | ƒ f ƒ ‚ n  | d
 k s˜ | d k rì |  j j d k r³ d } n  |  j j d k rÎ d } n  |  j j d k rì d } qì n  | d k s| d	 k r=|  j j d k rd } n  |  j j d k r=d } q=n  |  j d |  j ƒ \ }	 }
 } d |  j	 j
 ƒ  } |  j j d | ƒ j |	 ƒ } | j ƒ  } | d k r|	 j ƒ  s´d  S|	 j ƒ  } |
 j ƒ  }
 |
 j d | ƒ \ }
 } | j d |
 ƒ } t j d | d | j ƒ  d ƒ } | S| d* k rªd  } | d k rC|
 } n&| d k rç|  j d |	 d |
 d | d t ƒ } | j ƒ  j |	 ƒ \ } }	 | j ƒ  d  j |	 ƒ \ } }	 |	 j |
 ƒ \ }	 }
 |
 j d |
 j ƒ  | j ƒ  ƒ } n‚| d k rx|  j d |	 d |
 d | d t ƒ } | j ƒ  j |	 ƒ \ } }	 |	 j |
 ƒ \ }	 }
 |	 j d |	 j ƒ  | j ƒ  ƒ j d |
 ƒ } nñ| d+ k rç| | g j d  ƒ d  k r®t d! ƒ ‚ n  |  j d" |	 d# |
 d$ | d% | ƒ } | d  k	 sit ‚ n‚|  j d |	 d |
 d | d t ƒ } |	 j |
 ƒ \ }	 }
 | j ƒ  j |	 ƒ \ } }	 | j ƒ  d  j |	 ƒ \ } }	 | j ƒ  } | j ƒ  } |	 j |
 ƒ \ }	 }
 | d k rº|  j d" |	 d# |
 d$ | d% | ƒ } n  | d& k rí|  j d" |	 d# |
 d$ d d% d ƒ } n  | d k r$|  j d" |	 d# |
 d$ d' | d% | ƒ } n  | d k rW|  j d" |	 d# |
 d$ d' d% d( ƒ } n  | d  k	 sit ‚ | d  k s{t ‚ |  j j r¦| j d | j ƒ  | ƒ } n  | S|  j j  |  j	 j! ƒ  ƒ } |  j j d | ƒ j |  j" ƒ  ƒ } | d k r<|  j ƒ  j ƒ  j |  j" ƒ  ƒ j ƒ  } | j d | j ƒ  | ƒ } n  |  j j rg| j d | j ƒ  | ƒ } n  | Sd  S(,   Nt   Fmodelt   Fct   DFmodelt   DFcR.  s   Fo-Fcs   Fobs-Fmodels   2mFo-DFcs   2mFobs-DFmodels   mFo-DFcs   mFobs-DFmodelR{   t
   m_gradientt   mFos4   Map type '%s' not supported for twinned structures. s   Allowed types: %s.s   , t   m_dtfo_d_fct   two_m_dtfo_d_fct   two_dtfo_fcRè  g      ð?Rb   t   otherR  Rˆ   y               @Rø  Rù  R­  Rú  i    sQ   Map coefficient multipliers (k and n) must be provided to generate detwinned mapsR‚   Rð   R  R  t   dtfo_fci   i   (   s   Fo-Fcs   Fobs-Fmodels   2mFo-DFcs   2mFobs-DFmodels   mFo-DFcs   mFobs-DFmodels   gradientR4  R5  R1  R3  s   anom(   s   gradientR4  (   s   Fo-Fcs   Fobs-Fmodel(#   t   lowert
   startswithR   t   joinR–   t   fofct   twofofcRô  Rž   R»   R:  Rd   R  R    Rb   R…   R(   t   anomalous_differencest   average_bijvoet_matesR_   R  R   Ræ  R‡  Rj   R  Rü  R¦   R   R:   t   aniso_correctR¿   t   d_target_d_fmodelRð   R‚   (   R   R+  t   kRÊ  t   w1t   w2t
   isotropizet   ncs_averaget   supported_typesRë  R  R­  t   aniso_scalet	   anom_diffR,  R‡  t   mRÂ  RË   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   compute_map_coefficients·  sü    				         													
	'	c         C   s   d S(   Ni    (    (   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR5   Q  s    c         C   s   d S(   Ni    (    (   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR3  S  s    g      @c
      	      s>   d t  f ‡  ‡ f d †  ƒ  Y}
 |
 d | d | d |  d |	 ƒ S(   NR,  c              sh   e  Z d  „  Z d d d d d e d d d d d ‡  ‡ f d † Z d d d d e d ‡  ‡ f d † Z RS(   c         S   s(   | |  _  | |  _ | |  _ d  |  _ d  S(   N(   R%  t   symmetry_flagsRÞ   R(   t   mch(   R   R%  RN  RÞ   t   reverse_scale(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR   a  s    			c            sr   | d
 k r |  j  j d | ƒ St j d | ƒ } | j } | j } |  j  j d | d | d | d ˆ  d	 ˆ ƒ Sd  S(   NR{   R4  R.  R+  t   map_name_stringRD  RÊ  RE  RF  (   s   gradients
   m_gradients   anom(   RÞ   RM  Ro   t	   map_namesRD  RÊ  (   R   R+  t   acentrics_scalet   centrics_pre_scaleRH  RG  t   exclude_free_r_reflectionst   post_processing_callbackt   fill_missingt   sharpt   pdb_hierarchyt   merge_anomaloust   map_name_managerRD  RÊ  (   RE  RF  (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR"  h  s    		c   
         s»   | d  k r |  j } n  | d  k r0 |  j } n  | d k rT |  j j d | ƒ } nQ t j d | ƒ } | j } | j }	 |  j j d | d | d |	 d ˆ  d	 ˆ ƒ } | j	 d
 | d | ƒ S(   NR{   R4  R.  R+  RQ  RD  RÊ  RE  RF  R%  RN  (   s   gradients
   m_gradients   anom(
   R(   R%  RN  RÞ   RM  Ro   RR  RD  RÊ  R&  (
   R   R%  RN  R"  t   other_fft_mapt   use_all_dataR+  R[  RD  RÊ  (   RE  RF  (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR&  €  s&    				N(   R-   R.   R   R(   Rs   R"  R&  (    (   RE  RF  (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR,  `  s$   	R%  RN  RÞ   RP  (   RD   (   R   RD  RÊ  RE  RF  R%  t   fill_missing_f_obsRN  t	   fill_modeRP  R,  (    (   RE  RF  sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR!  U  s
    :c         C   s   |  j  j ƒ  S(   N(   R»   Rë   (   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR2   Ÿ  s    c         C   s+   |  j  ƒ  } t j |  j j ƒ  | ƒ } | S(   N(   R2   R   t   u_star_as_u_cartR9   R>   (   R   R    (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   u_cart¢  s    c         C   s   t  j |  j ƒ  ƒ } | S(   N(   R   t   u_as_bRa  (   R   R!  (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR!  §  s    c         C   s(   |  j  ƒ  } | d | d | d d S(   Ni    i   i   g      @(   R!  (   R   R!  (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyRM  «  s    c         C   s(   |  j  ƒ  } | d | d | d d S(   Ni    i   i   g      @(   Ra  (   R   Ra  (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   u_iso¯  s    c         C   s"   |  j  ƒ  } | | | d d d g S(   Ng        (   Rc  (   R   t   ui(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   u_iso_as_u_cart³  s    c         C   s   |  j  j ƒ  S(   N(   R»   Ré   (   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR3   ·  s    c         C   s   |  j  ƒ  g S(   N(   R3   (   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR&  º  s    c         C   s   |  j  j ƒ  S(   N(   R»   Rè   (   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR4   ¿  s    c         C   s   t  j |  j ƒ  ƒ S(   N(   R   Rb  R4   (   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR   Â  s    c         C   s   |  j  ƒ  |  j ƒ  f S(   N(   R3   R   (   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyRN  Å  s    c         C   s   |  j  ƒ  |  j ƒ  f S(   N(   R3   R4   (   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   k_sol_u_solÈ  s    c         C   s   |  j  S(   N(   R·   (   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR   Ì  s    c         C   s   |  j  ƒ  j |  j ƒ S(   N(   R   R¤   Rµ   (   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   f_mask_wÏ  s    c         C   s   |  j  ƒ  j |  j ƒ S(   N(   R   R¤   Rµ   (   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   f_mask_tÒ  s    c         C   s4   |  j  j ƒ  } |  j j d | ƒ j |  j ƒ } | S(   NRb   (   R»   t   f_bulkR·   R  Rá  (   R   R    (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyRi  Õ  s    c         C   s   |  j  ƒ  } | j |  j ƒ S(   N(   Ri  R¤   Rµ   (   R   R    (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   f_bulk_tÛ  s    c         C   s   |  j  ƒ  } | j |  j ƒ S(   N(   Ri  R¤   Rµ   (   R   R    (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   f_bulk_wß  s    c         C   sG   |  j  j ƒ  } |  j  j ƒ  } |  j j d | | ƒ j |  j ƒ } | S(   NRb   (   R»   Ri  R:  R·   R  Rá  (   R   R    t   multi(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   fb_bulkã  s
    c         C   s   |  j  ƒ  } | j |  j ƒ S(   N(   Ri  R¤   Rµ   (   R   R    (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt	   fb_bulk_tê  s    c         C   s   |  j  ƒ  } | j |  j ƒ S(   N(   Ri  R¤   Rµ   (   R   R    (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt	   fb_bulk_wî  s    c         C   s   |  j  j ƒ  S(   N(   R»   Rê   (   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt
   scale_k1_wò  s    c         C   s   |  j  j ƒ  S(   N(   R»   Rê   (   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt
   scale_k1_tô  s    c         C   s   |  j  j ƒ  S(   N(   R»   Rê   (   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt
   scale_k3_tö  s    c         C   s   |  j  j ƒ  S(   N(   R»   Rê   (   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt
   scale_k3_wø  s    c         C   s   d  S(   N(   R(   (   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt	   hl_coeffsû  s    iú   i    c         C   s   |  j  d IJd  S(   Ns.   Direct vs FFT comparison not yet implemented. (   R+   (   R   R}   R|   R+   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   fft_vs_directþ  s    iô  t    c         C   s   |  j  d t ƒ d  S(   NR  (   R  Rj   (   R   R}   R|   R‚  R+   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt$   r_work_scale_k1_completeness_in_bins  s    c      	   C   sÆ  | d  k r |  j } n  d } | d  k r3 d } n  t d | ƒ } d | d } | d | d | d IJ|  j ƒ  } |  j ƒ  } |  j ƒ  \ }	 }
 } } } } |  j ƒ  } |  j ƒ  \ } } | j ƒ  } t	 j
 | ƒ } | d k j t ƒ } |  j ƒ  } |  j j ƒ  } t	 j
 | t j d	 d
 ƒ } | d | | | | f d | d IJ| d |	 |
 | | | | f IJ| d |  j ƒ  IJ| d | | f d | d IJ| d d d d IJ| j ƒ  d  S(   Nt    Rv  s   |-t   |iP   i   t   -g        i   i   s7   | k_sol=%5.2f b_sol=%7.2f target_w =%20.6f r_work=%7.4fi   s7   | B(11,22,33,12,13,23)=%9.4f%9.4f%9.4f%9.4f%9.4f%9.4f |sL   | trace(B) = (B11 + B22 + B33)/3 = %-10.3f                                 |s.   | mean alpha:%8.4f  number of alpha <= 0.0:%7di   iM   s   |-|(   R(   R+   R6  R3   R   R!  t   target_wR�  Rb   R
   R[  R¦   Rj   R  R   t   extract_u_iso_or_u_equivR   RI  Rc  t   flush(   R   R·  R7  R+   t   pt   line_lent   fill_lenR3   R   t   u0t   u1t   u2t   u3t   u4t   u5R{  R†   R  t   alpha_dt   a_meant   a_zeroR  t   u_isost
   b_iso_mean(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   show_k_sol_b_sol_b_cart_target
  s8      	"c   !      C   sö  | d  k r |  j } n  | j ƒ  d } | d  k r= d } n  |  j ƒ  j ƒ  \ } } d } t d | ƒ } t d | ƒ } d }	 d }
 | | | |	 | |
 } t d' | ƒ } d	 | d
 } | d | d | d IJ| d d d d IJt d |  j ƒ  ƒ } t d |  j ƒ  ƒ } t d |  j	 ƒ  ƒ } t d |  j
 ƒ  ƒ } t d |  j ƒ  ƒ } t d |  j ƒ  ƒ \ } } } } } } t d |  j ƒ  ƒ } d } y t d |  j ƒ  ƒ } Wn t k
 rÐt d  ƒ } n Xd | d | d | d | d | } d t | ƒ d
 } | d k  r$d } n  | | | | d IJ| d d d d IJ| d IJd } d | | | | | | | | | | | d }	 d t |	 ƒ d
 } |	 d | d }	 | |	 IJd  | }
 d t |
 ƒ d
 } |
 d | d }
 | |
 IJ| d d d d IJd! |  j j ƒ  j ƒ  |  j j f } d t | ƒ d
 } | d | d } | | IJ| d d d d IJd" |  j d# | d$ | d% }  d t |  ƒ d
 } |  d | d }  | |  IJ| d d d& d IJ| j ƒ  d  S((   NRx  Rv  s   ---(resolution: s   %6.2fs    - s    A)s   |-Ry  iP   i   Rz  s   | s     i&   s   %6.4fs   %6.3fs   %4.2fs   %7.2fs    None s   %.4gs
   | r_work= s      r_free= s	      ksol= s	      Bsol= s
      scale= iO   i    sO   | overall anisotropic scale matrix (Cartesian basis):                         |t   ,s   | (B11,B22,B33,B12,B13,B23)= (t   )s   | (B11+B22+B33)/3 = s(   | Twin law : %s     Twin fraction: %4.3fs
   | Target (s   )= s&    | ML estimate for coordinates error: s    AiM   s   |-|(   R(   R+   R}  R‚   RÁ  t   n_as_sR6  R  R  Rp  R3   R   R!  RM  R{  R5  R”  R‡   t   rR#  R   R   Rš   (!   R   R·  R+   R~  Rú   Rû   t   line1t   line2t   line3t   line4t   line5t   tlR  R€  R  R  t   scaleR3   R   t   b0t   b1t   b2t   b3t   b4t   b5RM  t   errRu  t   linet   npt   ct   line5_and_a_halft   line6(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   show_essential)  sr     
 	'  * 	
6


%
!
c         C   s=   |  j  d t ƒ |  j d d ƒ |  j ƒ  j d |  j ƒ d  S(   NR  RÊ  i   R+   (   R  Rj   RÔ  R‡  R,   R+   (   R   R·  Rß   Rà   R+   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   show_comprehensivef  s    c      	   C   s(   |  j  d t d t d | d | ƒ } | S(   NR  R™  Rß   Rà   (   R  Rj   (   R   Rß   Rà   R+   t   results(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   statistics_in_resolution_binsr  s    	c         C   s   |  j  d t d t ƒ } | S(   NR  R™  (   R  Rj   (   R   Rß   Rà   R+   R¦  (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   r_factors_in_resolution_bins{  s    c         C   s   |  j  d t ƒ d  S(   NR  (   R  Rj   (   R   R}   R|   R‚  R+   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyRw  ‚  s    c         C   s   |  j  ƒ  j d |  j ƒ d  S(   NR+   (   R‡  R,   R+   (   R   Rß   Rà   R+   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt'   show_fom_phase_error_alpha_beta_in_bins‹  s    t   mtzc         C   s)  | d5 k s t  ‚ d  } | d  k r0 t j } n* t | d ƒ rZ t j j d | j ƒ } n  d d g } t	 g  | D] } t
 | ƒ ^ qp ƒ } | j d d | ƒ | j | d ƒ | d k r1x0 | D]( } | d	 | d
 | t
 | ƒ f IJqÃ W| d t ƒ  IJ| d  k	 rC| d t j j | ƒ IJ| d t j j | ƒ IJn  |  j d | d d d d ƒ t d |  j d | ƒ | d |  j j ƒ  j ƒ  IJ| d i d d 6j t |  j j ƒ  ƒ d ƒ IJ|  j j ƒ  d  k	 } xW d6 d7 d8 d9 d: d; d< d= d> d? g
 D]1 } | r| d d k rqün  | d% | IJqüW|  j ƒ  }	 |	 j ƒ  j ƒ  }
 |	 j d& t ƒ j ƒ  } |  j ƒ  j ƒ  j ƒ  } |  j ƒ  j d& t ƒ j ƒ  } |  j  ƒ  j ƒ  j ƒ  } |  j  ƒ  j d& t ƒ j ƒ  } |  j! ƒ  j ƒ  j ƒ  } |  j! ƒ  j d& t ƒ j ƒ  } g  |  j" ƒ  D] } | j ƒ  ^ q\ } } |  j j ƒ  |  j j ƒ  |  j j ƒ  |  j# j ƒ  |
 | | | | | | | |  j$ ƒ  | | g } | s§| d' =d' } n d( } xe t% | Œ  D]W } | d) | d IJ| d* | d+ I| rÿ| d, | d' In  | d- | | IJqºW| d  k	 r%| j& ƒ  q%nô| d  k	 sCt  ‚ |  j j' d. d ƒ } | j( d/ |  j# ƒ  d. d ƒ | j( d/ |  j) ƒ  d. d ƒ | j( d/ |  j ƒ  d. d ƒ | j( d/ |  j  ƒ  d. d  ƒ | j( d/ |  j! ƒ  d. d! ƒ | j( d/ |  j* ƒ  j+ ƒ  d. d" d0 d1 ƒ |  j" ƒ  \ } } | j( d/ | d. d# d0 d1 ƒ | j( d/ | d. d$ d0 d1 ƒ t, j- | ƒ } | j } | t ƒ  ƒ | d2 t j j | ƒ ƒ | d3 t j j | ƒ ƒ t. ƒ  } |  j d | ƒ x$ | j/ ƒ  j0 ƒ  D] } | | ƒ qÛW| j1 ƒ  } | j2 d4 | ƒ | j& ƒ  | j3 d | ƒ d  S(@   NRª  t   cnst   namet	   file_names-   DO NOT USE THIS FILE AS INPUT FOR REFINEMENT!s;   Resolution and sigma cutoffs may have been applied to FOBS.i    t   *s   { %s%s }Rx  s   { %s }s   { file name: %s }s   { directory: %s }R+   R‚  s   { R  s    }R;  s   NREFlection=%ds   ANOMalous=%st   FALSEt   TRUEt   FOBSt   REALt   SIGFOBSt   R_FREE_FLAGSt   INTEGERt   FMODELt   COMPLEXt   FCALCt   FMASKt   FBULKt   FOMt   ALPHAt   BETAs-   DECLare NAME=%s DOMAin=RECIprocal TYPE=%s ENDt   degi   i   s   INDE %d %d %ds    FOBS= %.6gi   s    SIGFOBS= %.6gs‡    R_FREE_FLAGS= %d FMODEL= %.6g %.6g
 FCALC= %.6g %.6g FMASK= %.6g %.6g FBULK= %.6g %.6g
 FB_CART= %.6g FOM= %.6g ALPHA= %.6g BETA= %.6gt   column_root_labelt   miller_arrayt   column_typest   Ws   file name: %ss   directory: %st   lines(   Rª  R«  (   R±  R²  (   R³  R²  (   R´  Rµ  (   R¶  R·  (   R¸  R·  (   R¹  R·  (   Rº  R·  (   R»  R²  (   R¼  R²  (   R½  R²  (4   R:   R(   R)   R*   t   hasattrt   libtbxt   patht   canonical_pathR¬  R  R6  t   insertRŒ  R   t   ost   basenamet   dirnamet   explain_memberst    crystal_symmetry_as_cns_commentsR‘   R¢   R¨   t   gett   intR…   R½   t   f_model_scaled_with_k1Rn   Rb   t   phasesRj   RÕ   R   Ri  Rü  RÖ   R  t   zipt   closet   as_mtz_datasett   add_miller_arrayRð   R‡  R  R
   t
   std_stringR   t   getvaluet
   splitlinest
   mtz_objectt   add_historyt   write(   R   R+   R–  R­  t   warningRŸ  t   widtht   have_sigmast   n_tRð   t   f_model_amplitudest   f_model_phasest   f_calc_amplitudest   f_calc_phasest   f_mask_amplitudest   f_mask_phasest   f_bulk_amplitudest   f_bulk_phasest   itemR†   R  R(  t   i_r_free_flagst   valuest   mtz_datasett   mtz_history_buffert   hat   sRÙ  (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   export’  sÎ    	%& +$												
c         C   s­   | d  k r t j } n  d d „ } x‚ d d d d d |  j ƒ  d | |  j ƒ  ƒ d	 d
 d j g  |  j ƒ  D] } d | | ƒ ^ ql ƒ g D] } | | | | IJq� Wd  S(   Ng�íµ ÷Æ°>c         S   s   t  |  ƒ | k  r d S|  S(   Ni    (   R`   (   t   vRP  (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   zero_if_almost_zero	  s     s/   Fmodel   = scale_k1 * fb_cart * (Fcalc + Fbulk)s9   Fcalc    = structure factors calculated from atomic models-   Fbulk    = k_sol * exp(-b_sol*s**2/4) * Fmasks#   A        = orthogonalization matrixs   k_sol    = %.6gs   b_sol    = %.6gs'   B_cart = (B11, B22, B33, B12, B13, B23)s          = (%s)s   , s   %.6g(   R(   R)   R*   R3   R   R=  R!  (   R   R+   R‚  R  Rñ  Rð  RŸ  (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyRÌ  	  s     	4c         C   sÄ   |  j  ƒ  } |  j ƒ  } |  j ƒ  } | r` | j ƒ  } | j ƒ  } | d k	 r` | j ƒ  } q` n  | j d d ƒ } | d k	 rš | rš | j | d d ƒn  | j | d d ƒ| j ƒ  j | ƒ d S(   sí   
    Dump all input data to an MTZ file using standard column labels.  This may
    be useful when running modules or programs that require an MTZ file as
    input (rather than taking f_model.manager or the Miller arrays directly).
    R¿  t   Ft   HLt
   FreeR_flagN(	   R‚   RÖ   Rt  RA  R(   RÔ  RÕ  RÙ  RÛ  (   R   R­  RZ  t   include_hendrickson_lattmanR‚   t   flagsRt  Rë  (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   export_f_obs_flags_as_mtz	  s    	c         C   sØ   | d  k r |  j } n  d | } d } d t | | ƒ } | | d | | IJd |  j d |  j ƒ  |  j ƒ  |  j ƒ  f } d t t | ƒ d ƒ } | | Id	 | d IJ| d d d
 d IJ| j ƒ  d  S(   Ns   |-s   -|iO   Rz  s   | target_work(%ss(   ) = %.6e  r_work = %6.4f  r_free = %6.4fiN   Ry  Rx  iM   (	   R(   R+   R6  Rš   R{  R  R  R”  R}  (   R   R+   t   textt   part1t   part2RÊ  t   part3(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   show_targets.	  s     
#c         C   sê   | j  ƒ  | d  k r d } n  |  j j ƒ  \ } } d } t d | ƒ } t d | ƒ } d } d }	 t d |  j j ƒ  j ƒ  ƒ }
 | d | | | | |	 |
 } t d | ƒ } d
 | d } | d | d | d	 IJ| j  ƒ  d  S(   NRv  s   (resolution: s   %6.2fs    - s    A; n_refl. = s   %dRz  s   |-Ry  iP   i   s   |-|(   R}  R(   R‘   RÁ  R�  Rb   R¨   R6  (   R   R·  R+   Rú   Rû   R‘  R’  R“  R”  R•  R£  R–  R  R€  (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt    _header_resolutions_nreflections;	  s    
 	"c         C   s¶  | j  ƒ  t d |  j ƒ  ƒ } t d |  j ƒ  ƒ } t d |  j ƒ  ƒ } t d |  j ƒ  ƒ } t d |  j ƒ  ƒ } t d |  j ƒ  ƒ \ } } }	 }
 } } t d |  j ƒ  ƒ } d | d | d | d	 | d
 | } d t	 | ƒ d } | d k  rd } n  | | d | d IJ| d d d d IJ| d IJd } d | | | | |	 | |
 | | | | d | } d t	 | ƒ d } | d | d } | | IJ| j  ƒ  d  S(   Ns   %6.4fs   %6.3fs   %4.2fs   %6.2fs   %7.2fs
   | r_work= s      r_free= s	      ksol= s	      Bsol= s
      scale= iO   i   i    Rx  Ry  s   | s     i&   sO   | overall anisotropic scale matrix (Cartesian basis; B11,B22,B33,B12,B13,B23):|R�  s   | (s   ); trace/3= (
   R}  R�  R  R  Rp  R3   R   R!  RM  R6  (   R   R+   R  R  R—  R3   R   R˜  R™  Rš  R›  Rœ  R�  RM  RŸ  R   R¡  R”  (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt+   _rfactors_and_bulk_solvent_and_scale_paramsK	  s*    
'* 	
:
NgUUUUUUÕ?(|   R-   R.   R(   Ro   Rð   t#   sf_and_grads_accuracy_master_paramsR”   R“   RÙ   R   R‚   RÖ   RÛ   RÜ   RÝ   Râ   Rs   Rã   Rä   Ræ   Rç   Rô   R]   Rø   R¤   R  R  R  RÕ   R	  R
  Rk   R  R  R  R,   R  Rj   R  R%  R4  Rõ   Rù   R¶   RU  RW  Ra  Rb  R  Rñ   R¸   R  Rº  R—  R˜  RÔ  R7  R×  RÙ  Rô  R‡  Rû  Rü  R�  R�  R  R“  R  R  R‘  R’  R
  R  Rˆ  R   R"  R*  R,  R-  R/  RM  R5   R3  R!  R2   Ra  R!  RM  Rc  Re  R3   R&  R4   R   RN  Rf  R   Rg  Rh  Ri  Rj  Rk  Rm  Rn  Ro  Rp  Rq  Rr  Rs  Rt  Ru  Rw  RŒ  R¤  R¥  R§  R¨  R©  Rï  RÌ  R÷  Rü  Rý  Rþ  (    (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyRu   8  sª  Ô																					:	/					.	
	º	
.(		W&															“		B																										>	s	c         C   s`   |  j  ƒ  j ƒ  } t | ƒ j ƒ  } | j | ƒ t j | d | ƒ } d t j | ƒ } | S(   Ng      @g      ð?(   R»  Rb   R   t   fetcht   at_d_star_sqR
   R"   t   pow2(   R‚   t   atomt   Bt   d_star_sq_dataR  t   ffR  (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   ls_ff_weightsc	  s
    %R×  c           B   s/   e  Z d  „  Z d „  Z d „  Z e d „ Z RS(   c         C   s   | |  _  d  S(   N(   Rò   (   R   Rò   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR   l	  s    c         C   s   d  S(   N(    (   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   prepare_for_minimizationo	  s    c         C   s   t  S(   N(   Rj   (   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt8   target_function_is_invariant_under_allowed_origin_shiftsr	  s    c         C   s   t  d |  j ƒ S(   NRò   (   t   target_resultRò   (   R   t   compute_gradients(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   __call__u	  s    (   R-   R.   R   R  R	  Rs   R  (    (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR×  j	  s   			R
  c           B   s5   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s   | |  _  d  S(   N(   Rò   (   R   Rò   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR   z	  s    c         C   s   |  j  j t ƒ d S(   Ni    (   Rò   R7  Rs   (   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyRu  }	  s    c         C   s   |  j  j t ƒ d S(   Ni   (   Rò   R7  Rs   (   R   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   target_test€	  s    c         C   s1   |  j  } | j j d | j j | j j ƒ  ƒ ƒ S(   NRb   (   Rò   Rˆ   Ræ  R¿   RC  R»   Rð   (   R   Rò   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   d_target_d_f_model_workƒ	  s    		c         C   s?   |  j  } |  j ƒ  } | j d | j ƒ  | j j ƒ  | j ƒ S(   NRb   (   Rò   R  Ræ  Rb   R»   t   d_f_model_core_data_d_f_atomsR²   (   R   Rò   t	   d_t_d_f_m(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   d_target_d_f_calc_work‰	  s    		(   R-   R.   R   Ru  R  R  R  (    (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR
  x	  s
   				c         C   sk   |  j  ƒ  d  k	 r* t j |  j  ƒ  ƒ } n t j |  j ƒ  j ƒ  d ƒ } | j d ƒ s] t ‚ d | } | S(   Ng      ð?i    i   (	   R½   R(   R
   R  RL   Rb   R¨   t   all_gtR:   (   R‚   t   sigmas_squaredR  (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   ls_sigma_weights�	  s    
c         C   s>   g  } | } x+ | |  d k r9 | j  | ƒ | | 7} q W| S(   Ng-Cëâ6?(   RŒ  (   t   x_maxt   x_minRV  t   x_rangeR#   (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   kb_range™	  s    c         C   sg   t  | ƒ j } | d k r/ t |  | ƒ j ƒ  Sg  } x+ | D]# } | j t |  | ƒ j ƒ  ƒ q< W| S(   NRÏ  R   (   s   ints   float(   t   typeR-   R”  t   stripRŒ  (   R–  t   valuet   vtR\   Rè  (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR�  ¡	  s    !R•  c           B   sG   e  Z d d d d d d d d d d d d d d d d d d d  „ Z RS(   c         C   s   t  |  t ƒ  ƒ d  S(   N(   R	   t   locals(   R   Rn  Rq  Rr  Rs  Rt  R  R  Ru  Rv  Rw  Rx  Rz  R{  Ry  R|  R}  t   cc_workt   cc_free(    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR   ¬	  s    N(   R-   R.   R(   R   (    (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR•  «	  s$   c         C   sƒ   | d k r d S| d k r  d S| d  k r? t d |  d | ƒ St | t t f ƒ rb |  | j ƒ  Sg  | D] } |  | j ƒ  ^ qi S(   Nt   noneR(   R–  R  (   R(   R   t
   isinstanceRÏ  R   R  (   R–  R  Rð  (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyR�  Â	  s    (H   t
   __future__R    RÉ   R   R   R   R   R   t   copyR   Ro   R   t   cctbx.xray.structure_factorst   cctbx.eltbx.xray_scatteringR   RÅ  R	   t   cctbx.array_familyR
   t   libtbx.utilsR   R   t   libtbx.math_utilsR   t
   iotbx.philt   iotbxt	   iotbx.pdbR   t   mmtbx.scalingR   R   R   t   mmtbx.f_modelR   R   t	   cStringIOR   R)   RÉ  R   t   libtbx.str_utilsR   R   t+   mmtbx.bulk_solvent.bulk_solvent_and_scalingRj  t   bulk_solvent_and_scalingt   bsst   libtbx.patht   mmtbx.refinement.targetst   mmtbx.f_model_infot   philt   parseR“   RD   R   R0   Rh   Ri   Rp   Rq   Rk   Rð   t   manager_mixinRu   R  R×  t   target_result_mixinR
  R  R  R�  R•  (    (    (    sI   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/twinning/twin_f_model.pyt   <module>   sp   $		*©	
ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ 3					
