@@ -107,26 +107,60 @@ def dump(self):
107
107
108
108
def load (self , BlobDb_f ):
109
109
blobDict = BtIO .readJson (BlobDb_f )
110
- self .title = blobDict ['title' ]
111
- self .assembly_f = blobDict ['assembly_f' ]
112
- self .nodesDB_f = blobDict ['nodesDB_f' ]
113
- self .lineages = blobDict ['lineages' ]
110
+ for k , v in blobDict .items ():
111
+ setattr (self , k , v )
114
112
self .set_of_taxIds = blobDict ['lineages' ].keys ()
115
- self .order_of_blobs = blobDict ['order_of_blobs' ]
116
- self .dict_of_blobs = blobDict ['dict_of_blobs' ]
117
- self .length = int (blobDict ['length' ])
118
- self .seqs = int (blobDict ['seqs' ])
119
- self .n_count = int (blobDict ['n_count' ])
120
- self .covLibs = blobDict ['covLibs' ]
121
- self .hitLibs = blobDict ['hitLibs' ]
122
- self .taxrules = blobDict ['taxrules' ]
113
+ #for k, v in self.__dict__.items():
114
+ # print k, type(v), v # this seems to work
115
+
116
+ #self.title = blobDict['title']
117
+ #self.assembly_f = blobDict['assembly_f']
118
+ #self.nodesDB_f = blobDict['nodesDB_f']
119
+ #self.lineages = blobDict['lineages']
120
+ #self.set_of_taxIds = blobDict['lineages'].keys()
121
+ #self.order_of_blobs = blobDict['order_of_blobs']
122
+ #self.dict_of_blobs = blobDict['dict_of_blobs']
123
+ #self.length = int(blobDict['length'])
124
+ #self.seqs = int(blobDict['seqs'])
125
+ #self.n_count = int(blobDict['n_count'])
126
+ #self.covLibs = blobDict['covLibs']
127
+ #self.hitLibs = blobDict['hitLibs']
128
+ #self.taxrules = blobDict['taxrules']
129
+
130
+ # self.title = title
131
+ # self.assembly_f = ''
132
+ # self.dict_of_blobs = {}
133
+ # self.order_of_blobs = []
134
+ # self.set_of_taxIds = set()
135
+ # self.lineages = {}
136
+ # self.length = 0
137
+ # self.seqs = 0
138
+ # self.n_count = 0
139
+ # self.covLibs = {}
140
+ # self.hitLibs = {}
141
+ # self.nodesDB_f = ''
142
+ # self.taxrules = []
123
143
124
144
def getPlotData (self , rank , min_length , hide_nohits , taxrule , c_index , catcolour_dict ):
125
145
data_dict = {}
126
146
read_cov_dict = {}
127
147
max_cov = 0.0
128
- cov_libs = self .covLibs .keys ()
129
- cov_libs_reads_total = {cov_lib : data ['reads_total' ] for cov_lib , data in self .covLibs .items ()}
148
+
149
+ cov_lib_dict = self .covLibs
150
+ #print cov_lib_dict
151
+ cov_lib_names_l = self .covLibs .keys () # does not include cov_sum
152
+
153
+ if len (cov_lib_names_l ) > 1 :
154
+ # more than one cov_lib, cov_sum_lib has to be created
155
+ cov_lib_dict ['sum' ] = CovLibObj ('sum' , 'sum' , None ).__dict__ # ugly
156
+ cov_lib_dict ['sum' ]['reads_total' ] = sum ([cov_lib_dict [x ]['reads_total' ] for x in cov_lib_dict ])
157
+ cov_lib_dict ['sum' ]['reads_mapped' ] = sum ([cov_lib_dict [x ]['reads_mapped' ] for x in cov_lib_dict ])
158
+
159
+ #print self.covLibs
160
+ #cov_libs_reads_total = {cov_lib : data['reads_total'] for cov_lib, data in self.covLibs.items()}
161
+ #print cov_libs_reads_total # correct
162
+ #cov_libs_reads_mapped = {cov_lib : data['reads_mapped'] for cov_lib, data in self.covLibs.items()}
163
+ #print cov_libs_reads_mapped # correct
130
164
131
165
for blob in self .dict_of_blobs .values ():
132
166
name , gc , length , group = blob ['name' ], blob ['gc' ], blob ['length' ], ''
@@ -143,21 +177,19 @@ def getPlotData(self, rank, min_length, hide_nohits, taxrule, c_index, catcolour
143
177
'name' : [],
144
178
'length' : [],
145
179
'gc' : [],
146
- 'covs' : {covLib : [] for covLib in cov_libs },
147
- 'reads_mapped' : {covLib : 0 for covLib in cov_libs },
180
+ 'covs' : {covLib : [] for covLib in cov_lib_dict . keys ()}, # includes cov_sum if it exists
181
+ 'reads_mapped' : {covLib : 0 for covLib in cov_lib_dict . keys ()}, # includes cov_sum if it exists
148
182
'count' : 0 ,
149
183
'count_hidden' : 0 ,
150
184
'count_visible' : 0 ,
151
185
'span' : 0 ,
152
186
'span_hidden' : 0 ,
153
187
'span_visible' : 0 ,
154
188
}
155
- if len (cov_libs ) > 1 :
156
- data_dict [group ]['covs' ]['cov_sum' ] = []
157
- data_dict [group ]['reads_mapped' ]['cov_sum' ] = 0
158
189
159
190
data_dict [group ]['count' ] = data_dict [group ].get ('count' , 0 ) + 1
160
191
data_dict [group ]['span' ] = data_dict [group ].get ('span' , 0 ) + int (length )
192
+
161
193
if ((hide_nohits ) and group == 'no-hit' ) or length < min_length : # hidden
162
194
data_dict [group ]['count_hidden' ] = data_dict [group ].get ('count_hidden' , 0 ) + 1
163
195
data_dict [group ]['span_hidden' ] = data_dict [group ].get ('span_hidden' , 0 ) + int (length )
@@ -170,35 +202,43 @@ def getPlotData(self, rank, min_length, hide_nohits, taxrule, c_index, catcolour
170
202
171
203
cov_sum = 0.0
172
204
reads_mapped_sum = 0
173
- for cov_lib in sorted (cov_libs ):
205
+ for cov_lib in sorted (cov_lib_names_l ):
174
206
cov = float (blob ['covs' ][cov_lib ])
175
- cov_sum += cov
176
207
cov = cov if cov > 0.02 else 0.02
208
+ # increase max_cov
177
209
if cov > max_cov :
178
210
max_cov = cov
179
- data_dict [group ]['covs' ][cov_lib ].append (cov )
180
- if cov_lib in blob ['read_cov' ]:
211
+
212
+ # add cov of blob to group
213
+ data_dict [group ]['covs' ][cov_lib ].append (cov )
214
+
215
+ cov_sum += cov
216
+
217
+ # add readcov
218
+ if cov_lib in blob ['read_cov' ]:
181
219
reads_mapped = blob ['read_cov' ][cov_lib ]
182
- reads_mapped_sum += reads_mapped
183
220
data_dict [group ]['reads_mapped' ][cov_lib ] += reads_mapped
221
+ reads_mapped_sum += reads_mapped
184
222
185
- if len (cov_libs ) > 1 :
223
+ if len (cov_lib_names_l ) > 1 :
186
224
cov_sum = cov_sum if cov_sum > 0.02 else 0.02
187
- data_dict [group ]['covs' ]['cov_sum ' ].append (cov_sum )
225
+ data_dict [group ]['covs' ]['sum ' ].append (cov_sum )
188
226
if cov > max_cov :
189
227
max_cov = cov
190
228
if (reads_mapped_sum ):
191
- data_dict [group ]['reads_mapped' ]['cov_sum' ] += reads_mapped_sum
192
-
193
- #data_dict[group]['count'] = data_dict[group].get('count', 0) + 1
194
- #data_dict[group]['span'] = data_dict[group].get('span', 0) + int(length)
229
+ data_dict [group ]['reads_mapped' ]['sum' ] += reads_mapped_sum
230
+
231
+ #if len(cov_lib_names_l) > 1:
232
+ # for cov_lib, data in self.covLibs.items():
233
+ # cov_libs_reads_total['cov_sum'] = cov_libs_reads_total.get('cov_sum', 0) + data['reads_total']
234
+
195
235
196
- if len ( cov_libs ) > 1 :
197
- cov_libs . append ( 'cov_sum' )
198
- for cov_lib , data in self . covLibs . items () :
199
- cov_libs_reads_total [ 'cov_sum' ] = cov_libs_reads_total . get ( 'cov_sum' , 0 ) + data [ 'reads_total' ]
236
+ #for group in data_dict :
237
+ # print "#", group
238
+ # for cat in data_dict[group] :
239
+ # print cat, data_dict[group][cat]
200
240
201
- return data_dict , max_cov , cov_libs , cov_libs_reads_total
241
+ return data_dict , max_cov , cov_lib_dict
202
242
203
243
def addCovLib (self , covLib ):
204
244
self .covLibs [covLib .name ] = covLib
@@ -237,18 +277,22 @@ def parseCovs(self, covLibObjs):
237
277
self .addCovLib (covLib )
238
278
print BtLog .status_d ['1' ] % (covLib .name , covLib .f )
239
279
if covLib .fmt == 'bam' or covLib .fmt == 'sam' :
280
+
240
281
base_cov_dict = {}
241
282
if covLib .fmt == 'bam' :
242
283
base_cov_dict , covLib .reads_total , covLib .reads_mapped , read_cov_dict = BtIO .readBam (covLib .f , set (self .dict_of_blobs ))
243
284
else :
244
- base_cov_dict , covLib .reads_total , covLib .reads_mapped , read_cov_dict = BtIO .readSam (covLib .f , set (self .dict_of_blobs ))
285
+ base_cov_dict , covLib .reads_total , covLib .reads_mapped , read_cov_dict = BtIO .readSam (covLib .f , set (self .dict_of_blobs ))
286
+
245
287
if covLib .reads_total == 0 :
246
288
print BtLog .warn_d ['4' ] % covLib .f
289
+
247
290
for name , base_cov in base_cov_dict .items ():
248
291
cov = base_cov / self .dict_of_blobs [name ].agct_count
249
292
covLib .cov_sum += cov
250
293
self .dict_of_blobs [name ].addCov (covLib .name , cov )
251
- self .dict_of_blobs [name ].read_cov = {covLib .name : read_cov_dict [name ]}
294
+ self .dict_of_blobs [name ].addReadCov (covLib .name , read_cov_dict [name ])
295
+
252
296
elif covLib .fmt == 'cas' :
253
297
cov_dict , covLib .reads_total , covLib .reads_mapped , read_cov_dict = BtIO .readCas (covLib .f , self .order_of_blobs )
254
298
if covLib .reads_total == 0 :
@@ -257,6 +301,7 @@ def parseCovs(self, covLibObjs):
257
301
covLib .cov_sum += cov
258
302
self .dict_of_blobs [name ].addCov (covLib .name , cov )
259
303
self .dict_of_blobs [name ].read_cov = {covLib .name : read_cov_dict [name ]}
304
+
260
305
elif covLib .fmt == 'cov' :
261
306
cov_dict = BtIO .readCov (covLib .f , set (self .dict_of_blobs ))
262
307
if not len (cov_dict ) == self .seqs :
@@ -316,8 +361,11 @@ def calculateGC(self, seq):
316
361
return float ((seq .count ('G' ) + seq .count ('C' ) ) / self .agct_count \
317
362
if self .agct_count > 0 else 0.0 )
318
363
319
- def addCov (self , name , cov ):
320
- self .covs [name ] = cov
364
+ def addCov (self , lib_name , cov ):
365
+ self .covs [lib_name ] = cov
366
+
367
+ def addReadCov (self , lib_name , read_cov ):
368
+ self .read_cov [lib_name ] = read_cov
321
369
322
370
def addHits (self , hitLibName , hitDict ):
323
371
if not hitLibName in self .hits :
@@ -328,7 +376,7 @@ class CovLibObj():
328
376
def __init__ (self , name , fmt , f ):
329
377
self .name = name
330
378
self .fmt = fmt
331
- self .f = abspath (f )
379
+ self .f = abspath (f ) if ( f ) else ''
332
380
self .cov_sum = 0
333
381
self .reads_total = 0
334
382
self .reads_mapped = 0
@@ -338,7 +386,7 @@ class hitLibObj():
338
386
def __init__ (self , name , fmt , f ):
339
387
self .name = name
340
388
self .fmt = fmt
341
- self .f = abspath (f )
389
+ self .f = abspath (f ) if ( f ) else ''
342
390
343
391
if __name__ == '__main__' :
344
392
pass
0 commit comments