コード例 #1
0
ファイル: Overlaps.py プロジェクト: yangjl/cgat
    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
コード例 #2
0
ファイル: Overlaps.py プロジェクト: nishantthakur/cgat
    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