ó
*à”Qc           @   s2  d  Z  d d l Z d d l Z d d l Z e j j e ƒ Z e j j e ƒ Z e j j	 e ƒ d d l
 m Z d d l Td e f d „  ƒ  YZ d e f d „  ƒ  YZ e d	 k r.e e e j d
 ƒ ƒ j ƒ  Z e ƒ  Z e j d
 d Z x2 e D]* Z x! e j ƒ  D] Z e j e ƒ qWqð We j e ƒ n  d S(   s†   
Handle conversion from transcript-relative (spliced) to genome-relative (unspliced) coordinates
Created on Jan 12, 2010
@author: ian
iÿÿÿÿN(   t   GFF3Iterator(   t   *t   scaffold_coordsc           B   s/   e  Z d  d „ Z d „  Z d „  Z d „  Z RS(   t   +c         C   sS   t  j |  ƒ t | ƒ |  _ t | ƒ |  _ g  |  _ g  |  _ d |  _ d |  _ d  S(   Ni    (	   t   objectt   __init__t   strt   seq_idt   strandt   spliced_coordst   unspliced_coordst   unspliced_lengtht   spliced_length(   t   selft   seqIDR   (    (    s[   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/transcript_coords.pyR      s    			c         C   sÜ   |  j  rX | |  j  d k rX |  j  j | ƒ | |  j d k sE t ‚ |  j j | ƒ n8 t |  j  | ƒ } |  j  j | | ƒ |  j j | | ƒ t |  j | |  j d d ƒ |  _ t |  j | |  j  d d ƒ |  _ d  S(   Niÿÿÿÿi    i   (	   R
   t   appendR	   t   AssertionErrort   bisect_rightt   insertt   maxR   R   (   R   t	   unsplicedt   splicedt   index(    (    s[   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/transcript_coords.pyt   add   s    $c         C   sã   | } t  d t t |  j | ƒ d t |  j ƒ d ƒ ƒ } |  j | | |  j | } | t |  j ƒ d k  r¼ t | |  j | d d ƒ } | |  j | d k r¼ |  j | d } q¼ n  |  j d k rß |  j | d } n  | S(   Ni    i   t   -(   R   t   mint   bisect_leftR
   t   lenR	   R   R   (   R   t   unspliced_coordt   forward_coordR   t   result(    (    s[   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/transcript_coords.pyt   get_spliced_coord(   s    5c         C   s´   |  j  d k r  |  j d | n | } t d t t |  j | ƒ d t |  j ƒ d ƒ ƒ } | t |  j ƒ d k  rš | |  j | d k rš |  j | d S|  j | | |  j | S(   NR   i   i    (   R   R   R   R   R   R	   R   R
   (   R   t   spliced_coordR   R   (    (    s[   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/transcript_coords.pyt   get_unspliced_coord5   s
    &50(   t   __name__t
   __module__R   R   R   R!   (    (    (    s[   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/transcript_coords.pyR      s   			t   transcript_coordsc           B   sP   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 RS(   c         C   s   i  |  _  d  S(   N(   t   _dict(   R   (    (    s[   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/transcript_coords.pyR   ?   s    c         C   s0   t  | d ƒ } t j |  j | ƒ | j ƒ  d  S(   Nt   w(   t   opent   cPicklet   dumpR%   t   close(   R   t   filenamet   output(    (    s[   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/transcript_coords.pyt   saveB   s    c         C   s5   | |  _  t | ƒ } t j | ƒ |  _ | j ƒ  d  S(   N(   t	   _filenameR'   R(   t   loadR%   R*   (   R   R+   t   input(    (    s[   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/transcript_coords.pyR/   G   s    	c         C   s   |  j  | j S(   N(   R%   R   (   R   t   transcript_id(    (    s[   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/transcript_coords.pyt   get_genome_strandM   s    c         C   s5   |  j  | } t | ƒ } | j | ƒ } | j | f S(   N(   R%   t   intR!   R   (   R   R1   t   transcript_coordt   coordst   relative_coordt   genome_coord(    (    s[   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/transcript_coords.pyt   get_genome_coordP   s    	c         C   sË  |  j  | } g  } t | ƒ } t | ƒ } | j d k r_ | j | d } | j | d } n  | | k  r{ | | } } n  d  } }	 x× t d t | j ƒ ƒ D]½ }
 | | j |
 k  rD| | j |
 k rD| j |
 d | j |
 | j |
 d d } | j |
 }	 | j d k r+| j	 | |	 f ƒ qA| j	 |	 | f ƒ qDn  | | j |
 k rž | Sqž W| d  k r“t
 j d I| I| I| Id IJn  |	 d  k rÇt
 j d I| I| I| Id IJn  | S(   NR   i   R   s4   No left coordinate found in get_donor_acceptor_pair(t   )s5   No right coordinate found in get_donor_acceptor_pair((   R%   R3   R   R   t   Nonet   rangeR   R	   R
   R   t   syst   stderr(   R   R1   t   startt   endR5   t   intronst   relative_startt   relative_endt
   left_coordt   right_coordt   i(    (    s[   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/transcript_coords.pyt   get_donor_acceptor_pairs~   s2    
/((c         C   sÄ   d } t  | j ƒ  | j ƒ  ƒ } | j ƒ  d } x_ t | j ƒ  ƒ D]K } | j | j ƒ  | ƒ | t t | ƒ | j	 ƒ  | ƒ 7} | j	 ƒ  } qD W| j | j	 ƒ  | d ƒ | |  j
 | j ƒ  <d  S(   Ni    i   (   R   t	   get_seqIDt	   getStrandt	   get_startt   sortedt	   get_exonsR   R   R   t   get_endR%   t   getID(   R   t
   transcriptt   seq_lent
   coords_lstt   seq_endt   exon(    (    s[   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/transcript_coords.pyR   ¦   s    #c         C   s   |  j  | S(   N(   R%   (   R   t   id(    (    s[   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/transcript_coords.pyt   get_scaffold_coords²   s    (
   R"   R#   R   R-   R/   R2   R8   RF   R   RT   (    (    (    s[   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/transcript_coords.pyR$   =   s   					.	(	t   __main__i   s   .coords(   t   __doc__R(   R<   t   ost   patht   dirnamet   __file__t   this_dirt   srcR   t   gff3IteratorR    t   bisectR   R   R$   R"   R'   t   argvt   genesR5   t   save_filenamet   genet   get_transcriptsRN   R   R-   (    (    (    s[   /woldlab/castor/data00/home/georgi/programs/RNA-Seq-Simulator.v1.0/lib/transcript_coords.pyt   <module>	   s    $
+x	