a
    ŽÞdÑ  ã                   @   sj   d dl Z d dlZd dlZd dl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d„ZdS )é    N)Ú__version__c           
      C   sl   i }| D ]^}i  }||< dD ]H}i  }||< dD ]2}i  }||< t jjD ]}	t t|ƒd¡||	< qHq0qq|S )N©Ú5pÚ3p©ú+ú-r   )Ú	mapdamageÚseqÚHEADERÚdictÚfromkeysÚrange)
ÚrefÚlengthÚtabÚcontigÚ
tab_contigÚendÚtab_endÚstdÚtab_stdÚmut© r   ú/lib/python3.9/site-packages/mapdamage/tables.pyÚinitialize_mut   s    r   c                 C   s   t | tjj||dd d S )Né   )Úoffset)Ú_print_freq_tabler	   r
   r   )r   ÚoptÚoutr   r   r   Ú	print_mut   s    r!   c                 C   s²   t t| dƒƒt td|d ƒƒ t t| dƒƒt td|d ƒƒ dœ}i }| D ]^}i  }||< dD ]H}i  }||< dD ]2}	i  }
||	< tjjD ]}t || d¡|
|< qŽqvqbqN|S )Nr   r   )r   r   r   r   )Úlistr   r	   r
   ÚLETTERSr   r   )r   Zaroundr   Úkeysr   r   r   r   r   r   r   Zlettersr   r   r   Úinitialize_comp   s      ÿr%   c                 C   s   t jjd }t| |||ƒ d S )N)ÚTotal)r	   r
   r#   r   )Úcompr   r    Úcolumnsr   r   r   Ú
print_comp+   s    r)   c                  C   s    i } dD ]}t  t¡| |< q| S )Nr   )ÚcollectionsÚdefaultdictÚint)r   r   r   r   r   Úinitialize_lg0   s    r-   c              	   C   sŠ   |  dt ¡ |  d|j|jf ¡ |jdkr>|  d|j ¡ |  d¡ |  d¡ | D ].}| | D ] }|  d||| | | f ¡ qbqVd S )Nú)# table produced by mapDamage version %s
ú0# using mapped file %s and %s as reference file
r   z5# Quality filtering of bases with a Phred score < %d
z# Std: strand of reads
zStd	Length	Occurences 
z	%s	%d	%d
)Úwriter   Úfilenamer   Úminqual)r   r   r    r   Úir   r   r   Úprint_lg8   s    


r4   c              	   C   sÔ   d}dD ]²}t j | d | ¡s2td| ƒ  dS tt j | |¡ƒf}|D ]2}| ¡  d¡}|d dkrJ|t|d	 ƒ7 } qœqJtd
| ƒ W d  ƒ  dS W d  ƒ q1 s°0    Y  q|dk rÐtd| ƒ dS )z Returns true if the damage frequencies are too low to allow
  Bayesian estimation of DNA damages, i.e < 1% at first position.
  g        )z5pCtoT_freq.txtz3pGtoA_freq.txtú/z[Error: Required table has not been created ('%s'), bayesian computation cannot be performedTú	r   Ú1r   zUError: Could not find pos = 1 in table '%s', bayesian computation cannot be performedNg{®Gáz„?zeWarning: DNA damage levels are too low, the Bayesian computation should not be performed (%f < 0.01)
F)	ÚosÚpathÚexistsÚprintÚopenÚjoinÚstripÚsplitÚfloat)ZfolderÚtotalr1   ZhandleÚlineZfreqr   r   r   Ú'check_table_and_warn_if_dmg_freq_is_lowD   s(    ÿÿ2rC   c                    s(  |  dt ¡ |  d|j|jf ¡ |jdkr>|  d|j ¡ |  d¡ |  dd |¡ ¡ t|  ¡ ƒD ]º\}}t| ¡ ƒD ]¤\}}t| ¡ ƒD ]Ž\}	‰i ˆd< tˆ|d  ƒD ]l‰ t‡ ‡fd	d
„t	j
jD ƒƒˆd ˆ < |  d|||	ˆ | f ¡ |D ]}
|  dˆ|
 ˆ   ¡ qö|  d¡ q°qq|qhd S )Nr.   r/   r   z2# Bases with a Phred score < %d were filtered out
ze# Chr: reference from sam/bam header, End: from which termini of DNA sequences, Std: strand of reads
zChr	End	Std	Pos	%s
r6   r&   c                 3   s   | ]}ˆ| ˆ  V  qd S )Nr   )Ú.0Zletter©ÚindexZsubtabler   r   Ú	<genexpr>m   ó    z$_print_freq_table.<locals>.<genexpr>z%s	%s	%s	%dz	%dÚ
)r0   r   r1   r   r2   r=   ÚsortedÚitemsÚsumr	   r
   r#   )Útabler(   r   r    r   Z	referenceZendsr   ZstrandsZstrandÚbaser   rE   r   r   `   s     

$r   )r   )r8   r*   r	   Zmapdamage.versionr   r   r!   r%   r)   r-   r4   rC   r   r   r   r   r   Ú<module>   s   