
:>"^Ú  ã               @   sN   d  Z  Gd d „  d e ƒ Z Gd d „  d e ƒ Z d d „  Z d d „  Z d	 S)
aÍ  Code to parse output from the EMBOSS eprimer3 program.

As elsewhere in Biopython there are two input functions, read and parse,
for single record output and multi-record output. For primer3, a single
record object is created for each target sequence and may contain
multiple primers.

i.e. If you ran eprimer3 with a single target sequence, use the read
function. If you ran eprimer3 with multiple targets, use the parse
function to iterate over the retsults.
c               @   s"   e  Z d  Z d Z d d „  Z d S)ÚRecordzîRepresent information from a primer3 run finding primers.

    Members:

        - primers  - list of Primer objects describing primer pairs for
          this target sequence.
        - comments - the comment line(s) for the record

    c             C   s   d |  _  g  |  _ d S)zInitialize the class.Ú N)ÚcommentsÚprimers)Úself© r   ú7/tmp/pip-build-ww9dw3qa/biopython/Bio/Emboss/Primer3.pyÚ__init__%   s    	zRecord.__init__N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r      s   	r   c               @   s.   e  Z d  Z d Z d d „  Z d d „  Z d S)ÚPrimersaý  A primer set designed by Primer3.

    Members:

        - size - length of product, note you can use len(primer) as an
          alternative to primer.size

        - forward_seq
        - forward_start
        - forward_length
        - forward_tm
        - forward_gc

        - reverse_seq
        - reverse_start
        - reverse_length
        - reverse_tm
        - reverse_gc

        - internal_seq
        - internal_start
        - internal_length
        - internal_tm
        - internal_gc

    c             C   s”   d |  _  d |  _ d |  _ d |  _ d |  _ d |  _ d |  _ d |  _ d |  _ d |  _	 d |  _
 d |  _ d |  _ d |  _ d |  _ d |  _ d S)zInitialize the class.é    r   g        N)ÚsizeÚforward_seqÚforward_startÚforward_lengthÚ
forward_tmÚ
forward_gcÚreverse_seqÚreverse_startÚreverse_lengthÚ
reverse_tmÚ
reverse_gcÚinternal_seqÚinternal_startÚinternal_lengthÚinternal_tmÚinternal_gc)r   r   r   r   r   G   s     															zPrimers.__init__c             C   s   |  j  S)z1Length of the primer product (i.e. product size).)r   )r   r   r   r   Ú__len__Z   s    zPrimers.__len__N)r	   r
   r   r   r   r   r   r   r   r   r   +   s   r   c             c   sk  x |  j  ƒ  } | j ƒ  r Pq Wd } d } x-| j d ƒ sM | j d ƒ r | d k	 r^ | Vt ƒ  } | j | 7_ d } n³| j d ƒ r² | j ƒ  d k r2| j | 7_ n€| j ƒ  sÁ nq| d d … d k rt ƒ  } t | d d … ƒ | _ | j j	 | ƒ n&| d d … d	 k r¹| j
 ƒ  } | sD| j d
 k r]t ƒ  } | j j	 | ƒ t | d ƒ | _ t | d ƒ | _ t | d ƒ | _ t | d ƒ | _ | d | _ ny| d d … d k rf| j
 ƒ  } | sñ| j d
 k r
t ƒ  } | j j	 | ƒ t | d ƒ | _ t | d ƒ | _ t | d ƒ | _ t | d ƒ | _ | d | _ nÌ | d d … d k r2| j
 ƒ  } | sž| j d
 k r·t ƒ  } | j j	 | ƒ t | d ƒ | _ t | d ƒ | _ t | d ƒ | _ t | d ƒ | _ y | d | _ Wn t k
 r1d | _ Yn Xy t |  ƒ } Wq/ t k
 rWPYq/ Xq/ W| rg| Vd S)zAIterate over primer3 output as Bio.Emboss.Primer3.Record objects.Nz
# EPRIMER3z	# PRIMER3ú#z9#                      Start  Len   Tm     GC%   Sequenceé   é   zPRODUCT SIZE: zFORWARD PRIMERr   é   é   é   é   zREVERSE PRIMERzINTERNAL OLIGOr   )ÚreadlineÚstripÚ
startswithr   r   r   Úintr   r   ÚappendÚsplitr   r   Úfloatr   r   r   r   r   r   r   r   r   r   r   r   r   Ú
IndexErrorÚnextÚStopIteration)ÚhandleÚlineÚrecordZprimerÚwordsr   r   r   Úparse_   sz    						
r5   c             C   s„   t  |  ƒ } y t | ƒ } Wn t k
 r< t d ƒ ‚ Yn Xy t | ƒ } Wn t k
 rg d } Yn X| d k	 r€ t d ƒ ‚ | S)zÌParse primer3 output into a Bio.Emboss.Primer3.Record object.

    This is for when there is one and only one target sequence. If
    designing primers for multiple sequences, use the parse function.
    zNo records found in handleNz$More than one record found in handle)r5   r/   r0   Ú
ValueError)r1   ÚiteratorÚfirstÚsecondr   r   r   Úread¤   s    r:   N)r   Úobjectr   r   r5   r:   r   r   r   r   Ú<module>   s   4E