ó
ËdTc           @   s  d  d l  Z  d  d l Z d  d l Z d  d l m Z m Z 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 Z d  d l m Z d  d l m Z d d	 d
 d d d d d d d d d d d e d d d d d d „ Z d d	 d
 d d d d d d d d d e d d d d d „ Z d d „ Z d d d d d „ Z d d d d d „ Z d d d d d d d d d d d g  d „ Z d d d g  d d d d d d d „
 Z d d d g  d d d d d d d d „ Z g  d d d d  d! „ Z d" d# d$ d% d d d d d d% d& „
 Z g  d' d d d( „ Z g  d d d  d) „ Z g  d d* „ Z  d d d+ d, d- d. d/ g d0 d1 e! d2 „	 Z" d d d+ d, d- d d e! d. d/ g d3 „	 Z# i  d d4 d5 d d d d d d d d e d6 g  d7 „ Z$ i i  d8 6d	 d	 d d d d d d d d9 d: d; d< d= d> d? d@ dA dB dC dD dE g d dF „ Z% i g  d8 6d	 d	 d d d d d9 d: d; d< d= d> d? d@ dA dB dC dD dE g d dG „ Z& d dH „ Z' d dI „ Z( d d d d dJ „ Z) d d d4 dK „ Z* d d d d dL „ Z+ d d d d d d d d d d d d dM „ Z, d d d d dN dO d d d d dP „
 Z- d d dQ „ Z. d d dR „ Z/ i  d% dS dT d d dU d e e d d i  dV „ Z0 i  d% dW d d d dX „ Z1 d% dW d d dY dZ „ Z2 d d d[ „ Z3 d\ „  Z4 i  d] „ Z5 e6 d^ k re  j7 e j8 j9 ƒ  d
 d ƒ e _8 d	 GHn  d S(_   iÿÿÿÿN(   t   rt   FloatVectort	   StrVector(   t   glob(   t   Wig(   t   Wigs(   t   reads(   t   deepcopy(   t   log10t    t   wi   i    i   i   i   s   	i¸  t   meanc   !   (   C   sÍ  |  j  ƒ  } | j ƒ  t | ƒ d k  r1 d GHd S| d k  r¹ i  } x$ | D] } d | |  j | ƒ j <qJ W| j  ƒ  } t | ƒ d k r¬ | j ƒ  d G| d GH| d } q¹ | d } n  i  } xJ| D]B} d G| Gd GH|  j | ƒ } d } | d k r| d } n d	 } t j j | ƒ s/t j	 | ƒ n  | d k rt j j
 | t j j | ƒ d
 d t j j | ƒ d
 d ƒ } n
 | d } t d | d | d | d | d | d | d |	 d |
 d | d | d | d | d | d | d | d | d | d | d | ƒ | | <qÆ W| d k rÉ| d  k r_t | d! ƒ } | j ƒ  } | d d
  | d <| j ƒ  n	 d" g } x* | D]" } | d c d# | d | 7<qoWt | d! d  ƒ } | j | d d$ ƒ | | d j  ƒ  } | j ƒ  | d  k rt | ƒ t | ƒ d k ri  Sx² t t | ƒ ƒ D]ž } | | } | d  k rh| | k  rQt | ƒ }  qzd% t | | ƒ }  n | | d d
  }  x* | D]" } |  d# t | | | ƒ 7}  qW| j |  d$ ƒ qW| j ƒ  n  | S(&   s8   
    parameters:
        wgs: the Wigs class object
    i   s/   at least one wiggle data need to be specified!
NsI   step sizes in wiggles are not the same, will be set to a common step sizei    s   
calculating for s   ...t   _heatmapt   heatmapiÿÿÿÿt   .s   .heatmapt   wgt   chrColIDt	   nameColIDt   startColIDpost   startColIDnegt   endColIDpost   endColIDnegt	   straColIDt   stept   sept
   second_sept   linest   heatmapnamet   avgcurvenamet   flankupt   flankdnt   vcalt   excludePt   region_sizeR
   s   .xlst   poss   	s   
t   +(   t   keyst   sortt   lent   getR   t   Nonet   ost   patht   isdirt   mkdirt   joint   splitt   occInRegionst   opent	   readlinest   closet   writet   ranget   str(!   t   wgst   outnamet	   groupnamet   outmodeR   R   R   R   R   R   R   R   R   R   R   t   heatMapR   R   R   R    R!   R$   t   stepst   kt   dicR   t   tHeatMapNamet   fit   fot   posest   it   pt   oline(    (    sC   /oak/stanford/groups/akundaje/marinovg/programs/danpos-2.2.2/lib.pyt   batchOccInRegions   sp    

 
   D
ƒ	  
( 
   c      "   C   s˜  |  j  ƒ  } | j ƒ  t | ƒ d k  r1 d GHd S| d k  r¹ i  } x$ | D] } d | |  j | ƒ j <qJ W| j  ƒ  } t | ƒ d k r¬ | j ƒ  d G| d GH| d } q¹ | d } n  i  } x8| D]0} d G| Gd GH|  j | ƒ } d } | d k r| d } n d	 } t j j | ƒ s/t j	 | ƒ n  | d k rt j j
 | t j j | ƒ d
 d t j j | ƒ d
 d ƒ } n
 | d } t d | d | d | d | d | d | d | d |	 d |
 d | d | d d d | d | d | d | ƒ | | <qÆ W| d k r”| d k rMt | d ƒ } | j ƒ  } | d d
  | d <| j ƒ  n	 d g } x* | D]" } | d c d  | d | 7<q]Wt | d d ƒ } | j | d d! ƒ | | d j  ƒ  } | j ƒ  | d k rõt | ƒ t | ƒ d k rõi  Sx t t | ƒ ƒ D]{ } | | } | d k r3t | ƒ } n | | d d
  } x* | D]" } | d  t | | | ƒ 7} qLW| j | d! ƒ qW| j ƒ  n  | S("   s8   
    parameters:
        wgs: the Wigs class object
    i   s/   at least one wiggle data need to be specified!
NsI   step sizes in wiggles are not the same, will be set to a common step sizei    s   
calculating for s   ...R   R   iÿÿÿÿR   s   .heatmapR   R   R   t   posColIDpost   posColIDnegR   R   R   R   R   R   R   R   R   R   R    R
   s   .xlsR"   s   	s   
(   R$   R%   R&   R'   R   R(   R)   R*   R+   R,   R-   R.   t   occAroundPointsR0   R1   R2   R3   R4   R5   (   R6   R7   R8   R9   R   R   RF   RG   R   R   R   R   R   R:   R   R   R   R    R$   R;   R<   R=   R   R>   R?   R@   RA   RB   RC   RD   (    (    sC   /oak/stanford/groups/akundaje/marinovg/programs/danpos-2.2.2/lib.pyt   batchOccAroundPointsN   sl    
 
   D
q	  
( 
   c   
      C   sº  |  j  ƒ  } t | ƒ d k  r' d GHd  Si  } x1 | D]) } d G| Gd GHd | |  j | ƒ j <q4 W| j  ƒ  } t | ƒ d k rÇ | j ƒ  d G| d GHx. | D]# } |  j | ƒ j d | d ƒ q Wn  i  } x- | D]% } t |  j | ƒ d d  ƒ| | <qÔ W| d  k r¶t | d	 d
 ƒ } | j	 d d j
 | ƒ d ƒ | | d j  ƒ  } | j ƒ  x[ | D]P } t | ƒ }	 x* | D]" } |	 d t | | | ƒ 7}	 qxW| j	 |	 d ƒ q_Wn  | S(   Ni   s/   at least one wiggle data need to be specified!
s   calculating fors   ...sI   step sizes in wiggles are not the same, will be set to a common step sizei    R   R7   s   .xlsR
   s   Periodicity	s   	s   
(   R$   R&   R'   R   R%   t
   changeStept   occPSDR(   R0   R3   R-   R5   (
   R6   R7   R$   R;   R<   R=   R@   RA   RB   RD   (    (    sC   /oak/stanford/groups/akundaje/marinovg/programs/danpos-2.2.2/lib.pyt   batchOccPSDŽ   s8    
 $ #
  id   iú   c      
   C   s	  |  j  ƒ  } i  } x7 | D]/ } t d |  | d | d | d | ƒ | | <q W| d  k rt | d d ƒ } | j d d j | ƒ d	 ƒ | | d
 j  ƒ  }	 |	 j ƒ  x[ |	 D]P }
 t |
 ƒ } x* | D]" } | d t | | |
 ƒ 7} qÇ W| j | d	 ƒ q® Wn  | S(   NR=   t   mint   maxR   s   .xlsR
   s	   Distance	s   	s   
i    (   R$   t   positionDistanceDistributionR(   R0   R3   R-   R%   R5   (   t   dataR7   RM   RN   R   R$   R=   R<   R@   RA   RB   RD   (    (    sC   /oak/stanford/groups/akundaje/marinovg/programs/danpos-2.2.2/lib.pyt!   batchPositionDistanceDistribution¨   s     -
  iÜ  c         C   sa  |  j  ƒ  } i  } x= | D]5 } t d |  | d d  d | d | d | ƒ | | <q W| d  k r]t | d d ƒ } | j d d	 j | ƒ d
 ƒ i  }	 x- | D]% }
 x | |
 D] } d |	 | <q­ Wqœ W|	 j  ƒ  }	 |	 j ƒ  x |	 D]t } t | ƒ } xN | D]F } | | j | ƒ s%d | | | <n  | d	 t | | | ƒ 7} qû W| j | d
 ƒ qâ Wn  | S(   NR=   R7   RM   RN   R   s   .xlsR
   s   Value	s   	s   
i    (	   R$   t   positionValDistributionR(   R0   R3   R-   R%   R5   t   has_key(   RP   R7   RM   RN   R   R$   R=   R<   R@   RA   t   nameR"   RB   RD   (    (    sC   /oak/stanford/groups/akundaje/marinovg/programs/danpos-2.2.2/lib.pyt   batchPositionValDistribution¶   s*     3 
  iÄ	  i
   c         C   sF  i  } |  j  ƒ  } | j ƒ  xj |  D]b } t |  | d | d | d | d | d | d | d | d | d	 |	 d
 |
 d | d g  ƒ| | <q# W| d  k rBt | d d ƒ } | j d d j | ƒ d ƒ | | d j  ƒ  } | j ƒ  x[ | D]P } t | ƒ } x* | D]" } | d t | | | ƒ 7} qW| j | d ƒ që Wn  | S(   NR7   R   R   R   R   R   RF   RG   R   R   R   R   s   .xlsR
   s   pos	s   	s   
