B
    §db=  ã               @   s  d dl mZmZmZ d dlZG dd„ deƒZdd„ ZG dd„ deƒZ	G d	d
„ d
eƒZ
ddddddddddg
ZedddddddddddddddœƒZe	edddg edgdddZe	edddd d!g ed"d#d$Ze	eddd%d&d'd(d)d*d+d,d-g ed.d/d$Ze	edddd d!d0d1d2d3d4d5d6d7d8d9g ed:d1i d;gd<d=dZe	eddd%d&d'd(d)d*d+d,d-d2d3d4d5g ed2d3d4d5d>œ d?gd@dAdZe	edddd d!d0d:dBdCdDdEdFdGdHg ed;dIgdJdKdZe	edddd d!d0d:dBdCdLdEdFdGdHg edMdLi d;dIgdNdKdZe	edddd d!d0d:dBdCdOdPdQdRg ed;dIdSgdTdUdZe	edddd d!d0d2dVd6dWdXdYdZd[d\d]g ed^d]i d;gd_d`dZe	edddd d!d0d2dVd6dadYdZdbdcdddedfdgdhdig ed;gdjdkdZe	edddd d!dld1g ed;gdmdndZe	eddd%dodpd*d+d,d-g	 edqdrd$Ze	edddd d!d0dsdtd7d8g
 ed;gdudvdZe	edddd d!d0d:dBdCdOdwdxdydzg ed;dIgd{d|dZe	edddd d!d0d2dVd6dWdXdYdZd[d\d}d~g ed;gdd€dZe	edddd d!dd1g ed:d1i d;gd‚dndZe	edddd d!d0d:dBdCdOdPdQdRdEdFdGdHdƒd^d„d…g ed;dIdSd†gd‡dˆdZe	edddd d!d0d:dBdCdOdPdQdRd‰dŠd\d‹dŒddŽddg ed;dIdSgd‘d’dZe	edddd d!d0d“dVd6dWdXdYdxd[g ed;gd”d•dZe	edddd d!d0dsdVd–dWg
 ed;d—gd˜d™dZ e	edddd d!d0d:dBdCdOdwdYdšd[g ed;dIgd›dœdZ!eeeeeeeeeeeeeeeeeeee e!dœZ"dS )žé    )Úabsolute_importÚdivisionÚprint_functionNc               @   s   e Zd Zdd„ ZdS )Údict_with_addc             C   s   t | ƒ}| |¡ |S )N)r   Úupdate)ÚselfÚotherÚresult© r
   ú/mnt/filia/a/genomebrowser/www/genomebrowser/fleming/tools/molprobity/modules/cctbx_project/iotbx/pdb/atom_name_interpretation.pyÚ__add__   s    
zdict_with_add.__add__N)Ú__name__Ú
__module__Ú__qualname__r   r
   r
   r
   r   r      s   r   c             C   s<   t | ƒdkr8| d dkr8| d dkr8| dd … | d  S d S )Né   Úhr   Ú	123456789)Úlen)Úpatternr
   r
   r   Úalternative_hydrogen_pattern   s
    r   c               @   s    e Zd Zg fdd„Zdd„ ZdS )Úinterpreterc          	   C   s4  t ƒ }x|D ]}| |¡ qW t|ƒt|ƒks2t‚x | ¡ D ]\}}||ks<t‚q<W xN|D ]F}	t|	ƒdksnt‚x0|	D ](}||krttddt|	ƒ  d|  ƒ‚qtW qZW i }
xv|D ]n}| ¡ |ksÂt‚xXdD ]P}| d|¡}||
krtdt	|ƒd 
d	d
„ |D ƒ¡f ƒ‚||
|< ||krÈP qÈW q®W t|ƒ}x(|D ] }t|ƒ}|d k	r.|||< q.W x4t| ¡ ƒD ]$\}}t|ƒ}|d k	r`|||< q`W i }xxt| ¡ ƒD ]h\}}x\dD ]T}| d|¡}||krÞtdd|  d|  d ƒ‚| d|¡||< ||kr¨P q¨W qšW || _|| _|| _|
| _|| _|| _|| _d S )Né   z'Inconsistent mutually_exclusive_pairs:
z  given: %s
z%  pattern %s not in expected_patterns)ÚHÚDr   z-Duplicate name %s given expected_patterns: %sz, c             S   s   g | ]}t |ƒ‘qS r
   )Úshow_string)Ú.0Úpr
   r
   r   ú
<listcomp>.   s   z(interpreter.__init__.<locals>.<listcomp>zInconsistent synonym_patterns:
z  synonym_pattern: %s
z(  name derived from synonym_pattern: %s
z8  Another synonym_pattern already lead to the same name.)ÚsetÚaddr   ÚAssertionErrorÚitemsÚRuntimeErrorÚstrÚstripÚreplacer   ÚjoinÚdictr   ÚlistÚexpected_patternsÚsynonym_patternsÚmutually_exclusive_pairsÚexpectedÚsynonymsÚnon_hydrogensÚ	hydrogens)r   r)   r*   r.   r/   r+   Zexpected_patterns_setÚexpected_patternZsynonym_patternÚmepr,   r   ÚnameÚaltr-   r
   r
   r   Ú__init__   sf    


