
    Ri6                        d Z ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm	Z	 dd	lm
Z
 d
Z G d de
      Z G d de      Z G d de      Z G d de	      Z G d de	      Z G d d      Z G d de      Zedk(  rddlmZ  e        yy)z9Bio.SearchIO parser for HMMER domain table output format.    )chain)Hit)HSP)HSPFragment)QueryResult   )Hmmer3TabIndexer)Hmmer3TabParser)Hmmer3DomtabHmmhitParserHmmer3DomtabHmmqueryParserHmmer3DomtabHmmhitIndexerHmmer3DomtabHmmqueryIndexerHmmer3DomtabHmmhitWriterHmmer3DomtabHmmqueryWriterc                       e Zd ZdZd Zd Zy)Hmmer3DomtabParserzBase hmmer3-domtab iterator.c                    | j                   sJ | j                   j                         j                  d      D cg c]  }|s|	 }}t        |      dkD  rdj	                  |dd       |d<   n/t        |      dk  r!|j                  d       t        |      dk(  sJ i }|d   |d<   |d   |d	<   t        |d
         |d<   i }|d   |d<   |d   |d	<   t        |d         |d<   t        |d         |d<   t        |d         |d<   t        |d         |d<   |d   |d<   i }t        |d         |d<   t        |d         |d<   t        |d         |d<   t        |d         |d<   t        |d         |d<   t        |d         dz
  |d<   t        |d         |d <   t        |d!         |d"<   i }dx|d#<   |d$<   t        |d%         dz
  |d&<   t        |d'         |d(<   t        |d)         dz
  |d*<   t        |d+         |d,<   d-|d.<   | j                  s"|d,   |d(   c|d(<   |d,<   |d*   |d&   c|d&<   |d*<   ||||d/S c c}w )0z3Return a dictionary of parsed row values (PRIVATE).       N    id   	accession   seq_lenr   r         evalue   bitscore   biasdescription	   domain_index   evalue_cond            	env_start   env_end   acc_avg
hit_strandquery_strand   	hit_start   hit_end   query_start   	query_endproteinmolecule_type)qresulthithspfrag)	linestripsplitlenjoinappendintfloat
hmm_as_hit)selfxcolsr?   r@   rA   rB   s          Z/home/agent/.friday_env/lib/python3.12/site-packages/Bio/SearchIO/HmmerIO/hmmer3_domtab.py
_parse_rowzHmmer3DomtabParser._parse_row   s   yyy99??,2237=a1== t9r>xxRS	*DHY^KKOt9?"? Q#Aw a\	GD	7KT!WId1gHQ.JDGnF!"XM!$q'lN"48_Md2hHR/JDHoFtBx=1,KT"XItBxI455\T.1RMA-[d2h-Y!$r(ma/]RM[ )_ 26{2CT)_.DOT+.]#[! 3DtM2
 #3sDIIe >s   H;H;c              #     K   d}d}d}d}d}d}d}d}d}	d}
d\  }}g g }}d}d}	 ||}|}	|}
| j                   r<| j                   j                  d      s!| j                         }|d	   d
   }|d   d
   }n|}d\  }}|	|k7  r|}n|}|
