def __call__(self, track, slice = None ): result = odict() merged = None rocs = [] for field in self.mFields: data = [] for replicate in EXPERIMENTS.getTracks( track ): statement = "SELECT contig, start, end,%(field)s FROM %(replicate)s_intervals" % locals() data.append( self.get( statement) ) idx = [] for x in range(len(data)): i = IndexedGenome.IndexedGenome() for contig, start, end, peakval in data[x]: i.add( contig, start, end, peakval ) idx.append( i ) def _iter( all ): all.sort() last_contig, first_start, last_end, last_value = all[0] for contig, start, end, value in all[1:]: if contig != last_contig or last_end < start: yield (last_contig, first_start, last_end) last_contig, first_start, last_end = contig, start, end else: last_end = max(last_end, end ) yield (last_contig, first_start, last_end) if not merged: all = [ x for x in itertools.chain( *data ) ] merged = list( _iter(all) ) roc_data = [] for contig, start, end in merged: intervals = [] for i in idx: try: intervals.append( list(i.get( contig, start, end )) ) except KeyError: continue if len(intervals) == 0: continue is_repro = len( [ x for x in intervals if x != [] ] ) == len(data) value = max( [ x[2] for x in itertools.chain( *intervals )] ) # fpr, tpr roc_data.append( (value, is_repro) ) roc_data.sort() roc_data.reverse() roc = zip(*Stats.computeROC( roc_data )) result[field] = odict( (("FPR", roc[0]), (field,roc[1])) ) return result
def __call__(self, track, slice=None): result = odict() merged = None rocs = [] for field in self.mFields: data = [] for replicate in EXPERIMENTS.getTracks(track): statement = "SELECT contig, start, end,%(field)s FROM %(replicate)s_intervals" % locals() data.append(self.get(statement)) idx = [] for x in range(len(data)): i = IndexedGenome.IndexedGenome() for contig, start, end, peakval in data[x]: i.add(contig, start, end, peakval) idx.append(i) def _iter(all): all.sort() last_contig, first_start, last_end, last_value = all[0] for contig, start, end, value in all[1:]: if contig != last_contig or last_end < start: yield (last_contig, first_start, last_end) last_contig, first_start, last_end = contig, start, end else: last_end = max(last_end, end) yield (last_contig, first_start, last_end) if not merged: all = [x for x in itertools.chain(*data)] merged = list(_iter(all)) roc_data = [] for contig, start, end in merged: intervals = [] for i in idx: try: intervals.append(list(i.get(contig, start, end))) except KeyError: continue if len(intervals) == 0: continue is_repro = len([x for x in intervals if x != []]) == len(data) value = max([x[2] for x in itertools.chain(*intervals)]) # fpr, tpr roc_data.append((value, is_repro)) roc_data.sort() roc_data.reverse() roc = zip(*Stats.computeROC(roc_data)) result[field] = odict((("FPR", roc[0]), (field, roc[1]))) return result