
nQc           @   s   d  Z  d d l Z d d l m Z m Z d d l m Z m Z m Z d d l	 m
 Z
 m Z d Z d   Z d e f d	     YZ d
 e f d     YZ d e f d     YZ d e f d     YZ d S(   sI   Model GFF3 records generically, and genes, mRNAs, and exons specifically.iN(   t   StringTypest   DictionaryType(   t	   SeqRecordt   Seqt   Alphabet(   t
   SeqFeaturet   FeatureLocationic   c         C   s$   | |  k  r t  S| | k r  t  St S(   N(   t   Falset   True(   t   start0t   end0t   start1t   end1(    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   intervals_overlap   s
    t
   GFF3Recordc           B   s  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 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' d&   Z( d'   Z) d(   Z* d)   Z+ d*   Z, d+   Z- d,   Z. d-   Z/ d.   Z0 d/   Z1 d0   Z2 d1   Z3 RS(2   s   Generic GFF3 recordc
   
      C   se   | |  _  | |  _ | |  _ t |  |  _ t |  |  _ | |  _ | |  _ | |  _ |  j	 |	  d  S(   N(
   t   _seqIDt   _sourcet   _typet   intt   _startt   _endt   _scoret   _strandt   _phaset   set_attributes(
   t   selft   seqIDt   sourcet   so_typet   startt   endt   scoret   strandt   phaset
   attributes(    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   __init__   s    						c         C   s   |  j  S(   N(   R   (   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt	   get_seqID"   s    c         C   s   t  |  |  _ d  S(   N(   t   strR   (   R   t   scaffold(    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt	   set_seqID%   s    c         C   s   |  j  S(   N(   R   (   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt	   get_score(   s    c         C   s
   |  j    S(   N(   R(   (   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   getScore+   s    c         C   s   |  j  S(   N(   R   (   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt
   get_strand.   s    c         C   s
   |  j    S(   N(   R*   (   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt	   getStrand1   s    c         C   s   | |  _  d  S(   N(   R   (   R   t   value(    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt	   set_score4   s    c         C   s   |  j  |  d  S(   N(   R-   (   R   R,   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   setScore7   s    c         C   s   | |  _  d  S(   N(   R   (   R   R,   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt
   set_strand:   s    c         C   s   |  j  |  d  S(   N(   R/   (   R   R,   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt	   setStrand=   s    c         C   s9   g  t  |  j j    D] } d | ^ q } d j |  S(   Ns   %s=%st   ;(   t   sortedt   _attributest   itemst   join(   R   t   pairt	   attr_list(    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   get_attr_string@   s    ,c      	   C   sU   |  j  |  j |  j t |  j  t |  j  t |  j  |  j t |  j  |  j	   g	 S(   N(
   R   R   R   R%   R   R   R   R   R   R8   (   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   get_field_listD   s    c         C   s   d j  |  j    S(   Ns   	(   R5   R9   (   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   __str__G   s    c         C   s   d |  j    S(   Ns   GFF3Record(%s)(   R:   (   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   __repr__J   s    c         C   s   t  d t |  j |  j   S(   Ni   (   R   t   absR   R   (   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   __len__M   s    c         C   s.   t  j d  } t | j |  j  j d   S(   Ns   \D*(\d+)i   (   t   ret   compileR   t   matchR   t   group(   R   t   pat(    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt	   chrom_numP   s    c         C   s   |  j  S(   N(   R   (   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt	   get_startT   s    c         C   s   |  j  S(   N(   R   (   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   get_endW   s    c         C   s   t  |  |  _ d  S(   N(   R   R   (   R   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt	   set_startZ   s    c         C   s   t  |  |  _ d  S(   N(   R   R   (   R   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   set_end]   s    c         C   s   |  j  S(   N(   R3   (   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   get_attributes`   s    c         C   s   i  |  _  t | t  rq x | j d  j d  D]9 } y& | j d  \ } } | |  j  | <Wq1 q1 q1 Xq1 Wn1 t | t  r | |  _  n t d t |    d  S(   NR1   t   =s/   Inappropriate type %s for GFF3Record attributes(   R3   t
   isinstanceR    t   stript   splitR   t	   TypeErrort   type(   R   R"   t   fieldt   keyt   val(    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyR   c   s    	c         C   s   | |  j  | <d  S(   N(   R3   (   R   RP   R,   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   add_attributeq   s    c         C   s   |  j  | |  d  S(   N(   RR   (   R   RP   R,   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   set_attributet   s    c         C   s   | |  j  k S(   N(   R3   (   R   RP   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   has_attributew   s    c         C   s   |  j  | S(   N(   R3   (   R   RP   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   get_attributez   s    c         C   s   |  j  | =d  S(   N(   R3   (   R   RP   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   remove_attribute}   s    c         C   s   |  j  S(   N(   R   (   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   getType   s    c         C   s   |  j  S(   N(   R   (   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   get_type   s    c         C   s   t  |  |  _ d  S(   N(   R%   R   (   R   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   set_type   s    c         C   s   |  j  S(   N(   R   (   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt
   get_source   s    c         C   s   t  |  |  _ d  S(   N(   R%   R   (   R   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt
   set_source   s    c         C   s   |  j  S(   N(   R   (   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt	   get_phase   s    c         C   s   |  j  j d  S(   Nt   Name(   R3   t   get(   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   get_name   s    c         C   s   t  |  |  j d <d  S(   NR]   (   R%   R3   (   R   t   name(    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   set_name   s    c         C   s   |  j  j d  S(   Nt   ID(   R3   R^   (   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   get_ID   s    c         C   s
   |  j    S(   N(   Rc   (   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   getID   s    c         C   s   t  |  |  j d <d  S(   NRb   (   R%   R3   (   R   t   id(    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   set_ID   s    c         C   s   |  j  |  d  S(   N(   Rf   (   R   Re   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   setID   s    c         C   s   |  j  j d  S(   Nt   Parent(   R3   R^   (   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   get_parents   s    c         C   s   t  |  |  j d <d  S(   NRh   (   R%   R3   (   R   t   parents(    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   set_parents   s    c         C   s    d |  j  k r |  j  d =n  d  S(   NRh   (   R3   (   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   clear_parents   s    c         C   sR   | j  |  j  k r t S| j   |  j   k  r2 t S| j   |  j   k rN t St S(   N(   R   R   RE   RD   R   (   R   t   other(    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   overlaps   s    c         C   sR   | j  |  j  k r t S| j   |  j   k r2 t S| j   |  j   k  rN t St S(   N(   R   R   RE   RD   R   (   R   Rm   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   includes   s    c         C   s   | s
 d Sy |  j    | j    k rE |  j    | j    k  rA d Sd S|  j   | j   k r} |  j   | j   k  ry d Sd S|  j   | j   k r |  j   | j   k  r d Sd Sd SWn t k
 r } | GHd SXd  S(   Ni   ii    (   R$   RD   RE   t   AttributeError(   R   Rm   t   e(    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   __cmp__   s       c         C   s   t  | t  } | o* |  j   | j   k } | oH |  j   | j   k } | of |  j   | j   k } | o |  j   | j   k } | S(   N(   RJ   R   R$   R+   RD   RE   (   R   Rm   t   result(    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   __eq__   s    c      
   C   sR   t  |  j |  j |  j t |  j  t |  j  t |  j  |  j |  j	 |  j
   	 S(   N(   R   R   R   R   R%   R   R   R   R   R   R8   (   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   clone   s    c         C   s   t  |  j |  j  } i d d 6d d 6d  d 6|  j } t d | d |  j d d	 d
 | d |  j   d |  j d g  d d  d d   	S(   Ni   t   +it   -t   .t   locationRN   t   location_operatorR5   R    Re   t
   qualifierst   sub_featurest   reft   ref_db(	   R   R   R   t   NoneR   R   R   Rd   R3   (   R   Ry   R    (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   asSeqFeature   s    "(4   t   __name__t
   __module__t   __doc__R#   R$   R'   R(   R)   R*   R+   R-   R.   R/   R0   R8   R9   R:   R;   R=   RC   RD   RE   RF   RG   RH   R   RR   RS   RT   RU   RV   RW   RX   RY   RZ   R[   R\   R_   Ra   Rc   Rd   Rf   Rg   Ri   Rk   Rl   Rn   Ro   Rr   Rt   Ru   R   (    (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyR      sd   																																														
			t   GFF3Genec           B   s   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 e d    Z RS(   s+   A gene normally does not have a parent
    c	   	   
   C   s;   t  t |   j | | d | | | | | | 	 i  |  _ d  S(   Nt   gene(   t   superR   R#   t   _transcripts(	   R   R   R   R   R   R   R    R!   R"   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyR#      s    .c         C   s   d  S(   N(   R   (   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt
   get_parent   s    c         C   s`   | j  |  j    | |  j | j   <t |  j | j    |  _ t |  j | j    |  _ d  S(   N(	   Rk   Rd   R   t   minR   RD   t   maxR   RE   (   R   t
   transcript(    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   add_transcript   s    c         C   s   |  j  j   S(   N(   R   t   values(   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   get_transcripts   s    c         C   s+   i  |  _  x | D] } |  j |  q Wd  S(   N(   R   R   (   R   t   transcript_listR   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   set_transcripts   s    	c         C   s1   | |  _  x! |  j   D] } | j |  q Wd  S(   N(   R   R   R/   (   R   R,   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyR/      s    	c         C   sV   t  j |   g } x' |  j   D] } | j t |   q W| j d  d j |  S(   Ns   ###s   
(   R   R:   R   t   appendR%   R5   (   R   Rs   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyR:      s
    c         C   sV   t  j |   g } x' |  j   D] } | j | j    q W| j d  d j |  S(   Ns   ###s   
(   R   R:   R   R   t#   toString_with_start_and_stop_codonsR5   (   R   Rs   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyR     s
    c         C   s   t  | t  o t j |  |  } | r | j   } x] |  j   D]L } t } x1 | D]) } | | k rT t } | j |  PqT qT W| o | } qA Wn  | S(   N(   RJ   R   R   Rt   R   R   R   t   remove(   R   Rm   Rs   t   other_transcriptsR   R@   t   o_transcript(    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyRt     s    !c         C   s+   |  j  r |  j   d j   S|  j   Sd  S(   Ni    (   R   R   t   get_CDS_lengthR=   (   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyR     s    	c         C   sU   t  | t  r" | j   d } n t  | t  r: | } n t S|  j   d j |  S(   Ni    (   RJ   R   R   t   GFF3mRNAR   t   CDS_matches(   R   Rm   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyR   !  s    	c         C   sU   t  |  j   |  j    d } t |  j   |  j    } | |  j   | | !} | S(   Ni   (   R   RD   RE   R   R$   (   R   t   genome_indext	   seq_startt   seq_endt	   unspliced(    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   get_forward_sequence*  s    c         C   sU   |  j  |  } |  j d k r9 t j | j j    } n  |  j   | _ d | _ | S(   NRw   s   Genomic sequence(   R   R   R   t   seqt   reverse_complementR_   Re   t   description(   R   R   t   seq_rec(    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   get_gene_sequence0  s    	c         C   s   |  j    } | d =t |   S(   Ni   (   R9   R   (   t
   gff3recordt   fields(    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt
   fromRecord9  s    (   R   R   R   R#   R   R   R   R   R/   R:   R   Rt   R   R   R   R   t   staticmethodR   (    (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyR      s   															R   c           B   s.  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 d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z e  d  Z! e" d    Z# RS(    s&    The Parent of an mRNA is a gene.
    c	   	   
   C   s   t  t |   j | | d | | | | | | 	 g  |  _ | d k rO t |  n	 t |  |  _ | d k rv t |  n	 t |  |  _ d  S(   Nt   mRNARw   (   R   R   R#   t   _exonsR   t	   _CDSstartt   _CDSstop(	   R   R   R   R   R   R   R    R!   R"   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyR#   D  s    .	'c      	   C   sL   t  |  j |  j t |  j  t |  j  t |  j  |  j |  j |  j	    S(   N(
   R   R   R   R%   R   R   R   R   R   R8   (   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyRu   J  s    c         C   s   |  j  S(   N(   R   (   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   get_CDS_startM  s    c         C   s   |  j  S(   N(   R   (   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   get_CDS_stopP  s    c         C   s=   t  |  |  _ t |  j |  |  _ t |  j |  |  _ d  S(   N(   R   R   R   R   R   R   (   R   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   set_CDS_startT  s    c         C   s=   t  |  |  _ t |  j |  |  _ t |  j |  |  _ d  S(   N(   R   R   R   R   R   R   (   R   t   _stop(    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   set_CDS_stopY  s    c         C   s   |  j  j d  S(   NRh   (   R3   R^   (   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyR   ^  s    c         C   s   g  |  _  d  S(   N(   R   (   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   clear_exonsa  s    c      	   C   s  x|  j  D]} t | j   | j   d | j   | j   d  r
 | j   | j   k ry | j   | j   k ry d  S| j   | j   k r | j   | j   k r ~ Pq| j   | j   k s | j   | j   k  rt d t |  t |  f   qd  Sq
 q
 W|  j  j |  y. | j |  j    | j	 |  j   d  Wn t
 k
 rh} | GHn Xt |  j | j    |  _ t |  j | j    |  _ d  S(   Ni   s9   Overlapping but non-identical exons in transcript: %s, %ss   .cds(   R   R   RD   RE   t
   ValueErrorR%   R   t
   add_parentRd   Rg   Rp   R   R   R   R   (   R   t   new_exont   old_exonRq   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   add_exond  s$    5000%	c         C   sr   | j  d  |  j   d k r+ | j   n	 | j   } |  j |  t |  j |  |  _ t |  j |  |  _ d  S(   Nt   start_codonRw   (	   RY   R+   RE   RD   R   R   R   R   R   (   R   t   codont	   new_start(    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   add_start_codon{  s
    *c         C   sr   | j  d  |  j   d k r+ | j   n	 | j   } |  j |  t |  j |  |  _ t |  j |  |  _ d  S(   Nt
   stop_codonRw   (	   RY   R+   RD   RE   R   R   R   R   R   (   R   R   t   new_stop(    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   add_stop_codon  s
    *c         C   s   |  j  S(   N(   R   (   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt	   get_exons  s    c         C   s   |  j    | k S(   N(   R   (   R   t   geneID(    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   isInGene  s    c         C   s   t  j |   } | j d  |  j   d k r7 |  j n t |  j  d } |  j   d k ro t |  j  d n |  j } | j |  | j |  | j |  j	    | j
 |  j	   d  | S(   NR   Rw   i   s   .start(   R   Ru   RY   R*   R   R   RF   RG   Rk   Rc   Rf   (   R   R   t   start_codon_startt   start_codon_end(    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   make_start_codon  s    ..c         C   s   t  j |   } | j d  |  j   d k rA t |  j  d n |  j } |  j   d k re |  j n t |  j  d } | j |  | j |  | j |  j	    | j
 |  j	   d  | S(   NR   Rw   i   s   .stop(   R   Ru   RY   R*   R   R   RF   RG   Rk   Rc   Rf   (   R   R   t   stop_codon_startt   stop_codon_end(    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   make_stop_codon  s    ..c         C   s{   t  j |   g } | j t |  j     x' |  j   D] } | j t |   q8 W| j t |  j     d j |  S(   Ns   
(   R   R:   R   R%   R   R   R   R5   (   R   Rs   t   exon(    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyR     s    c         C   s1   | |  _  x! |  j   D] } | j |  q Wd  S(   N(   R   R   R/   (   R   R,   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyR/     s    	c      	   C   s)  t  j |   g } |  j   d k r< |  j   |  j   k sf |  j   d k r |  j   |  j   k r | j t |  j     n  x' |  j	   D] } | j t |   q W|  j   d k r |  j
   |  j   k s |  j   d k r|  j
   |  j   k r| j t |  j     n  d j |  S(   NRv   Rw   s   
(   R   R:   R*   R   RD   RE   R   R%   R   R   R   R   R5   (   R   Rs   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyR:     s    T
T
c         C   sv   t  | t  o t j |  |  } t | j    } x; t t |  j    |  D] \ } } | ok | | k } qP W| S(   N(   RJ   R   R   Rt   R2   R   t   zip(   R   Rm   Rs   t   o_exonst   s_exont   o_exon(    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyRt     s
    !(c         C   s1   t  | t  } | o* |  j   | j   k } | S(   N(   RJ   R   t   extract_CDS(   R   Rm   Rs   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyR     s    c         C   s  |  j    } | j t |  j |  j   | j t |  j |  j   | j |  j  | j |  j  x t	 |  j
    D] } | j   | j   k  sw | j   | j   k r qw n  | j    } | j d  | j   | j   k  r | j | j    n  | j   | j   k r(| j | j    n  | j |  qw W| j
   } | d j   | j   k r{| d j | j    n  | d j   | j   k  r| d j | j    n  | S(   Nt   CDSi    i(   Ru   RF   R   R   R   RG   R   R   R   R2   R   RE   RD   RY   R   (   R   R   R   t   cds_partt	   cds_parts(    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyR     s*    0c         C   s{  t  |  j   |  j    d } t |  j   |  j    } | |  j   | | !} g  } t |  j    } | d j   |  j   k r | d j |  j    n  | d j   |  j   k  r | d j |  j    n  xg | D]_ } | j   | d } | d k  rt	 d   n  | j   | }	 | | |	 !}
 | j
 |
  q Wd  } | rw| d } x | d D] }
 | |
 7} q`Wn  | S(   Ni   i    is7   [GFF3mRNA.get_forward_sequence] Negative relative start(   R   RD   RE   R   R$   R2   R   RF   RG   R   R   R   (   R   R   R   R   R   t	   exon_seqst   exonsR   t	   rel_startt   rel_endt   exon_seqt   spliced(    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyR     s,    
c         C   s=   |  j  |  } |  j d k r9 t j | j j    } n  | S(   NRw   (   R   R   R   R   R   (   R   R   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   get_transcript_sequence  s    c         C   s   d | k o |  j    k n r t |  j    } | } |  j   d k r x t |  D]< } | t |  k r | j   | } PqY | t |  8} qY WnG xD | D]< } | t |  k r | j   | } Pq | t |  8} q W| St d   d  S(   Ni    Rw   s   Coordinate out of range(	   t   get_transcript_lengthR2   R   R*   t   reversedt   lenRE   RD   R   (   R   t   transcript_coordinateR   t   residualR   Rs   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   get_genomic_coordinate  s     "c         C   s   |  j  |  j k r d St |  j    } d } |  j d k r | j   x | D]M } | j   |  j  k rm Pn  | d | j   t | j   |  j  d  7} qN WnX xU | D]M } | j   |  j  k r Pn  | d t	 | j   |  j  d  | j   7} q W| S(   Ni    Rw   i   (
   R   R   R2   R   R   t   reverseRE   R   RD   R   (   R   R   t   lengtht   x(    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   get_utr5_length+  s    
52c         C   s   |  j  |  j k r d St |  j    } d } |  j d k r x | D]M } | j   |  j k rc Pn  | d t | j   |  j d  | j   7} qD Wnb | j   xU | D]M } | j   |  j k r Pn  | d | j   t	 | j   |  j d  7} q W| S(   Ni    Rw   i   (
   R   R   R2   R   R   RD   R   RE   R   R   (   R   R   R   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   get_utr3_length>  s    5
2c         C   s&   t  g  |  j D] } t |  ^ q  S(   N(   t   sumR   R   (   R   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyR   Q  s    c         C   s   |  j    |  j   |  j   S(   N(   R   R   R   (   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyR   T  s    c         C   sN   |  j    } |  j   } | d k r9 |  j |  | | !S|  j |  | Sd  S(   Ni    (   R   R   R   (   R   R   t   utr5t   utr3(    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   get_coding_sequenceW  s
    c   	      C   s   |  j  |  } t |  j |  j  } t |  j |  j  } t d | | d  } | |  j   | | d !j } | d k r | |  j   | | | !j n t j d  } |  j d k r t	 | j
    | t	 | j
    St	 |  | t	 |  Sd  S(   Ni    i   t    Rw   (   R   R   R   R   R   R$   R   R   R   R%   R   (	   R   R   t
   pad_lengtht   cdst   leftt   rightt
   left_startt   left_padt	   right_pad(    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   get_padded_coding_sequence_  s    9$c         C   s   |  j    } | d =t |   S(   Ni   (   R9   R   (   R   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyR   l  s    ($   R   R   R   R#   Ru   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R/   R:   Rt   R   R   R   R   R   R   R   R   R   R   t
   PAD_LENGTHR   R   R   (    (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyR   A  s@   											
																		t   GFF3Exonc           B   s\   e  Z d  Z d   Z d   Z d   Z d   Z e d    Z d   Z	 d   Z
 d   Z RS(	   sc   The Parent of an exon is a set of mRNAs, implemented here as a comma-separated list of strings
    c	   	   
   C   s2   t  t |   j | | d | | | | | | 	 d  S(   NR   (   R   R   R#   (	   R   R   R   R   R   R   R    R!   R"   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyR#   w  s    c      	   C   sL   t  |  j |  j t |  j  t |  j  t |  j  |  j |  j |  j	    S(   N(
   R   R   R   R%   R   R   R   R   R   R8   (   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyRu   z  s    c         C   s#   |  j    r |  j    j d  Sd  S(   Nt   ,(   Ri   RL   R   (   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyR   }  s    c         C   sT   |  j    } | r1 | | k r: | j |  q: n	 | g } |  j d j |   d  S(   NR   (   R   R   Rk   R5   (   R   t   parentRj   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyR     s    	c         C   s   |  j    } | d =t |   S(   Ni   (   R9   R   (   R   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyR     s    c         C   s&   |  j    } | r" | | k r" t St S(   N(   R   R   R   (   R   t   transcriptIDRj   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   isInTranscript  s    c         C   sC   |  j    } | r? x* | j   D] } | j |  r t Sq Wn  t S(   N(   R   R   R   R   R   (   R   R   Rj   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyR     s    c         C   sR   t  |  j   |  j    d } t |  j   |  j    } | |  j   | | !j S(   Ni   (   R   RD   RE   R   R$   R   (   R   R   R   R   (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyR     s    (   R   R   R   R#   Ru   R   R   R   R   R   R   R   (    (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyR   t  s   							(   R   R>   t   typesR    R   t   BioR   R   R   t   Bio.SeqFeatureR   R   R   R   t   objectR   R   R   R   (    (    (    sT   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/gff3Record.pyt   <module>   s   	_ 4