i    (   R$   R%   t   positionAroundPointR(   R0   R3   R-   R5   (   t   smtsR7   R   R   R   R   R   RF   RG   R   R   R   R   R=   R$   R<   R@   RA   RB   RD   (    (    sC   /oak/stanford/groups/akundaje/marinovg/programs/danpos-2.2.2/lib.pyt   batchPositionAroundPointsÉ   s$    
 1
  c   '      C   sÉ  | d k  r |  j  } n |  j d | ƒ | | :} | | :} |
 d  k rQ d }
 n  t |
 d d ƒ } | j d ƒ x2 t d | | ƒ D] } | j d t | ƒ ƒ q… W| j d	 ƒ i  } x" t | | ƒ D] } g  | | <qÊ Wd } xƒ|	 D]{} | d
  d	 k r| d
  } n  | j | ƒ } | | | | | | } } } |  j j	 | ƒ sUqë n  | d k r“| d  k rƒ| | j | ƒ } qÑ| | g } n> | d k rÑ| d  k rÁ| | j | ƒ } qÑ| | g } n  x’| D]Š} | d k rðqØn  d g | | } t
 | ƒ | } | d k rlxœ t d | | ƒ D]4 } y! |  j | | | | | | <Wq1q1q1Xq1WnP xM t d | | d ƒ D]4 } y! |  j | | | | | | <Wq„q„q„Xq„Wt | ƒ t | ƒ t | ƒ } } } | d d j t | ƒ t | ƒ t | ƒ g ƒ }  x0 t | | ƒ D] } |  d t | | ƒ 7}  q%W| j |  d	 ƒ | d 7} qØWqë W| j ƒ  d GHi  }! t j d g ƒ }" |" j | d d ƒxt d | | d ƒ D] } |" d }" t |
 d ƒ }# |# j ƒ  d }$ x2 |# D]* } t | j ƒ  | ƒ |" |$ <|$ d 7}$ qóW|# j ƒ  |" j ƒ  | d k r‰t |" t
 | | ƒ t
 | | | ƒ !ƒ d }% |% | | | d }& n | d k r¦|" | d }& n  |& |! | | d | <q¼Wd GH|! S(   Ni   R   R   s   .xlsR
   s   name	max	min	sumi    s   	s   
iÿÿÿÿR#   t   -R	   g        s   caculating average curve ...t   refchecki   R   g      ð?i   t   median(   R   RJ   R(   R0   R3   R4   R5   R.   RP   RS   t   intRN   RM   t   sumR-   R2   t   numpyt   arrayt   resizet   readlinet   floatR%   ('   R   R   R   RF   RG   R   R   R   R   R   R   R   R   R   R   R    t   outfRB   t   lstt   numt   linet   colt   chrRT   t   straRA   R"   t   tlstt   tsst	   regionmaxt	   regionmint	   regionsumt   olR=   t   vecR?   t   lnt   st   v(    (    sC   /oak/stanford/groups/akundaje/marinovg/programs/danpos-2.2.2/lib.pyRH   Ü   s˜    
 

 	         !  ! &2 




