o
    Rŀg%                     @   sJ   d Z ddlmZ ddlmZ ddlmZ ddlmZ G dd dejZdS )	zBio.Align support for hhr files generated by HHsearch or HHblits in HH-suite.

You are expected to use this module via the Bio.Align functions.
    )	Alignment)
interfaces)Seq)	SeqRecordc                   @   s,   e Zd ZdZdZdd Zdd Zdd Zd	S )
AlignmentIteratora  Alignment iterator for hhr output files generated by HHsearch or HHblits.

    HHsearch and HHblits are part of the HH-suite of programs for Hidden Markov
    Models. An output files in the hhr format contains multiple pairwise
    alignments for a single query sequence.
    hhrc                 C   st  i }|D ]j}|  }|dkr n_|d d\}}|dkr || _q|dkr+t|||< q|dkrA|d\}}t|t|f||< q|dv rLt|||< q|dkrWt|||< q|d	kr`||d
< q|dkri||d< qtd| || _zt|}W n ty   tdd w | g dksJ d}|D ]}|  dkr n|d7 }|d d\}	}
t|	|ksJ q|| _	d| _
d S )N    QueryMatch_columns
No_of_seqsz out of )NeffTemplate_NeffSearched_HMMsDateRundateCommandzCommand linezUnknown key '%s'zTruncated file.)NoHitProbzE-valuezP-valueScoreSSColsr
   HMMTemplater   r   )stripsplit
query_nameintfloat
ValueErrormetadatanextStopIteration_length_counter)selfstreamr!   linekeyvaluevalue1value2counterword_ r0   A/var/www/html/myenv/lib/python3.10/site-packages/Bio/Align/hhr.py_read_header   sL   



zAlignmentIterator._read_headerc                    s   	
fdd}d 	dddd ddddddd}|D ]}|  }|s;q1|dry|dd  d d\t|}| }i  |D ]}|d\}}|dkrfqX|dkro| d	}t|}| |< qXq1|d
krz	t| W td ty   Y q1w |dr| 7 q1|drԈ
j}	
 jd7  _| \}}t	|
jksJ 
j
j
krtd
j

jf |	dkr|   S q1|dr|t| d  }|7 q1|dr|d d\}}|7 q1|dr0| \}
}}}}}t	|d }t	|}|dsJ |ds#J t	|dd }|7 q1|dr| \}
}}}}}
j|sIJ t	|d }t	|}|ds[J |dscJ t	|dd 
jd ksuJ 	d u r||	|7 q1|dr|d d\}}|7 q1|dr|d d\}}|7 q1|dr| \}
}}}}}t	|d }t	|}|dsJ |dsJ t	|dd }|7 q1|dr%| \}}}}}}|dksJ |t	|d }t	|}|ds	J |dsJ t	|dd d u r ||7 q1td|d d  | }
j
}
j}	|d u rJ|	|krJtd||	f |S )Nc                     s  t } t | ksJ | dkrd S   g}t|\}}|\}}|dd d f  7  < |dd d f  	7  < 	|i}t|d}t|
jd}|i}t|d}	d}
t|	|
d}d  d  d	}|d
d |jd< |d
d |jd< |d
d |jd< |d	dd t
D  }d	  d	  d	}r|d
d |jd< r|d
d |jd< ||g}t||d} |_i |_|jd< ||jd< |S )Nr   r	   )length)id)hmm_namehmm_description)r4   annotations z%-s-r   	Consensusss_predss_dsspc                 s   s     | ]\}}|d kr|V  qdS )r:   Nr0   ).0tcr0   r0   r1   	<genexpr>m   s    zSAlignmentIterator._read_next_alignment.<locals>.create_alignment.<locals>.<genexpr>)coordinateszcolumn score
Confidence)lenencoder   parse_printed_alignmentr   r   r   replaceletter_annotationsjoinzipr7   column_annotations)nlinesseq_datarB   target_seq_dataquery_seq_datasequence	query_seqquery
target_seqtarget_annotationstargetfmtalignment_confidencerecords	alignmentalignment_annotationscolumn_score
confidencer6   r5   query_consensusquery_lengthquery_sequencequery_ss_predquery_startr&   target_consensustarget_lengthtarget_nametarget_sequencetarget_ss_dssptarget_ss_predtarget_startr0   r1   create_alignmentR   sN   


z@AlignmentIterator._read_next_alignment.<locals>.create_alignmentr   >r	   =Aligned_cols
Identities%zDone!z2Found additional data after 'Done!'; corrupt file?r8   zNo z Expected %d alignments, found %dr   rC   z
Q ss_pred zQ Consensus ()zQ r   z
T ss_pred z
T ss_dssp zT Consensus zT TzFailed to parse line '%s...'   )rstrip
startswithr   r"   r   r#   r    r   r%   r   r$   rD   rsplitendswithr   r!   )r&   r'   rk   	consensusr(   wordsr.   r)   r*   r-   key1key2startendtotalrQ   namerZ   r3   r0   r[   r1   _read_next_alignmentQ   s   .,




















z&AlignmentIterator._read_next_alignmentc                 C   s   | j S )N)r$   )r&   r0   r0   r1   __len__   s   zAlignmentIterator.__len__N)__name__
__module____qualname____doc__rW   r2   r   r   r0   r0   r0   r1   r      s    5 r   N)	r   	Bio.Alignr   r   Bio.Seqr   Bio.SeqRecordr   r   r0   r0   r0   r1   <module>   s   