ó
¦™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 m Z m Z d  d
 l m Z d  d l m Z d  d l m Z d  d l Z e d d d d d d d d d d d d d d g ƒ Z d e	 j f d „  ƒ  YZ d e	 j f d „  ƒ  YZ d  e	 j f d! „  ƒ  YZ d" e	 j f d# „  ƒ  YZ d$ e	 j	 f d% „  ƒ  YZ d& e f d' „  ƒ  YZ  d( e f d) „  ƒ  YZ! d* e f d+ „  ƒ  YZ" d, e f d- „  ƒ  YZ# d. e f d/ „  ƒ  YZ$ d0 e% f d1 „  ƒ  YZ& d S(2   iÿÿÿÿ(   t   division(   t   rna_sugar_pucker_analysis(   t   pdb_interpretation(   t   utils(   t   monomer_library(   t
   validation(   t   common_residue_names_get_class(   t   geometry_restraints(   t   make_sub_headert   format_value(   t   slots_getstate_setstate(   t   easy_run(   t   sqrtNt   Pt   OP1t   OP2s   O5's   C5's   C4's   O4's   C1's   C3's   O3's   C2's   O2't   N1t   N9t   rna_bondc           B   sE   e  Z e j j d  d d g Z e d „  ƒ Z d „  Z d d „ Z RS(   t
   atoms_infot   sigmat   deltac           C   s   d d S(   Ns   %-20s  %6s  %6s  %6st   residues   atom 1s   atom 2t   sigmas(   s   residues   atom 1s   atom 2R   (    (    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyt   header   s    c         C   s1   d |  j  ƒ  |  j d j |  j d j |  j f S(   Ns   %-20s  %6s  %6s  %6.2fi    i   (   t   id_strR   t   namet   score(   t   self(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyt   format_values   s    t    c         C   s   | |  j  ƒ  S(   N(   R   (   R   t   prefix(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyt	   as_string"   s    (	   t   __name__t
   __module__R   R   t	   __slots__t   staticmethodR   R   R    (    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyR      s   	t	   rna_anglec           B   sE   e  Z e j j d  d d g Z e d „  ƒ Z d „  Z d d „ Z RS(   R   R   R   c           C   s   d d S(   Ns   %-20s  %6s  %6s  %6s  %6sR   s   atom 1s   atom 2s   atom 3R   (   s   residues   atom 1s   atom 2s   atom 3s   sigmas(    (    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyR   (   s    c         C   s>   d |  j  ƒ  |  j d j |  j d j |  j d j |  j f S(   Ns   %-20s  %6s  %6s  %6s  %6.2fi    i   i   (   R   R   R   R   (   R   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyR   -   s    R   c         C   s   | |  j  ƒ  S(   N(   R   (   R   R   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyR    2   s    (	   R!   R"   R   R   R#   R$   R   R   R    (    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyR%   %   s   	t
   rna_puckerc           B   sN   e  Z d  Z e j j d d d d g Z e d „  ƒ Z d „  Z d d „ Z	 RS(	   s:   
  Validation using pucker-specific restraints library.
  t   delta_anglet   is_delta_outliert   epsilon_anglet   is_epsilon_outlierc           C   s   d d S(   Ns   %-20s  %8s  %8s  %8s  %8sR   R   t   outliert   epsilon(   s   residues   deltas   outliers   epsilons   outlier(    (    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyR   @   s    c         C   sS   d „  } d „  } d |  j  ƒ  | |  j ƒ | |  j ƒ | |  j ƒ | |  j ƒ f S(   Nc         S   s   |  r
 d Sd Sd  S(   Nt   yest   no(    (   t   flag(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyt   format_outlier_flagF   s     c         S   s   t  d |  d d ƒS(   Ns   %8.1ft   replace_none_withs   ---(   R	   (   t   val(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyt   format_angleI   s    s   %-20s  %8s  %8s  %8s  %8s(   R   R'   R(   R)   R*   (   R   R0   R3   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyR   E   s    		R   c         C   s   | |  j  ƒ  S(   N(   R   (   R   R   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyR    Q   s    (
   R!   R"   t   __doc__R   R   R#   R$   R   R   R    (    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyR&   5   s   	
	t	   rna_suitec           B   sN   e  Z d  Z e j j d d d d g Z e d „  ƒ Z d „  Z d d „ Z	 RS(	   sL   
  RNA backbone "suite", analyzed using the external program 'suitename'.
  t   suite_idt   suitet	   suitenesst   triaged_anglec           C   s   d d S(   Ns   %-20s  %8s  %9s  %12ss   Suite IDR7   R8   s   triaged angle(   s   Suite IDs   suites	   suitenesss   triaged angle(    (    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyR   _   s    c         C   s    d |  j  |  j |  j |  j f S(   Ns   %-20s  %8s  %9s  %8s(   R6   R7   R8   R9   (   R   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyR   d   s    R   c         C   s   | |  j  ƒ  S(   N(   R   (   R   R   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyR    h   s    (
   R!   R"   R4   R   R   R#   R$   R   R   R    (    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyR5   T   s   	
	t   rna_geometryc           B   s   e  Z e j d  e d „ Z RS(   s     c         C   sv   t  |  j ƒ d k r\ | | |  j ƒ  j ƒ  IJx* |  j D] } | | j d | ƒ IJq9 Wn  |  j d | d | ƒ d  S(   Ni    R   t   out(   t   lent   resultst   get_result_classR   R    t   show_summary(   R   R;   R   t   verboset   result(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyt   showl   s
    (   R!   R"   t   syst   stdoutt   TrueRB   (    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyR:   k   s   t	   rna_bondsc           B   so   e  Z d  Z d Z d d d d d g Z d d d d d	 g Z d
 g d Z d „  Z d „  Z e	 j
 d d „ Z RS(   s!   #residue:atom_1:atom_2:num_sigmass   Backbone bond lenthst   Chaint   Residuet   Altlocs	   Bad bondss
   Max. sigmas   %ss   %ds   %.1fi    i   c         C   s«  t  j |  ƒ d } | j ƒ  } t j j d t ƒ } | j d | d | ƒ } | j } xO| j D]D}	 t j	 d | d |	 ƒ }
 | |	 j
 d j } | |	 j
 d j } | |	 j
 d j ƒ  } | j ƒ  t k s_ | j ƒ  t k ræ q_ n  |  j d 7_ t d |
 j ƒ } |
 j | } t | ƒ | k r_ |  j d 7_ |  j j t d | j d	 | j d
 | j d | j d | j d t j | |	 j
 ƒ d | d | d |
 j ƒ 	ƒ q_ q_ Wd  S(   Ni   t   defaultt   flagst
   sites_cartt   proxyi    i   t   chain_idt   resseqt   icodet   altloct   resnameR   R   R   R   (   R:   t   __init__t   extract_xyzR   RK   RE   t   pair_proxiest   bond_proxiest   simplet   bondt   i_seqsR   t   fetch_labelst   stript   rna_backbone_atomst   n_totalR   t   weightR   t   abst
   n_outliersR=   t   appendR   RN   RO   RP   RQ   RR   R   t   get_atoms_info(   R   t   pdb_hierarchyt	   pdb_atomst   geometry_restraints_managert   cutoffRL   RK   RU   RV   RM   t	   restraintt   atom1t   atom2t   labelsR   t
   num_sigmas(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyRS   z   sB    										c         C   s   t  S(   N(   R   (   R   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyR>   �   s    R   c         C   sb   |  j  d k r  | | d IJn> |  j d k r@ | | d IJn | | d |  j |  j  f IJd  S(   Ni    s   No RNA backbone atoms found.s+   All bonds within 4.0 sigma of ideal values.s   %d/%d bond outliers present(   R]   R`   (   R   R;   R   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyR?   Ÿ   s    (   R!   R"   t   output_headert   labelt   gui_list_headerst   gui_formatst   wx_column_widthsRS   R>   RC   RD   R?   (    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyRF   t   s   	#	t
   rna_anglesc           B   so   e  Z d  Z d Z d d d d d g Z d d d d d	 g Z d
 g d Z d „  Z d „  Z e	 j
 d d „ Z RS(   s(   #residue:atom_1:atom_2:atom_3:num_sigmass   Backbone bond anglesRG   RH   RI   s
   Bad angless
   Max. sigmas   %ss   %ds   %.1fi    i   c         C   sÂ  t  j |  ƒ d } | j ƒ  } t j j d t ƒ } t j d | ƒ } xu| j D]j} t j	 d | d | ƒ }	 | | j
 d j }
 | | j
 d j } | | j
 d j } | | j
 d j ƒ  } |
 j ƒ  t k sP | j ƒ  t k sP | j ƒ  t k rý qP n  |  j d 7_ t d |	 j ƒ } |	 j | } t | ƒ | k rP |  j d 7_ |  j j t d	 | j d
 | j d | j d | j d | j d t j | | j
 ƒ d | d | d |	 j ƒ 	ƒ qP qP Wd  S(   Ni   RJ   Rc   RL   RM   i    i   i   RN   RO   RP   RQ   RR   R   R   R   R   (   R:   RS   RT   R   RK   RE   R   t   build_name_hasht   angle_proxiest   angleRY   R   RZ   R[   R\   R]   R   R^   R   R_   R`   R=   Ra   R%   RN   RO   RP   RQ   RR   R   Rb   (   R   Rc   Rd   Re   Rf   RL   RK   t   i_seq_name_hashRM   Rg   Rh   Ri   t   atom3Rj   R   Rk   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyRS   ®   s@    							c         C   s   t  S(   N(   R%   (   R   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyR>   Ð   s    R   c         C   sb   |  j  d k r  | | d IJn> |  j d k r@ | | d IJn | | d |  j |  j  f IJd  S(   Ni    s   No RNA backbone atoms found.s,   All angles within 4.0 sigma of ideal values.s   %d/%d angle outliers present(   R]   R`   (   R   R;   R   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyR?   Ò   s    (   R!   R"   Rl   Rm   Rn   Ro   Rp   RS   R>   RC   RD   R?   (    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyRq   ¨   s   	"	t   rna_puckersc           B   s…   e  Z e j d  d d g Z d Z d Z d d d d g Z d	 d	 d	 d	 g Z d
 g d Z d e
 d „ Z d „  Z e j d d „ Z RS(   t   pucker_statest   pucker_perp_xyzt   pucker_distsE   #residue:delta_angle:is_delta_outlier:epsilon_angle:is_epsilon_outlers   Sugar puckerRG   RH   RI   s
   Bad angless   %siÈ   i   c            s¶  | d  k r t j j ƒ  } n  g  |  _ i  |  _ i  |  _ t j |  ƒ d d l	 m
 } xY| j ƒ  D]K} xB| j ƒ  D]4} x+| j ƒ  D]} | j } | d k r­ d } n  | j ƒ  ‰ xêt ˆ ƒ D]Ü\ ‰  }	 ‡  ‡ f d †  }
 | d |	 j ƒ  d | j ƒ } | j d  k	 rqÆ n  | j s&qÆ n  d  } |
 ƒ  } | d  k	 rV| j d d	 ƒ } n  t |	 j ƒ d
 k rqqÆ n  t j d | d | j d | j d | ƒ } |  j j | ƒ |  j d 7_ | j pÉ| j } | rä|  j d 7_ n  | sñ| rÆ t  d | j! d |	 j" d |	 j# d | j d |	 j d | j$ d | j d | j% d | j d | ƒ 
} |  j& j | ƒ | j' ƒ  } | j( | j) g |  j | <| j* | j+ g |  j | <qÆ qÆ Wq‰ Wqv Wqc Wd  S(   Niÿÿÿÿ(   t   residue_analysisR   t    c             s(   ˆ  d }  |  t  ˆ ƒ k r  d  Sˆ |  S(   Ni   (   R<   t   None(   t   j(   t	   i_residuet   residues(    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyt   _get_next_residueö   s    
 t   residue_atomst   distance_toleranceR   s    P  t   common_rna_dnat   paramst   residue_1_deoxy_ribo_atom_dictt   residue_1_c1p_outbound_atomt   residue_2_p_atomi   RN   RO   RP   RQ   RR   R'   R(   R)   R*   R+   (,   R}   R   t   master_philt   extractRx   Ry   Rz   R:   RS   t   iotbx.pdb.rna_dna_detectionR{   t   modelst   chainst
   conformersRQ   R€   t	   enumeratet   atomst!   bond_detection_distance_tolerancet   problemst   is_rnat   find_atom_byt   get_res_classRR   t   evaluatet   deoxy_ribo_atom_dictt   c1p_outbound_atomRa   R]   R(   R*   R`   R&   t   idRO   RP   R   R,   R=   R   t
   p_perp_xyzt   o3p_perp_xyzt   p_distance_c1p_outbound_linet   o3p_distance_c1p_outbound_line(   R   Rc   R…   t   outliers_onlyR{   t   modelt   chaint	   conformerRQ   R   R�   t   ra1Rˆ   t   next_pdb_residuet   anat
   is_outliert   puckert   key(    (   R   R€   sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyRS   æ   sp    					 	 															c         C   s   t  S(   N(   R&   (   R   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyR>   !  s    R   c         C   sb   |  j  d k r  | | d IJn> |  j d k r@ | | d IJn | | d |  j |  j  f IJd  S(   Ni    s   No RNA sugar groups found.s%   All puckers have reasonable geometry.s   %d/%d pucker outliers present(   R]   R`   (   R   R;   R   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyR?   #  s    N(   R!   R"   R:   R#   Rl   Rm   Rn   Ro   Rp   R}   RE   RS   R>   RC   RD   R?   (    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyRw   Û   s   
;	t
   rna_suitesc           B   s€   e  Z d  Z d Z d d d d g Z d g d Z d g d Z e j d	 d
 d d g Z e	 d „ Z
 d „  Z e j d d „ Z RS(   s&   #suiteID:suite:suiteness:triaged_angles   Backbone torsion suitesRG   RH   RI   s   Triaged angless   %si   iÈ   t   n_incompletet	   n_triagedt   n_suitest   average_suitenessc         C   s«  t  j |  ƒ d |  _ |  _ |  _ d  |  _ d } d } t j d d  d | d | ƒ } t	 j
 | d | ƒj } x| D]} | j d ƒ rv | j d ƒ }	 |	 d	 }
 |	 d
 } |	 d d d !} |	 d } |	 d } |	 d	 |	 d d d !|	 d
 |	 d |	 d } |	 d d d !} |	 d d d !} |	 d j d ƒ } d  } t } |  j d 7_ d | k r¤| d d k rŒ| d } |  j d 7_ n  t } |  j d 7_ n  | s±| r)|  j j t d |	 d	 d |	 d
 d |	 d d d !d |	 d d |	 d d |	 d d d !d | d | d | d | ƒ 
ƒ n  | d  k r�y# | t | ƒ 7} |  j d 7_ Wq~t k
 rz|  j d 7_ q~Xq�qv qv W|  j d k r§| |  j |  _ n  d  S(    Ni    s:   phenix.suitename -report -pointIDfields 7 -altIDfield 6  -t   processed_pdb_fileRc   t   geometryt   stdin_liness    :t   :i   i   i   i   i   i	   i   i   i   R|   i   s   !!t   trigRQ   RN   RR   RO   RP   R7   R6   R8   R9   R+   (   R:   RS   Rª   R©   R«   R}   R¬   R   t   get_rna_backbone_dihedralsR   t   fully_bufferedt   stdout_linest
   startswitht   splitt   FalseR]   RE   R`   R=   Ra   R5   t   floatt
   ValueError(   R   Rc   Re   Rž   t   total_suitenesst	   suitenamet   backbone_dihedralst   suitename_outt   linet   tempRQ   RN   RR   RO   RP   R§   R7   R8   t   temp2R9   R¥   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyRS   4  sh    			



1




c         C   s   t  S(   N(   R5   (   R   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyR>   k  s    R   c         C   sÈ   |  j  d k r  | | d IJn¤ t |  d ƒ rV | | d |  j |  j |  j f IJn  |  j d k rv | | d IJn | | d |  j |  j  f IJt |  d ƒ rÄ | | d t d	 |  j ƒ IJn  d  S(
   Ni    s   No RNA suites found.Rª   s5   %d suites triaged and %d incomplete leaving %d suitess&   All RNA torsion suites are reasonable.s   %d/%d suite outliers presentR¬   s   Average suiteness: %ss   %.3f(   R]   t   hasattrRª   R©   R«   R`   R	   R¬   (   R   R;   R   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyR?   m  s    
(   R!   R"   Rl   Rm   Rn   Ro   Rp   R:   R#   RE   RS   R>   RC   RD   R?   (    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyR¨   ,  s   6	t   rna_validationc           B   sP   e  Z d  d d d g Z e d „ Z e j d d „ Z e j d d e d „ Z	 RS(	   t   bondst   anglest   puckerst   suitesc   	   	   C   s  | d  k ro t j j ƒ  } t j j ƒ  } t j d | d | d | j ƒ  d t ƒ } | j ƒ  } | j	 j
 } n  | j ƒ  } t d | d | d | ƒ |  _ t d | d | d | ƒ |  _ t d | d t | d	 d  ƒ d
 | ƒ |  _ t d | d | d
 | ƒ |  _ d  S(   Nt   mon_lib_srvt   ener_libt   pdb_inpt6   substitute_non_crystallographic_unit_cell_if_necessaryRc   Rd   Re   R…   R   Rž   (   R}   R   t   serverRÈ   R   t   processt   as_pdb_inputRE   Re   t   all_chain_proxiesRc   R�   RF   RÃ   Rq   RÄ   Rw   t   getattrRÅ   R¨   RÆ   (	   R   Rc   Re   R…   Rž   RÇ   RÈ   R­   Rd   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyRS   �  s6    		R   c         C   s   d  S(   N(    (   R   R;   R   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyR?   ¤  s    c         C   sc   x\ |  j  D]Q } t |  | ƒ } | j d k s5 | r
 t | j d | ƒ| j d | ƒ q
 q
 Wd  S(   Ni    R;   (   R#   RÏ   R`   R   Rm   RB   (   R   R;   R   Rž   R@   t   geo_typet   rv(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyRB   §  s
    N(
   R!   R"   R#   RE   RS   RC   RD   R?   R}   RB   (    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyRÂ   ~  s
   t   rna_pucker_refc           B   s   e  Z d  „  Z e d „ Z RS(   c         C   sD   d |  _  d d d d d d d d	 d
 d d d g |  _ |  j ƒ  d  S(   Ns  
CRYST1  132.298   35.250   42.225  90.00  90.95  90.00 C 1 2 1       4
ATOM    132  P     A A  21       8.804   4.707  -0.950  1.00 21.07           P
ATOM    133  OP1   A A  21       8.958   5.041  -2.388  1.00 19.56           O
ATOM    134  OP2   A A  21       9.726   3.742  -0.339  1.00 17.87           O
ATOM    135  O5'   A A  21       8.914   6.057  -0.104  1.00 18.44           O
ATOM    136  C5'   A A  21       8.311   7.240  -0.587  1.00 16.49           C
ATOM    137  C4'   A A  21       8.458   8.398   0.384  1.00 15.52           C
ATOM    138  O4'   A A  21       7.781   8.097   1.635  1.00 16.13           O
ATOM    139  C3'   A A  21       9.885   8.660   0.849  1.00 16.12           C
ATOM    140  O3'   A A  21      10.578   9.415  -0.119  1.00 15.84           O
ATOM    141  C2'   A A  21       9.670   9.462   2.123  1.00 14.81           C
ATOM    142  O2'   A A  21       9.390  10.824   1.853  1.00 16.92           O
ATOM    143  C1'   A A  21       8.420   8.794   2.696  1.00 16.03           C
ATOM    144  N9    A A  21       8.745   7.898   3.805  1.00 14.49           N
ATOM    145  C8    A A  21       9.200   6.611   3.807  1.00 14.35           C
ATOM    146  N7    A A  21       9.500   6.161   5.002  1.00 14.14           N
ATOM    147  C5    A A  21       9.192   7.227   5.846  1.00 13.55           C
ATOM    148  C6    A A  21       9.288   7.400   7.255  1.00 13.46           C
ATOM    149  N6    A A  21       9.760   6.467   8.083  1.00 13.17           N
ATOM    150  N1    A A  21       8.881   8.588   7.778  1.00 14.41           N
ATOM    151  C2    A A  21       8.419   9.532   6.935  1.00 14.69           C
ATOM    152  N3    A A  21       8.294   9.483   5.600  1.00 16.23           N
ATOM    153  C4    A A  21       8.702   8.288   5.122  1.00 13.95           C
ATOM    154  P     U A  22      11.833   8.778  -0.860  1.00 17.19           P
ATOM    155  OP1   U A  22      12.143   9.766  -1.930  1.00 14.62           O
ATOM    156  OP2   U A  22      11.572   7.360  -1.223  1.00 16.11           O
ATOM    157  O5'   U A  22      12.955   8.795   0.274  1.00 17.34           O
ATOM    158  C5'   U A  22      14.086   7.879   0.260  1.00 15.80           C
ATOM    159  C4'   U A  22      14.668   7.761   1.654  1.00 13.76           C
ATOM    160  O4'   U A  22      14.980   9.104   2.130  1.00 13.53           O
ATOM    161  C3'   U A  22      13.575   7.229   2.579  1.00 14.34           C
ATOM    162  O3'   U A  22      14.069   6.400   3.635  1.00 16.58           O
ATOM    163  C2'   U A  22      12.950   8.479   3.204  1.00 14.31           C
ATOM    164  O2'   U A  22      12.419   8.301   4.510  1.00 12.30           O
ATOM    165  C1'   U A  22      14.140   9.444   3.207  1.00 13.55           C
ATOM    166  N1    U A  22      13.832  10.876   3.147  1.00 14.29           N
ATOM    167  C2    U A  22      14.055  11.619   4.286  1.00 13.16           C
ATOM    168  O2    U A  22      14.534  11.153   5.327  1.00 15.12           O
ATOM    169  N3    U A  22      13.706  12.925   4.186  1.00 13.49           N
ATOM    170  C4    U A  22      13.172  13.569   3.099  1.00 13.63           C
ATOM    171  O4    U A  22      12.789  14.728   3.228  1.00 12.03           O
ATOM    172  C5    U A  22      12.990  12.747   1.948  1.00 12.63           C
ATOM    173  C6    U A  22      13.320  11.453   2.009  1.00 13.42           C
ATOM    174  P     A A  23      14.502   4.869   3.397  1.00 16.90           P
ATOM    175  OP1   A A  23      13.773   4.291   2.214  1.00 17.04           O
ATOM    176  OP2   A A  23      14.351   4.224   4.726  1.00 16.03           O
ATOM    177  O5'   A A  23      16.057   4.949   3.092  1.00 16.99           O
ATOM    178  C5'   A A  23      16.937   5.684   3.940  1.00 16.50           C
ATOM    179  C4'   A A  23      18.220   5.970   3.200  1.00 16.03           C
ATOM    180  O4'   A A  23      17.896   6.559   1.914  1.00 15.15           O
ATOM    181  C3'   A A  23      19.123   7.000   3.865  1.00 15.88           C
ATOM    182  O3'   A A  23      20.007   6.350   4.779  1.00 16.04           O
ATOM    183  C2'   A A  23      19.932   7.535   2.689  1.00 14.37           C
ATOM    184  O2'   A A  23      21.038   6.689   2.437  1.00 14.07           O
ATOM    185  C1'   A A  23      18.924   7.447   1.539  1.00 15.13           C
ATOM    186  N9    A A  23      18.313   8.717   1.157  1.00 14.71           N
ATOM    187  C8    A A  23      18.027   9.134  -0.113  1.00 14.98           C
ATOM    188  N7    A A  23      17.513  10.334  -0.171  1.00 15.52           N
ATOM    189  C5    A A  23      17.440  10.727   1.159  1.00 14.12           C
ATOM    190  C6    A A  23      16.984  11.892   1.762  1.00 13.27           C
ATOM    191  N6    A A  23      16.517  12.944   1.074  1.00 13.02           N
ATOM    192  N1    A A  23      17.029  11.962   3.109  1.00 13.36           N
ATOM    193  C2    A A  23      17.522  10.921   3.791  1.00 12.32           C
ATOM    194  N3    A A  23      17.996   9.768   3.328  1.00 12.80           N
ATOM    195  C4    A A  23      17.924   9.737   1.988  1.00 13.37           C
R   R   R   s   O5's   C5's   C4's   O4's   C1's   C3's   O3's   C2's   O2'(   t   sample_basesR\   t   get_rna_pucker_ref(   R   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyRS   °  s    D	c      	   C   s5  t  j j d t ƒ } t j j ƒ  } t j j ƒ  } i  |  _ i  |  _ t j	 d | d | d d  d |  j ƒ |  _ |  j j ƒ  |  _ | rÙ t ƒ  } | j d |  j j j ƒ | j d j sÀ t ‚ | j d j sÙ t ‚ n  t j d	 |  j j j ƒ } |  j j d
 | d |  j j j ƒ } | j } xë | j D]à }	 | |	 j d d d !}
 | |	 j d d d !} |
 j ƒ  |  j k r‘| j ƒ  |  j k r‘q+n  |
 | } d |	 j d } y! |  j | j  |	 j! | f ƒ Wq+t" k
 r
g  |  j | <|  j | j  |	 j! | f ƒ q+Xq+Wx|  j j# D]} | | j d d d !}
 | | j d d d !} | | j d d d !} |
 j ƒ  |  j k r¯| j ƒ  |  j k r¯| j ƒ  |  j k r¯qn  |
 | | } d | j d } y! |  j | j  | j$ | f ƒ Wqt" k
 r,g  |  j | <|  j | j  | j$ | f ƒ qXqWd  S(   NRJ   RÇ   RÈ   t	   file_namet   raw_recordst	   hierarchyi    i   Rc   RK   RL   i   g      à?i   (%   R   RK   RE   R   RË   RÈ   t	   bond_dictt
   angle_dictR   RÌ   R}   RÓ   R­   Re   R®   t   rna_validatet   pucker_evaluateRÎ   Rc   Rx   t   is_2pt   AssertionErrorR   Rr   RU   RL   RV   RW   RY   R[   R\   R^   Ra   t   distance_idealt	   ExceptionRs   t   angle_ideal(   R   t   test_puckerRK   RÇ   RÈ   t   rRu   RU   RV   RX   Rh   Ri   R§   R   Rt   Rv   (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyRÔ   ù  sf    							
!%!(   R!   R"   RS   R·   RÔ   (    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyRÒ   ¯  s   	I('   t
   __future__R    t   mmtbx.monomer_libraryR   R   t   mmtbx.validationR   t   mmtbxR   R   t	   iotbx.pdbR   R•   t   cctbxR   t   libtbx.str_utilsR   R	   t   libtbxR
   R   t   mathR   RC   t   setR\   R   R   R%   R&   R5   R:   RF   Rq   Rw   R¨   RÂ   t   objectRÒ   (    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/validation/rna_validate.pyt   <module>   s4   	43QR1