|k7  s||k(  r|}n|}|t        |
|	      }|d   j	                         D ]  \  }}t        |||        t        |g      }|d   j	                         D ]  \  }}t        |||        |j                  |       ||k(  rFt        |      }|d   j	                         D ]  \  }}t        |||        |j                  |       g }||k(  s||k(  r@t        ||	      }|d	   j	                         D ]  \  }}t        |||        | ||k(  ryg }| j                  j                         | _         w)z%Return QueryResult objects (PRIVATE).r   r   r   r   r   N)NN#r?   r   r@   rB   rA   )rC   
startswithrP   r   itemssetattrr   rH   r   r   handlereadline)rL   	state_EOFstate_QRES_NEWstate_QRES_SAMEstate_HIT_NEWstate_HIT_SAME
qres_state	hit_state
file_stateprev_qidprev_hidcurprevhit_listhsp_listcur_qidcur_hidrB   attrvaluerA   r@   r?   s                          rO   _parse_qresultz!Hmmer3DomtabParser._parse_qresultV   s4     	
	
	T(""yy!5!5c!:oo'i..e*T*&
#-  7"+
,
7"jN&B)	*	 "8X6#'<#5#5#7 /KD%D$./4&k#';#4#4#6 .KD%Cu-.$ -h-C'+E{'8'8': 2eT512OOC(!H /:3J)(H=G'+I'<'<'> 6eu56!M!Y.!H,,.DIu s   GGN)__name__
__module____qualname____doc__rP   rj        rO   r   r      s    &5JnN/rp   r   c                       e Zd ZdZdZy)r   zHMMER domain table parser using hit coordinates.

    Parser for the HMMER domain table format that assumes HMM profile
    coordinates are hit coordinates.
    TNrk   rl   rm   rn   rK   ro   rp   rO   r   r      s     Jrp   r   c                       e Zd ZdZdZy)r   zHMMER domain table parser using query coordinates.

    Parser for the HMMER domain table format that assumes HMM profile
    coordinates are query coordinates.
    FNrr   ro   rp   rO   r   r           Jrp   r   c                       e Zd ZdZeZdZy)r   zHMMER domain table indexer using hit coordinates.

    Indexer class for HMMER domain table output that assumes HMM profile
    coordinates are hit coordinates.
    r   N)rk   rl   rm   rn   r   _parser_query_id_idxro   rp   rO   r   r      s     'GMrp   r   c                       e Zd ZdZeZdZy)r   zHMMER domain table indexer using query coordinates.

    Indexer class for HMMER domain table output that assumes HMM profile
    coordinates are query coordinates.
    r   N)rk   rl   rm   rn   r   rv   rw   ro   rp   rO   r   r      s     )GMrp   r   c                   .    e Zd ZdZdZd Zd ZddZd Zy)	r   zHMMER domain table writer using hit coordinates.

    Writer for hmmer3-domtab output format which writes hit coordinates
    as HMM profile coordinates.
    Tc                     || _         y)zInitialize the class.N)rV   )rL   rV   s     rO   __init__z!Hmmer3DomtabHmmhitWriter.__init__   s	    rp   c                    | j                   }d\  }}}}	 t        |      }|j                  | j                  |             t	        |g|      D ]b  }|s|j                  | j                  |             |dz  }|t        |      z  }|t        d |D              z  }|t        d |D              z  }d 	 ||||fS # t        $ r" |j                  | j                                Y 0w xY w)zsWrite to the handle.

        Returns a tuple of how many QueryResult, Hit, and HSP objects were written.

        )r   r   r   r   r   c              3   2   K   | ]  }t        |        y wN)rF   .0r@   s     rO   	<genexpr>z6Hmmer3DomtabHmmhitWriter.write_file.<locals>.<genexpr>   s     &CCs3x&Cs   c              3   F   K   | ]  }t        |j                          y wr~   )rF   	fragmentsr   s     rO   r   z6Hmmer3DomtabHmmhitWriter.write_file.<locals>.<genexpr>   s     'NsCMM(:'Ns   !)	rV   nextwrite_build_headerr   
_build_rowrF   sumStopIteration)	rL   qresultsrV   qresult_counterhit_counterhsp_counterfrag_counterfirst_qresultr?   s	            rO   
write_filez#Hmmer3DomtabHmmhitWriter.write_file   s     BL?k<	O NM
 LL++M:; -(; OLL!9:#q(O3w</K3&C7&C#CCK C'Ng'N$NNLO [,FF  	/LL++-.	/s   B9 9(C$#C$Nc                    |rgd}t        dt        |d   j                              }	 t        dt        |j                              }t        dt        |d   j                              }nd\  }}}}d||z   dz
  dz   |z   |z   d	d
ddddfz  }|d|dz
  d|dd|d|dddddddddddddddddddfz  z  }|d |dz
  d!|d"d#|d$|d"d#d%d&d#d'd'd%d%d&d#d#d#d#d#d#d#d(d)fz  z  }|S # t        $ r d\  }}Y yw xY w)*zBReturn the header string of a domain HMMER table output (PRIVATE).r/   r   
   r   r   )r/   r/   r   r   z#%*s %22s %40s %11s %11s %11s
