ó
QŽfXc           @   s²   d  d l  Z  d  d l Z d „  Z d „  Z d „  Z d d d „  ƒ  YZ d d d „  ƒ  YZ d	 d d
 „  ƒ  YZ d d d „  ƒ  YZ d d d „  ƒ  YZ	 d „  Z
 d d d „  ƒ  YZ d S(   iÿÿÿÿNc         C   s   |  t  | ƒ  | k S(   N(   t   len(   t   stringt   prefix(    (    sg   /home/psgendb/BIRCHDEV/pkg/SPAdes-3.13.0/linux-x86_64/share/spades/spades_pipeline/common/sam_parser.pyt   StringStartsFromPrefix
   s    c      	   C   s“   d d d d d d d d d	 g	 } t  ƒ  } t  ƒ  } d
 } xM |  D]E } | | k r{ | j | ƒ | j t | ƒ ƒ d
 } q@ | | 7} q@ W| | g S(   Nt   Mt   It   Dt   Nt   St   Ht   Pt   =t   Xt    (   t   listt   appendt   int(   t   cigart   delimst
   cigar_listt   num_listt   cur_numt   s(    (    sg   /home/psgendb/BIRCHDEV/pkg/SPAdes-3.13.0/linux-x86_64/share/spades/spades_pipeline/common/sam_parser.pyt   CIGAR_to_List   s    !			c         C   sJ   | d k s$ | d k s$ | d k r1 |  | 7}  n | d k rF | }  n  |  S(   NR   R   R   R   (    (   t	   align_lent
   cigar_chart	   cigar_lent   seq_len(    (    sg   /home/psgendb/BIRCHDEV/pkg/SPAdes-3.13.0/linux-x86_64/share/spades/spades_pipeline/common/sam_parser.pyt   UpdateAlignmentLength   s
    $	t
   SAM_Configc           B   sz   e  Z d  Z d Z d Z d Z d Z d Z d Z d Z	 d Z
 d Z d	 Z d
 Z d Z d Z d Z d Z d Z d Z d Z RS(   s   @SQs   @HDs   @RGs   @PGs   @COi   s   SN:i   i    i   i   i   i   i   i   i   i	   i
   (   t   __name__t
   __module__t	   sq_prefixt	   hd_prefixt	   rg_prefixt	   pg_prefixt	   oc_prefixt   sq_tname_indext   sq_tname_prefixt   num_mand_fieldst   query_indext
   flag_indext   target_indext	   pos_indext
   mapq_indext   cigar_indext   mate_target_indext   mate_pos_indext
   tlen_indext	   seq_indext
   qual_index(    (    (    sg   /home/psgendb/BIRCHDEV/pkg/SPAdes-3.13.0/linux-x86_64/share/spades/spades_pipeline/common/sam_parser.pyR   $   s&   t	   SAM_entryc           B   sk   e  Z d  Z d Z d  Z d Z d Z d  Z d  Z d Z	 d Z
 d  Z d  Z d Z e ƒ  Z d „  Z d „  Z RS(   R   i    c         C   ss   t  |  j ƒ } | d } | d } xI t d t | ƒ ƒ D]2 } t |  j | | | | t |  j ƒ ƒ |  _ q9 Wd  S(   Ni    i   (   R   R   t   rangeR    R   t   alent   seq(   t   selft   listst	   char_listt	   lens_listt   i(    (    sg   /home/psgendb/BIRCHDEV/pkg/SPAdes-3.13.0/linux-x86_64/share/spades/spades_pipeline/common/sam_parser.pyt   ComputeAlignmentLengthR   s
    

c         C   sA  | j  ƒ  } t | ƒ |  j j k  rD t j j d ƒ t j d ƒ n  | |  j j |  _	 t
 | |  j j ƒ |  _ | |  j j |  _ t
 | |  j j ƒ |  _ t
 | |  j j ƒ |  _ | |  j j |  _ | |  j j |  _ t
 | |  j j ƒ |  _ t
 | |  j j ƒ |  _ | |  j j |  _ | |  j j |  _ |  j ƒ  d  S(   Ns9   ERROR: Mandatory fields of alignment were not specified!
i   (    t   splitR    t
   sam_configR'   t   syst   stderrt   writet   exitR(   t
   query_nameR   R)   t   flagR*   t   target_nameR+   t   posR,   t   mapping_qualityR-   R   R.   t   mate_target_nameR/   t   mate_posR0   t   tlenR1   R6   R2   t   qualR<   (   R7   t   alignment_stringt   splits(    (    sg   /home/psgendb/BIRCHDEV/pkg/SPAdes-3.13.0/linux-x86_64/share/spades/spades_pipeline/common/sam_parser.pyt   __init__Y   s     (   R   R   RC   RD   RE   RF   t   mapping_qialityR   RH   RI   RJ   R6   RK   R5   R   R>   R<   RN   (    (    (    sg   /home/psgendb/BIRCHDEV/pkg/SPAdes-3.13.0/linux-x86_64/share/spades/spades_pipeline/common/sam_parser.pyR3   B   s   		t   SAMEntryInfoc           B   s   e  Z d  „  Z d „  Z RS(   c
   
      C   sš   | |  _  | |  _ | |  _ | |  _ | |  _ | d ?d @d k |  _ | |  _ | d ?d @d k |  _ | d ?d @d k |  _ | |  _	 | |  _
 |	 |  _ d  S(   Ni   i   i   (   t   tidt   tnameRF   R5   R6   t   is_unmappedt   namet   proper_alignmentt	   secondaryRD   RK   R   (
   R7   RQ   RR   RF   R5   R6   RD   RT   RK   R   (    (    sg   /home/psgendb/BIRCHDEV/pkg/SPAdes-3.13.0/linux-x86_64/share/spades/spades_pipeline/common/sam_parser.pyRN   t   s    								c         C   s’   t  j j |  j d t |  j ƒ d t |  j ƒ d t |  j ƒ d t |  j ƒ d t |  j	 ƒ d t |  j
 ƒ d t |  j ƒ d ƒ d  S(   Nt    s   
(   R?   t   stdoutRA   RT   t   strRQ   RF   R5   RS   RU   RD   RV   (   R7   (    (    sg   /home/psgendb/BIRCHDEV/pkg/SPAdes-3.13.0/linux-x86_64/share/spades/spades_pipeline/common/sam_parser.pyt   Printƒ   s    (   R   R   RN   RZ   (    (    (    sg   /home/psgendb/BIRCHDEV/pkg/SPAdes-3.13.0/linux-x86_64/share/spades/spades_pipeline/common/sam_parser.pyRP   s   s   	t   SamIterc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s   d |  _  | |  _ d  S(   Ni    (   t
   iter_indext   sam(   R7   R]   (    (    sg   /home/psgendb/BIRCHDEV/pkg/SPAdes-3.13.0/linux-x86_64/share/spades/spades_pipeline/common/sam_parser.pyRN   ‡   s    	c         C   s
   |  j  ƒ  S(   N(   t   next(   R7   (    (    sg   /home/psgendb/BIRCHDEV/pkg/SPAdes-3.13.0/linux-x86_64/share/spades/spades_pipeline/common/sam_parser.pyt   __next__Œ   s    c      
   C   sª   xš |  j  |  j j ƒ  k  rœ |  j j |  j  } |  j j | j } t | | j | j | j | j	 | j
 | j | j | j ƒ	 } |  j  d 7_  | j s | Sq Wt ƒ  ‚ d  S(   Ni   (   R\   R]   t
   NumEntriest   entriest
   target_mapRE   RP   RF   R5   R6   RD   RC   RK   R   RV   t   StopIteration(   R7   t   entryRQ   t   sam_iterator(    (    sg   /home/psgendb/BIRCHDEV/pkg/SPAdes-3.13.0/linux-x86_64/share/spades/spades_pipeline/common/sam_parser.pyR^      s    <	(   R   R   RN   R_   R^   (    (    (    sg   /home/psgendb/BIRCHDEV/pkg/SPAdes-3.13.0/linux-x86_64/share/spades/spades_pipeline/common/sam_parser.pyR[   †   s   		t   Samfilec           B   sÅ   e  Z e ƒ  Z e ƒ  Z e ƒ  Z e ƒ  Z e ƒ  Z e ƒ  Z e	 ƒ  Z
 e ƒ  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d	 „  Z d
 „  Z d „  Z d „  Z RS(   c         C   s   t  | |  j j ƒ S(   N(   R   R>   R    (   R7   t   line(    (    sg   /home/psgendb/BIRCHDEV/pkg/SPAdes-3.13.0/linux-x86_64/share/spades/spades_pipeline/common/sam_parser.pyt   IsLineReferenceDescr§   s    c         C   s   t  | |  j j ƒ S(   N(   R   R>   R!   (   R7   Rg   (    (    sg   /home/psgendb/BIRCHDEV/pkg/SPAdes-3.13.0/linux-x86_64/share/spades/spades_pipeline/common/sam_parser.pyt   IsLineHeaderDescrª   s    c         C   s   t  | |  j j ƒ S(   N(   R   R>   R"   (   R7   Rg   (    (    sg   /home/psgendb/BIRCHDEV/pkg/SPAdes-3.13.0/linux-x86_64/share/spades/spades_pipeline/common/sam_parser.pyt   IsLineReadGroupDescr­   s    c         C   s   t  | |  j j ƒ S(   N(   R   R>   R#   (   R7   Rg   (    (    sg   /home/psgendb/BIRCHDEV/pkg/SPAdes-3.13.0/linux-x86_64/share/spades/spades_pipeline/common/sam_parser.pyt   IsLineProgramDescr°   s    c         C   s   t  | |  j j ƒ S(   N(   R   R>   R$   (   R7   Rg   (    (    sg   /home/psgendb/BIRCHDEV/pkg/SPAdes-3.13.0/linux-x86_64/share/spades/spades_pipeline/common/sam_parser.pyt   IsLineComment³   s    c         C   s   t  | ƒ } | S(   N(   R3   (   R7   Rg   t	   sam_entry(    (    sg   /home/psgendb/BIRCHDEV/pkg/SPAdes-3.13.0/linux-x86_64/share/spades/spades_pipeline/common/sam_parser.pyt   GetSAMEntry¶   s    c         C   s`   |  j  j | ƒ | j ƒ  } | |  j j } | t |  j j ƒ } t |  j  ƒ d |  j | <d  S(   Ni   (   t   targetsR   R=   R>   R%   R    R&   Rb   (   R7   Rg   RM   RE   (    (    sg   /home/psgendb/BIRCHDEV/pkg/SPAdes-3.13.0/linux-x86_64/share/spades/spades_pipeline/common/sam_parser.pyt   UpdateTargetFieldsº   s
    c         C   sX   t  ƒ  |  _ t  ƒ  |  _ t  ƒ  |  _ t  ƒ  |  _ t  ƒ  |  _ t  ƒ  |  _ t ƒ  |  _ d  S(   N(	   R   Ro   t   headerst   queriest   programst   commentsRa   t   dictRb   (   R7   (    (    sg   /home/psgendb/BIRCHDEV/pkg/SPAdes-3.13.0/linux-x86_64/share/spades/spades_pipeline/common/sam_parser.pyt
   InitFieldsÅ   s    c         C   sî   t  j j d t t |  j ƒ ƒ d ƒ t  j j d t t |  j ƒ ƒ d ƒ t  j j d t t |  j ƒ ƒ d ƒ t  j j d t t |  j ƒ ƒ d ƒ t  j j d t t |  j	 ƒ ƒ d ƒ t  j j d t t |  j
 ƒ ƒ d ƒ d  S(   Ns   # targets:	s   
s   # headers:	s   # queries:	s   # programs:	s   # comments:	s   # entries:	(   R?   RX   RA   RY   R    Ro   Rq   Rr   Rs   Rt   Ra   (   R7   (    (    sg   /home/psgendb/BIRCHDEV/pkg/SPAdes-3.13.0/linux-x86_64/share/spades/spades_pipeline/common/sam_parser.pyt
   PrintStatsÎ   s    '''''c         C   sW  t  j j | ƒ s: t j j d | d ƒ t j d ƒ n  |  j ƒ  t | d ƒ } | j	 ƒ  } d |  j
 d <xÚ | D]Ò } | j ƒ  } |  j | ƒ r¤ |  j | ƒ qs |  j | ƒ rÆ |  j j | ƒ qs |  j | ƒ rè |  j j | ƒ qs |  j | ƒ r
|  j j | ƒ qs |  j | ƒ r,|  j j | ƒ qs |  j j |  j | ƒ ƒ qs W| j ƒ  d  S(   Ns   ERROR: SAM file s    was not found
i   t   riÿÿÿÿt   *(   t   ost   patht   existsR?   R@   RA   RB   Rv   t   opent	   readlinesRb   t   stripRh   Rp   Ri   Rq   R   Rj   Rr   Rk   Rs   Rl   Rt   Ra   Rn   t   close(   R7   t   filenamet   fhandlert   linesRg   (    (    sg   /home/psgendb/BIRCHDEV/pkg/SPAdes-3.13.0/linux-x86_64/share/spades/spades_pipeline/common/sam_parser.pyRN   Ö   s*    
c         C   s   t  |  j ƒ S(   N(   R    Ra   (   R7   (    (    sg   /home/psgendb/BIRCHDEV/pkg/SPAdes-3.13.0/linux-x86_64/share/spades/spades_pipeline/common/sam_parser.pyR`   ø   s    c         C   s
   t  |  ƒ S(   N(   R[   (   R7   (    (    sg   /home/psgendb/BIRCHDEV/pkg/SPAdes-3.13.0/linux-x86_64/share/spades/spades_pipeline/common/sam_parser.pyt   __iter__ü   s    c         C   s   |  j  | S(   N(   Rb   (   R7   RR   (    (    sg   /home/psgendb/BIRCHDEV/pkg/SPAdes-3.13.0/linux-x86_64/share/spades/spades_pipeline/common/sam_parser.pyt   gettidÿ   s    (   R   R   R   Rq   Rr   Ro   Rs   Rt   Ra   Ru   Rb   R   R>   Rh   Ri   Rj   Rk   Rl   Rn   Rp   Rv   Rw   RN   R`   R„   R…   (    (    (    sg   /home/psgendb/BIRCHDEV/pkg/SPAdes-3.13.0/linux-x86_64/share/spades/spades_pipeline/common/sam_parser.pyRf   ›   s*   																			"		c         c   s+   x$ |  D] } x | D] } | Vq Wq Wd  S(   N(    (   t	   iteratorst   itt   element(    (    sg   /home/psgendb/BIRCHDEV/pkg/SPAdes-3.13.0/linux-x86_64/share/spades/spades_pipeline/common/sam_parser.pyt
   chain_iter  s    t   SamChainc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s   | |  _  d  S(   N(   t	   sam_files(   R7   R‹   (    (    sg   /home/psgendb/BIRCHDEV/pkg/SPAdes-3.13.0/linux-x86_64/share/spades/spades_pipeline/common/sam_parser.pyRN     s    c         C   s   t  |  j ƒ S(   N(   R‰   R‹   (   R7   (    (    sg   /home/psgendb/BIRCHDEV/pkg/SPAdes-3.13.0/linux-x86_64/share/spades/spades_pipeline/common/sam_parser.pyR„     s    c         C   s:   x3 |  j  D]( } | j | ƒ d  k r
 | j | ƒ Sq
 Wd  S(   N(   R‹   R…   t   None(   R7   RR   R]   (    (    sg   /home/psgendb/BIRCHDEV/pkg/SPAdes-3.13.0/linux-x86_64/share/spades/spades_pipeline/common/sam_parser.pyR…     s    (   R   R   RN   R„   R…   (    (    (    sg   /home/psgendb/BIRCHDEV/pkg/SPAdes-3.13.0/linux-x86_64/share/spades/spades_pipeline/common/sam_parser.pyRŠ     s   		(    (    (    (    (    (    (   Rz   R?   R   R   R   R   R3   RP   R[   Rf   R‰   RŠ   (    (    (    sg   /home/psgendb/BIRCHDEV/pkg/SPAdes-3.13.0/linux-x86_64/share/spades/spades_pipeline/common/sam_parser.pyt   <module>   s   				1g	