annotate trips_bam_to_sqlite/bam_to_sqlite.py @ 12:02874b1b2015 draft

Uploaded
author jackcurragh
date Wed, 02 Nov 2022 15:23:28 +0000
parents 3d2b1532a1b0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
1 import sys
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
2 import pysam
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
3 import operator
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
4 import os
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
5 import time
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
6 import sqlite3
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
7 from sqlitedict import SqliteDict
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
8
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
9 def tran_to_genome(tran, pos, transcriptome_info_dict):
9
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
10 #print ("tran",list(transcriptome_info_dict))
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
11 traninfo = transcriptome_info_dict[tran]
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
12 chrom = traninfo["chrom"]
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
13 strand = traninfo["strand"]
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
14 exons = sorted(traninfo["exons"])
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
15 #print exons
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
16 if strand == "+":
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
17 exon_start = 0
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
18 for tup in exons:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
19 exon_start = tup[0]
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
20 exonlen = tup[1] - tup[0]
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
21 if pos > exonlen:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
22 pos = (pos - exonlen)-1
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
23 else:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
24 break
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
25 genomic_pos = (exon_start+pos)-1
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
26 elif strand == "-":
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
27 exon_start = 0
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
28 for tup in exons[::-1]:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
29 exon_start = tup[1]
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
30 exonlen = tup[1] - tup[0]
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
31 if pos > exonlen:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
32 pos = (pos - exonlen)-1
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
33 else:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
34 break
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
35 genomic_pos = (exon_start-pos)+1
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
36 return (chrom, genomic_pos)
4
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
37
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
38
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
39 # Takes a dictionary with a readname as key and a list of lists as value, each sub list has consists of two elements a transcript and the position the read aligns to in the transcript
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
40 # This function will count the number of genes that the transcripts correspond to and if less than or equal to 3 will add the relevant value to transcript_counts_dict
9
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
41 def processor(process_chunk, master_read_dict, transcriptome_info_dict,master_dict,readseq, unambig_read_length_dict):
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
42 readlen = len(readseq)
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
43 ambiguously_mapped_reads = 0
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
44 #get the read name
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
45 read = list(process_chunk)[0]
4
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
46
9
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
47 read_list = process_chunk[read] # a list of lists of all transcripts the read aligns to and the positions
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
48 #used to store different genomic poistions
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
49 genomic_positions = []
4
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
50
9
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
51 #This section is just to get the different genomic positions the read aligns to
4
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
52
9
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
53 for listname in process_chunk[read]:
4
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
54
9
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
55 tran = listname[0].replace("-","_").replace("(","").replace(")","")
4
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
56
9
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
57 pos = int(listname[1])
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
58 genomic_pos = tran_to_genome(tran, pos, transcriptome_info_dict)
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
59 #print ("genomic pos",genomic_pos)
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
60 if genomic_pos not in genomic_positions:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
61 genomic_positions.append(genomic_pos)
4
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
62
9
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
63 #If the read maps unambiguously
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
64 if len(genomic_positions) == 1:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
65 if readlen not in unambig_read_length_dict:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
66 unambig_read_length_dict[readlen] = 0
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
67 unambig_read_length_dict[readlen] += 1
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
68 #assume this read aligns to a noncoding position, if we find that it does align to a coding region change this to True
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
69 coding=False
4
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
70
9
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
71 # For each transcript this read alings to
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
72 for listname in process_chunk[read]:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
73 #get the transcript name
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
74 tran = listname[0].replace("-","_").replace("(","").replace(")","")
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
75 #If we haven't come across this transcript already then add to master_read_dict
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
76 if tran not in master_read_dict:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
77 master_read_dict[tran] = {"ambig":{}, "unambig":{}, "mismatches":{}, "seq":{}}
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
78 #get the raw unedited positon, and read tags
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
79 pos = int(listname[1])
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
80 read_tags = listname[2]
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
81 #If there is mismatches in this line, then modify the postion and readlen (if mismatches at start or end) and add mismatches to dictionary
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
82 nm_tag = 0
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
83
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
84 for tag in read_tags:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
85 if tag[0] == "NM":
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
86 nm_tag = int(tag[1])
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
87 if nm_tag > 0:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
88 md_tag = ""
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
89 for tag in read_tags:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
90 if tag[0] == "MD":
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
91 md_tag = tag[1]
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
92 pos_modifier, readlen_modifier,mismatches = get_mismatch_pos(md_tag,pos,readlen,master_read_dict,tran,readseq)
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
93 # Count the mismatches (we only do this for unambiguous)
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
94 for mismatch in mismatches:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
95 #Ignore mismatches appearing in the first position (due to non templated addition)
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
96 if mismatch != 0:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
97 char = mismatches[mismatch]
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
98 mismatch_pos = pos + mismatch
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
99 if mismatch_pos not in master_read_dict[tran]["seq"]:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
100 master_read_dict[tran]["seq"][mismatch_pos] = {}
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
101 if char not in master_read_dict[tran]["seq"][mismatch_pos]:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
102 master_read_dict[tran]["seq"][mismatch_pos][char] = 0
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
103 master_read_dict[tran]["seq"][mismatch_pos][char] += 1
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
104 # apply the modifiers
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
105 #pos = pos+pos_modifier
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
106 #readlen = readlen - readlen_modifier
4
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
107
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
108
9
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
109 try:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
110 cds_start = transcriptome_info_dict[tran]["cds_start"]
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
111 cds_stop = transcriptome_info_dict[tran]["cds_stop"]
4
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
112
9
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
113 if pos >= cds_start and pos <= cds_stop:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
114 coding=True
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
115 except:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
116 pass
4
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
117
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
118
9
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
119 if readlen in master_read_dict[tran]["unambig"]:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
120 if pos in master_read_dict[tran]["unambig"][readlen]:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
121 master_read_dict[tran]["unambig"][readlen][pos] += 1
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
122 else:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
123 master_read_dict[tran]["unambig"][readlen][pos] = 1
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
124 else:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
125 master_read_dict[tran]["unambig"][readlen] = {pos:1}
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
126
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
127 if coding == True:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
128 master_dict["unambiguous_coding_count"] += 1
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
129 elif coding == False:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
130 master_dict["unambiguous_non_coding_count"] += 1
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
131
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
132 else:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
133 ambiguously_mapped_reads += 1
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
134 for listname in process_chunk[read]:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
135 tran = listname[0].replace("-","_").replace("(","").replace(")","")
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
136 if tran not in master_read_dict:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
137 master_read_dict[tran] = {"ambig":{}, "unambig":{}, "mismatches":{}, "seq":{}}
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
138 pos = int(listname[1])
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
139 read_tags = listname[2]
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
140 nm_tag = 0
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
141 for tag in read_tags:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
142 if tag[0] == "NM":
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
143 nm_tag = int(tag[1])
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
144 if nm_tag > 0:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
145 md_tag = ""
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
146 for tag in read_tags:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
147 if tag[0] == "MD":
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
148 md_tag = tag[1]
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
149 pos_modifier, readlen_modifier,mismatches = get_mismatch_pos(md_tag,pos,readlen,master_read_dict,tran,readseq)
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
150 # apply the modifiers
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
151 #pos = pos+pos_modifier
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
152 #readlen = readlen - readlen_modifier
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
153 if readlen in master_read_dict[tran]["ambig"]:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
154 if pos in master_read_dict[tran]["ambig"][readlen]:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
155 master_read_dict[tran]["ambig"][readlen][pos] += 1
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
156 else:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
157 master_read_dict[tran]["ambig"][readlen][pos] = 1
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
158 else:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
159 master_read_dict[tran]["ambig"][readlen] = {pos:1}
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
160 return ambiguously_mapped_reads
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
161
4
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
162
9
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
163 def get_mismatch_pos(md_tag,pos,readlen,master_read_dict,tran,readseq):
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
164 nucs = ["A","T","G","C"]
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
165 mismatches = {}
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
166 total_so_far = 0
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
167 prev_char = ""
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
168 for char in md_tag:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
169 if char in nucs:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
170 if prev_char != "":
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
171 total_so_far += int(prev_char)
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
172 prev_char = ""
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
173 mismatches[total_so_far+len(mismatches)] = (readseq[total_so_far+len(mismatches)])
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
174 else:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
175 if char != "^" and char != "N":
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
176 if prev_char == "":
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
177 prev_char = char
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
178 else:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
179 total_so_far += int(prev_char+char)
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
180 prev_char = ""
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
181 readlen_modifier = 0
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
182 pos_modifier = 0
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
183 five_ok = False
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
184 three_ok = False
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
185 while five_ok == False:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
186 for i in range(0,readlen):
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
187 if i in mismatches:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
188 pos_modifier += 1
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
189 readlen_modifier += 1
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
190 else:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
191 five_ok = True
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
192 break
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
193 five_ok = True
4
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
194
9
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
195
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
196 while three_ok == False:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
197 for i in range(readlen-1,0,-1):
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
198 if i in mismatches:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
199 readlen_modifier += 1
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
200 else:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
201 three_ok = True
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
202 break
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
203 three_ok = True
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
204
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
205
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
206 return (pos_modifier, readlen_modifier, mismatches)
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
207
4
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
208
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
209
9
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
210 def process_bam(bam_filepath, transcriptome_info_dict_path,outputfile):
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
211 desc = "NULL"
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
212 start_time = time.time()
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
213 study_dict ={}
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
214 nuc_count_dict = {"mapped":{},"unmapped":{}}
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
215 dinuc_count_dict = {}
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
216 threeprime_nuc_count_dict = {"mapped":{},"unmapped":{}}
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
217 read_length_dict = {}
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
218 unambig_read_length_dict = {}
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
219 unmapped_dict = {}
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
220 master_dict = {"unambiguous_non_coding_count":0,"unambiguous_coding_count":0,"current_dir":os.getcwd()}
4
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
221
9
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
222 transcriptome_info_dict = {}
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
223 connection = sqlite3.connect(transcriptome_info_dict_path)
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
224 cursor = connection.cursor()
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
225 cursor.execute("SELECT transcript,cds_start,cds_stop,length,strand,chrom,tran_type from transcripts;")
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
226 result = cursor.fetchall()
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
227 for row in result:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
228 transcriptome_info_dict[str(row[0])] = {"cds_start":row[1],"cds_stop":row[2],"length":row[3],"strand":row[4],"chrom":row[5],"exons":[],"tran_type":row[6]}
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
229 #print list(transcriptome_info_dict)[:10]
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
230
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
231 cursor.execute("SELECT * from exons;")
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
232 result = cursor.fetchall()
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
233 for row in result:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
234 transcriptome_info_dict[str(row[0])]["exons"].append((row[1],row[2]))
4
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
235
9
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
236 #it might be the case that there are no multimappers, so set this to 0 first to avoid an error, it will be overwritten later if there is multimappers
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
237 multimappers = 0
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
238 unmapped_reads = 0
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
239 unambiguous_coding_count = 0
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
240 unambiguous_non_coding_count = 0
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
241 trip_periodicity_reads = 0
4
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
242
9
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
243 final_offsets = {"fiveprime":{"offsets":{}, "read_scores":{}}, "threeprime":{"offsets":{}, "read_scores":{}}}
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
244 master_read_dict = {}
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
245 prev_seq = ""
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
246 process_chunk = {"read_name":[["placeholder_tran","1","28"]]}
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
247 mapped_reads = 0
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
248 ambiguously_mapped_reads = 0
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
249 master_trip_dict = {"fiveprime":{}, "threeprime":{}}
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
250 master_offset_dict = {"fiveprime":{}, "threeprime":{}}
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
251 master_metagene_stop_dict = {"fiveprime":{}, "threeprime":{}}
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
252
11
3d2b1532a1b0 Uploaded
jackcurragh
parents: 9
diff changeset
253
12
02874b1b2015 Uploaded
jackcurragh
parents: 11
diff changeset
254 os.system(f'samtools sort -n {bam_filepath} -o {bam_filepath}_n_sorted.bam 2> /dev/null')
11
3d2b1532a1b0 Uploaded
jackcurragh
parents: 9
diff changeset
255
9
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
256 pysam.set_verbosity(0)
11
3d2b1532a1b0 Uploaded
jackcurragh
parents: 9
diff changeset
257 infile = pysam.Samfile(f"{bam_filepath}_n_sorted.bam", "rb")
3d2b1532a1b0 Uploaded
jackcurragh
parents: 9
diff changeset
258 header = infile.header["HD"]
4
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
259
9
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
260 unsorted = False
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
261 if "SO" in header:
11
3d2b1532a1b0 Uploaded
jackcurragh
parents: 9
diff changeset
262 print("Sorting order: "+header["SO"])
9
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
263 if header["SO"] != "queryname":
11
3d2b1532a1b0 Uploaded
jackcurragh
parents: 9
diff changeset
264 print("Sorting order is not queryname")
9
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
265 unsorted = True
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
266 else:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
267 unsorted = True
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
268 if unsorted == True:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
269 print ("ERROR: Bam file appears to be unsorted or not sorted by read name. To sort by read name use the command: samtools sort -n input.bam output.bam")
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
270 print (header,bam_filepath)
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
271 sys.exit()
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
272 total_bam_lines = 0
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
273 all_ref_ids = infile.references
4
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
274
9
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
275 for read in infile.fetch(until_eof=True):
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
276 total_bam_lines += 1
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
277 if not read.is_unmapped:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
278 ref = read.reference_id
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
279 tran = (all_ref_ids[ref]).split(".")[0]
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
280 mapped_reads += 1
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
281 if mapped_reads%1000000 == 0:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
282 print ("{} reads parsed at {}".format(mapped_reads,(time.time()-start_time)))
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
283 pos = read.reference_start
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
284 readname = read.query_name
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
285 read_tags = read.tags
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
286 if readname == list(process_chunk)[0]:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
287 process_chunk[readname].append([tran,pos,read_tags])
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
288 #if the current read is different from previous reads send 'process_chunk' to the 'processor' function, then start 'process_chunk' over using current read
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
289 else:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
290 if list(process_chunk)[0] != "read_name":
4
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
291
9
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
292 #At this point we work out readseq, we do this for multiple reasons, firstly so we don't count the sequence from a read multiple times, just because
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
293 # it aligns multiple times and secondly we only call read.seq once (read.seq is computationally expensive)
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
294 seq = read.seq
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
295 readlen = len(seq)
4
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
296
9
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
297 # Note if a read maps ambiguously it will still be counted toward the read length distribution (however it will only be counted once, not each time it maps)
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
298 if readlen not in read_length_dict:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
299 read_length_dict[readlen] = 0
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
300 read_length_dict[readlen] += 1
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
301
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
302 if readlen not in nuc_count_dict["mapped"]:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
303 nuc_count_dict["mapped"][readlen] = {}
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
304 if readlen not in threeprime_nuc_count_dict["mapped"]:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
305 threeprime_nuc_count_dict["mapped"][readlen] = {}
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
306 if readlen not in dinuc_count_dict:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
307 dinuc_count_dict[readlen] = {"AA":0, "TA":0, "GA":0, "CA":0,
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
308 "AT":0, "TT":0, "GT":0, "CT":0,
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
309 "AG":0, "TG":0, "GG":0, "CG":0,
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
310 "AC":0, "TC":0, "GC":0, "CC":0}
4
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
311
9
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
312 for i in range(0,len(seq)):
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
313 if i not in nuc_count_dict["mapped"][readlen]:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
314 nuc_count_dict["mapped"][readlen][i] = {"A":0, "T":0, "G":0, "C":0, "N":0}
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
315 nuc_count_dict["mapped"][readlen][i][seq[i]] += 1
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
316
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
317 for i in range(0,len(seq)):
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
318 try:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
319 dinuc_count_dict[readlen][seq[i:i+2]] += 1
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
320 except:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
321 pass
4
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
322
9
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
323 for i in range(len(seq),0,-1):
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
324 dist = i-len(seq)
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
325 if dist not in threeprime_nuc_count_dict["mapped"][readlen]:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
326 threeprime_nuc_count_dict["mapped"][readlen][dist] = {"A":0, "T":0, "G":0, "C":0, "N":0}
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
327 threeprime_nuc_count_dict["mapped"][readlen][dist][seq[dist]] += 1
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
328 ambiguously_mapped_reads += processor(process_chunk, master_read_dict, transcriptome_info_dict,master_dict,prev_seq, unambig_read_length_dict)
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
329 process_chunk = {readname:[[tran, pos, read_tags]]}
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
330 prev_seq = read.seq
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
331 else:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
332 unmapped_reads += 1
4
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
333
9
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
334 # Add this unmapped read to unmapped_dict so we can see what the most frequent unmapped read is.
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
335 seq = read.seq
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
336 readlen = len(seq)
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
337 if seq in unmapped_dict:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
338 unmapped_dict[seq] += 1
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
339 else:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
340 unmapped_dict[seq] = 1
4
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
341
9
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
342 # Populate the nuc_count_dict with this unmapped read
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
343 if readlen not in nuc_count_dict["unmapped"]:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
344 nuc_count_dict["unmapped"][readlen] = {}
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
345 for i in range(0,len(seq)):
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
346 if i not in nuc_count_dict["unmapped"][readlen]:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
347 nuc_count_dict["unmapped"][readlen][i] = {"A":0, "T":0, "G":0, "C":0, "N":0}
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
348 nuc_count_dict["unmapped"][readlen][i][seq[i]] += 1
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
349
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
350 if readlen not in threeprime_nuc_count_dict["unmapped"]:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
351 threeprime_nuc_count_dict["unmapped"][readlen] = {}
4
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
352
9
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
353 for i in range(len(seq),0,-1):
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
354 dist = i-len(seq)
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
355 if dist not in threeprime_nuc_count_dict["unmapped"][readlen]:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
356 threeprime_nuc_count_dict["unmapped"][readlen][dist] = {"A":0, "T":0, "G":0, "C":0, "N":0}
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
357 threeprime_nuc_count_dict["unmapped"][readlen][dist][seq[dist]] += 1
4
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
358
9
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
359 #add stats about mapped/unmapped reads to file dict which will be used for the final report
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
360 master_dict["total_bam_lines"] = total_bam_lines
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
361 master_dict["mapped_reads"] = mapped_reads
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
362 master_dict["unmapped_reads"] = unmapped_reads
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
363 master_dict["ambiguously_mapped_reads"] = ambiguously_mapped_reads
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
364
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
365 if "read_name" in master_read_dict:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
366 del master_read_dict["read_name"]
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
367 print ("BAM file processed")
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
368 print ("Creating metagenes, triplet periodicity plots, etc.")
4
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
369
9
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
370 for tran in master_read_dict:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
371 try:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
372 cds_start = int(0 if transcriptome_info_dict[tran]["cds_start"] is None else transcriptome_info_dict[tran]["cds_start"])
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
373 cds_stop = int(0 if transcriptome_info_dict[tran]["cds_stop"] is None else transcriptome_info_dict[tran]["cds_stop"])
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
374 # print(tran, type(cds_start))
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
375 except:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
376 print("Exception: ", tran)
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
377 continue
4
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
378
9
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
379 tranlen = transcriptome_info_dict[tran]["length"]
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
380 #Use this to discard transcripts with no 5' leader or 3' trailer
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
381 if cds_start > 1 and cds_stop < tranlen and transcriptome_info_dict[tran]["tran_type"] == 1:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
382 for primetype in ["fiveprime", "threeprime"]:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
383 # Create the triplet periodicity and metainfo plots based on both the 5' and 3' ends of reads
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
384 for readlength in master_read_dict[tran]["unambig"]:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
385 #print "readlength", readlength
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
386 # for each fiveprime postion for this readlength within this transcript
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
387 for raw_pos in master_read_dict[tran]["unambig"][readlength]:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
388 #print "raw pos", raw_pos
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
389 trip_periodicity_reads += 1
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
390 if primetype == "fiveprime":
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
391 # get the five prime postion minus the cds start postion
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
392 real_pos = raw_pos-cds_start
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
393 rel_stop_pos = raw_pos-cds_stop
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
394 elif primetype == "threeprime":
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
395 real_pos = (raw_pos+readlength)-cds_start
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
396 rel_stop_pos = (raw_pos+readlength)-cds_stop
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
397 #get the readcount at the raw postion
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
398 readcount = master_read_dict[tran]["unambig"][readlength][raw_pos]
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
399 #print "readcount", readcount
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
400 frame = (real_pos%3)
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
401 if real_pos >= cds_start and real_pos <= cds_stop:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
402 if readlength in master_trip_dict[primetype]:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
403 master_trip_dict[primetype][readlength][str(frame)] += readcount
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
404 else:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
405 master_trip_dict[primetype][readlength]= {"0":0.0,"1":0.0,"2":0.0}
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
406 master_trip_dict[primetype][readlength][str(frame)] += readcount
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
407 # now populate offset dict with the 'real_positions' upstream of cds_start, these will be used for metainfo dict
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
408 if real_pos > (-600) and real_pos < (601):
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
409 if readlength in master_offset_dict[primetype]:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
410 if real_pos in master_offset_dict[primetype][readlength]:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
411 #print "real pos in offset dict"
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
412 master_offset_dict[primetype][readlength][real_pos] += readcount
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
413 else:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
414 #print "real pos not in offset dict"
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
415 master_offset_dict[primetype][readlength][real_pos] = readcount
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
416 else:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
417 #initiliase with zero to avoid missing neighbours below
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
418 #print "initialising with zeros"
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
419 master_offset_dict[primetype][readlength]= {}
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
420 for i in range(-600,601):
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
421 master_offset_dict[primetype][readlength][i] = 0
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
422 master_offset_dict[primetype][readlength][real_pos] += readcount
4
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
423
9
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
424 # now populate offset dict with the 'real_positions' upstream of cds_start, these will be used for metainfo dict
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
425 if rel_stop_pos > (-600) and rel_stop_pos < (601):
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
426 if readlength in master_metagene_stop_dict[primetype]:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
427 if rel_stop_pos in master_metagene_stop_dict[primetype][readlength]:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
428 master_metagene_stop_dict[primetype][readlength][rel_stop_pos] += readcount
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
429 else:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
430 master_metagene_stop_dict[primetype][readlength][rel_stop_pos] = readcount
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
431 else:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
432 #initiliase with zero to avoid missing neighbours below
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
433 master_metagene_stop_dict[primetype][readlength] = {}
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
434 for i in range(-600,601):
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
435 master_metagene_stop_dict[primetype][readlength][i] = 0
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
436 master_metagene_stop_dict[primetype][readlength][rel_stop_pos] += readcount
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
437
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
438 # master trip dict is now made up of readlengths with 3 frames and a count associated with each frame
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
439 # create a 'score' for each readlength by putting the max frame count over the second highest frame count
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
440 for primetype in ["fiveprime", "threeprime"]:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
441 for subreadlength in master_trip_dict[primetype]:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
442 maxcount = 0
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
443 secondmaxcount = 0
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
444 for frame in master_trip_dict[primetype][subreadlength]:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
445 if master_trip_dict[primetype][subreadlength][frame] > maxcount:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
446 maxcount = master_trip_dict[primetype][subreadlength][frame]
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
447 for frame in master_trip_dict[primetype][subreadlength]:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
448 if master_trip_dict[primetype][subreadlength][frame] > secondmaxcount and master_trip_dict[primetype][subreadlength][frame] != maxcount:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
449 secondmaxcount = master_trip_dict[primetype][subreadlength][frame]
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
450 # a perfect score would be 0 meaning there is only a single peak, the worst score would be 1 meaning two highest peaks are the same height
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
451 master_trip_dict[primetype][subreadlength]["score"] = float(secondmaxcount)/float(maxcount)
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
452 #This part is to determine what offsets to give each read length
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
453 print ("Calculating offsets")
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
454 for primetype in ["fiveprime", "threeprime"]:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
455 for readlen in master_offset_dict[primetype]:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
456 accepted_len = False
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
457 max_relative_pos = 0
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
458 max_relative_count = 0
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
459 for relative_pos in master_offset_dict[primetype][readlen]:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
460 # This line is to ensure we don't choose an offset greater than the readlength (in cases of a large peak far up/downstream)
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
461 if abs(relative_pos) < 10 or abs(relative_pos) > (readlen-10):
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
462 continue
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
463 if master_offset_dict[primetype][readlen][relative_pos] > max_relative_count:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
464 max_relative_pos = relative_pos
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
465 max_relative_count = master_offset_dict[primetype][readlen][relative_pos]
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
466 #print "for readlen {} the max_relative pos is {}".format(readlen, max_relative_pos)
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
467 if primetype == "fiveprime":
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
468 # -3 to get from p-site to a-site, +1 to account for 1 based co-ordinates, resulting in -2 overall
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
469 final_offsets[primetype]["offsets"][readlen] = abs(max_relative_pos-2)
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
470 elif primetype == "threeprime":
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
471 # +3 to get from p-site to a-site, -1 to account for 1 based co-ordinates, resulting in +2 overall
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
472 final_offsets[primetype]["offsets"][readlen] = (max_relative_pos*(-1))+2
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
473 #If there are no reads in CDS regions for a specific length, it may not be present in master_trip_dict
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
474 if readlen in master_trip_dict[primetype]:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
475 final_offsets[primetype]["read_scores"][readlen] = master_trip_dict[primetype][readlen]["score"]
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
476 else:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
477 final_offsets[primetype]["read_scores"][readlen] = 0.0
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
478
4
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
479
9
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
480 master_read_dict["unmapped_reads"] = unmapped_reads
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
481 master_read_dict["offsets"] = final_offsets
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
482 master_read_dict["trip_periodicity"] = master_trip_dict
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
483 master_read_dict["desc"] = "Null"
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
484 master_read_dict["mapped_reads"] = mapped_reads
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
485 master_read_dict["nuc_counts"] = nuc_count_dict
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
486 master_read_dict["dinuc_counts"] = dinuc_count_dict
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
487 master_read_dict["threeprime_nuc_counts"] = threeprime_nuc_count_dict
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
488 master_read_dict["metagene_counts"] = master_offset_dict
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
489 master_read_dict["stop_metagene_counts"] = master_metagene_stop_dict
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
490 master_read_dict["read_lengths"] = read_length_dict
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
491 master_read_dict["unambig_read_lengths"] = unambig_read_length_dict
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
492 master_read_dict["coding_counts"] = master_dict["unambiguous_coding_count"]
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
493 master_read_dict["noncoding_counts"] = master_dict["unambiguous_non_coding_count"]
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
494 master_read_dict["ambiguous_counts"] = master_dict["ambiguously_mapped_reads"]
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
495 master_read_dict["frequent_unmapped_reads"] = (sorted(unmapped_dict.items(), key=operator.itemgetter(1)))[-2000:]
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
496 master_read_dict["cutadapt_removed"] = 0
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
497 master_read_dict["rrna_removed"] = 0
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
498 #If no reads are removed by minus m there won't be an entry in the log file, so initiliase with 0 first and change if there is a line
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
499 master_read_dict["removed_minus_m"] = 0
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
500 master_dict["removed_minus_m"] = 0
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
501 # We work out the total counts for 5', cds 3' for differential translation here, would be better to do thisn in processor but need the offsets
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
502 master_read_dict["unambiguous_all_totals"] = {}
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
503 master_read_dict["unambiguous_fiveprime_totals"] = {}
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
504 master_read_dict["unambiguous_cds_totals"] = {}
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
505 master_read_dict["unambiguous_threeprime_totals"] = {}
4
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
506
9
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
507 master_read_dict["ambiguous_all_totals"] = {}
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
508 master_read_dict["ambiguous_fiveprime_totals"] = {}
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
509 master_read_dict["ambiguous_cds_totals"] = {}
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
510 master_read_dict["ambiguous_threeprime_totals"] = {}
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
511 print ("calculating transcript counts")
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
512 for tran in master_read_dict:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
513 if tran in transcriptome_info_dict:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
514 five_total = 0
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
515 cds_total = 0
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
516 three_total = 0
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
517
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
518 ambig_five_total = 0
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
519 ambig_cds_total = 0
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
520 ambig_three_total = 0
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
521
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
522 cds_start = transcriptome_info_dict[tran]["cds_start"]
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
523 cds_stop = transcriptome_info_dict[tran]["cds_stop"]
4
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
524
9
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
525 for readlen in master_read_dict[tran]["unambig"]:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
526 if readlen in final_offsets["fiveprime"]["offsets"]:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
527 offset = final_offsets["fiveprime"]["offsets"][readlen]
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
528 else:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
529 offset = 15
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
530 for pos in master_read_dict[tran]["unambig"][readlen]:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
531 real_pos = pos+offset
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
532 if cds_start is None or cds_stop is None:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
533 three_total += master_read_dict[tran]["unambig"][readlen][pos]
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
534 else:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
535 if real_pos <cds_start:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
536 five_total += master_read_dict[tran]["unambig"][readlen][pos]
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
537 elif real_pos >=cds_start and real_pos <= cds_stop:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
538 cds_total += master_read_dict[tran]["unambig"][readlen][pos]
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
539 elif real_pos > cds_stop:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
540 three_total += master_read_dict[tran]["unambig"][readlen][pos]
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
541 master_read_dict["unambiguous_all_totals"][tran] = five_total+cds_total+three_total
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
542 master_read_dict["unambiguous_fiveprime_totals"][tran] = five_total
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
543 master_read_dict["unambiguous_cds_totals"][tran] = cds_total
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
544 master_read_dict["unambiguous_threeprime_totals"][tran] = three_total
4
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
545
9
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
546 for readlen in master_read_dict[tran]["ambig"]:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
547 if readlen in final_offsets["fiveprime"]["offsets"]:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
548 offset = final_offsets["fiveprime"]["offsets"][readlen]
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
549 else:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
550 offset = 15
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
551 for pos in master_read_dict[tran]["ambig"][readlen]:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
552 if cds_start is None or cds_stop is None:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
553 ambig_three_total += master_read_dict[tran]["ambig"][readlen][pos]
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
554 else:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
555 real_pos = pos+offset
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
556 if real_pos < cds_start:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
557 ambig_five_total += master_read_dict[tran]["ambig"][readlen][pos]
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
558 elif real_pos >=cds_start and real_pos <= cds_stop:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
559 ambig_cds_total += master_read_dict[tran]["ambig"][readlen][pos]
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
560 elif real_pos > cds_stop:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
561 ambig_three_total += master_read_dict[tran]["ambig"][readlen][pos]
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
562
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
563 master_read_dict["ambiguous_all_totals"][tran] = five_total+cds_total+three_total+ambig_five_total+ambig_cds_total+ambig_three_total
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
564 master_read_dict["ambiguous_fiveprime_totals"][tran] = five_total+ambig_five_total
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
565 master_read_dict["ambiguous_cds_totals"][tran] = cds_total+ambig_cds_total
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
566 master_read_dict["ambiguous_threeprime_totals"][tran] = three_total+ambig_three_total
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
567
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
568 print ("Writing out to sqlite file")
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
569 sqlite_db = SqliteDict(outputfile,autocommit=False)
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
570 for key in master_read_dict:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
571 sqlite_db[key] = master_read_dict[key]
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
572 sqlite_db["description"] = desc
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
573 sqlite_db.commit()
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
574 sqlite_db.close()
4
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
575
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
576
4ee95ba271a5 Uploaded
triasteran
parents:
diff changeset
577 if __name__ == "__main__":
9
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
578 if len(sys.argv) <= 2:
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
579 print ("Usage: python bam_to_sqlite.py <path_to_bam_file> <path_to_organism.sqlite> <file_description (optional)>")
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
580 sys.exit()
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
581 bam_filepath = sys.argv[1]
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
582 annotation_sqlite_filepath = sys.argv[2]
11
3d2b1532a1b0 Uploaded
jackcurragh
parents: 9
diff changeset
583 desc = sys.argv[3]
3d2b1532a1b0 Uploaded
jackcurragh
parents: 9
diff changeset
584 outputfile = sys.argv[4]
9
0e88342d5794 Uploaded
jackcurragh
parents: 7
diff changeset
585 process_bam(bam_filepath,annotation_sqlite_filepath,outputfile)