"


 


 
 


 zinterpreter.__init__c             C   sn   i }g }xT|D ]L}|  ¡  ¡ }| j | j ||¡¡}|d krH| |¡ q| |g ¡ |¡ qW t| |||dS )N)r   Ú
atom_namesr,   Ú
unexpected)r$   Úupperr,   Úgetr-   ÚappendÚ
setdefaultÚmatched_atom_names)r   r5   r,   r6   Ú	atom_namer2   r0   r
   r
   r   Úmatch_atom_namesM   s    
zinterpreter.match_atom_namesN)r   r   r   r4   r=   r
   r
   r
   r   r      s   6r   c               @   sH   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zddd„Zdd„ Zddd„Z	d	S )r;   c             C   s   || _ || _|| _|| _d S )N)r   r5   r,   r6   )r   r   r5   r,   r6   r
   r
   r   r4   _   s    zmatched_atom_names.__init__c             C   sL   d| j j }x:dD ]2}|d| 7 }x t| |g ƒD ]}|d| 7 }q0W qW |S )Nz
%s)r5   r,   r6   z
  %sz %s)Ú	__class__r   Úgetattr)r   ÚoutlÚattrr2   r
   r
   r   Ú__repr__e   s    
zmatched_atom_names.__repr__c             C   s4   i }x*| j  ¡ D ]\}}t|ƒdkr|||< qW |S )Nr   )r,   r!   r   )r   r	   r0   Únamesr
   r
   r   Ú'expected_patterns_with_multiple_matchesp   s
    z:matched_atom_names.expected_patterns_with_multiple_matchesc             C   sL   g }xB| j jD ]6}|d | jkr|d | jkr| |d |d f¡ qW |S )Nr   é   )r   r+   r,   r9   )r   r	   r1   r
   r
   r   r+   w   s    z+matched_atom_names.mutually_exclusive_pairsNÚ c          	   C   sÎ   d}|d krt j}t| jƒdkrLt|d d dd„ | jD ƒ¡|d |d7 }xH|  ¡  ¡ D ]8\}}t|d|d d	d„ |D ƒ¡f  |d |d7 }qZW x2|  ¡ D ]&}t|d