/ c   2      C   s‡  t  |  ƒ } | j } | d k  r- |  j } n |  j d | ƒ | | :} | | :} | | } | d  k rp d } n  t | d d ƒ } | j d ƒ x2 t d | d ƒ D] } | j d t | ƒ ƒ q¤ Wx. t d | ƒ D] } | j d t | ƒ ƒ qÕ Wx2 t d | ƒ D]! } | j d	 t | | ƒ ƒ qW| j d
 ƒ | d  k rMd } n  d } t j	 d g ƒ } | j
 | | | d d ƒx¡| D]™} | d  d
 k rª| d  } n  | j |	 ƒ } | | | | | | } } } |  j j | ƒ sñq‡n  | d k rQ|
 d  k r3| | j |
 ƒ | | j |
 ƒ } }  q±| | g | | g } }  n` | d k r±|
 d  k r“| | j |
 ƒ | | j |
 ƒ } }  q±| | g | | g } }  n  d t | ƒ }! }" |" t |  ƒ k rÜq‡n  xA|! |" k  r| d } | |! d k rqßn  t | |! ƒ | t |  |! ƒ | t | |! ƒ | t |  |! ƒ | f \ }# }$ }% }& | d k rlxI t d | d ƒ D]4 } y! |  j | |# | | | | <WqqqXqW|& |% d | }' xO t d | ƒ D]> } y+ | j | |% t | |' ƒ | | | <WqÛqÛqÛXqÛWxHt d | ƒ D]8 } y% |  j | |$ | | | | | <Wq-q-q-Xq-Wnü xI t d | d ƒ D]4 } y! |  j | |# | | | | <Wq€q€q€Xq€W|% |& d | }' xO t d | ƒ D]> } y+ | j | |% t | |' ƒ | | | <WqÚqÚqÚXqÚWxI t d | ƒ D]8 } y% |  j | |$ | | | | | <Wq,q,q,Xq,Wt | ƒ t | ƒ t | ƒ }( }) }* | d d j t |( ƒ t |) ƒ t |* ƒ g ƒ }+ x4 t | | | ƒ D] } |+ d t | | ƒ 7}+ qÕW| j |+ d
 ƒ | d 7} |! d 7}! qßWq‡W| j ƒ  d GHi  }, t j	 d g ƒ }- |- j
 | d d ƒxt d | | | d ƒ D] } |- d }- t | d ƒ }. |. j ƒ  d }/ x2 |. D]* } t | j ƒ  | ƒ |- |/ <|/ d 7}/ q±W|. j ƒ  |- j ƒ  | d k rGt |- t | | ƒ t | | | ƒ !ƒ d }0 |0 | | | d }1 n | d k rd|- | d }1 n  |1 |, | | d | <qzWd GH|, S(   Ni   R   R   s   .xlsR
   s   name	max	min	sumi    s   	s   	+s   
R   g        RZ   iÿÿÿÿR#   RY   R	   g      ð?s   caculating average curve ...i   R   i   R[   (   R   R   RJ   R(   R0   R3   R4   R5   R^   R_   R`   R.   RP   RS   R&   R\   RN   RM   R]   R-   R2   Ra   Rb   R%   (2   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R    R!   t   owgt   ostept	   bin_countRc   RB   Re   Rj   Rf   Rg   Rh   RT   Ri   t   startst   endst   idt   lthRk   t   test   otsst   otest   bstepRl   Rm   Rn   Ro   R=   Rp   R?   Rq   Rr   Rs   (    (    sC   /oak/stanford/groups/akundaje/marinovg/programs/danpos-2.2.2/lib.pyR/   ,  sÜ    	 


 	    	    * * 
 V !  +  %  !  +  % &2 

"



/ I  rN	  c          C   s}  | d k r |  St |  ƒ d k  r& |  S| d k r_ t | d ƒ } | j d |  d ƒ i  } n  |  d g |  d j d ƒ i  } } }	 x( t t | ƒ ƒ D] }
 |
 |	 | |
 <qš W| j d ƒ } d } xQt t | ƒ ƒ D]=}
 | |
 j d ƒ | |
 <| |
 d d	 k r‡t | |
 d ƒ | |
 d <| |
 d d
 k r‡| d k rPd GHg  St | |
 d ƒ | k r„t | |
 d ƒ } q„q‡n  | |
 d d	 k rÚ t | |
 d ƒ | |
 d <| |
 d d
 k r| d k ràd GHg  St | |
 d ƒ | k rt | |
 d ƒ } qqqÚ qÚ W| | k r0| } n  | d k rUi  } xt | ƒ j ƒ  d D]õ } | j ƒ  } | d d k r²| d | d | d t	 | d ƒ f \ } } } } n4 | d | d | d t	 | d ƒ f \ } } } } | j
 | ƒ si  | | <n  t	 | | ƒ } | | j
 | ƒ s6i  | | | <n  | | g | | | | <qYWn  xÕ|  d D]É} d	 t | j d ƒ } } } x‘ | D]‰ } | d d
 k rŠt | |	 | d ƒ } | d d	 k rä| | d k  rät } qän  | d d	 k r| | d k rt } qqqŠqŠWxù| D]ñ} | r| d d
 k r| d g  } } x? d d d g D]. }
 y | j t	 | |
 ƒ ƒ Wq[q[q[Xq[Wt | ƒ t | ƒ } } t	 | | | ƒ t	 | | | ƒ } } t | | d ƒ } x| D]
} | | j
 | ƒ sqén  xè| | | D]Ø} | | | | d d k r| | | d k r| | | d k  r| d k rå| j
 | | | | d ƒ s©g  | | | | | d <n  | | | | | d j | | | | d d | ƒ n  | | | | | d d 7} q| | | | d d k r| | | d k r| | | d k  r| d k rÎ| j
 | | | | d ƒ s’g  | | | | | d <n  | | | | | d j | | | | d d | ƒ n  | | | | | d d 7} qqWqéW| d	 k rt } qqqW| r`| j | ƒ q`q`W| d k ryx0 | D]( } x | | D] } | j | ƒ qQWq@W| j ƒ  n  | S(   s7  
    positionLines:  The first line in positionLines must be the title line, each line should have a '
' at the end, positionLines should be in the default output format of DANPOS, see DANPOS documentation for example
    selection:  promoter:-350:50&control_smt_val:0:1000&0-log10(point_diff_pval):0:1e-10
    i   R
   s   genes	i    s   	t   &t   :i   R	   t   promoters!   Error: gene file is not provided.R#   i   i   t   ,RY   N(   R(   R&   R0   R3   R.   R4   Rb   t   absR1   R\   RS   t   Truet   Falset   appendRM   RN   R2   (    t   positionLinest	   selectiont   geneFilet   outGeneFilet
   chrbinsizet   ogft   oglinest   retrt   tcolt   tldRB   t   selst   flankt   gdRf   Rg   t   gnamet   crRi   Rk   t   bint   genest   okt   selRs   RA   t   minpost   maxpost   minbint   maxbint   binst   gene(    (    sC   /oak/stanford/groups/akundaje/marinovg/programs/danpos-2.2.2/lib.pyt   positionSelectorOld•  s¼      	(   ! 	 74      ) D <!D <)   ixìÿÿiè  iÀ½ðÿi@B c
   
      C   s   d S(   s=  
    #this function is not finished
    if negStartCol==None:negStartCol=posEndCol
    if negEndCol==None:negEndCol=posStartCol
    tgd,gd,n={},{},0
    #define basal and extenede domains for each element
    for line in open(geneFile).readlines()[1:]:
        n,col=n+1,line.split()
        gname,cr,stra=col[0],col[1],col[2]
        if not tgd.has_key(cr):tgd[cr]={}
        if stra=='+':
            starts,ends=col[posStartCol].split(','),col[posEndCol].split(',')
            if starts[-1]=='':starts,ends=starts[:-1],ends[:-1]
            for i in range(len(starts)):
                start,end=int(starts[i]),int(ends[i])#biological start and end
                bstart,bend,estart,eend=start+bup,end+bdn,start+bup+eup,end+bdn+edn#start and end of basal and extended domain
                if not tgd[cr].has_key(bstart):tgd[cr][bstart]=[]
                tgd[cr][bstart].append([bend,gname,start,end,estart,eend])
            
        else:
            starts,ends=col[negStartCol].split(','),col[negEndCol].split(',') 
            if starts[-1]=='':starts,ends=starts[:-1],ends[:-1]
            for i in range(len(starts)):
                start,end=int(starts[i]),int(ends[i])#biological start and end
                bstart,bend,estart,eend=end-bdn,start-bup,end-bdn-edn,start-bup-eup#start and end of basal and extended domain, note that the physical starts is the biological ends on the negative strand
                if not tgd[cr].has_key(bstart):tgd[cr][bstart]=[]
                tgd[cr][bstart].append([bend,gname,start,end,estart,eend])
    
    bends={}
    for cr in tgd:
        bends[cr]={}
        for s in tgd[cr]:
            e=0
            for i in range(len(tgd[cr][s])):
                if e<tgd[cr][s][i][0]:e=tgd[cr][s][i][0]
            bends[cr][s]=e

    #define final domain for each element
    for cr in tgd:
        if not gd.has_key(cr):gd[cr]={}
        poses=tgd[cr].keys()
        poses.sort()
        i,lth=1,len(poses)-1
        while i <lth:
            bstart,prebstart,nxtbstart=poses[i],poses[i-1],poses[i+1]#basal start
            #print tgd[cr][bstart],len(tgd[cr][bstart])
            #print bends[cr]
            for j in range(len(tgd[cr][bstart])):
                #print j
                #bend,prebend,nxtbend=tgd[cr][bstart][j][0],bends[prebstart],bends[nxtbstart]#basal end
                bend=tgd[cr][bstart][j][0]#basal end
                prebend,nxtbend=bends[cr][prebstart],bends[cr][nxtbstart]#basal end
                gname,start,end,estart,eend=tgd[cr][bstart][j][1],tgd[cr][bstart][j][2],tgd[cr][bstart][j][3],tgd[cr][bstart][j][4],tgd[cr][bstart][j][5]
                minpos,maxpos=min(bstart,max(estart,prebend)),max(bend,min(eend,nxtbstart))
                if minpos<0:minpos=0
                for bin in range(minpos/chrbinsize,maxpos/chrbinsize+1):
                    if not gd[cr].has_key(bin):gd[cr][bin]={}
                    if not gd[cr][bin].has_key(minpos):gd[cr][bin][minpos]=[]
                    gd[cr][bin][minpos].append([maxpos,gname,start,end])
            i+=1
        print cr,poses[0],tgd[cr][poses[0]]
        
        
        if lth>=1:
            #the first gene on chr
            i=0
            bstart,prebstart,nxtbstart=poses[i],0,poses[i+1]#basal start
            for j in range(len(tgd[cr][bstart])):
                bend,prebend,nxtbend=tgd[cr][bstart][j][0],0,bends[cr][nxtbstart]#basal end
                gname,start,end,estart,eend=tgd[cr][bstart][j][1],tgd[cr][bstart][j][2],tgd[cr][bstart][j][3],tgd[cr][bstart][j][4],tgd[cr][bstart][j][5]
                minpos,maxpos=min(bstart,max(estart,prebend)),max(bend,min(eend,nxtbstart))
                if minpos<0:minpos=0
                for bin in range(minpos/chrbinsize,maxpos/chrbinsize+1):
                    if not gd[cr].has_key(bin):gd[cr][bin]={}
                    if not gd[cr][bin].has_key(minpos):gd[cr][bin][minpos]=[]
                    gd[cr][bin][minpos].append([maxpos,gname,start,end])
                
            #the last gene on chr
            i=lth
            bstart,prebstart,nxtbstart=poses[i],poses[i-1],None#basal start
            for j in range(len(tgd[cr][bstart])):
                bend,prebend,nxtbend=tgd[cr][bstart][j][0],bends[cr][prebstart],None#basal end
                gname,start,end,estart,eend=tgd[cr][bstart][j][1],tgd[cr][bstart][j][2],tgd[cr][bstart][j][3],tgd[cr][bstart][j][4],tgd[cr][bstart][j][5]
                minpos,maxpos=min(bstart,max(estart,prebend)),eend#max(bend,min(eend,nxtbstart))
                if minpos<0:minpos=0
                for bin in range(minpos/chrbinsize,maxpos/chrbinsize+1):
                    if not gd[cr].has_key(bin):gd[cr][bin]={}
                    if not gd[cr][bin].has_key(minpos):gd[cr][bin][minpos]=[]
                    gd[cr][bin][minpos].append([maxpos,gname,start,end])
        elif lth>=0:#only one gene on chr
            i=0
            bstart,prebstart,nxtbstart=poses[i],None,None#basal start
            for j in range(len(tgd[cr][bstart])):
                bend,prebend,nxtbend=tgd[cr][bstart][j][0],None,None#basal end
                gname,start,end,estart,eend=tgd[cr][bstart][j][1],tgd[cr][bstart][j][2],tgd[cr][bstart][j][3],tgd[cr][bstart][j][4],tgd[cr][bstart][j][5]
                minpos,maxpos=estart,eend#min(bstart,max(estart,prebend)),max(bend,min(eend,nxtbstart))
                if minpos<0:minpos=0
                for bin in range(minpos/chrbinsize,maxpos/chrbinsize+1):
                    if not gd[cr].has_key(bin):gd[cr][bin]={}
                    if not gd[cr][bin].has_key(minpos):gd[cr][bin][minpos]=[]
                    gd[cr][bin][minpos].append([maxpos,gname,start,end])
    return gd
    N(    (
   t   bupt   bdnt   eupt   ednR‰   t   posStartColt	   posEndColt   negStartColt	   negEndColR‹   (    (    sC   /oak/stanford/groups/akundaje/marinovg/programs/danpos-2.2.2/lib.pyt   GREATdomainæ  s    s   -5000:1000:1000000c   %   	   C   sð  | d k r d GHg  S| d k r% |  S| j d ƒ } t | ƒ d k  rS d G| GHg  S| d d k rp d G| GHg  S| d d k r d	 G| GHg  St | d ƒ t | d ƒ | d <| d <| d
 d k rÓ d | d
 <n t | d
 ƒ | d
 <| d k rt | ƒ } n  t |  ƒ d
 k  r|  S|  d d d k rA|  d d  |  d <n  |  d d g |  d j d ƒ i  } } } i  i  d } }	 }
 xî t | ƒ j ƒ  d D]Ö } |
 d | j ƒ  }
 } | d | d | d
 } } } | j | ƒ sñi  | | <n  | d k r7t | d ƒ } | | | | d g | | | | d <q˜t | d ƒ } | | | | d g | | | | d <q˜Wx| D]	} |	 j | ƒ s›i  |	 | <n  |	 | j d ƒ s¿i  |	 | d <n  | | j ƒ  } | j	 ƒ  d t | ƒ d } } x| | k  r| | | | d | | d } } } | | | d
 | | | d
 | | | d
 } } } | | | d | | | d } } t
 | t | | | d
 ƒ ƒ t | t
 | | | d
 ƒ ƒ } } x¬ t | | | | d ƒ D] } |	 | d j | ƒ si  |	 | d | <n  |	 | d | j | ƒ sGg  |	 | d | | <n  |	 | d | | j d | | | g ƒ qáW| d 7} qóWqyWxc|  d D]W} d d | j d ƒ } } } i  } | d g  } } x? d d
 d g D]. } y | j t | | ƒ ƒ WqÛqÛqÛXqÛWt
 | ƒ t | ƒ } } | | | | }  }! t |  |! d ƒ }" x'|" D]} |	 j | ƒ spqUn  |	 | d j | ƒ sqUn  xä |	 | d | D]Ð }# xÇ t t |	 | d | |# ƒ ƒ D]£ } |	 | d | |# | d |	 | d | |# | d
 |	 | d | |# | d } }$ } | |# k rÉ| |$ k  rÉd | | d t | ƒ d t | ƒ <qÉqÉWq WqUWt | ƒ d k r¸| d 7} | d d j | j ƒ  ƒ d 7} n  | d k r‘| j | d  d | d  d ƒ q‘q‘W| S(   sÞ   
    positionLines:  The first line in positionLines must be the title line, each line should have a '
' at the end, positionLines should be in the default output format of DANPOS, see DANPOS documentation for example
    s!   Error: gene file is not provided.R€   i   s@   Wrong! Less than three fields could be detected in the selector:i    R	   s9   Wrong! Please set a upstream bound in the GREAT selector:i   s;   Wrong! Please set a downstream bound in the GREAT selector:i   iÿÿÿÿs   
s   	relatedGenes
s   	R#   i   t   TSSt   /R‚   t   |Ns   TSS:(   R(   R.   R&   R\   RN   R0   R1   RS   R$   R%   RM   R4   R†   R5   R-   (%   R‡   Rˆ   R‰   R‹   R‘   RŽ   R   R   t   tgdR“   t   nRf   Rg   R”   R•   Ri   R"   RA   RB   Rz   t   bstartt	   prebstartt	   nxtbstartt   bendt   prebendt   nxtbendRš   R›   R–   R—   R˜   t   tgenesRœ   R   Rž   t   startt   end(    (    sC   /oak/stanford/groups/akundaje/marinovg/programs/danpos-2.2.2/lib.pyt   positionSelectorByGreatTSSN  sª     			)    ,  *+  
(8%A"  -    )\ 5
$ (c   &      C   s?  | d$ k r d GHg  S| d$ k r% |  St |  ƒ d k  r; |  S|  d d d k rd |  d d  |  d <n  |  d d g |  d j d ƒ i  } } } | j d ƒ } | d d	 k r¸ d	 } nG | d d
 k rÑ d
 } n. t | ƒ d k rì d GHg  S| j d	 ƒ d	 } | d  } i  d g  }	 }
 } xEt t | ƒ ƒ D]1} | | j d ƒ | | <| | d d% k rvd G| | d GHg  Sd |	 | | d <| | d d k rìt | | d ƒ | | d <t | | d ƒ |
 k rìt | | d ƒ }
 qìn  | | d d k rPt | | d ƒ | | d <t | | d ƒ |
 k rPt | | d ƒ }
 qPn  | j | | ƒ q0W| } |
 | k r€|
 } n  i  } d } xt | ƒ j ƒ  d D]ï} | d 7} | j ƒ  } | d | d } } | j	 | ƒ sði  | | <n  |	 j	 d ƒ r#| | j	 d ƒ s#i  | | d <n  | d k r^| d | | t | d ƒ f \ } } } } n, | d | | t | d ƒ f \ } } } } t | | ƒ } | | d j	 | ƒ sÆi  | | d | <n  | | d | j	 | ƒ súg  | | d | | <n  | | d | | j | | | g ƒ n  |	 j	 d ƒ rV| | j	 d ƒ sVi  | | d <n  | d k r‘| d | | t | d ƒ f \ } } } } n, | d | | t | d ƒ f \ } } } } t | | ƒ } | | d j	 | ƒ sùi  | | d | <n  | | d | j	 | ƒ s-g  | | d | | <n  | | d | | j | | | g ƒ n  |	 j	 d ƒ r‰| | j	 d ƒ s‰i  | | d <n  | d k rÄ| d | | t | d ƒ f \ } } } } n, | d | | t | d ƒ f \ } } } } t | | ƒ } | | d j	 | ƒ s,i  | | d | <n  | | d | j	 | ƒ s`g  | | d | | <n  | | d | | j | | | g ƒ n  |	 j	 d ƒ r¼| | j	 d ƒ s¼i  | | d <n  | d k r÷| d | | t | d ƒ f \ } } } } n, | d | | t | d ƒ f \ } } } } t | | ƒ } | | d j	 | ƒ s_i  | | d | <n  | | d | j	 | ƒ s“g  | | d | | <n  | | d | | j | | | g ƒ n  |	 j	 d ƒ r	| | j	 d ƒ sïi  | | d <n  | d k r1| d | | | d d  j d ƒ f \ } } } } n3 | d | | | d d  j d ƒ f \ } } } } x³ | D]¨ } t | ƒ } t | | ƒ } | | d j	 | ƒ s¹i  | | d | <n  | | d | j	 | ƒ síg  | | d | | <n  | | d | | j | | | g ƒ qkWn  |	 j	 d ƒ rx
