annotate pyPRADA_1.2/prada-frame @ 0:acc2ca1a3ba4

Uploaded
author siyuan
date Thu, 20 Feb 2014 00:44:58 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
1 #!/usr/bin/env python
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
2
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
3 #This script is part of the pyPRADA package. It is used to predict the functional consequences of
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
4 #gene fusions. Possible predictions include in-frame, out-of-frame, UTR-UTR, UTR-CDS, Unknown etc.
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
5 #It relies on the definition of transcript CDS/UTR boundaries from ENSEMBL, and gives a prediction
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
6 #for every pair of transcripts coded by the fusion genes. The whole point is to see if the fusion
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
7 #lead to reading shift of the CDS sequences.
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
8 #Two files are generated, brief/detail result.
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
9 #Result is purely predicted, no guarantee is assumed.
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
10 #Contact: Siyuan Zheng, szheng2@mdanderson.org
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
11
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
12 import os
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
13 import sys
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
14 import re
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
15 import time
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
16 import subprocess
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
17 import bioclass
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
18 from Bio import SeqIO
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
19 import ioprada
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
20
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
21 ######################################################################################
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
22 help_menu='''\nUsage: prada-frame -conf xx.txt -i inputfile -docstr XX -outdir ./
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
23 **parameters**
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
24 -conf see prada-fusion -conf
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
25 -i input file, a tab/space delimited four-column file, each row like "GeneA GeneA_break GeneB GeneB_break"
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
26 Example:FGFR3 1808661 TACC3 1739325
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
27 -docstr outfile prefix. output to two files: XX.frame.brief.txt, XX.frame.detail.txt
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
28 -outdir output directory, default is ./
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
29 '''
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
30
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
31 args=sys.argv
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
32 if '-h' in args or '-help' in args or len(args)==1:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
33 print help_menu
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
34 sys.exit(0)
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
35
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
36 if '-i' not in sys.argv:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
37 sys.exit('Input file needed')
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
38 else:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
39 i=sys.argv.index('-i')
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
40 datafilename=sys.argv[i+1]
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
41
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
42 if '-outdir' not in args:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
43 outpath=os.path.abspath('./')
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
44 else:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
45 i=args.index('-outdir')
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
46 outpath=os.path.abspath(args[i+1])
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
47 if os.path.exists(outpath):
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
48 print 'WARNING: outdir %s exists'%outpath
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
49 else:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
50 os.mkdir(outpath)
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
51
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
52 if '-docstr' not in sys.argv:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
53 sys.exit('docstring needed')
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
54 else:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
55 i=sys.argv.index('-docstr')
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
56 outfile_prefix=sys.argv[i+1]
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
57 outfile_brief='%s/%s.frame.brief.txt'%(outpath,outfile_prefix)
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
58 outfile_detail='%s/%s.frame.detail.txt'%(outpath,outfile_prefix)
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
59
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
60 #PRADA executive path
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
61 prada_path=os.path.dirname(os.path.abspath(__file__)) ####
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
62 ref_search_path=[prada_path,os.getcwd()] #search path for ref file if not specified in command line
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
63
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
64 if '-ref' in args:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
65 i=args.index('-conf')
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
66 reffile=args[i+1]
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
67 if os.path.exists(reffile):
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
68 pass
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
69 else:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
70 for pth in ref_search_path:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
71 new_reffile='%s/%s'%(pth, os.path.basename(reffile))
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
72 if os.path.exists(new_reffile):
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
73 reffile=new_reffile
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
74 break
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
75 else:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
76 sys.exit('ERROR: conf file %s not found'%reffile)
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
77 else:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
78 reffile='%s/conf.txt'%prada_path
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
79 if not os.path.exists(reffile):
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
80 sys.exit('ERROR: No default conf.txt found and none specified')
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
81
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
82 #read reference files
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
83 refdict=ioprada.read_conf(reffile)
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
84 featurefile=refdict['--REF--']['feature_file']
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
85 cdsfile=refdict['--REF--']['cds_file']
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
86 txcatfile=refdict['--REF--']['txcat_file']
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
87
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
88 #Now print all input parameters
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
89 print 'CMD: %s'%('\t'.join(args))
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
90
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
91 ###########################################################################################
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
92 ##Read information from annotation files, for all genes
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
93 print 'Reading annotations'
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
94 #call functions in ioprada module //
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
95 txdb,genedb=ioprada.read_feature(featurefile,verbose=False)
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
96 tx_cds=ioprada.read_cds(cdsfile)
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
97 tx_primary=ioprada.read_tx_cat(txcatfile)
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
98
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
99 ###########################################################################################
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
100 def maptranscript(gene,exon_end,part=''):
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
101 '''Find all transcripts of the gene having the fusion boundary.
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
102 gene is a Gene object,return a list of Transcript objects'''
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
103 if part not in ['5','3']:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
104 raise Exception('part must be "5" or "3"')
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
105 txuse=[] ##
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
106 g=gene.name
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
107 strand=gene.strand
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
108 if part=='5':
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
109 tag='big' if strand=='1' else 'small'
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
110 else:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
111 tag='small' if strand=='1' else 'big'
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
112 txs=gene.transcript
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
113 if tag=='small':
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
114 for tx in txs:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
115 e_pos=[x.start for x in tx.exon]
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
116 if exon_end in e_pos:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
117 txuse.append(tx)
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
118 elif tag=='big':
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
119 for tx in txs:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
120 e_pos=[x.end for x in tx.exon]
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
121 if exon_end in e_pos:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
122 txuse.append(tx)
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
123 return txuse
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
124
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
125 def overlap(r1,r2):
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
126 '''compare two ranges, return the overlapped'''
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
127 if r1[0] <= r2[0]:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
128 ra,rb=r1[:],r2[:]
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
129 else:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
130 ra,rb=r2[:],r1[:]
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
131 if rb[0] > ra[1]:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
132 return []
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
133 else:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
134 if rb[1] <= ra[1]:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
135 return rb
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
136 else:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
137 return [rb[0],ra[1]]
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
138
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
139 def br_front_len(tx,br,part):
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
140 '''No matter it is 5'/3' partner,calculate the ORF length before the break'''
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
141 global tx_cds
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
142 txname=tx.name
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
143 strand=tx.strand
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
144 cds_start,cds_end=[int(x) for x in tx_cds[txname]]
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
145 e_pos=[[x.start,x.end] for x in tx.exon]
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
146 if part=='5' and strand=='1':
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
147 posset=[x.end for x in tx.exon]
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
148 if br not in posset:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
149 raise Exception('Br is not exon boundary')
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
150 if br < cds_start:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
151 return '5UTR'
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
152 elif br > cds_end:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
153 return '3UTR'
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
154 else:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
155 chim_r=[cds_start,br]
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
156 ol=[overlap(x,chim_r) for x in e_pos]
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
157 L=sum([x[1]-x[0]+1 for x in ol if len(x)>0])
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
158 return L
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
159 if part=='5' and strand=='-1':
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
160 posset=[x.start for x in tx.exon]
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
161 if br not in posset:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
162 raise Exception('Br is not exon boundary')
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
163 if br > cds_end:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
164 return '5UTR'
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
165 elif br < cds_start:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
166 return '3UTR'
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
167 else:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
168 chim_r=[br,cds_end]
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
169 ol=[overlap(x,chim_r) for x in e_pos]
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
170 L=sum([x[1]-x[0]+1 for x in ol if len(x)>0])
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
171 return L
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
172 if part=='3' and strand=='1':
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
173 posset=[x.start for x in tx.exon]
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
174 if br not in posset:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
175 raise Exception('Br is not exon boundary')
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
176 if br < cds_start:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
177 return '5UTR'
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
178 elif br > cds_end:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
179 return '3UTR'
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
180 else:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
181 chim_r=[cds_start,br-1]
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
182 ol=[overlap(x,chim_r) for x in e_pos]
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
183 L=sum([x[1]-x[0]+1 for x in ol if len(x)>0])
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
184 return L
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
185 if part=='3' and strand=='-1':
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
186 posset=[x.end for x in tx.exon]
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
187 if br not in posset:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
188 raise Exception('Br is not exon boundary')
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
189 if br > cds_end:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
190 return '5UTR'
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
191 elif br < cds_start:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
192 return '3UTR'
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
193 else:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
194 chim_r=[br+1,cds_end]
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
195 ol=[overlap(x,chim_r) for x in e_pos]
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
196 L=sum([x[1]-x[0]+1 for x in ol if len(x)>0])
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
197 return L
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
198
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
199 def fusion_frame(gene_a,ga_br,gene_b,gb_br):
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
200 '''gene_a:FGFR3,gene_b:TACC3,ga_br:1808661,gb_br:1741429
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
201 or chr4.1808661.chr4.1741429'''
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
202 global genedb,txdb
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
203 ga_br=int(ga_br)
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
204 gb_br=int(gb_br)
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
205 ga_txs=maptranscript(genedb[gene_a],ga_br,part='5')
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
206 gb_txs=maptranscript(genedb[gene_b],gb_br,part='3')
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
207 res=[]
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
208 for ta in ga_txs:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
209 for tb in gb_txs:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
210 s1=br_front_len(ta,ga_br,'5')
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
211 s2=br_front_len(tb,gb_br,'3')
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
212 fusion_conseq='Unknown'
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
213 if isinstance(s1,int) and isinstance(s2,int): #both br in CDS region
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
214 if s1%3==s2%3:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
215 fusion_conseq='In-frame'
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
216 else:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
217 fusion_conseq='Out-of-frame'
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
218 elif isinstance(s1,int) and not isinstance(s2,int):
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
219 fusion_conseq='CDS'+'-'+s2
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
220 elif isinstance(s2,int) and not isinstance(s1,int):
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
221 fusion_conseq=s1+'-'+'CDS'
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
222 else:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
223 fusion_conseq=s1+'-'+s2
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
224 res.append((ta.name,tb.name,fusion_conseq))
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
225 if ga_txs==[] and gb_txs==[]:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
226 res.append(['NA','NA','NA'])
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
227 elif ga_txs==[]:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
228 for tb in gb_txs:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
229 res.append(['NA',tb.name,'NA'])
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
230 elif gb_txs==[]:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
231 for ta in ga_txs:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
232 res.append([ta.name,'NA','NA'])
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
233 return res
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
234
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
235 ############################################################################
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
236 print 'Predicting...'
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
237 infile=open(datafilename)
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
238 outfile_detail=open(outfile_detail,'w')
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
239 outfile_brief=open(outfile_brief,'w')
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
240 detailM=[]
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
241 briefM=[]
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
242 for line in infile:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
243 if not line.strip():
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
244 continue
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
245 geneA,ga_br,geneB,gb_br=line.split()
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
246 try:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
247 M=fusion_frame(geneA,ga_br,geneB,gb_br)
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
248 except:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
249 M=[]
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
250 ppcollected=0
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
251 for ccc in M:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
252 a_cat,b_cat='alternative','alternative'
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
253 if tx_primary[geneA]==ccc[0]:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
254 a_cat='primary'
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
255 if tx_primary[geneB]==ccc[1]:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
256 b_cat='primary'
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
257 tag='%s_%s'%(a_cat,b_cat)
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
258 if ccc[0]=='NA' or ccc[1]=='NA':
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
259 tag='NA'
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
260 row_d=[geneA,ga_br,geneB,gb_br,ccc[0],ccc[1],tag,ccc[2]] #genea,geneb,tag,consequence
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
261 detailM.append(row_d)
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
262 if tag=='primary_primary':
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
263 row_b=[geneA,ga_br,geneB,gb_br,ccc[2]]
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
264 ppcollected=1
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
265 if ppcollected==0:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
266 row_b=[geneA,ga_br,geneB,gb_br,'not-classified']
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
267 briefM.append(row_b)
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
268 infile.close()
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
269
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
270 for line in detailM:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
271 outfile_detail.write('%s\n'%('\t'.join(line)))
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
272 outfile_detail.close()
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
273
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
274 for line in briefM:
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
275 outfile_brief.write('%s\n'%('\t'.join(line)))
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
276 outfile_brief.close()
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
277
acc2ca1a3ba4 Uploaded
siyuan
parents:
diff changeset
278 print 'Done!'