d |¡  |d |d7 }q W |S )Nr   zunexpected atom names:z, c             S   s   g | ]}d | d  ‘qS )ú"r
   )r   r2   r
   r
   r   r   ƒ   s   z4matched_atom_names.show_problems.<locals>.<listcomp>)Úfiler   z/multiple matches: expected pattern=%s  names=%sc             S   s   g | ]}d | d  ‘qS )rG   r
   )r   r2   r
   r
   r   r   ‰   s    zmutually exclusive: %sú )	ÚsysÚstdoutr   r6   Úprintr&   rD   r!   r+   )r   ÚoutÚprefixr	   r0   rC   Úpairr
   r
   r   Úshow_problems   s      "z matched_atom_names.show_problemsc       
      C   s  d gt | jƒ }i }x(t| jƒD ]\}}| |g ¡ |¡ q W i }x`| jjD ]T}|d | jkr€|d ||d < |d ||d < qL|d ||d < |d ||d < qLW xt| j ¡ D ]f\}}| 	||¡}| 
¡ }	|	d dkrì|	dd … |	d  }	x(|D ] }x|| D ]}|	||< q W qòW q°W |S )NrE   r   r   r   )r   r5   Ú	enumerater:   r9   r   r+   r,   r!   r8   r7   )
r   r	   Zname_indicesÚir2   Z
mep_translr1   r0   rC   Zmon_lib_namer
   r
   r   Úmon_lib_names   s(    
z matched_atom_names.mon_lib_namesFc             C   sD   |rt | jjƒ t |  ¡ ƒ¡S t | jj| jj ƒ t |  ¡ ƒ¡S d S )N)r   r   r.   Ú
differencerS   r/   )r   Zignore_hydrogenr
   r
   r   Úmissing_atom_names§   s    z%matched_atom_names.missing_atom_names)NrF   )F)
r   r   r   r4   rB   rD   r+   rP   rS   rU   r
   r
   r
   r   r;   ]   s   
r;   ÚNr   Z1hZ2hZ3hÚCAÚCÚOZOXTZhXT)ZOT1ZOT2ÚOCZhCZhNZ1hNZ2hNZ3hNZ1hTZ2hTZ3hTZh0AZh0BZh0CÚ1hAÚ2hAÚ3hA)r[   r\   r]   )rV   rW   rX   rY   )r   ZHA1ZHA2)r+   r.   r/   ZhAÚCBÚ1hBÚ2hBÚ3hB)rV   rW   rX   rY   r^   )r   ÚHAÚHB1ÚHB2ÚHB3)r.   r/   ZhBÚCG1Ú1hG1Ú2hG1Ú3hG1ÚCG2Z1hG2Z2hG2Z3hG2)rV   rW   rX   rY   r^   rf   rj   )	r   rb   ÚHBÚHG11ÚHG12ÚHG13ÚHG21ÚHG22ÚHG23ÚCGZhGÚCD1Z1hD1Z2hD1Z3hD1ÚCD2Z1hD2Z2hD2Z3hD2Ú1hG)r_   r`   ra   )rV   rW   rX   rY   r^   rr   rs   rt   )
r   rb   rc   rd   ÚHD11ÚHD12ÚHD13ÚHD21ÚHD22ÚHD23)ÚCDÚ1hDÚ2hDÚ3hD)rg   rh   ri   )rV   rW   rX   rY   r^   rf   rs   rj   )r   rb   rk   rl   rm   rv   rw   rx   ro   rp   rq   Ú2hGÚ3hGÚSDÚCEÚ1hEÚ2hEÚ3hE)ru   r€   r   )rV   rW   rX   rY   r^   rr   r‚   rƒ   )	r   rb   rc   rd   ÚHG1ÚHG2ÚHE1ÚHE2ÚHE3ÚSEZSED)rV   rW   rX   rY   r^   rr   rŒ   rƒ   r|   r}   r~   r   )r}   r~   r   )rV   rW   rX   rY   r^   rr   r|   )rb   rc   rd   r‡   rˆ   ÚHD1ÚHD2ÚhD1ÚhD2ÚCE1ZhE1ÚCE2ZhE2ÚCZZhZZ1hZ)rV   rW   rX   rY   r^   rr   rs   r‘   r“   r’   rt   )	r   rb   rc   rd   r   r‰   ZHZrŠ   rŽ   ÚNE1ÚCE3ZhE3ÚCZ2ZhZ2ÚCZ3ZhZ3ÚCH2ZhH2)rV   rW   rX   rY   r^   rr   rs   rt   r”   r’   r•   r–   r—   r˜   )
r   rb   rd   re   r   r‰   r‹   ÚHZ2ÚHZ3ZHH2ÚOG)rV   rW   rX   rY   r^   r›   )r   rb   rc   rd   ZHGÚOG1ZhG1)rV   rW   rX   rY   r^   rœ   rj   )r   rb   rk   r‡   ro   rp   rq   ÚOD1ÚND2)rV   rW   rX   rY   r^   rr   r   rž   )r   rb   rc   rd   ry   rz   ÚOE1ÚNE2Z1hE2Z2hE2)	rV   rW   rX   rY   r^   rr   r|   rŸ   r    )r   rb   rc   rd   r‡   rˆ   ZHE21ZHE22ÚOHZhH)rV   rW   rX   rY   r^   rr   rs   r‘   r“   r¡   r’   rt   )	r   rb   rc   rd   r   r‰   ZHHrŠ   rŽ   ÚSG)rV   rW   rX   rY   r^   r¢   ÚNZZ2hZZ3hZ)r„   r…   r†   )	rV   rW   rX   rY   r^   rr   r|   rƒ   r£   )r   rb   rc   rd   r‡   rˆ   r   rŽ   r‰   rŠ   ZHZ1r™   rš   ÚNEZhEÚNH1Z1hH1Z2hH1ÚNH2Z1hH2Z2hH2)rV   rW   rX   rY   r^   rr   r|   r¤   r“   r¥   r¦   )r   rb   rc   rd   r‡   rˆ   r   rŽ   ZHEÚHH11ÚHH12ÚHH21ÚHH22ÚND1)
rV   rW   rX   rY   r^   rr   r«   r‘   r    rt   )r   rb   rc   rd   r   r‰   rŠ   rŽ   ÚOD2)r   r   r   )rV   rW   rX   rY   r^   rr   r   r¬   )r   rb   rc   rd   ÚOE2)	rV   rW   rX   rY   r^   rr   r|   rŸ   r­   )r   rb   rc   rd   r‡   rˆ   )ÚGLYÚALAÚVALÚLEUÚILEÚMETÚMSEÚPROÚPHEÚTRPÚSERÚTHRÚASNÚGLNÚTYRÚCYSÚLYSÚARGÚHISÚASPÚGLU)#Ú
__future__r   r   r   rJ   r'   r   r   Úobjectr   r;   Zpeptide_expected_patternsZpeptide_synonym_patternsZgly_interpreterZala_interpreterZval_interpreterZleu_interpreterZile_interpreterZmet_interpreterZmse_interpreterZpro_interpreterZphe_interpreterZtrp_interpreterZser_interpreterZthr_interpreterZasn_interpreterZgln_interpreterZtyr_interpreterZcys_interpreterZlys_interpreterZarg_interpreterZhis_interpreterZasp_interpreterZglu_interpreterÚinterpretersr
   r
   r
   r   Ú<module>   sT  KT









