3
b                  @   s   d dl Z d dlZd dlZd dlmZmZ d dlmZ d dlm	Z	 e	ej
ZejdejZejdejZejdejZejdejZdd	 Zd
d Zdd Zdd Zdd ZG dd deZG dd dZdS )    N)qutilsqconfig)open_gzipsafe)
get_loggerzC(?P<seqname>\S+)\s+(?P<gene_id>.+)\s+(?P<start>\d+)\s+(?P<end>\d+)$z(?P<seqname>\S+)\s+\S+\s+(?P<feature>\S+)\s+(?P<start>\d+)\s+(?P<end>\d+)\s+\S+\s+(?P<strand>[\+\-\.]?)\s+\S+\s+(?P<attributes>.+)$z%(?P<number>\d+)\.\s*(?P<name>\S+)\s*$c             C   s>  |  st jj|  rg S t| d}g }|j j }x"|dksF|jdrT|j j }q4W |jd | jdst| jdr~t	|}nt
j|stj|rt|}ntj|rt||}ntj|ryt|}W nD tk
r   tj \}}}tjd|  tj| d  g }Y nX n tjd	| d
  tj| d  |j  |S )Nr #r   bedzbed.gzzParsing exception z was skippedzIncorrect format of zA's file! GFF, NCBI and the plain TXT format accepted. See manual.)ospathexistsr   readlinerstrip
startswithseekendswith	parse_bedtxt_pattern_gimatchtxt_pattern	parse_txtgff_pattern	parse_gffncbi_start_pattern
parse_ncbiParseExceptionsysexc_infologgerwarningclose)fpathfeatureZ
genes_filegeneslineexc_type	exc_value_ r(   A/home/psgendb/BIRCHDEV/pkg/quast-5.2.0/quast_libs/genes_parser.pyget_genes_from_file   s4    




r*   c             C   s^  t jdt j}t jdt j}t jdt j}g }| j }x |dkrXx,|j dks\|jdrp|dkrfP | j }qFW tj|j }x|stj|j }qW tt	|j
dtj|j
dd}g }| j }x2|dkrtj|j  r|j|j  | j }qW x:|D ]0}	|	jd	r2t j||	}|r2|j
d
|_|	jdrt j||	}|r|j
d|_t	|j
d|_t	|j
d|_dt|j }
|jr|jj|
r|jt|
d  |_|jjd n"tjdt|j d |j d  |	jdrt j||	}|r|j
d|_n"tjdt|j d |j d  qW |jd k	r:|jd k	r:|j| q:W |S )NzMAnnotation: (?P<seqname>.+) \((?P<start>\d+)\.\.(?P<end>\d+)(, complement)?\)z Chromosome: (?P<chromosome>\S+);zID: (?P<id>\d+)r   z##numbername)r+   r,   zChromosome:
chromosomezAnnotation:seqnamestartendZ
Chromosome z ,zWrong NCBI annotation for gene z. z. Skipping this gene.zID:idz.Can't parse gene's ID in NCBI format. Gene is z. Skipping it.zChromosome )recompileIr   r   r   r   r   Geneintgroupr   correct_nameappendr-   r.   r/   r0   strlenlstripr   r   r+   r,   r2   )Z	ncbi_fileZannotation_patternZchromosome_patternZ
id_patternr#   r$   mgeneZthe_rest_linesZ	info_lineZto_trimr(   r(   r)   r   L   sX    "(r   c             C   s   g }d}x| D ]}|j  }tj|p,tj|}|rt|tj|jdd}|d7 }t|jd}t|jd}t	|||_
t|||_|jd|_|j| qW |S )Nr   r.   )r+   r.      r/   r0   Zgene_id)r   r   r   r   r6   r   r9   r8   r7   minr/   maxr0   r2   r:   )filer#   r+   r$   r>   r?   ser(   r(   r)   r      s     
r   c             C   s  g }d}x| D ]}t j|j }|oF|tjksH|jdj |j krttj	|jdt
|jdt
|jdd}|jdjd}xt|D ]l}|r|d	krd
|kr|jd
d }	|t|	d d  }
|	j dkr|
|_|	j dkr|
|_|
|j|	j < qW ||_|d7 }|j| qW |S )Nr   r"   r.   r/   r0   )r.   r/   r0   
attributes;r   =r@   r2   r,   )r   r   r   r   ALL_FEATURES_TYPEr8   lowerr6   r   r9   r7   splitr<   r2   r,   rF   r+   r:   )rC   r"   r#   r+   r$   r>   r?   rF   attrkeyvalr(   r(   r)   r      s,    $
r   c       	      C   s   g }d}x| D ]}|j  j }|r|d }t|d }t|d }t|tj|d}t|||_t|||_	t
|dkr|d nd |_||k rd|_nd|_|d7 }|j| qW |S )Nr   r@      )r+   r.      +-)r   rK   r7   r6   r   r9   rA   r/   rB   r0   r<   r2   strandr:   )	rC   r#   r+   r$   fsr.   rD   rE   r?   r(   r(   r)   r      s$    
r   c                   s$   e Zd Z fddZdd Z  ZS )r   c                s   t t| j|| || _d S )N)superr   __init__value)selfrW   argskwargs)	__class__r(   r)   rV      s    zParseException.__init__c             C   s
   t | jS )N)reprrW   )rX   r(   r(   r)   __str__   s    zParseException.__str__)__name__
__module____qualname__rV   r]   __classcell__r(   r(   )r[   r)   r      s   r   c               @   s   e Zd ZdddZdS )r6   r   Nc             C   sT   || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	|| _
t | _|| _d S )N)r2   r.   r/   r0   r+   r,   r-   contigrS   seqproteindictrF   is_full)rX   r2   r.   r/   r0   r+   r,   r-   rb   rS   rc   rd   rf   r(   r(   r)   rV      s    zGene.__init__)r   r   NNNr   NNNNNN)r^   r_   r`   rV   r(   r(   r(   r)   r6      s    r6   )r
   r3   r   
quast_libsr   r   Zquast_libs.ca_utils.miscr   quast_libs.logr   LOGGER_DEFAULT_NAMEr   r4   r5   r   r   r   r   r*   r   r   r   r   	Exceptionr   r6   r(   r(   r(   r)   <module>   s"   
1C