ó
»™xTc           @   s°   d  d l  m Z d  d l m Z d  d l Z d  d l Z d  d l m Z d  d l m	 Z	 d  d l
 j j Z d  d l m Z d  d l Z d  d l m Z d e f d	 „  ƒ  YZ d S(
   iÿÿÿÿ(   t   division(   t   flexN(   t   fit_rotamers(   t   rotatable_bonds(   t   rotate_point_around_axis(   t   rotalyzet   managerc           B   s8   e  Z d  d d d d d d d „ Z d „  Z d „  Z RS(   g      $Àg      $@g      ð?g      à?c
         C   s�  |	 d  k r t j }	 n  |	 |  _ t j j j ƒ  |  _ | j ƒ  |  _ t	 |  _
 t j ƒ  j ƒ  j |  _ | |  j _ | |  j _ | |  j _ | |  j _ | |  _ |  j d  k rÞ | j ƒ  j ƒ  }
 t j t |
 ƒ t ƒ |  _ n  t j d | d | d |  j ƒ |  _ | |  _ |  j d  k r,t | ƒ |  _ n  d d l  m! } d d l" m# } | t	 ƒ |  _$ | j% ƒ  |  _& | j' ƒ  |  _( d  |  _) d  |  _* d  S(   Nt   pdb_hierarchyt   xray_structuret	   selectioniÿÿÿÿ(   t   SidechainAngles(   t   rotamer_eval(+   t   Nonet   syst   stdoutt   logt   mmtbxt   monomer_libraryt   servert   mon_lib_srvt	   unit_cellt   Falset   exclude_free_r_reflectionsR   t   torsion_search_paramst   extractt   torsion_searcht   torsion_paramst   range_startt
   range_stopt   stept   min_angle_between_solutionsR	   t   atomst   extract_xyzR   t   boolt   lent   Truet   torsion_utilst   get_c_alpha_hingest   c_alpha_hingest	   name_hasht   build_name_hasht   mmtbx.rotamer.sidechain_anglesR
   t   mmtbx.rotamerR   t   sat	   RotamerIDt
   rotamer_idt   RotamerEvalt   rotamer_evaluatort   target_map_datat   residual_map_data(   t   selfR   R   R   R   R   R   R'   R	   R   t
   sites_cartR
   R   (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/torsion_restraints/rotamer_search.pyt   __init__   s:    
 						c         C   s.   t  j d | ƒ \ } } | |  _ | |  _ d  S(   Nt   fmodel(   R$   t   prepare_mapR0   R1   (   R2   R5   R0   R1   (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/torsion_restraints/rotamer_search.pyR6   6   s    	c	   ?      C   sT	  t  }	 t j d | d |  j d t d t d d  ƒ \ }
 } |
 d  k rZ |  j d | IJt  St | ƒ t | ƒ k sx t ‚ x& t |
 ƒ t | ƒ k r  |
 d  }
 q{ Wt | ƒ t |
 ƒ k s¿ t ‚ d } | j	 ƒ  j
 ƒ  } d  } d  } g  } x/ | j	 ƒ  D]! } | j d	 k rö | j } qö qö W| d  k	 rW|  j j | ƒ } | d  k	 rWt | ƒ } x: | d D]. } | j | ƒ | j |  j | d d
 !ƒ q\Wx: | d D]. } | j | ƒ | j |  j | d d
 !ƒ q™W| | d f } g  } x6 t | ƒ D]( \ } } | | k rî| j | ƒ qîqîW| | g } | j | ƒ x |
 D] } | j | ƒ q:WqWn  | j | ƒ } | j ƒ  } t j t | ƒ | ƒ } g  } t j d | d |  j d |  j d |  j ƒ } t j ƒ  }  x> | D]6 }! |  j |! d d
 !}" |" d1 k rÐ|  j |! ƒ qÐqÐW| j |  ƒ }# |  j j |# ƒ }$ d }% g  }& xC |$ D]; }' |  j j |' ƒ |% k  rl|& j t  ƒ q>|& j t ƒ q>Wd }( x" |& D] }) |) r£|( d 7}( qŠPqŠWxÞ |
 D]Ö }* |* d }+ |* d }, t j ƒ  }- | | | | }. t j  |. ƒ d k  r| d 7} q¯n  |. d k  r%|. d 7}. n  xS |, D]K } t! d | |+ d d | |+ d d | | d |. d t ƒ }- |- | | <q,W| d 7} q¯W| j" | | ƒ t# j$ d | d |  j% d |  j d |  j& d | d  | ƒ \ }/ }0 }1 | |/ k sít ‚ t | ƒ d k r|
 }2 n | }2 t }	 xt |2 ƒ D]ö \ }3 }* |3 t |2 ƒ d k rxt j ƒ  }4 x‹ |* d D] }5 |4 j | |5 ƒ qZWne |3 d k r¿|	 r¿t j ƒ  }4 xD |* d D] }5 |4 j | |5 ƒ q¡Wn t j | |* d d g ƒ }4 t j d |4 d |  j d |  j d |  j ƒ }6 | j |6 ƒ q!Wt j d | d |  j d |  j d |  j ƒ }7 | j ƒ  }8 t j' d! |7 d" | d# |2 d$ | d% | d& |8 d' |  j( d | d( |	 ƒ 	\ }8 }9 | j" | |8 ƒ | j) | ƒ t# j$ d | d |  j% d |  j d |  j& d | d  | ƒ \ }/ }0 }1 |/ | k }: | j* d  |8 d) d* d+ t ƒ r/	|: r/	t j ƒ  }  x> | D]6 }! |  j |! d d
 !}" |" d2 k rA|  j |! ƒ qAqAWt j t | ƒ |  ƒ } | j+ d/ d d0 | ƒ }; t  }< x8 t |; ƒ D]* \ } }= |= r¾| |  k rèt }< qèq¾q¾W|< r| j" | | ƒ | j) | ƒ t  St j ƒ  }  x> | D]6 }! |  j |! d d
 !}" |" d3 k r&|  j |! ƒ q&q&W| j |  ƒ }# |  j j |# ƒ }$ d }% g  }& xC |$ D]; }' |  j j |' ƒ |% k  rÂ|& j t  ƒ q”|& j t ƒ q”Wd }> x" |& D] }) |) rù|> d 7}> qàPqàW|> |( k  r+	| j" | | ƒ | j) | ƒ t  St S| j" | | ƒ | j) | ƒ t  Sd  S(4   Nt   residueR   t   remove_clusters_with_all_ht   include_labelsR   s    Skipped %s rotamer (TARDY error)iÿÿÿÿi    s    CA i   i   t   sites_cart_startR   t   two_mfo_dfc_mapt   mfo_dfc_maps    N  s    C  s    O  g      ð?g{®Gáz„?g     €v@t   axis_point_1t   axis_point_2t   pointt   anglet   degt
   atom_groupt   sidechain_anglesR/   R-   t   all_dictR3   t   residue_evaluatort   cluster_evaluatorst   axes_and_atoms_to_rotatet   rotamer_sites_cartt   rotamer_id_bestt   residue_sites_bestt   paramst   include_ca_hinget   percent_cutoffg333333Ã?t   verboses    OXTs    H  s    HA t   radiusR	   (   s    N  s    CA s    C  s    O  (   s    N  s    CA s    C  s    O  s    OXTs    H  s    HA (   s    N  s    CA s    C  s    O  (,   R   R   t   axes_and_atoms_aa_specificR   R#   R   R   R"   t   AssertionErrorR   t   extract_i_seqt   namet   i_seqR&   t   gett   appendR'   t	   enumeratet   selectt	   deep_copyR   R!   R   R/   R   R0   R1   t   size_tt   fractionalizet   eight_point_interpolationt   vec3_doublet   matht   fabsR   t   set_selectedR   t   evaluate_rotamerR+   R-   R   R   t   set_sites_cartt	   is_bettert   selection_within(?   R2   RB   RD   t   m_chist   r_chist   rotamert   sites_cart_movingR   t   keyRL   t   axis_and_atoms_to_rotatet   tardy_labelst   countert   residue_iselectiont   cur_cat   ca_addt   ca_axest   atomt   cur_c_alpha_hingest   residue_lengtht   ca_ptt   bb_ptt   end_ptst   groupt   it   valuet   axt   sites_cart_residuet   sites_cart_residue_startR	   t   rev_first_atomst	   rev_startt   sidechain_only_iselectionRT   t	   atom_namet   sites_cart_sidechaint   sites_frac_residuet   sigma_cutofft   sigma_residuet   rsft   sigma_count_startt   sigma_statet   aat   axisR   t   new_xyzt	   angle_degt   cur_rotamert   cur_chist	   cur_valuet	   eval_axest   i_aat   sites_aat   aa_t   rev_it   revRJ   RI   t   rotamer_matchRd   t   created_clasht   statet   sigma_count(    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/torsion_restraints/rotamer_search.pyt   search>   sŒ   
							




													
									


N(   t   __name__t
   __module__R   R4   R6   R™   (    (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/torsion_restraints/rotamer_search.pyR      s    	(   t
   __future__R    t   cctbx.array_familyR   R^   R   t   mmtbx.refinementR   t   mmtbx.utilsR   t   mmtbx.torsion_restraints.utilst   torsion_restraintst   utilsR$   t   scitbx.matrixR   t   mmtbx.monomer_library.serverR   t   mmtbx.validationR   t   objectR   (    (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/torsion_restraints/rotamer_search.pyt   <module>   s   