r   r5   r   z--- full sequence ---z(-------------- this domain -------------z	hmm coordz	ali coordz	env coordz`#%-*s %-*s %5s %-*s %-*s %5s %9s %6s %5s %3s %3s %9s %9s %6s %5s %5s %5s %5s %5s %5s %5s %4s %s
z target namer   tlenz
query nameqlenzE-valuescorer$   rR   ofzc-Evaluezi-Evaluefromtoacczdescription of targetz\#%*s %*s %5s %*s %*s %5s %9s %6s %5s %3s %3s %9s %9s %6s %5s %5s %5s %5s %5s %5s %5s %4s %s
z-------------------z
----------z-----z--------------------z	---------z------z---z----z---------------------)maxrF   r   r   AttributeError)rL   r   qnamewtnamewqaccwtaccwheaders          rO   r   z&Hmmer3DomtabHmmhitWriter._build_header   s    FSq!1!4!456F&BM$5$5 67BM!$4$8$8 9: ,:(FFE5 4f_q(2-5=rCZ? +// 	 Bqj$e[&&"E;	7c4Z&dFD&$-// 	0 	 >qj+UL'4e\{Hgue!;'7Gw&-// 	0 ; " &%u&s   AC C+*C+c                 p   d}t        dt        |j                              }t        dt        |d   j                              }	 t        dt        |j                              }t        dt        |d   j                              }|j                  }|D ]u  }	 |j                  }	|j
                  D ]U  }
| j                  r7|
j                  }|
j                  dz   }|
j                  }|
j                  dz   }n6|
j                  }|
j                  dz   }|
j                  }|
j                  dz   }|d||j                  ||	|j                  ||j                  |||j                  |j                  |j                  |j                  |
j                  t        |j
                        |
j                   |
j                  |
j                  |
j                  |||||
j"                  dz   |
j$                  |
j&                  |j(                  fz  z  }X x |S # t        $ r d\  }}d}Y w xY w# t        $ r d}	Y w xY w)	zGReturn a string or one row or more of the QueryResult object (PRIVATE).r   r/   r   r   r   -r   zq%-*s %-*s %5d %-*s %-*s %5d %9.2g %6.1f %5.1f %3d %3d %9.2g %9.2g %6.1f %5.1f %5d %5d %5ld %5ld %5d %5d %4.2f %s
)r   rF   r   r   r   hspsrK   r8   r6   r<   r:   r   r    r"   r$   r'   r)   r.   r0   r2   r%   )rL   r?   rowsr   r   r   r   qresult_accr@   hit_accrA   hmm_tohmm_fromali_toali_froms                  rO   r   z#Hmmer3DomtabHmmhitWriter._build_row#  s    RWZZ)RWQZ]]+,	C 1 123EC
 4 456E!++K
  4	C-- xx -?? [[F"}}q0H ]]F"2H ]]F"2H [[F"}}q0H* 

#

((CHH

  )7!-4	l u  	!LE5K	 " s%   AH H&H#"H#&H54H5r~   )	rk   rl   rm   rn   rK   r{   r   r   r   ro   rp   rO   r   r      s%     JG6(TFrp   r   c                       e Zd ZdZdZy)r   zHMMER domain table writer using query coordinates.

    Writer for hmmer3-domtab output format which writes query coordinates
    as HMM profile coordinates.
    FNrr   ro   rp   rO   r   r   l  rt   rp   r   __main__)run_doctestN)rn   	itertoolsr   Bio.SearchIO._modelr   r   r   r   
hmmer3_tabr	   r
   __all__r   r   r   r   r   r   r   rk   
Bio._utilsr   ro   rp   rO   <module>r      s    @  # # + + ( 'H/ H/V1 !3  0 "2 X Xv!9  z&M rp   