a
    ŽÞdé  ã                   @   s\   d dl Z d dlZe dd¡ZdZdZed e Zdd„ Zd	d
„ Z	dd„ Z
dd„ Zdd„ ZdS )é    NZTGCAMRWSYKVHDBtgcamrwsykvhdbZACGTKYWSRMBDHVacgtkywsrmbdhv)ÚAÚCÚGÚT)zG>AzC>TzA>GzT>CzA>CzA>TzC>GzC>AzT>GzT>AzG>CzG>TzA>-zT>-zC>-zG>-z->Az->Tz->Cz->GÚS)ZTotalc	           
   
   C   sp   | j r
dnd}	t|ƒdkr,| d||f ¡ | d||d ||| j|	|f ¡ t|ƒdkrl| d||f ¡ d S )Nú-ú+r   z>%s
%s
z>%s:%d-%d
%s
>%s_%s
%s
é   )Ú
is_reverseÚlenÚwriteZqname)
ÚreadÚrefÚseqZrefseqÚstartÚendÚbeforeZafterZfoutÚstd© r   ú,lib/python3.9/site-packages/mapdamage/seq.pyÚwrite_fasta   s    "r   c                 C   s   |   t¡ddd… S )z$ return reverse complemented string Néÿÿÿÿ)Ú	translateÚTABLE)r   r   r   r   Úrevcomp   s    r   c                 C   s@   | j r
dnd}t|ƒt|ƒ }| js<|| | d || |< |S )zf record global length distribution
  don't record paired reads as they are normally not used for aDNA r   r   r	   )r
   ÚmaxÚminZ	is_paired)r   Z
coordinateZtabr   Úlengthr   r   r   Ú	record_lg   s
    r   c              
   C   s  dd„ }i }t | dƒ¦}|D ]}| d¡}t|ƒdkr\|dt|ƒ | |ƒ  W d  ƒ dS zt|d ƒ||d	 < W q tyª   |d
|d  | |ƒ Y  W d  ƒ dS 0 qW d  ƒ n1 sÂ0    Y  |s tj d| f ¡ tj d¡ tj d¡ dS |S )zG from a fasta index file, fai, return dictionary of references:lengths c                 S   s8   t j d|  ¡ t j d| ¡ t j dt|ƒ ¡ d S )Nz
Error: %s
z       Filename: %s
z       Line:     %s
)ÚsysÚstderrr   Úrepr)ÚmsgÚfilenameÚliner   r   r   Ú	print_err-   s    z#read_fasta_index.<locals>.print_errÚrú	é   zJLine in fasta index contains wrong number of fields, found %i, expected 5:Nr	   r   z=Column 2 in FASTA index did not contain a number, found '%s':z0Error: Index for %r does contain any sequences.
z3       Please ensure that FASTA file is valid, and
z,       re-index file using 'samtool faidx'.
)ÚopenÚsplitr   ÚintÚ
ValueErrorr   r    r   )r#   r%   ZfaiZhandler$   r   r   r   r   Úread_fasta_index+   s.    
ÿÿ6r-   c                 C   s8  | |krdS t j d¡ t| ƒt|ƒ@ }|s<t j d¡ dS g }t|ƒD ],}| | || krH| || | || f¡ qH|r t j d¡ |D ]}t j d| ¡ qŠt|ƒ| }|rÞt j d¡ |D ]}t j d||| f ¡ qÀt| ƒ| }|r t j d	¡ |D ]}t j d|| | f ¡ q t j d
¡ |p4| S )zŽCompares a FASTA and BAM sequence dictionary, and prints any differences.
  Returns true if all required sequences are found, false otherwise.Tz1Sequence dictionaries in FASTA/BAM files differ:
z%FATAL ERROR: No sequences in common!
Fz2FATAL ERROR: Length of required sequences differ:
z    - %s: %i bp vs %i bp
z6FATAL ERROR: Sequences missing from FASTA dictionary:
z    - %s = %i bp
z.WARNING: FASTA file contains extra sequences:
Ú
)r   r    r   ÚsetÚsortedÚappend)Z
fasta_dictZbam_dictÚcommonZ	differentÚkeyÚvaluesZbam_onlyZ
fasta_onlyr   r   r   Úcompare_sequence_dictsJ   s6    r5   )r   ÚstringÚstrÚ	maketransr   ZLETTERSZ	MUTATIONSZHEADERr   r   r   r-   r5   r   r   r   r   Ú<module>   s   ÿ