ó
Ä™xTc           @   s:  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 m Z d  d l	 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 e j j d ƒ Z i
 e j j d g d g d ƒ d 6e j j d g d g d ƒ d 6e j j d g d g d ƒ d 6e j j d g d g d ƒ d 6e j j d g d g d ƒ d 6e j j d g d g d ƒ d 6e j j d  g d! g d ƒ d" 6e j j d# g d$ g d ƒ d% 6e j j d& g d' g d ƒ d( 6e j j d) g d* g d ƒ d+ 6Z d d d" g Z d d% d d d g Z d( g Z d+ g Z d, e f d- „  ƒ  YZ  d. e f d/ „  ƒ  YZ! d0 e f d1 „  ƒ  YZ" d2 e f d3 „  ƒ  YZ# d4 e f d5 „  ƒ  YZ$ d6 „  Z% d7 „  Z& d8 „  Z' d9 „  Z( d: e f d; „  ƒ  YZ) d< „  Z* d= „  Z+ d> e f d? „  ƒ  YZ, d@ dE dC dD „ Z- d S(F   iÿÿÿÿ(   t   divisionN(   t   xray(   t   adptbx(   t   pdb(   t   adopt_init_args(   t   flex(   t   eltbx(   t   maptbx(   t   approx_equal(   t   Sorrysž    b_iso_max = 100.0
    .type = float
  occupancy_min = -1.0
    .type = float
  occupancy_max = 1.5
    .type = float
  ias_b_iso_max = 100.0
    .type = float
  ias_b_iso_min = 0.0
    .type = float
  ias_occupancy_min = 0.01
    .type = float
  ias_occupancy_max = 3.0
    .type = float
  initial_ias_occupancy = 1.0
    .type = float
  build_ias_types = L R B BH
    .type = strings
    .optional = False
  ring_atoms = None
    .type = strings
    .multiple = True
  lone_pair
    .multiple = True
  {
    atom_x = CA
      .type = str
    atom_xo = C
      .type = str
    atom_o = O
      .type = str
  }
  use_map = True
    .type = bool
  build_only = False
    .type = bool
  file_prefix = None
    .type = str
  peak_search_map {
     map_type = *Fobs-Fmodel mFobs-DFmodel
       .type=choice(multi=False)
     grid_step = 0.25
       .type = float
     scaling = *volume sigma
       .type=choice(multi=False)
  }
gÕxé&1´?gzßøÚ3Kð?i    t   IS6g–!Žuq½?gÉå?¤ð?t   IS8g5S"±?gæØG§®í?t   IS7gðÝzMÂ?gc¸: â®ô?t   IS4gî'c|˜½Ì?gÑÉRëýõ?t   IS1g˜‡LùÄ?gì ×1®ñ?t   IS2g©¾ó‹¸?g2æ®%äƒí?t   IS3guÌyÆ¾dÉ?g©j‚¨û ö?t   IS5g,eâXÓ¿gôlV}î@t   IS9g+‡ÙÎ§?g Òo_ÎÕ?t   IS10t   ias_countersc           B   s   e  Z d  „  Z d d „ Z RS(   c         C   sÕ   t  | ƒ |  _ d |  _ d |  _ d |  _ d |  _ d |  _ x’ | D]Š } | j d k rj |  j d 7_ n  | j d k r‹ |  j d 7_ n  | j d k r¬ |  j d 7_ n  | j d k rC |  j d 7_ qC qC Wd  S(   Ni    t   Bi   t   BHt   Lt   R(   t   lent   n_iast   n_ias_bt   n_ias_bht   n_ias_rt   n_ias_lt   n_bonds_non_ht   type(   t   selft   iasst   ias(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ias/__init__.pyt   __init__S   s    					    c         C   s²   | d  k r t j } n  | d IJ| d I|  j IJ| d I|  j IJ| d I|  j IJ| d I|  j IJ| d I|  j IJ|  j |  j |  j |  j |  j k s® t ‚ d  S(   Ns   Number of IAS built:s      total:             s      bond (X-X):        s      bond (X-H):        s      ring centers:      s      lone pairs:        (	   t   Nonet   syst   stdoutR   R   R   R   R   t   AssertionError(   R!   t   out(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ias/__init__.pyt   show`   s     
N(   t   __name__t
   __module__R$   R%   R*   (    (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ias/__init__.pyR   R   s   	t   atomc           B   s#   e  Z d d d d d d d  „ Z RS(   c         C   s   t  |  t ƒ  ƒ d  S(   N(   R   t   locals(   R!   t	   site_cartt   qt   b_isot   namet   i_seqt   element(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ias/__init__.pyR$   k   s    N(   R+   R,   R%   R$   (    (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ias/__init__.pyR-   j   s   t   bond_densityc           B   s&   e  Z d d d d d d d d  „ Z RS(   c         C   sC   | |  _  | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ d  S(   N(   t   datat   distt
   ideal_datat   one_dim_pointt   one_dim_point_predictedt	   peak_datat	   peak_dist(   R!   R6   R7   R8   R9   R:   R;   R<   (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ias/__init__.pyR$   t   s    						N(   R+   R,   R%   R$   (    (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ias/__init__.pyR5   s   s   R#   c           B   s>   e  Z d d d d d d d d d d d d d  „ Z d „  Z RS(   c         C   s   t  |  t ƒ  ƒ d  S(   N(   R   R.   (   R!   t   atom_1t   atom_2t   atom_3t   site_cart_predictedt
   peak_valuet   peak_position_cartR0   R1   R2   R    R5   t   status(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ias/__init__.pyR$   „   s    c         C   så   |  j  d  k	 ro | d |  j  j d |  j  j d |  j  j d |  j  j d |  j  j d |  j  j d |  j  j ƒ } n d  } t	 d |  j
 d	 |  j d
 |  j d |  j d |  j d |  j d |  j d |  j d |  j d |  j d | d |  j ƒ S(   NR6   R7   R8   R9   R:   R;   R<   R=   R>   R?   R@   RA   RB   R0   R1   R2   R    R5   RC   (   R5   R%   R6   R7   R8   R9   R:   R;   R<   R#   R=   R>   R?   R@   RA   RB   R0   R1   R2   R    RC   (   R!   R5   (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ias/__init__.pyt	   deep_copy’   s,    									N(   R+   R,   R%   R$   RD   (    (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ias/__init__.pyR#   ƒ   s   t   extract_iasc           B   s8   e  Z d d  „ Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s/  | d  k r t j |  _ n  | |  _ | j ƒ  j ƒ  | j ƒ  k sH t ‚ | |  _ | j	 ƒ  |  _	 | j
 ƒ  |  _ |  j t j d d |  _ | j ƒ  j ƒ  |  _ g  |  _ x� | D]… } | j \ } }	 |  j | ƒ }
 |  j |	 ƒ } |
 j d k s | j d k r	d } n d } |  j j t d |
 d | d	 | ƒ ƒ q¯ Wxðt | ƒ D]â\ } } t | j ƒ d
 k r�|  j d | j ƒ \ } }	 | |	 g j d  ƒ d k rÖ|  j j t d |  j | ƒ d |  j |	 ƒ d	 d ƒ ƒ q�t |  j j ƒ d k r�x� |  j j D]| } |  j d | j d | ƒ \ } }	 | |	 g j d  ƒ d k rû|  j j t d |  j | ƒ d |  j |	 ƒ d	 d ƒ ƒ qûqûWq�n  t | j ƒ d k rE|  j d | j d | j ƒ \ } }	 } | |	 | g j d  ƒ d k r'|  j j t d |  j | ƒ d |  j |	 ƒ d |  j | ƒ d	 d ƒ ƒ q'qEqEWd  S(   Ni   g       @t   Ht   DR   R   R=   R>   R    i   t   i_seqsi    R   t
   ring_atomsi   t   paramsR?   R   (   RF   RG   (   RF   RG   (   R%   R&   R'   t   logRJ   t
   scattererst   sizeR(   t	   pdb_atomst
   sites_cartt   extract_u_iso_or_u_equivt   u_isot   matht   piR1   t   extract_occupanciest   occupanciesR"   RH   t	   _get_atomR4   t   appendR#   t	   enumerateR   t   _is_phe_tyr_ringt   countRI   t   _is_any_ringt   _is_peptide_planet	   lone_pair(   R!   t   xray_structuret   bond_proxies_simpleRN   t   planarity_proxiesRJ   RK   t   proxyt   it   jt   atom_it   atom_jR    t   i_proxyRI   t   k(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ias/__init__.pyR$   «   sT     	$			!c         C   s_   |  j  | } t d |  j | d |  j | d |  j | d | j j ƒ  d | d | j j ƒ  ƒ S(   NR/   R0   R1   R2   R3   R4   (   RN   R-   RO   RU   R1   R2   t   stripR4   (   R!   R3   t   pdb_atom(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ias/__init__.pyRV   Ü   s    c         C   sm  d } d \ } } x= | D]5 } |  j | j j ƒ  } | | k r | d 7} q q W| t | ƒ k rn | | f Sd } xì | D]ä }	 |  j |	 j }
 |  j |	 j j ƒ  } xµ | D]­ } |  j | j } |  j | j j ƒ  } t j |
 d | d d |
 d | d d |
 d | d d ƒ } | | k r® | | k r® | | k r® | } |	 | } } q® q® Wq{ W| | f S(   Ni    i   g        i   (   NN(   R%   RN   R2   Rh   R   t   xyzRR   t   sqrt(   R!   RH   RI   t   countert   i_bestt   j_bestR3   t   atom_i_nameR7   Rb   t   riRc   t   rjt   atom_j_namet   d_(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ias/__init__.pyR[   å   s(     
G$c         C   s²   d d d d d d g } d } d
 \ } } xg | D]_ } |  j | j j ƒ  } | | k rf | d 7} n  | d k r{ | } n  | d k r1 | } q1 q1 W| d	 k rª | | f Sd Sd  S(   Nt   CZt   CE1t   CE2t   CD1t   CD2t   CGi    i   i   (   NN(   NN(   R%   RN   R2   Rh   (   R!   RH   RI   Rl   t   cz_i_seqt   cg_i_seqR3   Ro   (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ias/__init__.pyRY   û   s     	 
c         C   só   d } d \ } } } d  } x´ | D]¬ } |  j | j j ƒ  }	 x� t | ƒ D] \ }
 } |	 | j | j | j g k r‚ | d 7} n  |	 | j k rš | } n  |	 | j k r² | } n  |	 | j k rK | } qK qK Wq" W| d k rë | | | f Sd Sd  S(   Ni    i   i   (   NNN(   NNN(   R%   RN   R2   Rh   RX   t   atom_xt   atom_xot   atom_o(   R!   RH   RJ   Rl   t   ca_i_seqt   c_i_seqt   o_i_seqt   i_pgR3   Ro   t   i_pg_t   pg(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ias/__init__.pyR\   
  s"     	 	 N(   R+   R,   R%   R$   RV   R[   RY   R\   (    (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ias/__init__.pyRE   ª   s
   +				c         C   sS   | d } |  d | d | | |  d | d | | |  d | d | | f S(   Ng      ð?i    i   i   (    (   t   site_it   site_jt   alpt   alp1(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ias/__init__.pyt   ias_site_position  s    
c   
   	   C   s9  d \ } } } d	 \ } } x‹ |  j |  j |  j g D]q } xh | D]` } | j | j k re | j } n  | j | j k rƒ | j } n  | j | j k rA | j } qA qA Wq4 W| | | g j	 d  ƒ d k sÍ t
 ‚ t j | d | d d | d | d d | d | d d ƒ }	 t d | d | d | d |	 ƒ } | S(
   Ni    i   i   t   site_ct   site_ot   site_cat   dist_co(   NNN(   NN(   R%   R=   R>   R?   R2   R|   R/   R}   R~   RZ   R(   RR   Rk   t   add_lone_pairs_for_peptyde_o(
   R#   RJ   RŠ   RŒ   R‹   t	   ias_sitest   labelt   aR„   R�   (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ias/__init__.pyt   ias_position_at_lone_pairs#  s&       $'	c         C   s	  d d d d d d g } | j  d  k	 rW x- | j  D] } | d  k	 r1 | | 7} q1 q1 Wn  d d d g } d	 d
 g } d d
 d g } d	 d d g } d d d d g } d d	 g }	 d d	 g }
 d d
 g } d d g } g  } x*|  D]"} d. \ } } } | j j | j j } } | j j | j j } } | j d k sD| j d k rÜ| | k rw| | k rwd } t | | d ƒ } qÜ| | k rª| | k rªd } t | | d ƒ } qÜ| | k rÝ| | k rÝd } t | | d ƒ } qÜ| | k rQ| | k rQd } d/ } | d d
 k r&t | | | ƒ } qÙ| d d	 k s<t ‚ t | | | ƒ } qÜ| | k rÅ| | k rÅd } d0 } | d d k ršt | | | ƒ } qÙ| d d	 k s°t ‚ t | | | ƒ } qÜ| | k r9| | k r9d } d1 } | d d k rt | | | ƒ } qÙ| d d	 k s$t ‚ t | | | ƒ } qÜ| |	 k rl| |	 k rld } t | | d ƒ } qÜ| d |
 k rõ| d |
 k rõ| d | d g j	 d ƒ d  k rõd! } d2 } | d d k ràt | | | ƒ } qÙt | | | ƒ } qÜ| d | k r[| d | k r[d$ } d3 } | d d k rFt | | | ƒ } qÙt | | | ƒ } qÜ| d | k rÁ| d | k rÁd' } d4 } | d d k r¬t | | | ƒ } qÙt | | | ƒ } qÜd } t | | d ƒ } n  | j d* k rd+ } t
 | | j ƒ } n  | j d, k r0d- } t | | d ƒ } n  | | g j	 d  ƒ d k r| d  k s]t ‚ | | _ | | _ | j | ƒ n  | | g j	 d  ƒ d k rß | d  k s¬t ‚ | d | _ | | _ | j | ƒ | j ƒ  } | d  | _ | | _ | j | ƒ qß qß W| S(5   NRt   Ru   Rv   Rw   Rx   Ry   t   CAt   CBt   Ct   Nt   CDt   Ot   OXTt   OHt   OG1RF   R   R   R   g      ð?R   R
   gj0ÃGÄè?g¡ø1æ®%å?i    R   g]Ã�'‚æ?g/¢í˜º«à?R   g‚sF”öå?gQ OäIÒå?i   R   g.þ¶'Hlë?g¨Ç¶8KÏ?R   gÚ|a2Uè?gCV¸å#Ñ?R   g£å@µíæ?gv©ú™zÒ?R   R   R   R   (   NNNg6Ì„‹½ò?g­gŸJšõ?gfk6yÕÕî?g ¸‡‘³
@g˜x.gÏ¶@gÜØEþKÚ@(   RI   R%   R=   R2   R>   R/   R    R‰   R(   RZ   R’   R]   R@   RW   RD   (   R"   RJ   t   phe_ringt   rat   elbowt   main_cnt   main_cant   main_codt   main_cost   main_cact   any_cht   any_nht   any_oht   new_iasst   ias_t   ias_siteR�   R�   t   name_it   name_jR…   R†   R‡   t   ias_dc(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ias/__init__.pyt#   set_ias_name_and_predicted_position5  s¾     #  				c         C   sµ  | d k s t  ‚ | j ƒ  j d | d d t | j ƒ  j ƒ  | ƒ d ƒ } | d k rg | j ƒ  n  | d k r€ | j ƒ  n  | j ƒ  } | j ƒ  j	 ƒ  } x|  D]} | j
 d k r¥ t d
 | d | d | j d | j j d | j j ƒ }	 |	 j | _ |	 j | _ |	 j | _ |	 j | _ | j | j j ƒ }
 | j | j ƒ } | j |
 | ƒ } t d |	 j d |	 j d d  d |	 j d | d |	 j d |	 j  ƒ | _ |	 j! | _! q¥ q¥ Wd  S(   Ni    t   map_typet   resolution_factorg      ð?i   t   volumet   sigmaR   R   t   map_datat	   unit_cellR�   t   site_cart_1t   site_cart_2R6   R7   R8   R9   R:   R;   R<   (   R   s   BH("   R(   t   electron_density_mapt   fft_mapt   intt   f_obst   d_mint   apply_volume_scalingt   apply_sigma_scalingt   real_map_unpaddedR³   R    t   find_peak_at_bondR2   R=   R/   R>   RA   t   peak_site_cartRB   t   q_estimatedR0   t   b_estimatedR1   t   fractionalizeR@   t   distanceR5   R6   R7   R%   R9   R;   R<   RC   (   R"   t   fmodelt	   grid_stepR®   t   scalingR·   t   fft_map_dataR³   R#   t   bpt   site_frac_1t   site_frac_predictedR:   (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ias/__init__.pyt	   set_peaks�  sB    '					R¾   c           B   s,   e  Z d  d „ Z d d d „ Z d „  Z RS(   g{®Gázt?c      	   C   sÒ  | \ } } }	 | \ }
 } } d  |  _ d  |  _ d  |  _ d  |  _ t j | |
 d | | d |	 | d ƒ |  _ d } t j	 ƒ  |  _
 t j	 ƒ  |  _ t j ƒ  |  _ d } xæ | d k r•| | |
 | } | | | | } |	 | | |	 } | j | | | f ƒ } t j | | ƒ } |  j j t j | | d | | d |	 | d ƒ ƒ |  j
 j | ƒ |  j j | j | ƒ ƒ | | 7} | d 7} q° W|  j ƒ  \ } } } d \ |  _ |  _ d \ |  _ |  _ d \ |  _ |  _ | | g j d  ƒ d k rÄ|  j | |  _ |  j
 | |  _ |  j | |  _ |  j
 | | d !|  _ |  j | | d !|  _ |  j d k  j t ƒ d k s~t ‚ |  j | } |  j | j ƒ  } |  j d k } |  j j | ƒ } | j | ƒ } | j ƒ  d k rÄt j  d | d | d	 t! d
 t! ƒ } | j" ƒ  } | j# ƒ  } | j$ ƒ  } t% | j& ƒ  d |  _ t% | j' ƒ  d |  _ | j( ƒ  |  j |  _ | j) ƒ  |  j |  _ |  j d k r |  j |  _ n  |  j d k rÁ|  j |  _ qÁqÄn  |  j* ƒ  d  S(   Ni   i    g      ð?g�íµ ÷Æ°>i   g        t   data_at_grid_pointst	   distancest   use_weightst   optimize_cutoff_radiusgzo ð?(   NN(   NN(   NN(+   R%   R9   RA   R¿   RC   RR   Rk   t   bond_lengthR   t   doubleR6   R7   t   vec3_doublet
   peak_sitesRÂ   R   t   eight_point_interpolationRW   t   orthogonalizet	   find_peakRÁ   RÀ   R‘   t   bR;   R<   RZ   t   TrueR(   RD   t   selectRM   t   one_gaussian_peak_approximationt   Falset   a_real_spacet   b_real_spacet   goft   ias_scattering_dictt
   array_of_at
   array_of_bt   b_reciprocal_spacet   a_reciprocal_spacet
   set_status(   R!   R²   R³   R�   R´   Rµ   t   stept   x1t   y1t   z1t   x2t   y2t   z2R‡   R3   t   xpt   ypt   zpt	   site_fract   ed_t
   i_seq_leftt   i_seq_rightt   max_peak_i_seqt   originR7   t   selR6   t
   approx_objt   a_realt   b_realRÞ   (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ias/__init__.pyR$   Ã  sr    				29
$		g333333Ó?gš™™™™™¹?c         C   sÅ  t  |  j ƒ d } t |  j |  j | ƒ s2 t ‚ d } x7 t |  j ƒ D]& \ } } | | 7} | | k rH PqH qH Wt d | d ƒ d d } t d | d ƒ } d \ }	 }
 } g  } x!t |  j ƒ D]\ } } | | k rÅ | | | k rÅ |  j | | k rÕ|  j |  j | | k rÕ|  j | } |  j | } t	 } x| t
 | | d ƒ D]f } | d k rO| | } | d k  r€d } n  | | k r•| } n  |  j | | k rµt } PqµqOqOW| rÒ| j | ƒ qÒqÕqÅ qÅ Wt  | ƒ d k r¸| d } |  j | } g  } x€| D]x} | }	 |  j | } d } x~ |	 d k r®|  j |	 | k r`|  j |	 } n
 | d 7} |  j |	 d k s‰| | k r¡|	 d 7}	 |	 | 7}	 Pn  |	 d 8}	 q1W| }
 |  j | } d } x‹ |
 t  |  j ƒ d k rU|  j |
 | k r|  j |
 } n
 | d 7} |  j |
 d k s0| | k rH|
 d 8}
 |
 | 8}
 Pn  |
 d 7}
 qËW|	 | k  r|
 | k r| j | |	 |
 f ƒ qqWd } d  } xW | D]O } t | d | d ƒ t | d | d ƒ } | | k rž| } | } qžqžW| d  k	 rD| d | d | d }	 }
 } |
 | k s/t ‚ |	 | k  sSt ‚ n d \ }	 }
 } |	 d k  rhd }	 n  |
 t  |  j ƒ d k r—t  |  j ƒ d }
 n  |	 |
 k r¸d \ }	 }
 } q¸n  |	 |
 | f S(	   Ni   g        i    i   g    €„.Á(   NNN(   NNN(   NNN(   R   R7   R   RÐ   R(   RX   t   maxR%   R6   RØ   t   rangeRÛ   RW   t   abs(   R!   t
   peak_widtht   offsett
   last_indext   peak_width_R3   t   dt   n_pointst   tolRñ   Rò   Ró   t   peak_i_seqsR6   t   data_at_i_seqt   dist_at_i_seqt   max_at_i_seqRb   Rc   t   max_peakt   peakst   max_peak_leftRl   t   max_peak_rightt   peak_selt   peakRs   (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ias/__init__.pyRÖ      s     
 
 	 	 






.  	 c         C   s%  t  |  _ |  j d  k	 r|  j } |  j |  j } | d k  sI | d k  rU t |  _ n  |  j |  j g j d  ƒ d k r  |  j d k s” |  j d k r  t |  _ n  |  j	 |  j
 g j d  ƒ d k rë |  j	 d k sß |  j
 d k rë t |  _ n  |  j d k j t  ƒ d k r!t |  _ q!n	 t |  _ d  S(   Ngš™™™™™¹?i    g        (   RØ   RC   R9   R%   RÐ   RÛ   R‘   R×   RZ   RÀ   RÁ   R6   (   R!   t   d_lt   d_r(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ias/__init__.pyRä   P  s    		?!(   R+   R,   R$   RÖ   Rä   (    (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ias/__init__.pyR¾   Â  s   =Pc         C   s\  | j  d  k r t d ƒ ‚ n  x7|  D]/} | j t k	 rj| j d k rj| j | j  k rj| j j | j k o¬ | j	 j | j k o¬ | j j
 | j k o¬ | j	 j
 | j k } | j d  k	 rë | oå | j | j k oå | j | j k } n  | j
 d  k	 r'| o!| j
 | j k o!| j
 | j k } n  | s9t | _ n	 t | _ | j r?| j d  k	 r?t | ƒ q?nÕ | j t k	 r6| j d k r6| j | j  k r6| j j | j k oë| j	 j | j k oë| j j
 | j k oë| j	 j
 | j k } | j d  k st ‚ | j
 d  k st ‚ | s*t | _ q?t | _ n	 t | _ | j d  k	 s% t ‚ q% Wd  S(   Ns"   build_ias_types must be specified.R   R   (   R   s   BH(   R   s   BH(   t   build_ias_typesR%   R	   RC   RÛ   R    R=   R1   t	   b_iso_maxR>   R0   t   occupancy_maxt   occupancy_mint   ias_b_iso_maxt   ias_b_iso_mint   ias_occupancy_maxt   ias_occupancy_minRØ   RB   t   check_at_bond_vectorR(   (   R"   RJ   R#   t   is_ok(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ias/__init__.pyRä   a  sB     	 	c         C   s  |  j  j } |  j j } |  j } t j | d | d d | d | d d | d | d d ƒ } t j | d | d d | d | d d | d | d d ƒ } t j | d | d d | d | d d | d | d d ƒ } t | | | d ƒ st ‚ d  S(   Ni    i   i   g-Cëâ6?(   R=   R/   R>   RB   RR   Rk   R   R(   (   R#   t   a1t   a2t   eR   t   d1t   d2(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ias/__init__.pyR  ƒ  s    	GGGt   managerc           B   s;   e  Z d d d d d  „ Z d „  Z d d „ Z d „  Z RS(   c   
      C   sö  t  |  t ƒ  ƒ | d  k r+ t j |  _ n  |  j d  k rL t j ƒ  |  _ n  |  j	 j
 ƒ  j j } |  j d It | ƒ IJt d |  j d | d |  j d |  j	 j d |  j d |  j ƒ j }	 t d |	 d |  j ƒ }	 |  j d  k	 r&t d |	 d	 | d
 |  j j j d |  j j j d |  j j j ƒ n  | d  k	 rK|  j d |	 d | ƒ n  |  j d IJt |	 ƒ j d |  j ƒ t |	 |  j ƒ |  j d IJt |	 ƒ j d |  j ƒ |  j |	 ƒ |  _ | d IJ|  j j  ƒ  j d |  j ƒ |  j! d |  j ƒ d  S(   Ns!   Total number of covalent bonds = R^   R_   RN   R`   RJ   RK   R"   RÄ   RÅ   R®   RÆ   t	   file_names   IAS considered: R)   s   IAS selected: s   IAS scattering dictionary:("   R   R.   R%   R&   R'   RK   RJ   t   ias_master_paramst   extractt   geometryt   pair_proxiest   bond_proxiest   simpleR   RE   R^   RN   R`   R"   R­   RÄ   RË   t   peak_search_mapRÅ   R®   RÆ   t	   all_bondsR   R*   Rä   t   iass_as_xray_structuret   ias_xray_structuret   scattering_type_registryt   write_pdb_file(
   R!   R"  RN   R^   RJ   RÄ   R  RK   R_   R"   (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ias/__init__.pyR$   �  s@      		
c         C   sž  t  j d |  j j ƒ  ƒ } xl| D]d} | j d  k	 s= t ‚ | j r" |  j j rp | j	 } | j
 } | j } n/ | j } | j j
 | j j
 d } |  j j } | d  k rÈ | j j
 | j j
 d } n  | d  k rã |  j j } n  | d  k rû | j } n  | | g j d  ƒ d k st ‚ | d  k	 r†t  j d | j d | j d |  j j ƒ  j | ƒ d t j | ƒ d | ƒ } | j | ƒ q†q" q" W| j d	 t ƒ | S(
   Nt   crystal_symmetryg      à?i    R�   t   scattering_typet   sitet   ut	   occupancyt   custom_dict(   R   t	   structureR^   R,  RC   R%   R(   RJ   t   use_mapRB   R1   R0   R@   R=   R>   t   initial_ias_occupancyRZ   t	   scattererR2   R³   RÂ   R   t   b_as_ut   add_scattererR*  Rß   (   R!   R"   R)  R#   R/   R1   R0   t   ias_scatterer(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ias/__init__.pyR(  ´  s<    					!					c         C   sê   | d  k r t j } n  |  j j ƒ  } x¼ t |  j j ƒ  ƒ D]¥ \ } } t j j	 ƒ  } t
 | _ | d | _ | j d  | _ d | _ | d | _ | | | _ | j | _ t j | j ƒ | _ | j d  | _ | | j ƒ  IJq= Wd  S(   Ni   i   t   IASi   (   R%   R&   R'   R)  RO   RX   RL   R   t	   hierarchyt   atom_with_labelsRØ   t   heterot   serialR�   R2   t   resnamet   resseqRj   R0  t   occR   t   u_as_bRQ   R×   R4   t   format_atom_record_group(   R!   R)   RO   R3   t   scR‘   (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ias/__init__.pyR+  Õ  s     "		c         C   s3  g  } g  } g  } g  } g  } g  } xÓ | D]Ë }	 |	 j  j }
 |	 j j } |
 d k rq | d k rq | j |	 ƒ q+ |
 d k r™ | d k r™ | j |	 ƒ q+ |
 d k rÁ | d k rÁ | j |	 ƒ q+ |
 d k sÙ | d k ré | j |	 ƒ q+ | j |	 ƒ q+ W| | | | } t | d ƒ } d } d } x| D]ý}	 |	 j d  k	 r.|	 j  j j ƒ  } t	 |	 j  j
 ƒ j ƒ  } t	 d |	 j  j ƒ j ƒ  } |	 j j j ƒ  } t	 |	 j j
 ƒ j ƒ  } t	 d |	 j j ƒ j ƒ  } |	 j  j } |	 j j } t	 d	 t j | d
 | d
 d | d | d d | d | d d ƒ ƒ j ƒ  } | | | | | | | | | f IJx= t |	 j j |	 j j ƒ D]  \ } } | | | | f IJq}W|	 j j d  k	 röx@ t |	 j j |	 j j ƒ D]  \ } } | d | | f IJqÏWn  | d I|	 j j I|	 j IJ| d I|	 j IJq.q.Wd  S(   NR•   R–   R˜   RF   t   ws   *** %s_%s(%s)-%s_%s(%s)=%ss   %10.4f %10.4fs   %.1fs   %.2fi    i   i   s   peak= %10.4f %10.4fs   IAS: s   status= (   R•   R–   (   R•   R–   (   R•   R˜   (   R•   R˜   (   RF   (   RF   (   R=   R4   R>   RW   t   openR5   R%   R2   Rh   t   strR3   R1   R/   RR   Rk   t   zipR7   R6   R<   R;   R9   RA   RC   (   R!   R"   R  t   sortedt   cct   cot   cnt   xht   otherR#   t   e1t   e2t   foutt   fmt1t   fmt2t   name1t   i_seq1t   b_iso1t   name2t   i_seq2t   b_iso2t   s1t   s2R7   R   R  (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ias/__init__.pyR'  å  sT        K#((N(   R+   R,   R%   R$   R(  R+  R'  (    (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ias/__init__.pyR  Œ  s   !	!gffffffÖ?g     €f@g–~TW\@g�íµ ÷Æ°>c   /      C   sÙ  |  \ } } }	 | \ }
 } } | \ } } } | | } | } | } t  j | t  j d ƒ } |
 | } | | } | | } | | } | |	 } | |	 } | | | | } | | | | } | | | | } | | | | |	 | } | |
 | | | | } | | | t  j | ƒ } | } | d k rÑ| d k rÑ| | | | }  |  d k sct ‚ | | | | |  }! | | | | |  }" | | |! | }# | | |" | }$ d |! d |# d }% d |# |$ |
 d |! |" | d | }& |$ |
 d |" | d | d | }' |& d d |% |' }( |( d k sAt ‚ |% d k sSt ‚ |& t  j |( ƒ d |% }) |" |! |) }* |$ |# |) }+ |& t  j |( ƒ d |% }, |" |! |, }- |$ |# |, }. t | |. | |- | |, | ƒ | k  sõt ‚ t | |+ | |* | |) | ƒ | k  s%t ‚ t | | | | | |	 | ƒ | k  sUt ‚ t | |
 | | | | | ƒ | k  s…t ‚ t | | | | | | | ƒ | k  sµt ‚ |+ |* |) f |. |- |, f f Sd Sd  S(   Ni´   g        i   i   g       @g      @(   NN(   RR   t   cosRS   Rk   R(   Rû   R%   (/   RŠ   R‹   RŒ   R�   R   t   ALPHAt   smallt   X1t   Y1t   Z1t   X2t   Y2t   Z2t   XCt   YCt   ZCt   DEt   Q1t   Q2t   A1t   A2t   A3t   A4t   A5t   A6t   AR   R•   RG   t   F1t   F2t   Ft   tmpt   B1t   B2t   B3t   B4t   D1t   D2t   D3t   Pt   ZI1t   YI1t   XI1t   ZI2t   YI2t   XI2(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ias/__init__.pyRŽ     s\    






*&00000gäiù�«¨P@(.   t
   __future__R    R&   RR   t   cctbxR   R   t   iotbxR   t   libtbxR   t   cctbx.array_familyR   t   cctbx.eltbx.xray_scatteringR   t
   iotbx.philR   t   libtbx.test_utilsR   t   libtbx.utilsR	   t   philt   parseR   t   xray_scatteringt   gaussianRß   t   BH_typet   B_typet   R_typet   L_typet   objectR   R-   R5   R#   RE   R‰   R’   R­   RË   R¾   Rä   R  R  RŽ   (    (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/ias/__init__.pyt   <module>   sZ   	/	"			's			h	%Ÿ	"		‚