
    Ri3                     X   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Zd Zd Z G d	 d
e      Z G d de      Zedk(  r\ddlZddlmZ  e       Zej+                  dej,                  d         Zed   Z eeej,                  d         ZeD ]  Z	  ee        yy)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)PDBIOc                    t        j                  |      }t        j                  d|      \  }}t        j                  |       |r6t        j
                  j                  |      }t        j                  ||       n:t               }	|	j                  | j                                |	j                  |       t        j                         }
t        j                  |       ||g}|r|j                  d|g       |r|j                  d|g       t!        j"                  |dt         j$                  t         j$                        }|j'                         \  }}t        j                  |
       |dd d	z   }|dd d
z   }|j)                         rt+        j,                  |       t        j
                  j/                  |      rt        j
                  j/                  |      st1        d      t3        |      5 }|j5                         }ddd       t3        |      5 }|j5                         }ddd       |fS # 1 sw Y   1xY w# 1 sw Y   fS xY w)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_slicenaccess	temp_pathtmp_pathhandletmp_pdb_filewriterold_dircommandpouterrrsa_fileasa_filerfrsa_dataafasa_datas                        G/home/agent/.friday_env/lib/python3.12/site-packages/Bio/PDB/NACCESS.pyrun_naccessr<   !   s   
 I.H
 $++FAFLHHV77??8,Hl+U--/0L! iikGHHX %Gj)*g'D	A }}HCHHWCR 6)HCR 6)H
yy{cGGNN8$bggnnX.FEFF 
h "2<<>"	h "2<<>" X" "" Xs   5H6I6H?Ic                    i }| D ]  }|j                  d      s|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<    |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)r8   naccess_rel_dictlinerY   chain_idresseqicoderes_ids           r;   process_rsa_datarm   Z   s    ??5!AayHAwHa_FHE65)F$!&tBr{!3!&tBr{!3"'R"4"'R"4"'R"4"'R"4!&tBr{!3!&tBr{!3!&tBr{!3!&tBr{!34h/0(     c                     i }| D ]C  }|dd }|j                         }|d   }t        |dd       }|d   }d||f}|||f}	|dd }
|
||	<   E |S )	z5Process the .asa output file: atomic level SASA data.   rE      rF      rD   rP   rS   )r   re   )r8   naccess_atom_dictrh   full_atom_idatom_idchainidrj   rk   rl   idasas              r;   process_asa_datary   t   s     	$Br{$$&r(T"R[!Rvu%vw'2bk #"	$ rn   c                       e Zd ZdZ	 ddZy)NACCESSz0Define NACCESS class for residue properties map.Nc                    t        ||||      \  }}t        |      }i }g }	g }
|D ]  }|j                         }|D ]v  }|j                         }||f|v r^|||f   }|d   }||j                         k(  sJ ||||f<   |	j	                  ||f       |
j	                  ||f       ||j
                  d<   wx  t        j                  | ||	|
       y)Initialize the class.r*   r+   rY   EXP_NACCESSN)r<   rm   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chainri   resrl   itemrY   s                    r;   r   zNACCESS.__init__   s    )8^}
( (1 	E||~H f%5'6(:;D#J/H#s'88888<M8V"45!(((F);<!((#t5.2CHH]+	 	#++-	
rn   Nr*   z/tmp__name__
__module____qualname____doc__r    rn   r;   r{   r{      s    : MS
rn   r{   c                       e Zd ZdZ	 ddZy)NACCESS_atomicz4Define NACCESS atomic class for atom properties map.Nc                    t        ||||      \  }}t        |      | _        i }g }g }	|D ]  }
|
j                         }|
D ]  }|j                         }|D ]m  }|j                         }|||f}|| j                  v s'| j                  |   }|||<   |j	                  |       |	j	                  ||f       ||j
                  d<   o   t        j                  | |||	       y)r}   r~   r   N)r<   ry   rs   r   r   r   r   r   )r   r&   r'   r   r   r   r   r   r   r   r   ri   residuerl   atomru   full_idrx   s                     r;   r   zNACCESS_atomic.__init__   s    )8^}
( "2(!; 	7E||~H  
7 )# 7D"kkmG'9G$"8"88"44W=14g.%,,W5%,,dC[936		-07
7	7 	 ((-	
rn   r   r   r   rn   r;   r   r      s    > MS
rn   r   __main__)	PDBParserX   )NNr*   z/tmp/)r   r   r   r   r   r    Bio.PDB.AbstractPropertyMapr   r   Bio.PDB.PDBIOr   r<   rm   ry   r{   r   r   sysBio.PDB.PDBParserr   r2   get_structureargvsr&   neprintr   rn   r;   <module>r      s   
 
     ? B  RY6r4 
( 
D
, 
B z+A	SXXa[)AaDEsxx{#A #a rn   