| | j	 d ƒ sM	i  | | d <n  | d k r	| d | | | d d  j d ƒ f \ } } } } n3 | d | | | d d  j d ƒ f \ } } } } x³ | D]¨ } t | ƒ } t | | ƒ } | | d j	 | ƒ s
i  | | d | <n  | | d | j	 | ƒ sK
g  | | d | | <n  | | d | | j | | | g ƒ qÉ	Wn  |	 j	 d ƒ rï| | j	 d ƒ s«
i  | | d <n  | d | | | d d  j d ƒ | d d  j d ƒ f \ } } } } } t | ƒ } xë t | ƒ D]Ú } t | | ƒ t | | ƒ } } x° t | | | ƒ D]œ } t | | ƒ } | | d j	 | ƒ sŠi  | | d | <n  | | d | j	 | ƒ s¾g  | | d | | <n  | | d | | j | | | g ƒ qHWqWn  |	 j	 d ƒ rm| | j	 d ƒ s"i  | | d <n  | d | | | d d  j d ƒ | d d  j d ƒ f \ } } } } } t | ƒ } xò t d | ƒ D]Þ } t | | d ƒ t | | ƒ } } x° t | | | ƒ D]œ } t | | ƒ } | | d j	 | ƒ si  | | d | <n  | | d | j	 | ƒ s<g  | | d | | <n  | | d | | j | | | g ƒ qÆWqˆWn  |	 j	 d ƒ r£| | j	 d ƒ s i  | | d <n  | d | | t | d ƒ t | d ƒ f \ } } } } } x³ t | | | ƒ D]œ } t | | ƒ } | | d j	 | ƒ s1i  | | d | <n  | | d | j	 | ƒ seg  | | d | | <n  | | d | | j | | | g ƒ qïWq£q£W| Gd  GHx™|  d D]} d d | j d ƒ } } } xé| D]á} i  } | d g  } }  x? d d d g D]. } y |  j t | | ƒ ƒ WqqqXqWt
 |  ƒ t |  ƒ }! }" t |! |
 | ƒ t |" |
 | ƒ }# }$ t |# |$ d ƒ }% xâ|% D]Ú} | j	 | ƒ sªqn  | | | d j	 | ƒ sËqn  x›| | | d | D]ƒ} xzt t | | | d | | ƒ ƒ D]R} | | | d | | | d } | | | d | | | d d k rÌ|" | | d k rÌ|! | | d k  rÌd | | | | d | | | d d! t | ƒ d! t | ƒ <q| | | d | | | d d" k r|" | | d k r|! | | d k  rd | | | | d | | | d d! t | ƒ d! t | ƒ <qqWqâWqWt | ƒ d k rÔ| d 7} | | d d d j | j ƒ  ƒ d# 7} qÔqÔW| d	 k rû| t | ƒ k rû| j | d  d | d  d ƒ qª| d
 k rª| d k rª| j | d  d | d  d ƒ qªqªW| S(&   s7  
    positionLines:  The first line in positionLines must be the title line, each line should have a '
' at the end, positionLines should be in the default output format of DANPOS, see DANPOS documentation for example
    selection:  promoter:-350:50&control_smt_val:0:1000&0-log10(point_diff_pval):0:1e-10
    s!   Error: gene file is not provided.i   i    iÿÿÿÿs   
s   	relatedGenes
s   	R‚   t   andt   ori   sB   Error: the selection must be defined with 'and' or 'or' at the endR€   Rª   t   TTSt   CSSt   CTSt   ESSt   ETSt   exont   intronRŸ   s   Error: can not do selection forR	   R#   i   i   i   i   i   i	   R—   R«   RY   R¬   N(	   Rª   R»   R¼   R½   R¾   R¿   RÀ   RÁ   RŸ   (   R(   R&   R.   R†   R4   R\   Rƒ   R0   R1   RS   RM   RN   R5   R-   R$   (&   R‡   Rˆ   R‰   R‹   RŽ   R   R   R‘   t   andort   selsdicR’   t   tselsRB   R“   R®   Rf   Rg   R•   Ri   R”   R"   R–   t   possRw   Rx   Re   R¶   R·   R—   R˜   R™   Rµ   RA   Rš   R›   Rœ   R   Rž   (    (    sC   /oak/stanford/groups/akundaje/marinovg/programs/danpos-2.2.2/lib.pyt   positionSelectorByGeneStructure™  sŠ      , 	 	
   	
   /,  )  /,  )  /,  )  /,  )  63  -  63  - J!  1 J%  1 <  1	  )  -"PEPQ
