o
    Rŀg3                     @   s   d Z ddlZddlZddl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d	Zd
d Zdd ZG dd deZG dd deZedkrvddlZddlmZ e Zedejd Zed Zeeejd ZeD ]	Z	 ee qndS dS )an  Interface for the program NACCESS.

See: http://wolf.bms.umist.ac.uk/naccess/
Atomic Solvent Accessible Area Calculations

errors likely to occur with the binary:
default values are often due to low default settings in accall.pars
- e.g. max cubes error: change in accall.pars and recompile binary

use naccess -y, naccess -h or naccess -w to include HETATM records
    N)AbstractAtomPropertyMap)AbstractResiduePropertyMap)PDBIOnaccess/tmp/c                 C   s  t j|d}t jd|d\}}t| |r#tj|}t|| nt	 }	|	
|   |	| t }
t| ||g}|rH|d|g |rQ|d|g tj|dtjtjd}| \}}t|
 |dd d	 }|dd d
 }| rt| tj|rtj|stdt|}| }W d   n1 sw   Y  t|}| }W d   ||fS 1 sw   Y  ||fS )zRun naccess for a pdb file.)dirz.pdbz-pz-zT)universal_newlinesstdoutstderrNz.rsaz.asaz+NACCESS did not execute or finish properly.)tempfilemkdtempmkstemposclosepathabspathshutilcopyr   set_structure
get_parentsavegetcwdchdirextend
subprocessPopenPIPEcommunicatestripwarningswarnexists	Exceptionopen	readlines)modelpdb_file
probe_sizez_slicer   	temp_pathtmp_pathhandletmp_pdb_filewriterold_dircommandpouterrrsa_fileasa_filerfrsa_dataafasa_data r:   C/var/www/html/myenv/lib/python3.10/site-packages/Bio/PDB/NACCESS.pyrun_naccess!   sH   









r<   c                 C   s   i }| D ]p}| drt|dd }|d }t|dd }|d }d||f}|t|dd	 t|d
d t|dd t|dd t|dd t|dd t|dd t|dd t|dd t|dd d|||f< q|S )z6Process the .rsa output file: residue level SASA data.RES         	                      #   $   )   *   0   1   6   7   =   >   C   D   J   K   P   )res_nameall_atoms_absall_atoms_relside_chain_absside_chain_relmain_chain_absmain_chain_relnon_polar_absnon_polar_relall_polar_absall_polar_rel)
startswithintfloat)r7   naccess_rel_dictlinerX   chain_idresseqicoderes_idr:   r:   r;   process_rsa_dataZ   s,   

rl   c                 C   sn   i }| D ]0}|dd }|  }|d }t|dd }|d }d||f}|||f}	|dd }
|
||	< q|S )	z5Process the .asa output file: atomic level SASA data.   rD      rE      rC   rO   rR   )r   rd   )r7   naccess_atom_dictrg   full_atom_idatom_idchainidri   rj   rk   idasar:   r:   r;   process_asa_datat   s   


rv   c                   @      e Zd ZdZ	dddZdS )NACCESSz0Define NACCESS class for residue properties map.Nr   /tmpc                 C   s   t ||||d\}}t|}i }g }	g }
|D ]B}| }|D ]9}| }||f|v rV|||f }|d }|| ks<J ||||f< |	||f |
||f ||jd< q	 qqt| ||	|
 dS )Initialize the class.r   r*   rX   EXP_NACCESSN)r<   rl   get_idget_resnameappendxtrar   __init__)selfr&   r'   naccess_binarytmp_directoryres_dataatm_datanaccess_dictproperty_dictproperty_keysproperty_listchainrh   resrk   itemrX   r:   r:   r;   r      s0   
zNACCESS.__init__Nr   ry   __name__
__module____qualname____doc__r   r:   r:   r:   r;   rx          rx   c                   @   rw   )NACCESS_atomicz4Define NACCESS atomic class for atom properties map.Nr   ry   c                 C   s   t ||||d\}}t|| _i }g }g }	|D ]<}
|
 }|
D ]3}| }|D ]*}| }|||f}|| jv rQ| j| }|||< || |	||f ||jd< q'qqt| |||	 dS )rz   r{   r|   N)r<   rv   rp   r}   r   r   r   r   )r   r&   r'   r   r   r   r   r   r   r   r   rh   residuerk   atomrr   full_idru   r:   r:   r;   r      s4   






zNACCESS_atomic.__init__r   r   r:   r:   r:   r;   r      r   r   __main__)	PDBParserX   )NNr   r   )r   r   r   r   r   r    Bio.PDB.AbstractPropertyMapr   r   Bio.PDB.PDBIOr   r<   rl   rv   rx   r   r   sysBio.PDB.PDBParserr   r1   get_structureargvsr&   neprintr:   r:   r:   r;   <module>   s6   	
9"!

