B
    d|                 @   s   d dl mZmZmZ dd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd ZdS )    )absolute_importdivisionprint_functionc             C   s|   |  }|d k	r.|j|   ddr.d S | j|j|   |   d}|d kr\d S |jd k	rjd S |j	d krxd S |S )N)indicesF)Zcomp_idZ
atom_names
sites_cart)
atomsselectZextract_i_seqZall_eqrotamer_iteratorZresnameZextract_nameZextract_xyzZproblem_messageZrotamer_info)Zmon_lib_srvresidueZatom_selection_boolr   r	    r   u/mnt/filia/a/genomebrowser/www/genomebrowser/fleming/tools/molprobity/modules/cctbx_project/mmtbx/rotamer/__init__.pyiterator   s     


r   c             C   s*   d | |||gkst t| j|j|j|jS )N)AssertionErrorphi_from_sitesxyz)thisNthisCthisCAthisCBr   r   r   improper_ncab_from_atoms   s    r   c             C   s*   d | |||gkst t| j|j|j|jS )N)r   r   r   )r   r   r   r   r   r   r   improper_cnab_from_atoms   s    r   c             C   s*   d | |||gkst t| j|j|j|jS )N)r   r   r   )prevCAprevCr   r   r   r   r   omega_from_atoms   s    r   c       	      C   s   d\}}}}}x |   D ]}|jdkr|}P qW x>|  D ]2}|jdkrN|}q:|jdkr^|}q:|jdkr:|}q:W x|  D ]}|jdkrz|}qzW |||||fS )N)NNNNNz C  z N  z CA )r   name)	prev_resr
   next_resc1n2ca2c2n3atomr   r   r   get_phi_psi_atoms!   s     




r#   c             C   s|   d\}}}}| d k	r>x(| D ] }|j dkr,|}|j dkr|}qW |d k	rpx(|D ] }|j dkr^|}|j dkrL|}qLW ||||fS )N)NNNNz CA z C  z N  )r   )
prev_atomsr   r   r   r   r   r"   r   r   r   get_omega_atoms3   s    

 
 

 
 r%   c             C   sH   t | |\}}}}d ||||gkrDt||||}|dkrD|dk rDdS dS )Ni   TF)r%   r   )r$   r   r   r   r   r   Zomegar   r   r   is_cis_peptide?   s    r'   c             C   sL   t | ||d\}}}}}d |||||gkrB|j|j|j|j|jgS d gd S )N)r   r
   r      )r#   Zi_seq)r   r
   r   r   r   r   r    r!   r   r   r   get_phi_psi_indicesG   s    r)   c             C   s*   d | |||gkst t| j|j|j|jS )N)r   r   r   )r   resNresCAresCr   r   r   phi_from_atomsP   s    r-   c             C   sL   ddl m} |j| |gddd}|jdkr.d S |j| |||gddd}|jS )Nr   )geometry_restraints   )sitesdistance_idealweight   i)r0   angle_idealr2   )cctbxr.   bonddistance_modeldihedralangle_model)r   r*   r+   r,   r.   bdr   r   r   r   T   s    
 
r   c             C   s*   d | |||gkst t| j|j|j|jS )N)r   psi_from_sitesr   )r*   r+   r,   nextNr   r   r   psi_from_atomsb   s    r>   c             C   sL   ddl m} |j||gddd}|jdkr.d S |j| |||gddd}|jS )Nr   )r.   r/   )r0   r1   r2   r3   i)r0   r4   r2   )r5   r.   r6   r7   r8   r9   )r*   r+   r,   r=   r.   r:   r;   r   r   r   r<   f   s    
 
r<   c             C   s   d | krt | dkstt|| d  || d  || d  || d  d}t|| d  || d  || d  || d  d}||fS )	Nr(   r   r/         )r   r*   r+   r,   r3   )r*   r+   r,   r=   )lenr   r   r<   )Zi_seqsr   phiZpsir   r   r   phi_psi_from_sitess   s    





rC   N)
__future__r   r   r   r   r   r   r   r#   r%   r'   r)   r-   r   r>   r<   rC   r   r   r   r   <module>   s   	