0$(c         C   s#  | d k r |  St |  ƒ d k  r& |  S|  d g |  d j d ƒ i  } } } | d d d k rw | d d  | d <n  x( t t | ƒ ƒ D] } | | | | <qŠ W| j d ƒ } | d d k rÊ d } nL | d d k rã d } n3 t | ƒ d	 k r| GHd
 GHg  S| j d ƒ d } | d  } xÈ t t | ƒ ƒ D]´ } | | j d ƒ | | <| | d | d	 k rd G| | d Gd GHg  S| | d	 d k r´t | | d	 ƒ | | d	 <n  | | d d k r3t | | d ƒ | | d <q3q3Wx1|  d	 D]%} d | j d ƒ }	 }
 x° | D]¨ } t |
 | | d ƒ } t t } } | d	 d k rp| | d	 k rvt } qvn t } | d d k r¢| | d k r¨t } q¨n t } | r| r|	 d	 7}	 qqW| d k ró|	 t | ƒ k ró| j | ƒ qö| d k rö|	 d k rö| j | ƒ qöqöW| S(   s7  
    PositionLines:  The first line in positionLines must be the title line, each line should have a '
' at the end, positionLines should be in the default output format of DANPOS, see DANPOS documentation for example
    selection:  promoter:-350:50&control_smt_val:0:1000&0-log10(point_diff_pval):0:1e-10
    i   i    s   	iÿÿÿÿs   
R‚   R¹   Rº   i   sB   Error: the selection must be defined with 'and' or 'or' at the endR€   s   Error:s)   is not a column name in the position fileR	   N(   R(   R&   R.   R4   R†   Rb   R…   R„   (   R‡   Rˆ   RŽ   R   R   RB   R‘   RÂ   Rf   R˜   Rg   R™   Rs   t   ok1t   ok2(    (    sC   /oak/stanford/groups/akundaje/marinovg/programs/danpos-2.2.2/lib.pyt   positionSelectorByValueU  sd      (   	 	
#     Rh   t   diff_smt_locat   point_diff_pvalt   treat_point_valt   control_point_valgH¯¼šò×z>g        c	         C   sê  t  |  ƒ j ƒ  }	 t |	 ƒ d k  r( i  S|	 d j ƒ  }
 i  } x+ t d t |
 ƒ ƒ D] } | | |
 | <qT W| | | | | | } } } t | ƒ d k r½ | | d | | d g } n  i  } d } | rò t  | d ƒ } | j |	 d ƒ n  xÂ|	 d D]¶} | j ƒ  }
 |
 | d k r%qý n  yo | rg|
 | t |
 | ƒ t t |
 | ƒ d ƒ } } } n, |
 | t |
 | ƒ t |
 | ƒ } } } Wn | GHqý n X| d  k rÄ| | k rÄqý n  | d  k râ| | k râqý n  t | ƒ d k ri| d k r	d } n  t |
 | d ƒ t |
 | d ƒ k  rid | t
 d | ƒ } |
 | <d j |
 ƒ d } qin  | r| j | ƒ n  | j | ƒ s›i  | | <n  | | | | <| d 7} qý Wd	 G| Gd
 Gt |	 ƒ d Gd G| G| Gd G| GH| S(   Ni   i    i   R
   RY   g       s   	s   
s
   
retrieveds   summits out oft   byt   to(   R0   R1   R&   R.   R4   R3   R\   R   Rb   R(   R5   R-   RS   (   t   in_filet   out_filet   cr_col_namet   pos_col_namet   val_col_namet   direction_byt	   top_valuet   bottom_valuet
   log10transR   Rg   t   idsRB   t   cridt   posidt   vidt   dirbt   outt   retrieveR@   Rf   Rh   R"   Rs   (    (    sC   /oak/stanford/groups/akundaje/marinovg/programs/danpos-2.2.2/lib.pyt   retrieve_positions_by_value‰  sX          90   	(  /c	         C   sJ  t  |  ƒ j ƒ  }	 t |	 ƒ d k  r( i  S|	 d j ƒ  }
 i  } x+ t d t |
 ƒ ƒ D] } | | |
 | <qT W| | | | | | } } } t | ƒ d k r½ | | d | | d g } n  i  } | rì t  | d ƒ } | j |	 d ƒ n  i  } i  } xr |	 d D]f } | j ƒ  }
 yB t |
 | ƒ | |
 | d |
 | <| | |
 | d |
 | <Wq| GHqqXqWd d l m } t	 | j
 ƒ  d | d ƒ d	 | ƒ} d } | d  k r¼d } n  | d  k r×t | ƒ } n  xIt | | ƒ D]8} | | d j d ƒ \ } } | | d } t | ƒ d k rÃ| d k r?d
 } n  | | | d j ƒ  }
 t |
 | d ƒ t |
 | d ƒ k  rÃd | t d | ƒ } |
 | <d j |
 ƒ d | | | d <qÃn  | rå| j | | | d ƒ n  | j | ƒ si  | | <n  | | | t | ƒ <| d 7} qçWd G| Gd Gt |	 ƒ d Gd Gt GH| S(   Ni   i    i   R
   R‚   iÿÿÿÿ(   t
   itemgettert   keyt   reverseg       s   	s   
s
   
retrieveds   summits out ofRÎ   (   R0   R1   R&   R.   R4   R3   Rb   t   operatorRá   t   sortedt   itemsR(   R5   R-   RS   R\   t   col_name(   RÐ   RÑ   RÒ   RÓ   RÔ   t   toprankt
   bottomrankt
   decreasingRÕ   R   Rg   RÙ   RB   RÚ   RÛ   RÜ   RÝ   RÞ   R@   t   tosortt   linesdicRf   Rá   t	   aftersortRß   Rh   R"   Rs   (    (    sC   /oak/stanford/groups/akundaje/marinovg/programs/danpos-2.2.2/lib.pyt   retrieve_positions_by_rank¯  sb        $$ 	  	(%  #i^  i2   RN   c   ,   
   C   sã  |  } i  } | rà d d l  m } x» | D]° } i  | | <x | | D]‘ } | | | d k r d | | | | ƒ | | | <qD | | | d k  r¸ | d | | | ƒ | | | <qD d G| G| Gd G| | | GHqD Wq) Wn  | } i  i  } } xÏ | D]Ç } i  i  | | <| | <x© | | D] } | | | } | | j | ƒ s`| | | | | | <q | d k r–t | | | | | | ƒ | | | <q t | | | | | | ƒ | | | <q Wqú W| rÝt | d ƒ } n  | ró| j d ƒ n  i  } xt| D]l} | d  d	 k r#| d  } n  | j |	 ƒ } | j | | ƒ sKq n  | | | | | | | | | | f \ } } } } | | d
 k rÊ| | | | | | | | | | f \ } } } } n  |
 d  k râ| g } n | j |
 ƒ } xx| D]p} t	 | ƒ t	 | ƒ | } g  g  } }  xr t
 | | | | | | ƒ D]R } | | j | ƒ rDd | | | <| j t | ƒ ƒ |  j | | | ƒ qDqDWt | ƒ d k røt |  ƒ t |  ƒ }! }" g  }# x4 t
 d t | ƒ ƒ D] }$ |# j t |  |$ ƒ ƒ qáWd j | | | t | ƒ t |! ƒ t |" ƒ d j |# ƒ g ƒ } | d k r[|" | | <qh|! | | <qøqøWq Wd \ }% }& }' x" | D] } |% t | | ƒ 7}% q†Wx" | D] } |& t | | ƒ 7}& q«Wx" | D] } |' t | | ƒ 7}' qÐW|' Gd G|& Gd G| GHd	 G|% Gd G|& Gd Gt | ƒ Gd Gt | ƒ d Gd GHd d l m }( | d k rut | j ƒ  d |( d ƒ ƒ}) n$ t | j ƒ  d |( d ƒ d t ƒ}) g  }* x= |) D]5 }+ | rÊ| j |+ d d	 ƒ n  |* j |+ d ƒ q¦W|* S(   Niÿÿÿÿ(   R   i    s   fail to do log transfer ats   due to valueRN   R
   s(   name	chr	pos	max_value	min_value	values
s   
R#   i   s   	R‚   RM   s   summits merged tos   by step sizet   ofs   summits mapped tos   genes
(   Rá   Râ   Rã   (   i    i    i    (   t   mathR   RS   RN   RM   R0   R3   R.   R(   R\   R4   R†   R5   R&   R-   Rä   Rá   Rå   Ræ   R„   (,   t	   positionsRÑ   t   upt   downR   R   RF   RG   R   R   R   R   t   neglogt   rankbyR   t   summitst   tsmitR   R•   R"   RW   t   msmtsRh   RC   R@   RÞ   Rf   Rg   t   tupt   tdnRA   t   pst   vst   maxvt   minvt   tvsRB   t   mcountt   tcountt   ocountRá   Rí   t   routt   item(    (    sC   /oak/stanford/groups/akundaje/marinovg/programs/danpos-2.2.2/lib.pyt   positions2PointsÜ  s˜    
 # #(  */    6 9 % @    5 !$ RT   s   Relative distance to TSSs   Average occupancyt   blackt   grayt   redt   bluet   oranget   purplet   skybluet   cyant   greent   blue4t   darkgoldenrodc   !      C   sÈ  | d k r | } n  d } | d  k r@ |  j ƒ  } | j ƒ  n  t |  | d j ƒ  ƒ t |  | d j ƒ  ƒ t |  | d j ƒ  ƒ t |  | d j ƒ  ƒ f \ } } } } t | ƒ t | ƒ k  rÝ d Gt | ƒ Gd GHd Sxmt t | ƒ ƒ D]Y} | | } |  | j ƒ  |  | j ƒ  } } t | ƒ t | ƒ t | ƒ t | ƒ f \ } } } } | | k rl| } n  | | k  r| } n  | | k r–| } n  | | k  r«| } n  g  g  } } |  | j ƒ  } | j ƒ  x< | D]4 } | j t	 | ƒ ƒ | j t	 |  | | ƒ ƒ qÙW| d d j
 | ƒ d d j
 | ƒ d | | d	 7} qð W| d
 d j
 | ƒ d d j
 | d t | ƒ !ƒ d 7} | d  k r›| } n  | d  k r°| } n  | d  k rÅ| } n  |	 d  k rÚ|	 } n  | | | t | ƒ d d 7} | d k rsd | d t	 | ƒ d t	 | ƒ d d t	 | ƒ d t	 | ƒ d t	 |
 ƒ d t	 | ƒ d | } nÌd | d t	 | ƒ d t	 | ƒ d d t	 | ƒ d t	 | ƒ d t	 |
 ƒ d t	 | ƒ d | } |  | d j ƒ  } | j ƒ  d t	 | ƒ g d d g } } | d d j
 | ƒ d d j
 | ƒ d 7} | d | d | d | d } t | d  ƒ } g  g  } } | d d k  róx[ t | d | d | | ƒ D]8 } | j d! t	 | ƒ ƒ | j d" t	 | ƒ d# ƒ q´Wn  | d d j
 | ƒ d d j
 | ƒ d 7} g  g  } } xP t | | | d | ƒ D]4 } | j t	 | ƒ ƒ | j d# t	 | ƒ d# ƒ qGW| d d j
 | ƒ d d j
 | ƒ d 7} g  g  } } xX t | | | d | | ƒ D]8 } | j t	 | ƒ ƒ | j d$ t	 | | ƒ d# ƒ q×W| d d j
 | ƒ d d j
 | ƒ d 7} | d k rÄd% t	 | ƒ d t	 | ƒ d | } d& | d' | } | d( 7} t | d) d* ƒ }  |  j | ƒ |  j ƒ  t | ƒ n  | S(+   NR	   i    s   Wrong:please specify s   colors for the curvess   lines(c(R‚   s   ),c(s   ),col="s   ")
s   legend("topright",legend=c("s   ","s
   "),col=c("s
   "),lty=1)
g¸…ëQ¸¾?gš™™™™™¹?s   plot(0,0,type="n",main="s	   ",xlim=c(s   ),s   ylim=c(s   ),xlab="s   ",ylab="s   ",)
s   ",xaxt="n",xlim=c(t   0s   "Start"s   "End"s   axis(side=1,at=c(s   ),labels=c(s   ))
iÿÿÿÿi   i   RY   s   "-s   "s   "+s   par(mfrow=c(s   pdf("s   .pdf")
s
   dev.off()
s   .RR
   (   R(   R$   R%   RM   RN   t   valuesR&   R4   R†   R5   R-   R\   R0   R3   R2   R    (!   R=   R7   t   mainR!   t   nrowt   ncolt   xmint   xmaxt   ymint   ymaxt   xlabt   ylabt   colorst   namest   rcodet   xmincalt   xmaxcalt   ymincalt   ymaxcalRB   RT   RA   t   valst   txmint   txmaxt   tymint   tymaxt   tposesR"   t   att   lbRz   R@   (    (    sC   /oak/stanford/groups/akundaje/marinovg/programs/danpos-2.2.2/lib.pyt   plot!  s’     	n
!6 	 	 	 	
<9 	 	 	 	  mj
,"%",!,%#,&

c         C   sÁ  | d k r | } n  |
 d  k r: |  j ƒ  }
 |
 j ƒ  n  t |	 ƒ t |
 ƒ k  ri d Gt |
 ƒ Gd GHd Sd } xW |
 D]O } g  } x% |  | D] } | j t | ƒ ƒ q W| d d j | ƒ d 7} qv W| d t | ƒ d t | ƒ d	 7} x  |
 D] } | d
 | d 7} qö W| d  } | d 7} | d | d 7} | d k r½d t | ƒ d t | ƒ d | } d | d | } | d 7} t | d d ƒ } | j | ƒ | j	 ƒ  t
 | ƒ n  | S(   NR	   s   please specify s   colors for the curvess   library('vioplot')
vioplot(s   c(R‚   s   ),s   ylim=c(s
   ),names=c(t   's   ',iÿÿÿÿs   ))
s   mtext('s   ')
s   par(mfrow=c(s   pdf("s   .pdf")
s
   dev.off()
s   .RR
   (   R(   R$   R%   R&   R†   R5   R-   R0   R3   R2   R    (   R=   R7   R  R  R  R  R  R  R  R  R  R  RT   t   tempt   valueR@   (    (    sC   /oak/stanford/groups/akundaje/marinovg/programs/danpos-2.2.2/lib.pyt   vioploti  s:     	 & 

&

c         C   sØ  t  d ƒ } d |  j } |  j } d g | d } d } xÄ | D]¼ } | GH| | j } x˜ t d | | | d ƒ D]| }	 | d 7} | d d k rŸ | Gd GHn  | t | | |	 |	 | !ƒ ƒ }
 x, t | d ƒ D] } | | c |
 | 7<qÑ Wqs W| Gd	 GHq@ W| d  k r"t | d
 d ƒ } n  i  } x© t t | |  j d ƒ t | |  j d d ƒ ƒ D]r } | | | | | |  j d | <| d  k r^| j	 t
 | |  j d | ƒ d t
 | | | ƒ d ƒ q^q^W| S(   Ns4   function(q){return(spec.pgram(q,plot = FALSE)$spec)}i † g        i   i    i   id   s   window calculated ...s   window calculated.s   .xlsR
   iú   g      ð?s   	s   
(   R    R   RP   t   sizeR4   R   R(   R0   R\   R3   R5   (   R   R7   t   psdRz   t   dt   spet   wnR•   t   szRB   Rs   t   jR@   R=   (    (    sC   /oak/stanford/groups/akundaje/marinovg/programs/danpos-2.2.2/lib.pyt   occPSD0†  s0    	!
 !  <! Cc      	   C   s•  t  d ƒ } |  j } d d d i  f \ } } } } x! t | | ƒ D] } d | | <qC Wx± | D]© }	 |	 GH| |	 j | d }
 | |
 7} x| t | | ƒ D]k } | t | |	 d |
 !ƒ t | |	 | | |
 !ƒ ƒ } t t | ƒ j ƒ  d ƒ } | | c | |
 7<q˜ Wq^ W| d  k r-t	 | d d ƒ } n  xa t | | ƒ D]P } | | | | | <| d  k r=| j
 t | ƒ d t | | ƒ d	 ƒ q=q=W| S(
   Ns#   function(q1,q2){return(cor(q1,q2))}i    id   iú   i   s   .xlsR
   s   	s   
(   R    RP   R4   R0  R   Rb   R5   R.   R(   R0   R3   (   R   R7   t   corR2  t   tszt   mit   maR=   RB   R•   R5  Rs   R@   (    (    sC   /oak/stanford/groups/akundaje/marinovg/programs/danpos-2.2.2/lib.pyRK   œ  s(    	 
5  0c         C   sà  | d } d i  } } xª |  D]¢ } |  | j  ƒ  } | t | ƒ 7} | j ƒ  t | ƒ }	 xc t d |	 ƒ D]R }
 t | |
 | |
 d | ƒ } | j | ƒ s¬ d | | <qj | | c d 7<qj Wq W| d  k ræ t | d d ƒ } n  | d  k r| | j  ƒ  ƒ } n  | d  k r(| | j  ƒ  ƒ } n  i  } x« t t | | ƒ t | | ƒ ƒ D]† } | j | ƒ std | | <n  | | d | | | <| | | | | <| d  k rR| j t	 | | ƒ d t	 | | ƒ d ƒ qRqRW| S(   Ni   i    s   .xlsR
   g      Y@s   	s   
(
   R$   R&   R%   R4   R\   RS   R(   R0   R3   R5   (   R=   R7   RM   RN   R   t   ctt   disR•   RA   Rz   RB   R2  R@   t   odic(    (    sC   /oak/stanford/groups/akundaje/marinovg/programs/danpos-2.2.2/lib.pyRO   ³  s6    


     *  4c   
      C   sœ   | d } d i  } } x~ |  D]v } i  | | <|  | j  ƒ  } | j ƒ  t | ƒ } x= t d | ƒ D], }	 | |	 | |	 d | | | |	 d <qd Wq W| S(   Ni   i    (   R$   R%   R&   R4   (
   R=   R7   RM   RN   R<  R=  R•   RA   Rz   RB   (    (    sC   /oak/stanford/groups/akundaje/marinovg/programs/danpos-2.2.2/lib.pyt   positionDistanceÒ  s    



.c         C   s®  i  } d } x} |  D]u } | t  |  | ƒ 7} xX |  | j ƒ  D]F } t | | d ƒ } | j | ƒ st d | | <q> | | c d 7<q> Wq W| d k  rœ i  S| d  k r¾ t | d d ƒ }	 n  i  }
 x« t t | | ƒ t | | ƒ ƒ D]† } | j | ƒ s
d | | <n  | | d | | | <| d  k r\|	 j t | | ƒ d t | | ƒ d ƒ n  | | |
 | | <qè Wi  } x/ |
 D]' } |
 | d k r|
 | | | <qqW| S(	   Ni    g      à?i   s   .xlsR
   g      Y@s   	s   
(	   R&   R  R\   RS   R(   R0   R4   R3   R5   (   R=   R7   RM   RN   R   t   vdicR<  R•   Rs   R@   R>  R2  t   rodicR<   (    (    sC   /oak/stanford/groups/akundaje/marinovg/programs/danpos-2.2.2/lib.pyRR   ö  s4       *  0 c         C   s-  | | | 8} | | | 8} |  } i  } xW | j  ƒ  D]I } i  | | <x6 | | D]* } | | | } | | | | | | <qP Wq5 Wi  } d } xá| D]Ù} | j ƒ  } | | | |	 } } | | } | d k rß | | } n  | d  k r÷ | g } n | j | ƒ } xe| D]]} | d k r%qn  t | ƒ } | | | 8} | j | ƒ sTqn  | d 7} | d k ràxý t | | | | | ƒ D]T } | | j | ƒ r…| j | | ƒ rÈ| | | c d 7<qÙd | | | <q…q…Wq| d k rx{ t | | | | | | | ƒ D]T } | | j | ƒ r| j | | ƒ rR| | | c d 7<qcd | | | <qqWqqWq• W| | 9} | d  k ržt | d d ƒ } n  xˆ t d | | | ƒ D]p } | j | ƒ s×d | | <n  | | d | | | <| d  k rµ| j t | ƒ d	 t | | ƒ d
 ƒ qµqµW| S(   Ni    R#   R	   i   RY   s   .xlsR
   g      ð?s   	s   
(	   R$   R.   R(   R\   RS   R4   R0   R3   R5   (   RW   R7   R   R   R   R   R   RF   RG   R   R   R   R   t   tsmtdict   smtdicRh   R"   t   tposR=  Re   Rf   Rg   Ri   Rk   t   tssesRc   R<   (    (    sC   /oak/stanford/groups/akundaje/marinovg/programs/danpos-2.2.2/lib.pyRV     sd    

    
! )  
   0i   i   c
         C   s  t  j j |  d ƒ }
 | d' k r* |
 } n  i  } x… t t  j j |
 d ƒ ƒ D]h } t  j j | ƒ d } t j d d | ƒ } t d | d d' d d	 d
 d' d d' d t	 d g  ƒ | | <qL Wt
 d | d t  j j | d ƒ d | d | d d ƒ } t d | d t  j j | d ƒ d d d d d d d d ƒ i  } x… t t  j j |
 d ƒ ƒ D]h } t  j j | ƒ d } t j d d | ƒ } t d | d d' d d d
 d' d d' d t	 d g  ƒ | | <qJWt
 d | d t  j j | d ƒ d | d | d d  ƒ } t d | d t  j j | d ƒ d d! d d ƒ i  } x… t t  j j |
 d ƒ ƒ D]h } t  j j | ƒ d } t j d d | ƒ } t d | d d' d d d
 d' d d' d t	 d g  ƒ | | <q<Wt d | d t  j j | d" ƒ d d# d d$ d | ƒ } t d | d t  j j | d" ƒ d d% d d ƒ d& GHd' S((   sJ  
    if outpath==None:outpath=inpath
    for file in glob(os.path.join(inpath,'*positions.differential.xls')):
        pks=retrieve_positions_by_rank(in_file=file,out_file=None,col_name='point_diff_pval',toprank=None,bottomrank=None,decreasing=True,direction_by=['treat_point_val','control_point_val'])
        positions2Points(positions=pks,out_file=os.path.join(outpath,os.path.split(file)[-1][:-3]+'2tss.xls'),up=350,down=50,chrColID=1,nameColID=0,posColIDpos=3,posColIDneg=4,straColID=2,sep='	',second_sep=None,step=1,                     neglog=True, rankby='max',lines=lines)
    t   pooleds   *positions.xlsiÿÿÿÿs   positions.xlsR	   RÐ   RÑ   Rç   t   fuzziness_scoreRè   Ré   Rê   RÕ   RP   R7   t   position_fuzziness_distributionRM   RN   R   g{®Gáz„?R=   R  i   R  i   R  t	   FuzzinessR  t
   Percentaget	   smt_valuet   position_occupancy_distributioni   t	   occupancyt   position_distance_distributioni2   i  t   distances	   job done
N(   R)   R*   R-   R(   R   R.   t   ret   subRî   R…   RU   R+  RQ   (   t   inpatht   outpathR   R   t   minfuzt   maxfuzt   minocct   maxoccR   R   t   pthRW   t   filet   fnR=   (    (    sC   /oak/stanford/groups/akundaje/marinovg/programs/danpos-2.2.2/lib.pyt   runall<  s2    [ 	!";6:";6.";6.c         C   sè   i  } d d l  m } x< t |  ƒ D]. } | j ƒ  } t | d ƒ d | | d <q# Wt | ƒ } | j ƒ  d  GHxq | D]i } | d  j d ƒ } t | d | | d ƒ ƒ | d <t | d | | d ƒ ƒ | d <d j | ƒ GHqw Wd  S(	   Niÿÿÿÿ(   t   randinti   i    s   	i   i   i   (   t   randomR\  R0   R.   R\   Ra   R5   R-   (   t
   genomefilet   genefileR“   R\  Rf   Rg   R?   (    (    sC   /oak/stanford/groups/akundaje/marinovg/programs/danpos-2.2.2/lib.pyt	   randomTSSé  s     
!!c         C   s/  d d g  i  f \ } } } } x; |  D]3 } x* |  | D] } | |  | | j  ƒ  7} q6 Wq% W| j ƒ  t | ƒ }	 | t |	 | d ƒ | t |	 | d ƒ d } } xx |  D]p } g  | | <x] |  | D]Q } xH |  | | j  ƒ  D]2 }
 |
 | k rä |
 | k  rä | | j |
 ƒ qä qä WqÉ Wq® W| | | g S(   Ni    g      Y@i   (   R  R%   R&   R\   R†   (   R=   t
   lowPercentt   highPercentt   outmint   outmaxR  t   dvaluesRT   Rh   Rz   R.  (    (    sC   /oak/stanford/groups/akundaje/marinovg/programs/danpos-2.2.2/lib.pyt   positionDicMinMax   s     
5
  s   out.samt   ai   c   6   	   C   sÿ  t  d | ƒ } t | | ƒ } t |  ƒ } | j ƒ  } g  } x	| d d k rG| j ƒ  } | d d k r+| d d t | d d ƒ | } } | j | ƒ s® i  | | <n  x@ t | | d ƒ D]* } | | j | ƒ sÃ i  | | | <qÃ qÃ Wt j d g ƒ | j	 | <| j	 | j
 | | d	 d ƒn  | j | ƒ | j ƒ  } q? Wt |  ƒ } x$ t t | ƒ ƒ D] } | j ƒ  qgWt | ƒ } d* \ } } } } } } d+ \ } }  xj| D]b} | d 7} | d d k rÞ| } q²n | }  | d
  j d ƒ |  d
  j d ƒ }! }" |! d |" d t |! d ƒ t |" d ƒ t |! d ƒ t |" d ƒ f \ }# }$ }% }& }' }( |# d k s}|$ d k r| d 7} q²n  t }) |% | k  s«|& | k  r¿| d t } }) n  t t }* }+ |# |$ k r|' |( }, |, d k  rûd |, }, n  |, | k rt }* qn t }+ t }- |	 r4|+ r4t }- n |
 rI|* rIt }- n  t }. |! d d k s²|" d d k ruq²n  x@| |  g D]2} | j d ƒ } t | d ƒ }/ t j d | d ƒ }0 t j d | d ƒ }1 t | d ƒ }2 t }3 | d k rþt }3 nd |1 d d k r0t |0 d ƒ | k rbt }3 qbn2 |1 d
 d k rbt |0 d
 ƒ | k rbt }3 qbn  |3 rqt }. n  d }4 xO t t |1 ƒ ƒ D]; } t |0 | ƒ |0 | <|1 | d k rŠ|4 |0 | 7}4 qŠqŠWxè t t |1 ƒ ƒ D]Ô } |1 | d k rn|2 |0 | }5 | j	 | d |2 | |5 | c !d |4 7+|) re|3 re|- re| j	 | d |2 | |5 | c !d 7+n  |5 }2 qÜ|1 | d k r|2 |0 | }2 qÜ|1 | d k rÜ|2 |0 | }2 qÜqÜWq‚W|. r
|- r
| j | |  ƒ |+ rî|. rî| d 7} q|* r|. r| d 7} qq²| d 7} q²W| j ƒ  | d  k r>| j | ƒ n  | d  k rZ| j | ƒ n  d G| d GHd G| G| d | Gd GHd G| G| d | Gd GH|	 r»d G| G| d | Gd GHn  |
 rÝd G| G| d | Gd GHn  d G| G| d | Gd GHd  G| | | G| | | d | Gd GH| j d! ƒ s;| | d! <n | d! c | 7<| j d" ƒ sg| | d" <n | d" c | 7<| j d# ƒ s“| | d# <n | d# c | 7<| j d$ ƒ s¿| | d$ <n | d$ c | 7<| j d% ƒ së| | d% <n | d% c | 7<| j d& ƒ s| | d& <n | d& c | 7<| j d' ƒ sK| | | | d' <n | d' c | | | 7<| j d( ƒ s‹| | | | | d( <n | d( c | | | | 7<| j d) ƒ sÃd | d) <n  |	 rÜ| d) c | 7<n  |
 rõ| d) c | 7<n  | | g S(,   NR   i    t   @s   @SQi   i   i   g        RZ   iÿÿÿÿR	   s   	i   t   *i   i	   s   \d+s   \D+t   St   Mg      ð?t   Dt   Ns   all raw reads:s   unmappable:g      Y@t   %s   low map quality (non-unique):s)   inter-chromosome translocated and unique:s)   intra-chromosome translocated and unique:s   other unique:s   All unique:t   allt
   unmappablet
   non_uniquet   unique_intert   unique_intrat   unique_othert   uniquet   mappablet   trans(   iÿÿÿÿi    i    i    i    i    (   R	   R	   (   R   R0   Ra   R.   R\   RS   R4   R^   R_   RP   R`   R†   R&   R   Rb   R„   R…   RP  t   findallR3   R2   R(   t   save(6   RY  t   bindict   binSizet   outReadsFileR9   t   pdisR   t   mapqt   clipSizet   intert   intrat
   allWigFilet   transWigFilet
   readsCountt   transwigR@   t   infileRf   t   hlinesRg   Rh   t   clenR–   RB   t   allwigt   ntt   net   nat   not   nlt   nut   line1t   line2t   col1t   col2t   chr1t   chr2t   mapq1t   mapq2t   pos1t   pos2Ru  t   trat   terR=  Rw  t   bret   rdltht   t1t   t2R¶   t   tbret   mlthR·   (    (    sC   /oak/stanford/groups/akundaje/marinovg/programs/danpos-2.2.2/lib.pyt   translocationReads  s   '  ! 
'Z
 
  	 	   	   	 * )	    
    )           iô  c	   3      C   s5  t  d ƒ }	 | i  }
 } t | ƒ } | j ƒ  } g  } x- | d d k rf | j | ƒ | j ƒ  } q: Wt | ƒ } x$ t t | ƒ ƒ D] } | j ƒ  q† Wd g } d } i  } d | d <x¡|  D]™} |  | j ƒ  } | j ƒ  xv| D]n} |  | | } | d k r#xKt | | d | | d | ƒ D]ò } | d k  rEd } n  | d 7} i  d | | <| | <| j d j | t	 | ƒ t	 | ƒ t	 | ƒ t	 | | ƒ g ƒ ƒ | | | | | } } x[ t | | d ƒ D]F } |
 | j
 | ƒ süi  |
 | | <n  | | | g |
 | | | <qÒWq*Wqç | | | k  r}| | d } | | d | | d } } | d k  rŠd | } } qŠn | | } } | d 7} i  d | | <| | <| j d j | t	 | ƒ t	 | ƒ t	 | ƒ t	 | ƒ g ƒ ƒ | | | | } } xW t | | d ƒ D]B } |
 | j
 | ƒ s9i  |
 | | <n  | | g |
 | | | <qWqç WqÀ Wi  | d <| j ƒ  } | j ƒ  d } xD| D]<} | d 7} | d	  j d ƒ } | d | d
 t | d ƒ t | d ƒ f \ }  }! }" }# |! d k rü|  }! n  |" | |# | }$ }% g  g  }& }' x^ |
 |  |$ D]N } |" | k r-|" |
 |  |$ | d k  r-|& j |
 |  |$ | d ƒ q-q-Wx^ |
 |! |% D]N } |# | k rŽ|# |
 |! |% | d k  rŽ|' j |
 |! |% | d ƒ qŽqŽWt |' ƒ d k rþd g }' n  t |& ƒ d k rd g }& n  x§ |& D]Ÿ }( | |( c d 7<x† |' D]~ }) |( |) k re| |) c d 7<n  |( |) k r†|) }* |( }) |* }( n  | |( j
 |) ƒ sªd | |( |) <n  | |( |) c d 7<q@Wq#WqŠWd G| Gt | j ƒ  ƒ GHt | d ƒ }+ |+ j d ƒ t | ƒ }, x| D]}- | |- j ƒ  }. |. j ƒ  xî |, D]æ }/ | |- j
 |/ ƒ rc| |- |/ }0 n d }0 t	 |	 |0 | |- | |/ | ƒ ƒ j ƒ  d	 }1 | |/ | |- d | }2 |+ j d j | |- t	 t | |- ƒ ƒ | |/ t	 t | |/ ƒ ƒ t	 t |0 ƒ ƒ t	 |2 ƒ t	 |1 ƒ g ƒ d ƒ q9WqW|+ j ƒ  | S(   NsN   function(ov,n1,n2,n){return(phyper(ov - 1, n1, n-n1, n2, lower.tail = FALSE))}i    Rh  s	   -	-	-	-	-i   i   s   	g      à?iÿÿÿÿi   i   i   t   =s   total edges:R
   su   chrA	startA	endA	windowAstart	windowAend	edgeA	chrB	startB	endB	windowBstart	windowBend	edgeB	edgeAB	expected	log10P
g      ð?s   
(   R    R0   Ra   R†   R4   R&   R$   R%   R-   R5   RS   R.   R\   R]   R  R3   R   R2   (3   t   peakst   samFilet   linkfileRz  R{  t   wsizet   wstept   foldt   logPt
   fisherTestt   pkst   lksR†  Rf   R‡  RB   t   pklinesRy   t   bnR•   Rw   R¶   R·   t   nstartt   sBint   eBinR–   t   midt   nendRÙ   t   tnRg   t   cr1t   cr2R˜  R™  t   bin1t   bin2t   id1t   id2t   fidt   tidR-  t   lkft   ids2t   fkt   tkst   tkt   ovt   pvt   exp(    (    sC   /oak/stanford/groups/akundaje/marinovg/programs/danpos-2.2.2/lib.pyt   translocationLinks  sÀ     	

) 	
A ' 
= $


: 	( $( $   	  
 -w
iœÿÿÿc         C   s”  t  |  ƒ } | j ƒ  d \ }	 }
 i  } x¨ | D]  } | j ƒ  } t | |	 ƒ | k  r] q/ n  t | |
 ƒ | k ry q/ n  | d t | d ƒ t | d ƒ } } } | j | ƒ sÁ i  | | <n  | | | | <q/ Wt | d d ƒ} t  | d ƒ } xX | D]P } xG | | D]; } | j | d t | ƒ d t | | | ƒ d	 ƒ qWqû W| j	 ƒ  t
 d
 | d | d | d | d d d d d d d d ƒ d  S(   Ni	   i
   i    i   i   RO  R
   s   	s   
t   peakFileR¥  R¦  R{  R§  R¨  R©  Rª  (   i	   i
   (   R0   Ra   R.   Rb   R\   RS   t!   merge_peaks_by_head_tail_distanceR3   R5   R2   RÆ  (   t
   inlinkfileR¥  t   outlinkfileR{  R§  R¨  R©  Rª  t   pft   fdColIDt   pvColIDR¤  Rf   Rg   R•   R¶   R·   R@   (    (    sC   /oak/stanford/groups/akundaje/marinovg/programs/danpos-2.2.2/lib.pyt
   mergeLinksö  s*    
  ,  =
c   
   	   C   s  | d  k r |  d  d } n  t |  ƒ } t | d ƒ } | j ƒ  xÑ | D]É } | j ƒ  } | d t | d ƒ t | d ƒ g } } x. | d j d ƒ D] }	 | j t |	 ƒ ƒ qš W| j ƒ  | j d	 j | t	 t
 | d | d ƒ ƒ t	 | d
 | ƒ d d d g ƒ d ƒ qI Wd  S(   Niýÿÿÿt   bedR
   i    i   i   i   R‚   s   	iÿÿÿÿt   1R#   s   
(   R(   R0   Ra   R.   R\   R†   R%   R3   R-   R5   RN   (
   t   pfilet   bfileR’   RË  t   bfRf   Rg   R•   Rû   t   tp(    (    sC   /oak/stanford/groups/akundaje/marinovg/programs/danpos-2.2.2/lib.pyt	   peaks2bed  s     
+ 
c         C   s«   t  |  ƒ } | j ƒ  i  } xˆ | D]€ } | j ƒ  } d j | d  ƒ d j | d d !ƒ } } | j | ƒ s{ i  | | <n  t | d ƒ t | d ƒ g | | | <q# W| S(   Ns   	i   i   i	   i   i   (   R0   Ra   R.   R-   RS   Rb   (   t   linkFilet   lfR=   Rf   Rg   t   s1t   s2(    (    sC   /oak/stanford/groups/akundaje/marinovg/programs/danpos-2.2.2/lib.pyt	   transPair  s    
* ,c         C   sÎ   i  } t  |  ƒ } | j ƒ  x« | D]£ } | j ƒ  } | d t | d ƒ t | d ƒ } } } | j | ƒ s} i  | | <n  | | j | ƒ s¡ | | | | <q# | | | | k  r# | | | | <q# q# W| S(   Ni    i   i   (   R0   Ra   R.   R\   RS   (   RÇ  R=   RË  Rf   Rg   R•   R¶   R·   (    (    sC   /oak/stanford/groups/akundaje/marinovg/programs/danpos-2.2.2/lib.pyt   pksDic"  s    
,   t   __main__(:   R)   t   sysRP  t   rpy2.robjectsR    R   R   R   t   wigR   t   wigsR   R   R^   t   copyR   Rð   R   R(   R„   RE   RI   RL   RQ   RU   RX   RH   R/   R    R©   R¸   RÆ   RÉ   R…   Rà   Rî   R  R+  R/  R7  RK   RO   R?  RR   RV   R[  R`  Rf  R¢  RÆ  RÎ  RÕ  RÚ  RÛ  t   __name__t   fdopent   stdoutt   fileno(    (    (    sC   /oak/stanford/groups/akundaje/marinovg/programs/danpos-2.2.2/lib.pyt   <module>   sb   $'A<@	O	!hQ'hK¼4*&*-$D[HR$-,'­0f	!